diff --git a/.all-contributorsrc b/.all-contributorsrc index c8b79ba30e67..55ff294842e8 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -338,6 +338,173 @@ "contributions": [ "code" ] + }, + { + "login": "tustin2121", + "name": "tustin2121", + "avatar_url": "https://avatars.githubusercontent.com/u/794812?v=4", + "profile": "https://tustin2121.github.io/", + "contributions": [ + "doc", + "code" + ] + }, + { + "login": "Ddaretrogamer", + "name": "Phantonomy", + "avatar_url": "https://avatars.githubusercontent.com/u/131238004?v=4", + "profile": "https://github.com/Ddaretrogamer", + "contributions": [ + "design" + ] + }, + { + "login": "Syreldar", + "name": "Enrico Drago", + "avatar_url": "https://avatars.githubusercontent.com/u/42327659?v=4", + "profile": "https://metin2.dev/index.php", + "contributions": [ + "doc", + "userTesting" + ] + }, + { + "login": "Pyredrid", + "name": "Pyredrid", + "avatar_url": "https://avatars.githubusercontent.com/u/8324784?v=4", + "profile": "https://github.com/Pyredrid", + "contributions": [ + "userTesting", + "maintenance" + ] + }, + { + "login": "mvit", + "name": "mv", + "avatar_url": "https://avatars.githubusercontent.com/u/128863?v=4", + "profile": "https://github.com/mvit", + "contributions": [ + "code", + "design" + ] + }, + { + "login": "Mother-Of-Dragons", + "name": "Avara", + "avatar_url": "https://avatars.githubusercontent.com/u/31101124?v=4", + "profile": "https://github.com/Mother-Of-Dragons", + "contributions": [ + "data" + ] + }, + { + "login": "Doesnty", + "name": "Doesnty", + "avatar_url": "https://avatars.githubusercontent.com/u/6163136?v=4", + "profile": "https://github.com/Doesnty", + "contributions": [ + "design" + ] + }, + { + "login": "FosterProgramming", + "name": "FosterProgramming", + "avatar_url": "https://avatars.githubusercontent.com/u/178871164?v=4", + "profile": "https://github.com/FosterProgramming", + "contributions": [ + "code" + ] + }, + { + "login": "Squeetz", + "name": "Squeetz", + "avatar_url": "https://avatars.githubusercontent.com/u/21145213?v=4", + "profile": "https://github.com/Squeetz", + "contributions": [ + "maintenance" + ] + }, + { + "login": "ghostyboyy97", + "name": "ghostyboyy97", + "avatar_url": "https://avatars.githubusercontent.com/u/106448956?v=4", + "profile": "https://github.com/ghostyboyy97", + "contributions": [ + "code" + ] + }, + { + "login": "HashtagMarky", + "name": "Marky", + "avatar_url": "https://avatars.githubusercontent.com/u/143505183?v=4", + "profile": "http://hashtagmarky.github.io", + "contributions": [ + "code" + ] + }, + { + "login": "MandL27", + "name": "MandL27", + "avatar_url": "https://avatars.githubusercontent.com/u/10366615?v=4", + "profile": "https://github.com/MandL27", + "contributions": [ + "code" + ] + }, + { + "login": "cawtds", + "name": "cawtds", + "avatar_url": "https://avatars.githubusercontent.com/u/38510667?v=4", + "profile": "https://github.com/cawtds", + "contributions": [ + "code" + ] + }, + { + "login": "fdeblasio", + "name": "Frank DeBlasio", + "avatar_url": "https://avatars.githubusercontent.com/u/35279583?v=4", + "profile": "https://github.com/fdeblasio", + "contributions": [ + "code" + ] + }, + { + "login": "leo60228", + "name": "leo60228", + "avatar_url": "https://avatars.githubusercontent.com/u/8355305?v=4", + "profile": "https://vriska.dev", + "contributions": [ + "doc", + "data" + ] + }, + { + "login": "shachar700", + "name": "shachar700", + "avatar_url": "https://avatars.githubusercontent.com/u/48739719?v=4", + "profile": "https://github.com/shachar700", + "contributions": [ + "code" + ] + }, + { + "login": "purrfectdoodle", + "name": "Eva", + "avatar_url": "https://avatars.githubusercontent.com/u/105788407?v=4", + "profile": "http://purrfectdoodle.com", + "contributions": [ + "design" + ] + }, + { + "login": "amiosi", + "name": "amiosi", + "avatar_url": "https://avatars.githubusercontent.com/u/44352097?v=4", + "profile": "https://github.com/amiosi", + "contributions": [ + "data" + ] } ], "contributorsPerLine": 7, diff --git a/.gitattributes b/.gitattributes index 1f2aa0c6da14..a2dcec5e5d33 100644 --- a/.gitattributes +++ b/.gitattributes @@ -18,6 +18,9 @@ Makefile text eol=lf *.md text eol=lf *.ps1 text eol=crlf *.yml text eol=lf +*.party text eol=lf +*.cfg text eol=lf +*.ld text eol=lf *.png binary *.bin binary diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index da15109c8c0a..2f25421ea0b4 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -7,6 +7,7 @@ body: value: | Please fill in all fields with as many details as possible. Once your bug is posted, make sure you and your collaborators are added to `CREDITS.md` by [tagging the bot on GitHub](https://github.com/rh-hideout/pokeemerald-expansion/wiki/CREDITS.md-Frequently-Asked-Questions). EVERY contribution matters, even reporting bugs! + - type: textarea id: description attributes: label: Description @@ -42,15 +43,16 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.12.0 (Latest release) + - 1.14.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) - - 1.11.4 - - 1.11.3 - - 1.11.2 - - 1.11.1 - - 1.11.0 - - pre-1.11.0 + - 1.14.0 + - 1.13.4 + - 1.13.3 + - 1.13.2 + - 1.13.1 + - 1.13.0 + - pre-1.13.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 7b1a489cfb7c..b0ee16702173 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -43,15 +43,16 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.12.0 (Latest release) + - 1.14.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) - - 1.11.4 - - 1.11.3 - - 1.11.2 - - 1.11.1 - - 1.11.0 - - pre-1.11.0 + - 1.14.0 + - 1.13.4 + - 1.13.3 + - 1.13.2 + - 1.13.1 + - 1.13.0 + - pre-1.13.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index 197791a77620..4dcb2b309336 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -43,14 +43,16 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.12.0 (Latest release) + - 1.14.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) - - 1.11.4 - - 1.11.3 - - 1.11.1 - - 1.11.0 - - pre-1.11.0 + - 1.14.0 + - 1.13.4 + - 1.13.3 + - 1.13.2 + - 1.13.1 + - 1.13.0 + - pre-1.13.0 validations: required: true - type: input diff --git a/.github/docs_validate/inclusive_summary.py b/.github/docs_validate/inclusive_summary.py new file mode 100755 index 000000000000..76e0218abc41 --- /dev/null +++ b/.github/docs_validate/inclusive_summary.py @@ -0,0 +1,64 @@ +#!/usr/bin/python3 + +""" +Checks that all documentation pages that should be mentioned in +`docs/SUMMARY.md` are mentioned the file +""" + +import glob +import re +import os +from pathlib import Path + +errorLines = [] + +if not os.path.exists("Makefile"): + errorLines.append("Please run this script from your root folder.") + +summaryFile = Path("docs/SUMMARY.md") +if not errorLines: + if not summaryFile.is_file(): + errorLines.append("docs/SUMMARY.md missing") + +summaryContents = [] +if not errorLines: + with open(summaryFile, 'r', encoding='UTF-8') as file: + entry_pattern = re.compile(r" *\- \[[^\]]*\]\(([^\)]*)\)\n") + lineNo = 0 + while line:=file.readline(): + lineNo = lineNo + 1 + if line == "# Summary\n" or line == "\n": + pass + elif match:=entry_pattern.match(line): + if "" != match.group(1): + summaryContents.append(Path(match.group(1))) + else: + if not errorLines: + errorLines.append("## Unexpected lines in docs/SUMMARY.md") + errorLines.append(f"- {lineNo}: {line.strip()}") + +if not errorLines: + for pathName in glob.glob("**/*.md", root_dir="docs", recursive=True): + path = Path(pathName) + if path == Path("SUMMARY.md"): + pass + elif path == Path("changelogs/template.md"): + pass + elif path in summaryContents: + pass + else: + if not errorLines: + errorLines.append("## `docs/**/*.md` files present but not mentioned in `docs/SUMMARY.md`") + errorLines.append("- " + str(path)) + +if errorLines: + for line in errorLines: + print(line) + + if 'GITHUB_STEP_SUMMARY' in os.environ: + with open(os.environ['GITHUB_STEP_SUMMARY'], 'w', encoding='UTF-8') as file: + for line in errorLines: + file.write(line) + file.write('\n') + + quit(1) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index dc900e224e71..21785498fb2d 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -24,6 +24,7 @@ + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 30231dbd0f5f..da1a943e8333 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,12 +31,30 @@ jobs: env: COMPARE: 0 run: make -j${nproc} -O all + + - name: LTO + run: | + make tidy + make -j${nproc} LTO=1 + # make tidy to purge previous build - name: Test env: TEST: 1 run: | make -j${nproc} check + + docs_validate: + if: github.actor != 'allcontributors[bot]' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Check that SUMMARY.md includes markdown doc files + run: | + .github/docs_validate/inclusive_summary.py + allcontributors: if: github.actor == 'allcontributors[bot]' runs-on: ubuntu-latest diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 874ebdd5906a..09e7c78c0c00 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -17,7 +17,7 @@ jobs: fetch-depth: 0 - name: Install latest mdbook run: | - tag=$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name') + tag="v0.5.1" url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz" mkdir mdbook curl -sSL $url | tar -xz --directory=./mdbook diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml index 325e72950d11..3cc4ee57a785 100644 --- a/.github/workflows/labels.yml +++ b/.github/workflows/labels.yml @@ -3,10 +3,12 @@ name: Labels on: pull_request: types: [opened, synchronize, labeled, unlabeled] + pull_request_review: + types: [submitted] jobs: label: - if: github.actor != 'allcontributors[bot]' + if: ${{ github.actor != 'allcontributors[bot]' && github.event.review.state == 'approved' }} runs-on: ubuntu-latest steps: - name: check labels diff --git a/.gitignore b/.gitignore index 6d9453242aa2..686677dac252 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ *.8bpp *.gbapal *.lz +*.smol +*.fastSmol +*.smolTM *.rl *.latfont *.hwjpnfont @@ -40,7 +43,15 @@ prefabs.json *.js /pokeemerald-*.png src/data/map_group_count.h +include/constants/heal_locations.h +include/constants/script_commands.h tools/trainerproc/trainerproc +src/data/battle_partners.h +src/data/trainers.h +src/data/debug_trainers.h +test/battle/trainer_control.h +tools/compresSmol/compresSmol +tools/compresSmol/compresSmolTilemap *.Identifier *.smol *.fastSmol diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b89016fdddac..88ef358dbb20 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,7 +23,7 @@ The best bug reports have enough information that we won't have to contact you f - A maintainer will [label](https://github.com/rh-hideout/pokeemerald-expansion/labels) the bug report. - A maintainer will try to reproduce the bug with your provided steps. - - If there are no reproduction steps or no obvious way to reproduce the issue, somebody will ask you for those steps. Until the bug can be reproduced, the bug will retain the `bug:unconfirmed` label. Unconfirmed bugs are less likely get fixed. + - If there are no reproduction steps or no obvious way to reproduce the issue, somebody will ask you for those steps. Until the bug can be reproduced, the bug will retain the `bug:unconfirmed` label. Unconfirmed bugs are less likely to get fixed. - If the team is able to reproduce the bug, it will be labeled `bug:confirmed`, and the bug will be left to be [fixed by someone](#Pull-Requests). - If the issue is particularly game-breaking, a maintainer will add it to a future version's [milestone](), meaning that version will not be released until the problem is solved. diff --git a/CREDITS.md b/CREDITS.md index ab5c59624876..dfec2d747cdd 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -58,7 +58,31 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Zatsu
Zatsu

πŸ’» poetahto
poetahto

πŸ’» lordraindance2
lordraindance2

πŸ’» - Pablo Pena
Pablo Pena

πŸ’» + Pablo Pena
Pablo Pena

πŸ’» + tustin2121
tustin2121

πŸ“– πŸ’» + Phantonomy
Phantonomy

🎨 + + + Enrico Drago
Enrico Drago

πŸ“– πŸ““ + Pyredrid
Pyredrid

πŸ““ 🚧 + mv
mv

πŸ’» 🎨 + Avara
Avara

πŸ”£ + Doesnty
Doesnty

🎨 + FosterProgramming
FosterProgramming

πŸ’» + Squeetz
Squeetz

🚧 + + + ghostyboyy97
ghostyboyy97

πŸ’» + Marky
Marky

πŸ’» + MandL27
MandL27

πŸ’» + cawtds
cawtds

πŸ’» + Frank DeBlasio
Frank DeBlasio

πŸ’» + leo60228
leo60228

πŸ“– πŸ”£ + shachar700
shachar700

πŸ’» + + + Eva
Eva

🎨 + amiosi
amiosi

πŸ”£ diff --git a/INSTALL.md b/INSTALL.md index d2e511dacee3..47f00cf78fb5 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -14,8 +14,8 @@ After completing the install instructions for your OS, proceed to [Building poke On Windows, the project can be built using the following systems: - WSL2, fastest - WSL1, 7 times slower than WSL2 -- Msys2, 20 times slower than WSL2 (**NOTE**: Currently broken on pret upstream) -- Cygwin, 30 timer slower than WSL2 (**NOTE**: Currently broken on pret upstream) +- Msys2, 20 times slower than WSL2 +- Cygwin, 30 timer slower than WSL2 **NOTE**: Only WSL systems are recommended. @@ -32,6 +32,7 @@ Distributions with instructions: - [Debian](docs/install/linux/DEBIAN.md) - [Arch Linux](docs/install/linux/ARCH_LINUX.md) - [NixOS](docs/install/linux/NIXOS.md) +- [Fedora](docs/install/linux/FEDORA.md) Other distributions have to infer what to do from [general instructions](docs/install/linux/OTHERS.md). @@ -179,6 +180,6 @@ If you targeted a specific version that is not the latest version listed on the # Useful additional tools * [porymap](https://github.com/huderlem/porymap) for viewing and editing maps -* [porytiles](https://github.com/gruntlucas/porytiles) for add new metatiles for maps +* [porytiles](https://github.com/grunt-lucas/porytiles) for add new metatiles for maps * [poryscript](https://github.com/huderlem/poryscript) for scripting ([VS Code extension](https://marketplace.visualstudio.com/items?itemName=karathan.poryscript)) * [Tilemap Studio](https://github.com/Rangi42/tilemap-studio) for viewing and editing tilemaps diff --git a/Makefile b/Makefile index 9cf34b7fa82f..8160f6e1e14d 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,32 @@ +GAME_VERSION ?= EMERALD +TITLE ?= POKEMON EMER +GAME_CODE ?= BPEE +BUILD_NAME ?= emerald +MAP_VERSION ?= emerald + +ifeq (firered,$(MAKECMDGOALS)) + GAME_VERSION := FIRERED + TITLE := POKEMON FIRE + GAME_CODE := BPRE + BUILD_NAME := firered + MAP_VERSION := firered +else +ifeq (leafgreen,$(MAKECMDGOALS)) + GAME_VERSION := LEAFGREEN + TITLE := POKEMON LEAF + GAME_CODE := BPGE + BUILD_NAME := leafgreen + MAP_VERSION := firered +endif +endif + # GBA rom header -TITLE := POKEMON EMER -GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 KEEP_TEMPS ?= 0 # `File name`.gba -FILE_NAME := pokeemerald +FILE_NAME := poke$(BUILD_NAME) BUILD_DIR := build # Compares the ROM to a checksum of the original - only makes sense using when non-modern @@ -19,6 +39,11 @@ ANALYZE ?= 0 UNUSED_ERROR ?= 0 # Adds -Og and -g flags, which optimize the build for debugging and include debug info respectively DEBUG ?= 0 +# Adds -flto flag, which increases link time but results in a more efficient binary (especially in audio processing) +LTO ?= 0 +# Makes an optimized build for release, also enabling NDEBUG macro and disabling other debugging features +# Enables LTO by default, but can be changed in the config.mk file +RELEASE ?= 0 ifeq (compare,$(MAKECMDGOALS)) COMPARE := 1 @@ -29,6 +54,11 @@ endif ifeq (debug,$(MAKECMDGOALS)) DEBUG := 1 endif +ifneq (,$(filter release tidyrelease,$(MAKECMDGOALS))) + RELEASE := 1 +endif + +include config.mk # Default make rule all: rom @@ -60,10 +90,15 @@ endif CPP := $(PREFIX)cpp +ifeq ($(RELEASE),1) + FILE_NAME := $(FILE_NAME)-release +endif + ROM_NAME := $(FILE_NAME).gba -OBJ_DIR_NAME := $(BUILD_DIR)/modern -OBJ_DIR_NAME_TEST := $(BUILD_DIR)/modern-test -OBJ_DIR_NAME_DEBUG := $(BUILD_DIR)/modern-debug +OBJ_DIR_NAME := $(BUILD_DIR)/$(BUILD_NAME) +OBJ_DIR_NAME_TEST := $(BUILD_DIR)/$(BUILD_NAME)-test +OBJ_DIR_NAME_DEBUG := $(BUILD_DIR)/$(BUILD_NAME)-debug +OBJ_DIR_NAME_RELEASE := $(BUILD_DIR)/$(BUILD_NAME)-release ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) @@ -83,6 +118,9 @@ endif ifeq ($(DEBUG),1) OBJ_DIR := $(OBJ_DIR_NAME_DEBUG) endif +ifeq ($(RELEASE),1) + OBJ_DIR := $(OBJ_DIR_NAME_RELEASE) +endif ELF := $(ROM:.gba=.elf) MAP := $(ROM:.gba=.map) SYM := $(ROM:.gba=.sym) @@ -106,7 +144,7 @@ TEST_BUILDDIR = $(OBJ_DIR)/$(TEST_SUBDIR) SHELL := bash -o pipefail # Set flags for tools -ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=1 +ASFLAGS := -mcpu=arm7tdmi -march=armv4t -meabi=5 --defsym MODERN=1 --defsym $(GAME_VERSION)=1 INCLUDE_DIRS := include INCLUDE_CPP_ARGS := $(INCLUDE_DIRS:%=-iquote %) @@ -117,11 +155,25 @@ O_LEVEL ?= g else O_LEVEL ?= 2 endif -CPPFLAGS := $(INCLUDE_CPP_ARGS) -Wno-trigraphs -DMODERN=1 -DTESTING=$(TEST) -std=gnu17 +CPPFLAGS := $(INCLUDE_CPP_ARGS) -Wno-trigraphs -DMODERN=1 -DTESTING=$(TEST) -D$(GAME_VERSION) -std=gnu17 +ifeq ($(RELEASE),1) + override CPPFLAGS += -DRELEASE + ifeq ($(USE_LTO_ON_RELEASE),1) + LTO := 1 + endif +endif ARMCC := $(PREFIX)gcc PATH_ARMCC := PATH="$(PATH)" $(ARMCC) CC1 := $(shell $(PATH_ARMCC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init + +override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init -Wnonnull -Wenum-conversion + +ifneq ($(LTO),0) + ifneq ($(TEST),1) + override CFLAGS += -flto=auto -fno-fat-lto-objects -fno-asynchronous-unwind-tables -ffunction-sections -fdata-sections + endif +endif + ifeq ($(ANALYZE),1) override CFLAGS += -fanalyzer endif @@ -151,8 +203,10 @@ endif AUTO_GEN_TARGETS := include make_tools.mk # Tool executables +SMOLTM := $(TOOLS_DIR)/compresSmol/compresSmolTilemap$(EXE) +SMOL := $(TOOLS_DIR)/compresSmol/compresSmol$(EXE) GFX := $(TOOLS_DIR)/gbagfx/gbagfx$(EXE) -AIF := $(TOOLS_DIR)/aif2pcm/aif2pcm$(EXE) +WAV2AGB := $(TOOLS_DIR)/wav2agb/wav2agb$(EXE) MID := $(TOOLS_DIR)/mid2agb/mid2agb$(EXE) SCANINC := $(TOOLS_DIR)/scaninc/scaninc$(EXE) PREPROC := $(TOOLS_DIR)/preproc/preproc$(EXE) @@ -183,10 +237,18 @@ ALL_LEARNABLES_JSON := $(LEARNSET_HELPERS_BUILD_DIR)/all_learnables.json WILD_ENCOUNTERS_TOOL_DIR := $(TOOLS_DIR)/wild_encounters AUTO_GEN_TARGETS += $(DATA_SRC_SUBDIR)/wild_encounters.h +MISC_TOOL_DIR := $(TOOLS_DIR)/misc +AUTO_GEN_TARGETS += $(INCLUDE_DIRS)/constants/script_commands.h + $(DATA_SRC_SUBDIR)/wild_encounters.h: $(DATA_SRC_SUBDIR)/wild_encounters.json $(WILD_ENCOUNTERS_TOOL_DIR)/wild_encounters_to_header.py $(INCLUDE_DIRS)/config/overworld.h $(INCLUDE_DIRS)/config/dexnav.h - python3 $(WILD_ENCOUNTERS_TOOL_DIR)/wild_encounters_to_header.py > $@ + python3 $(WILD_ENCOUNTERS_TOOL_DIR)/wild_encounters_to_header.py + +$(INCLUDE_DIRS)/constants/script_commands.h: $(MISC_TOOL_DIR)/make_scr_cmd_constants.py $(DATA_ASM_SUBDIR)/script_cmd_table.inc + python3 $(MISC_TOOL_DIR)/make_scr_cmd_constants.py $(C_BUILDDIR)/wild_encounter.o: c_dep += $(DATA_SRC_SUBDIR)/wild_encounters.h +$(C_BUILDDIR)/trainer_see.o: c_dep += $(INCLUDE_DIRS)/constants/script_commands.h +$(C_BUILDDIR)/vs_seeker.o: c_dep += $(INCLUDE_DIRS)/constants/script_commands.h PERL := perl SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c @@ -200,8 +262,8 @@ MAKEFLAGS += --no-print-directory # Delete files that weren't built properly .DELETE_ON_ERROR: -RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidycheck generated clean-generated -.PHONY: all rom agbcc modern compare check debug +RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidycheck tidyrelease generated clean-generated +.PHONY: all rom agbcc modern compare check debug release .PHONY: $(RULES_NO_SCAN) infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -228,7 +290,7 @@ ifeq ($(SETUP_PREREQS),1) $(error Errors occurred while building tools. See error messages above for more details) endif # Oh and also generate mapjson sources before we use `SCANINC`. - $(foreach line, $(shell $(MAKE) generated | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) + $(foreach line, $(shell $(MAKE) MAP_VERSION=$(MAP_VERSION) generated | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) ifneq ($(.SHELLSTATUS),0) $(error Errors occurred while generating map-related sources. See error messages above for more details) endif @@ -272,6 +334,7 @@ $(shell mkdir -p $(SUBDIRS)) modern: all compare: all debug: all +release: all # Uncomment the next line, and then comment the 4 lines after it to reenable agbcc. #agbcc: all agbcc: @@ -281,14 +344,14 @@ agbcc: LD_SCRIPT_TEST := ld_script_test.ld -$(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS) +$(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT_TEST) > ld_script_test.ld $(TESTELF): $(OBJ_DIR)/ld_script_test.ld $(OBJS) $(TEST_OBJS) libagbsyscall tools check-tools @echo "cd $(OBJ_DIR) && $(LD) -T ld_script_test.ld -o ../../$@ " @cd $(OBJ_DIR) && $(LD) $(TESTLDFLAGS) -T ld_script_test.ld -o ../../$@ $(OBJS_REL) $(TEST_OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) -d0 --silent - $(PATCHELF) $(TESTELF) gTestRunnerArgv "$(TESTS)\0" + $(PATCHELF) $(TESTELF) gTestRunnerArgv "$(TESTS:%*=%)\0" ifeq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) TEST_SKIP_IS_FAIL := \x01 @@ -317,10 +380,10 @@ clean-assets: rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc $(DATA_SRC_SUBDIR)/map_group_count.h find sound -iname '*.bin' -exec rm {} + - find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.smol' -o -iname '*.fastSmol' -o -iname '*.smolTM' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + -tidy: tidymodern tidycheck tidydebug +tidy: tidymodern tidycheck tidydebug tidyrelease tidymodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) @@ -333,12 +396,21 @@ tidycheck: tidydebug: rm -rf $(DEBUG_OBJ_DIR_NAME) +tidyrelease: +ifeq ($(RELEASE),1) + rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) +else # Manually remove the release files on clean/tidy + rm -f $(FILE_NAME)-release.gba $(FILE_NAME)-release.elf $(FILE_NAME)-release.map +endif + rm -rf $(OBJ_DIR_NAME_RELEASE) + # Other rules include graphics_file_rules.mk include map_data_rules.mk include spritesheet_rules.mk include json_data_rules.mk include audio_rules.mk +include trainer_rules.mk # NOTE: Tools must have been built prior (FIXME) # so you can't really call this rule directly @@ -349,15 +421,18 @@ generated: $(AUTO_GEN_TARGETS) %.s: ; %.png: ; %.pal: ; -%.aif: ; - -%.1bpp: %.png ; $(GFX) $< $@ -%.4bpp: %.png ; $(GFX) $< $@ -%.8bpp: %.png ; $(GFX) $< $@ -%.gbapal: %.pal ; $(GFX) $< $@ -%.gbapal: %.png ; $(GFX) $< $@ -%.lz: % ; $(GFX) $< $@ -%.rl: % ; $(GFX) $< $@ +%.wav: ; + +%.1bpp: %.png ; $(GFX) $< $@ +%.4bpp: %.png ; $(GFX) $< $@ +%.8bpp: %.png ; $(GFX) $< $@ +%.gbapal: %.pal ; $(GFX) $< $@ +%.gbapal: %.png ; $(GFX) $< $@ +%.lz: % ; $(GFX) $< $@ +%.smolTM: % ; $(SMOLTM) $< $@ +%.fastSmol: % ; $(SMOL) -w $< $@ false false false +%.smol: % ; $(SMOL) -w $< $@ +%.rl: % ; $(GFX) $< $@ clean-generated: @rm -f $(AUTO_GEN_TARGETS) @@ -365,11 +440,6 @@ clean-generated: @rm -f $(ALL_LEARNABLES_JSON) @echo "rm -f " -COMPETITIVE_PARTY_SYNTAX := $(shell PATH="$(PATH)"; echo 'COMPETITIVE_PARTY_SYNTAX' | $(CPP) $(CPPFLAGS) -imacros include/gba/defines.h -imacros include/config/general.h | tail -n1) -ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) -%.h: %.party ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | $(TRAINERPROC) -o $@ -i $< - -endif - $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member $(C_BUILDDIR)/agb_flash.o: override CFLAGS += -fno-toplevel-reorder @@ -430,7 +500,7 @@ ifneq ($(NODEP),1) endif $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) $(INCLUDE_SCANINC_ARGS) - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) $(CPPFLAGS) $(INCLUDE_SCANINC_ARGS) - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/%.d: $(C_SUBDIR)/%.s $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I "" $< @@ -440,7 +510,7 @@ ifneq ($(NODEP),1) endif $(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) $(INCLUDE_SCANINC_ARGS) - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) $(CPPFLAGS) $(INCLUDE_SCANINC_ARGS) - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/%.d: $(DATA_ASM_SUBDIR)/%.s $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I "" $< @@ -471,25 +541,37 @@ $(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(TEACHABLE_DEPS) # Linker script LD_SCRIPT := ld_script_modern.ld -LD_SCRIPT_DEPS := # Final rules libagbsyscall: @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=1 -# Elf from object files -LDFLAGS = -Map ../../$(MAP) -$(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) libagbsyscall - @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat - @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ | cat" +# Enable LTO LDFLAGS if set +ifneq ($(LTO),0) +LDFLAGS := -march=armv4t -mabi=apcs-gnu -mcpu=arm7tdmi -Xlinker -Map=../../$(MAP) -Xlinker --print-memory-usage -Xassembler -meabi=5 -Xassembler -march=armv4t -Xassembler -mcpu=arm7tdmi -Xlinker --gc-sections +LDFLAGS += -Xlinker -flto=auto +$(ELF): $(LD_SCRIPT) $(OBJS) libagbsyscall + @echo "cd $(OBJ_DIR) && $(ARMCC) $(LDFLAGS) -T ../../$< -o ../../$@ " + +@cd $(OBJ_DIR) && $(ARMCC) $(LDFLAGS) -T ../../$< -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent +else +# Output .map file, memory usage readout and gc sections to clean-up unused data +LDFLAGS = -Map ../../$(MAP) --print-memory-usage --gc-sections +$(ELF): $(LD_SCRIPT) $(OBJS) libagbsyscall + @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< -o ../../$@ $(OBJS_REL) $(LIB) | cat + @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< -o ../../$@ | cat" + $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent +endif # Builds the rom from the elf file $(ROM): $(ELF) $(OBJCOPY) -O binary $< $@ $(FIX) $@ -p --silent +emerald: all +firered: all +leafgreen: all # Symbol file (`make syms`) $(SYM): $(ELF) $(OBJDUMP) -t $< | sort -u | grep -E "^0[2389]" | $(PERL) -p -e 's/^(\w{8}) (\w).{6} \S+\t(\w{8}) (\S+)$$/\1 \2 \3 \4/g' > $@ diff --git a/README.md b/README.md index 626eea5d7ebb..8094c29e85e5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # About `pokeemerald-expansion` -![Gif that shows debugging functionality that is unique to pokeemerald-expansion such as rerolling Trainer Id, Cheat Start, PC from Debug Menu, Debug PC Fill, Pokemon Sprite Visualizer, Debug Warp to Map, and Battle Debug Menu](https://github.com/user-attachments/assets/cf9dfbee-4c6b-4bca-8e0a-07f116ef891c) ![Gif that shows overworld functionality that is unique to pokeemerald-expansion such as indoor running, BW2 style map popups, overworld followers, DNA Splicers, Gen 1 style fishing, OW Item descriptions, Quick Run from Battle, Use Last Ball, Wild Double Battles, and Catch from EXP](https://github.com/user-attachments/assets/383af243-0904-4d41-bced-721492fbc48e) ![Gif that shows off a number of modern Pokemon battle mechanics happening in the pokeemerald-expansion engine: 2 vs 1 battles, modern Pokemon, items, moves, abilities, fully customizable opponents and partners, Trainer Slides, and generational gimmicks](https://github.com/user-attachments/assets/50c576bc-415e-4d66-a38f-ad712f3316be) +![Gif that shows debugging functionality that is unique to pokeemerald-expansion such as rerolling Trainer ID, Cheat Start, PC from Debug Menu, Debug PC Fill, PokΓ©mon Sprite Visualizer, Debug Warp to Map, and Battle Debug Menu](https://github.com/user-attachments/assets/cf9dfbee-4c6b-4bca-8e0a-07f116ef891c) ![Gif that shows overworld functionality that is unique to pokeemerald-expansion such as indoor running, BW2 style map popups, overworld followers, DNA Splicers, Gen 1 style fishing, OW Item descriptions, Quick Run from Battle, Use Last Ball, Wild Double Battles, and Catch from EXP](https://github.com/user-attachments/assets/383af243-0904-4d41-bced-721492fbc48e) ![Gif that shows off a number of modern PokΓ©mon battle mechanics happening in the pokeemerald-expansion engine: 2 vs 1 battles, modern PokΓ©mon, items, moves, abilities, fully customizable opponents and partners, Trainer Slides, and generational gimmicks](https://github.com/user-attachments/assets/50c576bc-415e-4d66-a38f-ad712f3316be) @@ -8,7 +8,7 @@ # [Features](FEATURES.md) -**`pokeemerald-expansion`** offers hundreds of features from various [core series PokΓ©mon games](https://bulbapedia.bulbagarden.net/wiki/Core_series), along with popular quality-of-life enhancements designed to streamline development and improve the player experience. A full list of those featues can be found in [`FEATURES.md`](FEATURES.md). +**`pokeemerald-expansion`** offers hundreds of features from various [core series PokΓ©mon games](https://bulbapedia.bulbagarden.net/wiki/Core_series), along with popular quality-of-life enhancements designed to streamline development and improve the player experience. A full list of those features can be found in [`FEATURES.md`](FEATURES.md). # [Credits](CREDITS.md) @@ -17,7 +17,7 @@ If you use **`pokeemerald-expansion`**, please credit **RHH (Rom Hacking Hideout)**. Optionally, include the version number for clarity. ``` -Based off RHH's pokeemerald-expansion 1.12.0 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.14.1 https://github.com/rh-hideout/pokeemerald-expansion/ ``` Please consider [crediting all contributors](CREDITS.md) involved in the project! @@ -32,7 +32,7 @@ Please consider [crediting all contributors](CREDITS.md) involved in the project ❗❗ **Important**: Do not use GitHub's "Download Zip" option as it will not include commit history. This is necessary if you want to update or merge other feature branches. -If you're new to git and GitHub, [Team Aqua's Asset Repo](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/) has a [guide on forking and cloning the repository](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub). Then you can follow one of the following guides: +If you're new to git and GitHub, [Team Aqua's Asset Repo](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/) has a [guide to forking and cloning the repository](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub). Then you can follow one of the following guides: ## πŸ“₯ [Installing **`pokeemerald-expansion`**](INSTALL.md) ## πŸ—οΈ [Building **`pokeemerald-expansion`**](INSTALL.md#Building-pokeemerald-expansion) @@ -50,4 +50,4 @@ If you are looking to [report a bug](CONTRIBUTING.md#Bug-Report), [open a pull r [![](https://dcbadge.limes.pink/api/server/6CzjAG6GZk)](https://discord.gg/6CzjAG6GZk) -Our community uses the [Rom Hacking Hideout (RHH) Discord server](https://discord.gg/6CzjAG6GZk) to communicate and organize. Most of our discussions take place there, and we welcome anybody to join us! +Our community uses the [ROM Hacking Hideout (RHH) Discord server](https://discord.gg/6CzjAG6GZk) to communicate and organize. Most of our discussions take place there, and we welcome anybody to join us! diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index 1b35991809e2..3d60680da685 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -288,7 +288,7 @@ .byte 0x31 .4byte \template .if \anim_battler == ANIM_TARGET - .byte 0x80 | (\subpriority_offset & 0x7F) + .byte ANIMSPRITE_IS_TARGET | (\subpriority_offset & 0x7F) .else .byte (\subpriority_offset & 0x7F) .endif @@ -304,7 +304,7 @@ .byte 0x32 .4byte \template .if \anim_battler == ANIM_TARGET - .byte 0x80 | (\subpriority_offset & 0x7F) + .byte ANIMSPRITE_IS_TARGET | (\subpriority_offset & 0x7F) .else .byte (\subpriority_offset & 0x7F) .endif diff --git a/asm/macros/battle_frontier/battle_pyramid.inc b/asm/macros/battle_frontier/battle_pyramid.inc index bb5069f18a2c..42141d993784 100644 --- a/asm/macros/battle_frontier/battle_pyramid.inc +++ b/asm/macros/battle_frontier/battle_pyramid.inc @@ -69,8 +69,8 @@ .endm @ VAR_RESULT is 1 if player is on a Pyramid floor, 2 if on the Pyramid peak, 0 otherwise - .macro pyramid_inchallenge - setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_IS_IN + .macro pyramid_getlocation + setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_CURRENT_LOCATION special CallBattlePyramidFunction .endm diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index b524104a36f9..7eb3b9d06456 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -9,11 +9,11 @@ .2byte \move .endm - .macro attackstring + .macro printattackstring .byte 0x2 .endm - .macro ppreduce + .macro unused_0x3 .byte 0x3 .endm @@ -45,14 +45,16 @@ .byte 0xa .endm - .macro healthbarupdate battler:req + .macro healthbarupdate battler:req updateState:req .byte 0xb .byte \battler + .byte \updateState .endm - .macro datahpupdate battler:req + .macro datahpupdate battler:req updateState:req .byte 0xc .byte \battler + .byte \updateState .endm .macro critmessage @@ -102,26 +104,28 @@ jumpifhalfword CMP_EQUAL, sMOVE_EFFECT, MOVE_EFFECT_CONTINUE, 1b .endm - .macro seteffectprimary moveEffect=0 + .macro seteffectprimary battler:req, effectBattler:req, moveEffect=0 .if \moveEffect != 0 setmoveeffect \moveEffect .endif .byte 0x16 + .byte \battler + .byte \effectBattler .endm - .macro seteffectsecondary moveEffect=0 + .macro seteffectsecondary battler:req, effectBattler:req, moveEffect=0 .if \moveEffect != 0 setmoveeffect \moveEffect .endif .byte 0x17 + .byte \battler + .byte \effectBattler .endm - .macro clearstatusfromeffect battler:req, moveEffect=0 - .if \moveEffect != 0 - setmoveeffect \moveEffect - .endif + .macro clearvolatile battler:req, volatile:req .byte 0x18 .byte \battler + .byte \volatile .endm .macro tryfaintmon battler:req @@ -155,10 +159,10 @@ .4byte \jumpInstr .endm - .macro jumpifstatus2 battler:req, flags:req, jumpInstr:req + .macro jumpifvolatile battler:req, volatile:req, jumpInstr:req .byte 0x1d .byte \battler - .4byte \flags + .byte \volatile .4byte \jumpInstr .endm @@ -185,11 +189,12 @@ .4byte \jumpInstr .endm - .macro jumpifstatus3condition battler:req, flags:req, jumpIfTrue:req, jumpInstr:req + .macro jumpifstatignorecontrary battler:req, comparison:req, stat:req, value:req, jumpInstr:req .byte 0x21 .byte \battler - .4byte \flags - .byte \jumpIfTrue + .byte \comparison + .byte \stat + .byte \value .4byte \jumpInstr .endm @@ -352,13 +357,16 @@ .2byte \frames .endm + .macro setchargingturn + .byte 0x40 + .endm + .macro waitstate .byte 0x3a .endm - .macro absorbhealthbarupdate battler:req + .macro isdmgblockedbydisguise .byte 0x3b - .byte \battler .endm .macro return @@ -410,15 +418,15 @@ .4byte \argPtr .endm - .macro setgraphicalstatchangevalues + .macro jumpfifsemiinvulnerable battler:req, state:req, jumpInstr:req .byte 0x47 + .byte \battler + .byte \state + .4byte \jumpInstr .endm - .macro playstatchangeanimation battler:req, stats:req, flags:req + .macro unused_0x48 .byte 0x48 - .byte \battler - .byte \stats - .byte \flags .endm .macro moveend endMode:req, endState:req @@ -593,22 +601,15 @@ .byte \notChosenMove .endm - .macro statusanimation battler:req + .macro statusanimation battler:req, status=0, isVolatile=FALSE .byte 0x64 .byte \battler + .4byte \status + .byte \isVolatile .endm - .macro status2animation battler:req, status2:req - .byte 0x65 - .byte \battler - .4byte \status2 - .endm - - .macro chosenstatusanimation battler:req, isStatus2:req, status:req - .byte 0x66 - .byte \battler - .byte \isStatus2 - .4byte \status + .macro volatileanimation battler:req, volatile:req + statusanimation \battler, \volatile, TRUE .endm .macro yesnobox @@ -678,10 +679,8 @@ .byte 0x75 .endm - .macro various battler:req, id:req + .macro unused_0x78 .byte 0x76 - .byte \battler - .byte \id .endm .macro setprotectlike @@ -701,10 +700,10 @@ .4byte \jumpInstr .endm - .macro tryhealhalfhealth failInstr:req, battler:req + .macro tryhealhalfhealth battler:req, failInstr:req .byte 0x7b - .4byte \failInstr .byte \battler + .4byte \failInstr .endm .macro trymirrormove @@ -729,19 +728,16 @@ .byte \mode .endm - .macro trysetrest failInstr:req + .macro trysetrest .byte 0x81 - .4byte \failInstr .endm - .macro jumpifnotfirstturn jumpInstr:req + .macro unused_0x82 .byte 0x82 - .4byte \jumpInstr .endm - .macro setmiracleeye failInstr:req + .macro unused_0x83 .byte 0x83 - .4byte \failInstr .endm .macro jumpifuproarwakes jumpInstr:req @@ -754,9 +750,8 @@ .byte \id .endm - .macro stockpiletobasedamage failInstr:req + .macro stockpiletobasedamage .byte 0x86 - .4byte \failInstr .endm .macro stockpiletohpheal failInstr:req @@ -768,14 +763,16 @@ callnative BS_RemoveStockpileCounters .endm - .macro setdrainedhp + .macro unused_0x88 .byte 0x88 .endm - .macro statbuffchange flags:req, failInstr:req + .macro statbuffchange battler:req, flags:req, failInstr:req, stats=0 .byte 0x89 + .byte \battler .2byte \flags .4byte \failInstr + .byte \stats .endm .macro normalisebuffs @@ -834,16 +831,19 @@ .4byte \failInstr .endm - .macro unused_0x94 + .macro checknonvolatiletrigger nonVolatile:req, failInstr:req .byte 0x94 + .2byte \nonVolatile + .4byte \failInstr .endm .macro copybidedmg .byte 0x95 .endm - .macro unused_96 + .macro animatewildpokemonafterfailedpokeball battler:req .byte 0x96 + .byte \battler .endm .macro tryinfatuating failInstr:req @@ -878,7 +878,7 @@ .4byte \failInstr .endm - .macro metronome + .macro setcalledmove .byte 0x9e .endm @@ -939,7 +939,7 @@ .4byte \failInstr .endm - .macro trysetdestinybondtohappen + .macro unused_0xab .byte 0xab .endm @@ -967,8 +967,11 @@ .4byte \failInstr .endm - .macro setforesight + .macro setvolatile battler:req, volatile:req, value=TRUE .byte 0xb1 + .byte \battler + .byte \volatile + .byte \value .endm .macro trysetperishsong failInstr:req @@ -1012,8 +1015,10 @@ .4byte \jumpInstr .endm - .macro tryrestorehpberry + .macro tryactivateitem battler:req, flag:req .byte 0xbb + .byte \battler + .byte \flag .endm .macro halvehp failInstr:req @@ -1021,19 +1026,14 @@ .4byte \failInstr .endm - .macro copyfoestats unused:req + .macro copyfoestats .byte 0xbd - .4byte \unused .endm .macro rapidspinfree .byte 0xbe .endm - .macro setdefensecurlbit - .byte 0xbf - .endm - .macro recoverbasedonsunlight failInstr:req .byte 0xc0 .4byte \failInstr @@ -1048,12 +1048,11 @@ .byte 0xc2 .endm - .macro trysetfutureattack failInstr:req + .macro setfutureattack .byte 0xc3 - .4byte \failInstr .endm - .macro trydobeatup endInstr, failInstr + .macro trydobeatup endInstr:req, failInstr:req .byte 0xc4 .4byte \endInstr .4byte \failInstr @@ -1083,7 +1082,7 @@ tryfiretwoturnmovenowbyeffect \battler, FALSE, \jumpInstr .endm - .macro setminimize + .macro unused_0xC7 .byte 0xc7 .endm @@ -1100,7 +1099,7 @@ .byte 0xca .endm - .macro setcharge battler:req + .macro unused_0xcb battler:req .byte 0xcb .byte \battler .endm @@ -1189,9 +1188,10 @@ .4byte \failInstr .endm - .macro setuserstatus3 flags:req, failInstr:req + .macro trysetvolatile battler:req, _volatile:req, failInstr:req .byte 0xdd - .4byte \flags + .byte \battler + .byte \_volatile .4byte \failInstr .endm @@ -1226,10 +1226,8 @@ .4byte \jumpInstr .endm - .macro jumpifnotcurrentmoveargtype battler:req, failInstr:req + .macro unused_0xE4 .byte 0xe4 - .byte \battler - .4byte \failInstr .endm .macro pickup @@ -1299,7 +1297,7 @@ .byte 0xf3 .endm - .macro subattackerhpbydmg + .macro unused_0xf4 .byte 0xf4 .endm @@ -1340,11 +1338,12 @@ .4byte \jumpInstr .endm - .macro setnonvolatilestatus + .macro setnonvolatilestatus trigger:req .byte 0xfd + .byte \trigger .endm - .macro tryworryseed failInstr:req + .macro tryoverwriteability failInstr:req .byte 0xfe .4byte \failInstr .endm @@ -1379,21 +1378,6 @@ .4byte \failInstr .endm - .macro jumpifcantfling battler:req, jumpInstr:req - callnative BS_JumpIfCantFling - .byte \battler - .4byte \jumpInstr - .endm - - .macro itemstatchangeeffects battler:req - callnative BS_RunStatChangeItems - .byte \battler - .endm - - .macro tryintimidateejectpack - callnative BS_TryIntimidateEjectPack - .endm - .macro allyswitchswapbattlers callnative BS_AllySwitchSwapBattler .endm @@ -1421,9 +1405,10 @@ .4byte \restoreBattlerInstr .endm - .macro itemcurestatus jumpInstr:req + .macro itemcurestatus jumpInstr:req, restoreBattlerInstr:req callnative BS_ItemCureStatus .4byte \jumpInstr + .4byte \restoreBattlerInstr .endm .macro itemincreasestat @@ -1438,36 +1423,22 @@ callnative BS_TryRevertWeatherForm .endm - .macro trysetoctolock battler:req, failInstr:req + .macro trysetoctolock failInstr:req callnative BS_TrySetOctolock - .byte \battler .4byte \failInstr .endm - .macro setglaiverush - callnative BS_SetGlaiveRush - .endm - - .macro tryrelicsong - callnative BS_TryRelicSong - .endm - .macro setpledge jumpInstr:req callnative BS_SetPledge .4byte \jumpInstr .endm - .macro setpledgestatus battler:req sidestatus:req + .macro setpledgestatus battler:req, sidestatus:req callnative BS_SetPledgeStatus .byte \battler .4byte \sidestatus .endm - .macro trycopycat failInstr:req - callnative BS_TryCopycat - .4byte \failInstr - .endm - .macro setzeffect callnative BS_SetZEffect .endm @@ -1527,14 +1498,8 @@ .4byte \jumpInstr .endm - .macro jumpifmovepropertyargument argument:req, jumpInstr:req - callnative BS_JumpIfMovePropertyArgument - .byte \argument - .4byte \jumpInstr - .endm - - .macro setremoveterrain failInstr:req - callnative BS_SetRemoveTerrain + .macro setterrain failInstr:req + callnative BS_SetTerrain .4byte \failInstr .endm @@ -1656,14 +1621,6 @@ .4byte \failInstr .endm - .macro tryupdaterecoiltracker - callnative BS_TryUpdateRecoilTracker - .endm - - .macro tryupdateleaderscresttracker - callnative BS_TryUpdateLeadersCrestTracker - .endm - .macro trytidyup clear:req, jumpInstr:req callnative BS_TryTidyUp .byte \clear @@ -1697,10 +1654,6 @@ callnative BS_ApplyTerastallization .endm - .macro damagetoquartertargethp - callnative BS_DamageToQuarterTargetHP - .endm - .macro jumpifsleepclause jumpInstr:req callnative BS_JumpIfSleepClause .4byte \jumpInstr @@ -1742,6 +1695,10 @@ .byte \battler .endm + .macro resetterrainabilityflags + callnative BS_ResetTerrainAbilityFlags + .endm + @ Stores Healing Wish effect. .macro storehealingwish battler:req callnative BS_StoreHealingWish @@ -1776,10 +1733,6 @@ callnative BS_WaitFanfare .endm - .macro setbeakblast - callnative BS_SetBeakBlast - .endm - .macro cantarshotwork failInstr:req callnative BS_CanTarShotWork .4byte \failInstr @@ -1803,6 +1756,10 @@ .2byte \flags .endm + .macro clearspecialstatuses + callnative BS_ClearSpecialStatuses + .endm + .macro clearmoveresultflags flags:req callnative BS_ClearMoveResultFlags .2byte \flags @@ -1814,8 +1771,8 @@ .4byte \failInstr .endm - .macro jumpifcriticalhit failInstr:req - callnative BS_JumpIfCriticalHit + .macro jumpifnotcriticalhit failInstr:req + callnative BS_JumpIfNotCriticalHit .4byte \failInstr .endm @@ -1825,650 +1782,611 @@ .4byte \jumpInstr .endm -@ various command changed to more readable macros - .macro cancelmultiturnmoves battler:req - various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES - .endm - - .macro getifcantrunfrombattle battler:req - various \battler, VARIOUS_IS_RUNNING_IMPOSSIBLE + .macro tryflingholdeffect + callnative BS_TryFlingHoldEffect .endm - .macro getmovetarget battler:req - various \battler, VARIOUS_GET_MOVE_TARGET - .endm - - .macro getbattlerfainted battler:req - various \battler, VARIOUS_GET_BATTLER_FAINTED - .endm - - .macro resetswitchinabilitybits battler:req - various \battler, VARIOUS_RESET_SWITCH_IN_ABILITY_BITS - .endm - - .macro updatechoicemoveonlvlup battler:req - various \battler, VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP - .endm - - .macro resetplayerfainted - various BS_ATTACKER, VARIOUS_RESET_PLAYER_FAINTED - .endm - - .macro palaceflavortext battler:req - various \battler, VARIOUS_PALACE_FLAVOR_TEXT - .endm - - .macro arenajudgmentwindow - various BS_ATTACKER, VARIOUS_ARENA_JUDGMENT_WINDOW + .macro swapsidestatuses + callnative BS_CourtChangeSwapSideStatuses .endm - .macro arenaopponentmonlost - various BS_ATTACKER, VARIOUS_ARENA_OPPONENT_MON_LOST + .macro swapstats stat:req + callnative BS_SwapStats + .byte \stat .endm - .macro arenaplayermonlost - various BS_ATTACKER, VARIOUS_ARENA_PLAYER_MON_LOST + .macro restoresavedmove + callnative BS_RestoreSavedMove .endm - .macro arenabothmonlost - various BS_ATTACKER, VARIOUS_ARENA_BOTH_MONS_LOST +@ helpful macros + .macro setstatchanger stat:req, stages:req, down:req + setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 .endm - .macro forfeityesnobox battler:req - various \battler, VARIOUS_EMIT_YESNOBOX + .macro setmoveeffect effect:req + sethword sMOVE_EFFECT, \effect .endm - .macro arenadrawreftextbox - various BS_ATTACKER, VARIOUS_DRAW_ARENA_REF_TEXT_BOX + .macro sethword dst:req, value:req + setbyte \dst, (\value) & 0xFF + setbyte \dst + 1, ((\value) >> 8) & 0xFF .endm - .macro arenaerasereftextbox - various BS_ATTACKER, VARIOUS_ERASE_ARENA_REF_TEXT_BOX + .macro setword dst:req, value:req + setbyte \dst, (\value) & 0xFF + setbyte \dst + 1, ((\value) >> 8) & 0xFF + setbyte \dst + 2, ((\value) >> 16) & 0xFF + setbyte \dst + 3, ((\value) >> 24) & 0xFF .endm - .macro arenajudgmentstring id:req - various \id, VARIOUS_ARENA_JUDGMENT_STRING + .macro copybyte dst:req, src:req + copyarray \dst, \src, 0x1 .endm - .macro arenawaitmessage id:req - various \id, VARIOUS_ARENA_WAIT_STRING + .macro copyhword dst:req, src:req + copyarray \dst, \src, 0x2 .endm - .macro waitcry battler:req - various \battler, VARIOUS_WAIT_CRY + .macro copyword dst:req, src:req + copyarray \dst, \src, 0x4 .endm - .macro returnopponentmon1toball battler:req - various \battler, VARIOUS_RETURN_OPPONENT_MON1 + .macro jumpifbytenotequal byte1:req, byte2:req, jumpInstr:req + jumpifarraynotequal \byte1, \byte2, 0x1, \jumpInstr .endm - .macro returnopponentmon2toball battler:req - various \battler, VARIOUS_RETURN_OPPONENT_MON2 + .macro jumpifbyteequal byte1:req, byte2:req, jumpInstr:req + jumpifarrayequal \byte1, \byte2, 0x1, \jumpInstr .endm - .macro volumedown - various BS_ATTACKER, VARIOUS_VOLUME_DOWN + .macro jumpifmove move:req, jumpInstr:req + jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpInstr .endm - .macro volumeup - various BS_ATTACKER, VARIOUS_VOLUME_UP + .macro jumpifnotmove move:req, jumpInstr:req + jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpInstr .endm - .macro setalreadystatusedmoveattempt battler:req - various \battler, VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT + .macro jumpifnotchosenmove move:req, jumpInstr:req + jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpInstr .endm - .macro palacetryescapestatus battler:req - various \battler, VARIOUS_PALACE_TRY_ESCAPE_STATUS + .macro jumpifmovehadnoeffect jumpInstr:req + jumpifmoveresultflags MOVE_RESULT_NO_EFFECT, \jumpInstr .endm - .macro setoutcomeonteleport battler:req - various \battler, VARIOUS_SET_TELEPORT_OUTCOME + .macro jumpifside battler:req, side:req, equalJumpInstr:req + getbattlerside \battler + jumpifbyte CMP_EQUAL, gBattleCommunication, \side, \equalJumpInstr .endm - .macro playtrainerdefeatbgm battler:req - various \battler, VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC + .macro jumpifbattletype flags:req, jumpInstr:req + jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr .endm - .macro stattextbuffer battler:req - various \battler, VARIOUS_STAT_TEXT_BUFFER + .macro jumpifnotbattletype flags:req, jumpInstr:req + jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr .endm - .macro switchinabilities battler:req - various \battler, VARIOUS_SWITCHIN_ABILITIES + .macro dmg_1_8_targethp + manipulatedamage DMG_1_8_TARGET_HP .endm - .macro instanthpdrop battler:req - various \battler, VARIOUS_INSTANT_HP_DROP + .macro dmgtomaxattackerhp + manipulatedamage DMG_FULL_ATTACKER_HP .endm - .macro clearstatus battler:req - various \battler, VARIOUS_CLEAR_STATUS + .macro jumpifflowerveil jumpInstr:req + jumpifnottype BS_TARGET, TYPE_GRASS, 1f + jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr + 1: .endm - .macro restorepp battler:req - various \battler, VARIOUS_RESTORE_PP + .macro jumpifflowerveilattacker jumpInstr:req + jumpifnottype BS_ATTACKER, TYPE_GRASS, 1f + jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr + 1: .endm - .macro tryactivatereceiver battler:req - various \battler, VARIOUS_TRY_ACTIVATE_RECEIVER + .macro jumpifabilitycantbereactivated battler:req, jumpInstr:req + callnative BS_JumpIfAbilityCantBeReactivated + .byte \battler + .4byte \jumpInstr .endm - .macro tryactivatesoulheart - various BS_ATTACKER, VARIOUS_TRY_ACTIVATE_SOULHEART + .macro tryactivateabilityshield battler:req + callnative BS_TryActivateAbilityShield + .byte \battler .endm - .macro playmoveanimation battler:req, move:req - various \battler, VARIOUS_PLAY_MOVE_ANIMATION - .2byte \move + .macro trysynchronoise jumpInstr:req + callnative BS_TrySynchronoise + .4byte \jumpInstr .endm - .macro setluckychant battler:req, failInstr:req - various \battler VARIOUS_SET_LUCKY_CHANT - .4byte \failInstr + .macro jumpifroarfails jumpInstr:req + callnative BS_JumpIfRoarFails + .4byte \jumpInstr .endm - .macro suckerpunchcheck failInstr:req - various BS_ATTACKER, VARIOUS_SUCKER_PUNCH_CHECK - .4byte \failInstr + .macro jumpifabsent battler:req, jumpInstr:req + callnative BS_JumpIfAbsent + .byte \battler + .4byte \jumpInstr .endm - .macro setabilitysimple battler:req, failInstr:req - various \battler VARIOUS_SET_SIMPLE_BEAM - .4byte \failInstr + .macro jumpifnoholdeffect battler:req, holdEffect:req, jumpInstr:req + jumpifholdeffect \battler, \holdEffect, \jumpInstr, FALSE .endm - .macro tryentrainment failInstr:req - various BS_ATTACKER, VARIOUS_TRY_ENTRAINMENT - .4byte \failInstr + .macro jumpifholdeffect battler:req, holdEffect:req, jumpInstr:req, equal:req + callnative BS_JumpIfHoldEffect + .byte \battler + .byte \holdEffect + .4byte \jumpInstr + .byte \equal .endm - .macro setlastusedability battler:req - various \battler, VARIOUS_SET_LAST_USED_ABILITY + .macro jumpifnoally battler:req, jumpInstr:req + callnative BS_JumpIfNoAlly + .byte \battler + .4byte \jumpInstr .endm - .macro tryafteryou failInstr:req - various BS_ATTACKER, VARIOUS_AFTER_YOU - .4byte \failInstr + .macro setlastuseditem battler:req + callnative BS_SetLastUsedItem + .byte \battler .endm - .macro trybestow failInstr:req - various BS_ATTACKER, VARIOUS_BESTOW + .macro trysetfairylock failInstr:req + callnative BS_TrySetFairyLock .4byte \failInstr .endm - .macro invertstatstages battler:req - various \battler, VARIOUS_INVERT_STAT_STAGES - .endm - - .macro trymefirst failInstr:req - various BS_ATTACKER, VARIOUS_TRY_ME_FIRST - .4byte \failInstr + .macro getstatvalue stat:req + callnative BS_GetStatValue + .byte \stat .endm - .macro jumpifbattleend jumpInstr:req - various BS_ATTACKER, VARIOUS_JUMP_IF_BATTLE_END + .macro jumpiffullhp battler:req, jumpInstr:req + callnative BS_JumpIfFullHp + .byte \battler .4byte \jumpInstr .endm - .macro tryelectrify failInstr:req - various BS_ATTACKER, VARIOUS_TRY_ELECTRIFY - .4byte \failInstr + .macro tryfriskmessage + callnative BS_TryFriskMessage .endm - .macro trysoak failInstr:req - various BS_ATTACKER, VARIOUS_TRY_SOAK - .4byte \failInstr + .macro settracedability battler:req + callnative BS_SetTracedAbility + .byte \battler .endm - .macro handleformchange battler:req, case:req - various \battler, VARIOUS_HANDLE_FORM_CHANGE - .byte \case + .macro tryillusionoff battler:req + callnative BS_TryIllusionOff + .byte \battler .endm - .macro jumpifcantuselastresort battler:req, jumpInstr:req - various \battler, VARIOUS_TRY_LAST_RESORT - .4byte \jumpInstr + .macro setspriteignore0hp ignore0HP:req + callnative BS_SetSpriteIgnore0Hp + .byte \ignore0HP .endm - .macro tryautotomize battler:req, failInstr:req - various \battler, VARIOUS_TRY_AUTOTOMIZE - .4byte \failInstr + .macro updatenick + callnative BS_UpdateNick .endm - .macro jumpifcantusesynchronoise jumpInstr:req - various BS_ATTACKER, VARIOUS_TRY_SYNCHRONOISE + .macro jumpifnotberry battler:req, jumpInstr:req + callnative BS_JumpIfNotBerry + .byte \battler .4byte \jumpInstr .endm - .macro showabilitypopup battler:req - various \battler, VARIOUS_ABILITY_POPUP + .macro gravityonairbornemons + callnative BS_GravityOnAirborneMons .endm - .macro updateabilitypopup battler:req - various \battler, VARIOUS_UPDATE_ABILITY_POPUP - .endm - - .macro jumpiftargetally jumpInstr:req - various BS_ATTACKER, VARIOUS_JUMP_IF_TARGET_ALLY - .4byte \jumpInstr - .endm - - .macro trypsychoshift failInstr:req sleepClauseFailInstr:req - various BS_ATTACKER, VARIOUS_PSYCHO_SHIFT + .macro tryacupressure failInstr:req + callnative BS_TryAcupressure .4byte \failInstr - .4byte \sleepClauseFailInstr - .endm - - .macro curestatus battler:req - various \battler, VARIOUS_CURE_STATUS .endm - .macro powertrick battler:req - various \battler, VARIOUS_POWER_TRICK + .macro cancelmultiturnmoves + callnative BS_CancelMultiTurnMoves .endm - .macro jumpifnotgrounded battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_NOT_GROUNDED - .4byte \jumpInstr + .macro isrunningimpossible + callnative BS_IsRunningImpossible .endm - .macro handletrainerslidemsg battler:req, case:req - various \battler, VARIOUS_HANDLE_TRAINER_SLIDE_MSG - .byte \case + .macro getmovetarget + callnative BS_GetMoveTarget .endm - .macro trytrainerslidefirstdownmsg battler:req - various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF + @ Will jump to script pointer if the specified battler has or has not fainted. + .macro jumpiffainted battler:req, value:req, ptr:req + getbattlerfainted \battler + jumpifbyte CMP_EQUAL, gBattleCommunication, \value, \ptr .endm - .macro trytrainerslidelastonmsg battler:req - various \battler, VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON + .macro getbattlerfainted battler:req + callnative BS_GetBattlerFainted + .byte \battler .endm - .macro setauroraveil battler:req - various \battler, VARIOUS_SET_AURORA_VEIL + .macro resetswitchinabilitybits + callnative BS_ResetSwitchInAbilityBits .endm - .macro trysetthirdtype battler:req, failInstr:req - various \battler, VARIOUS_TRY_THIRD_TYPE - .4byte \failInstr + .macro updatechoicemoveonlvlup + callnative BS_UpdateChoiceMoveOnLvlUp .endm - .macro tryaccupressure battler:req, failInstr:req - various \battler, VARIOUS_ACUPRESSURE - .4byte \failInstr + .macro resetplayerfainted + callnative BS_ResetPlayerFainted .endm - .macro setpowder battler:req - various \battler, VARIOUS_SET_POWDER + .macro palaceflavortext + callnative BS_PalaceFlavorText .endm - .macro bringdownairbornebattler battler:req - various \battler, VARIOUS_GRAVITY_ON_AIRBORNE_MONS + .macro arenajudgmentwindow + callnative BS_ArenaJudgmentWindow .endm - .macro checkgrassyterrainheal battler:req, failInstr:req - various \battler, VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS - .4byte \failInstr + .macro arenaopponentmonlost + callnative BS_ArenaOpponentMonLost .endm - .macro jumpifnotberry battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_NOT_BERRY - .4byte \jumpInstr + .macro arenaplayermonlost + callnative BS_ArenaPlayerMonLost .endm - .macro jumpifroarfails jumpInstr:req - various BS_ATTACKER, VARIOUS_JUMP_IF_ROAR_FAILS - .4byte \jumpInstr + .macro arenabothmonslost + callnative BS_ArenaBothMonsLost .endm - .macro tryinstruct failInstr:req - various BS_ATTACKER, VARIOUS_TRY_INSTRUCT - .4byte \failInstr + .macro forfeityesnobox + callnative BS_ForfeitYesNoBox .endm - .macro settracedability battler:req - various \battler, VARIOUS_TRACE_ABILITY + .macro drawarenareftextbox + callnative BS_DrawArenaRefTextBox .endm - .macro updatenick battler:req - various \battler, VARIOUS_UPDATE_NICK + .macro erasearenareftextbox + callnative BS_EraseArenaRefTextBox .endm - .macro tryillusionoff battler:req - various \battler, VARIOUS_TRY_ILLUSION_OFF + .macro arenajudgmentstring id:req + callnative BS_ArenaJudgmentString + .byte \id .endm - .macro spriteignore0hp value:req - various BS_ATTACKER, VARIOUS_SET_SPRITEIGNORE0HP - .byte \value + .macro arenawaitmessage + callnative BS_ArenaWaitMessage .endm - .macro getstatvalue battler:req, stat:req - various \battler, VARIOUS_GET_STAT_VALUE - .byte \stat + .macro waitcry + callnative BS_WaitCry .endm - .macro jumpiffullhp battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_FULL_HP - .4byte \jumpInstr + .macro returnopponentmon1toball + callnative BS_ReturnOpponentMon1ToBall .endm - .macro losetype battler:req, type:req - various \battler, VARIOUS_LOSE_TYPE - .byte \type + .macro returnopponentmon2toball + callnative BS_ReturnOpponentMon2ToBall .endm - .macro tryfriskmsg battler:req - various \battler, VARIOUS_TRY_FRISK + .macro volumedown + callnative BS_VolumeDown .endm - .macro jumpifshieldsdown battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED - .4byte \jumpInstr + .macro volumeup + callnative BS_VolumeUp .endm - .macro trysetfairylock failInstr:req - various BS_ATTACKER, VARIOUS_TRY_FAIRY_LOCK - .4byte \failInstr + .macro setalreadystatusedmoveattempt + callnative BS_SetAlreadyStatusedMoveAttempt .endm - .macro jumpifnoally battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_NO_ALLY - .4byte \jumpInstr + .macro palacetryescapestatus + callnative BS_PalaceTryEscapeStatus .endm - .macro jumpifholdeffect battler:req, holdEffect:req, jumpInstr:req, equal=TRUE - various \battler, VARIOUS_JUMP_IF_HOLD_EFFECT - .byte \holdEffect - .4byte \jumpInstr - .byte \equal + .macro setteleportoutcome battler:req + callnative BS_SetTeleportOutcome + .byte \battler .endm - .macro jumpifnoholdeffect battler:req, holdEffect:req, jumpInstr:req - jumpifholdeffect \battler, \holdEffect, \jumpInstr, FALSE + .macro playtrainerdefeatedmusic + callnative BS_PlayTrainerDefeatedMusic .endm - .macro infatuatewithbattler battler:req, infatuateWith:req - various \battler, VARIOUS_INFATUATE_WITH_BATTLER - .byte \infatuateWith + .macro stattextbuffer + callnative BS_StatTextBuffer .endm - .macro setlastuseditem battler:req - various \battler, VARIOUS_SET_LAST_USED_ITEM + .macro switchinabilities battler:req + callnative BS_SwitchinAbilities + .byte \battler .endm - .macro jumpifabsent battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_ABSENT - .4byte \jumpInstr + .macro instanthpdrop + callnative BS_InstantHpDrop .endm - .macro destroyabilitypopup - various BS_ABILITY_BATTLER, VARIOUS_DESTROY_ABILITY_POPUP + .macro clearstatus + callnative BS_ClearStatus .endm - .macro gettotemboost jumpInstr:req - various BS_ATTACKER, VARIOUS_TOTEM_BOOST - .4byte \jumpInstr + .macro restoremovepp + callnative BS_RestoreMovePp .endm - .macro consumeberry battler:req, fromBattler:req - various \battler, VARIOUS_CONSUME_BERRY - .byte \fromBattler + .macro tryactivatereceiver battler:req + callnative BS_TryActivateReceiver + .byte \battler .endm - .macro activateitemeffects battler:req - various \battler, VARIOUS_MOVEEND_ITEM_EFFECTS + .macro tryactivatesoulheart + callnative BS_TryActivateSoulheart .endm - .macro pickpocketsteal - various 0, VARIOUS_PICKPOCKET + .macro playmoveanimation move:req + callnative BS_PlayMoveAnimation + .2byte \move .endm - .macro doterrainseed battler:req, failInstr:req - various \battler, VARIOUS_TERRAIN_SEED + .macro setluckychant failInstr:req + callnative BS_SetLuckyChant .4byte \failInstr .endm - .macro makeinvisible battler:req - various \battler, VARIOUS_MAKE_INVISIBLE - .endm - - .macro tryroomservice battler:req, failInstr:req - various \battler, VARIOUS_ROOM_SERVICE + .macro tryentrainment failInstr:req + callnative BS_TryEntrainment .4byte \failInstr .endm - .macro jumpifpranksterblocked battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_PRANKSTER_BLOCKED - .4byte \jumpInstr + .macro setlastusedability + callnative BS_SetLastUsedAbility .endm - .macro jumpifteamhealthy battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_TEAM_HEALTHY - .4byte \jumpInstr + .macro invertstatstages + callnative BS_InvertStatStages .endm - .macro tryhealquarterhealth battler:req, failInstr:req - various \battler, VARIOUS_TRY_HEAL_QUARTER_HP + .macro tryelectrify failInstr:req + callnative BS_TryElectrify .4byte \failInstr .endm - .macro trytoclearprimalweather - various BS_ATTACKER, VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER + .macro trysoak failInstr:req + callnative BS_TrySoak + .4byte \failInstr .endm - .macro setattackertostickywebuser - various BS_TARGET, VARIOUS_SET_ATTACKER_STICKY_WEB_USER + .macro handleformchange battler:req, case_:req + callnative BS_HandleFormChange + .byte \battler + .byte \case_ .endm - .macro getrototillertargets failInstr:req - various BS_ATTACKER, VARIOUS_GET_ROTOTILLER_TARGETS + .macro tryautotomize failInstr:req + callnative BS_TryAutotomize .4byte \failInstr .endm - .macro jumpifnotrototilleraffected battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED - .4byte \jumpInstr + .macro tryinstruct failInstr:req + callnative BS_TryInstruct + .4byte \failInstr .endm - .macro jumpifcantreverttoprimal jumpInstr:req - various BS_ATTACKER, VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL - .4byte \jumpInstr + .macro showabilitypopup + callnative BS_ShowAbilityPopup .endm - .macro jumpifweatheraffected battler:req, flags:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_WEATHER_AFFECTED - .4byte \flags - .4byte \jumpInstr + .macro updateabilitypopup + callnative BS_UpdateAbilityPopup .endm - .macro jumpifspecies battler:req, species:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_SPECIES - .2byte \species + .macro jumpiftargetally jumpInstr:req + callnative BS_JumpIfTargetAlly .4byte \jumpInstr .endm - .macro tryendneutralizinggas battler:req - various \battler, VARIOUS_TRY_END_NEUTRALIZING_GAS - .endm - - .macro trynoretreat battler:req, failInstr:req - various \battler, VARIOUS_TRY_NO_RETREAT + .macro trypsychoshift failInstr:req sleepClauseFailInstr:req + callnative BS_TryPsychoShift .4byte \failInstr + .4byte \sleepClauseFailInstr .endm - .macro checkpoltergeist battler:req, failInstr:req - various \battler, VARIOUS_CHECK_POLTERGEIST - .4byte \failInstr + .macro curestatus battler:req + callnative BS_CureStatus + .byte \battler .endm - .macro cutonethirdhpraisestats failInstr:req - various BS_ATTACKER, VARIOUS_CUT_1_3_HP_RAISE_STATS - .4byte \failInstr + .macro powertrick + callnative BS_PowerTrick .endm - .macro curecertainstatuses battler:req - various \battler, VARIOUS_CURE_CERTAIN_STATUSES + .macro tryafteryou failInstr:req + callnative BS_TryAfterYou + .4byte \failInstr .endm - .macro tryresetnegativestatstages battler:req - various \battler, VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES + .macro trybestow failInstr:req + callnative BS_TryBestow + .4byte \failInstr .endm - .macro jumpiflastuseditemberry jumpInstr:req - various BS_ATTACKER, VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY - .4byte \jumpInstr + .macro handletrainerslidemsg battler:req, case_:req + callnative BS_HandleTrainerSlideMsg + .byte \battler + .byte \case_ .endm - .macro jumpiflastuseditemholdeffect holdEffect:req, secondaryId:req, jumpInstr:req - callnative BS_JumpIfLastUsedItemHoldEffect - .byte \holdEffect - .2byte \secondaryId - .4byte \jumpInstr + .macro trytrainerslidemsgfirstoff battler:req + callnative BS_TryTrainerSlideMsgFirstOff + .byte \battler .endm - .macro savebattleritem battler:req - various \battler, VARIOUS_SAVE_BATTLER_ITEM + .macro trytrainerslidemsglaston battler:req + callnative BS_TryTrainerSlideMsgLastOn + .byte \battler .endm - .macro restorebattleritem battler:req - various \battler, VARIOUS_RESTORE_BATTLER_ITEM + .macro setauroraveil + callnative BS_SetAuroraVeil .endm - .macro battleritemtolastuseditem battler:req - various \battler, VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM + .macro trythirdtype failInstr:req + callnative BS_TryThirdType + .4byte \failInstr .endm - .macro swapsidestatuses - callnative BS_CourtChangeSwapSideStatuses + .macro destroyabilitypopup + callnative BS_DestroyAbilityPopup .endm - .macro swapstats stat:req - callnative BS_SwapStats - .byte \stat + .macro gettotemboost jumpInstr:req + callnative BS_GetTotemBoost + .4byte \jumpInstr .endm - .macro restoresavedmove - callnative BS_RestoreSavedMove + .macro activateitemeffects + callnative BS_ActivateItemEffects .endm -@ helpful macros - .macro setstatchanger stat:req, stages:req, down:req - setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 + .macro tryroomservice battler:req, failInstr:req + callnative BS_TryRoomService + .byte \battler + .4byte \failInstr .endm - .macro setmoveeffect effect:req - sethword sMOVE_EFFECT, \effect - sethword sSAVED_MOVE_EFFECT, \effect + .macro tryterrainseed battler:req, failInstr:req + callnative BS_TryTerrainSeed + .byte \battler + .4byte \failInstr .endm - .macro chosenstatus1animation battler:req, status:req - chosenstatusanimation \battler, 0x0, \status + .macro makeinvisible battler:req + callnative BS_MakeInvisible + .byte \battler .endm - .macro chosenstatus2animation battler:req, status:req - chosenstatusanimation \battler, 0x1, \status + .macro jumpifteamhealthy jumpInstr:req + callnative BS_JumpIfTeamHealthy + .4byte \jumpInstr .endm - .macro sethword dst:req, value:req - setbyte \dst, (\value) & 0xFF - setbyte \dst + 1, ((\value) >> 8) & 0xFF + .macro tryhealquarterhealth battler:req, failInstr:req + callnative BS_TryHealQuarterHealth + .byte \battler + .4byte \failInstr .endm - .macro setword dst:req, value:req - setbyte \dst, (\value) & 0xFF - setbyte \dst + 1, ((\value) >> 8) & 0xFF - setbyte \dst + 2, ((\value) >> 16) & 0xFF - setbyte \dst + 3, ((\value) >> 24) & 0xFF + .macro jumpifunder200 jumpInstr:req + callnative BS_JumpIfUnder200 + .4byte \jumpInstr .endm - .macro copybyte dst:req, src:req - copyarray \dst, \src, 0x1 + .macro setskydrop + callnative BS_SetSkyDrop .endm - .macro copyhword dst:req, src:req - copyarray \dst, \src, 0x2 + .macro clearskydrop failInstr:req + callnative BS_ClearSkyDrop + .4byte \failInstr .endm - .macro copyword dst:req, src:req - copyarray \dst, \src, 0x4 + .macro skydropyawn + callnative BS_SkyDropYawn .endm - .macro jumpifbytenotequal byte1:req, byte2:req, jumpInstr:req - jumpifarraynotequal \byte1, \byte2, 0x1, \jumpInstr + .macro jumpifpranksterblocked jumpInstr:req + callnative BS_JumpIfPranksterBlocked + .4byte \jumpInstr .endm - .macro jumpifbyteequal byte1:req, byte2:req, jumpInstr:req - jumpifarrayequal \byte1, \byte2, 0x1, \jumpInstr + .macro trytoclearprimalweather + callnative BS_TryToClearPrimalWeather .endm - .macro jumpifmove move:req, jumpInstr:req - jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpInstr + .macro tryendneutralizinggas + callnative BS_TryEndNeutralizingGas .endm - .macro jumpifnotmove move:req, jumpInstr:req - jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpInstr + .macro getrototillertargets failInstr:req + callnative BS_GetRototillerTargets + .4byte \failInstr .endm - .macro jumpifnotchosenmove move:req, jumpInstr:req - jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpInstr + .macro jumpifnotrototilleraffected jumpInstr:req + callnative BS_JumpIfNotRototillerAffected + .4byte \jumpInstr .endm - .macro jumpifstatus3 battler:req, flags:req, jumpInstr:req - jumpifstatus3condition \battler, \flags, FALSE, \jumpInstr + .macro consumeberry battler:req, fromBattler:req + callnative BS_ConsumeBerry + .byte \battler + .byte \fromBattler .endm - .macro jumpifnostatus3 battler:req, flags:req, jumpInstr:req - jumpifstatus3condition \battler, \flags, TRUE, \jumpInstr + .macro jumpifweatheraffected flags:req, jumpInstr:req + callnative BS_JumpIfWeatherAffected + .2byte \flags + .4byte \jumpInstr .endm - .macro jumpifmovehadnoeffect jumpInstr:req - jumpifmoveresultflags MOVE_RESULT_NO_EFFECT, \jumpInstr + .macro jumpifspecies species:req, jumpInstr:req + callnative BS_JumpIfSpecies + .2byte \species + .4byte \jumpInstr .endm - .macro jumpifside battler:req, side:req, equalJumpInstr:req - getbattlerside \battler - jumpifbyte CMP_EQUAL, gBattleCommunication, \side, \equalJumpInstr + .macro jumpifabilitypreventsrest battler:req, jumpInstr:req + callnative BS_JumpIfAbilityPreventsRest + .byte \battler + .4byte \jumpInstr .endm - .macro jumpifbattletype flags:req, jumpInstr:req - jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr + .macro setattackertostickywebuser + callnative BS_SetAttackerToStickyWebUser .endm - .macro jumpifnotbattletype flags:req, jumpInstr:req - jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr + .macro cutonethirdhpandraisestats failInstr:req + callnative BS_CutOneThirdHpAndRaiseStats + .4byte \failInstr .endm - .macro dmg_1_8_targethp - manipulatedamage DMG_1_8_TARGET_HP + .macro setpoltergeistmessage failInstr:req + callnative BS_SetPoltergeistMessage + .4byte \failInstr .endm - .macro dmgtomaxattackerhp - manipulatedamage DMG_FULL_ATTACKER_HP + .macro tryresetnegativestatstages + callnative BS_TryResetNegativeStatStages .endm - .macro dmgtocurrattackerhp - manipulatedamage DMG_CURR_ATTACKER_HP + .macro jumpiflastuseditemberry jumpInstr:req + callnative BS_JumpIfLastUsedItemBerry + .4byte \jumpInstr .endm - .macro jumpifflowerveil jumpInstr:req - jumpifnottype BS_TARGET, TYPE_GRASS, 1f - jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr - 1: + .macro savebattleritem + callnative BS_SaveBattlerItem .endm - .macro jumpifflowerveilattacker jumpInstr:req - jumpifnottype BS_ATTACKER, TYPE_GRASS, 1f - jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr - 1: + .macro restorebattleritem + callnative BS_RestoreBattlerItem .endm - .macro jumpifabilitycantbesuppressed battler:req, jumpInstr:req - callnative BS_JumpIfAbilityCantBeSuppressed - .byte \battler - .4byte \jumpInstr + .macro battleritemtolastuseditem + callnative BS_BattlerItemToLastUsedItem .endm .macro setallytonexttarget jumpInstr:req @@ -2489,40 +2407,12 @@ goto \jumpInstr .endm - .macro jumpifleafguardprotected battler:req, jumpInstr:req - various \battler, VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED - .4byte \jumpInstr - .endm - .macro jumpifsafeguard jumpInstr:req jumpifability BS_ATTACKER, ABILITY_INFILTRATOR, 1f jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpInstr 1: .endm - @ Will jump to script pointer if the target weighs less than 200 kg, or 441 lbs. - .macro jumpifunder200 battler:req, failInstr:req - various \battler, VARIOUS_JUMP_IF_UNDER_200 - .4byte \failInstr - .endm - - @ Sets the sky drop status and does all other necessary operations - .macro setskydrop - various 0, VARIOUS_SET_SKY_DROP - .endm - - @ Clears the sky drop status and does all other necessary operations. - @ If the target fainted in before this script is called, it goes to the given script. - .macro clearskydrop failInstr:req - various 0, VARIOUS_CLEAR_SKY_DROP - .4byte \failInstr - .endm - - @ Accounts for if the target of Sky Drop was in confuse_lock when the attacker falls asleep due to Yawn. - .macro skydropyawn - various 0, VARIOUS_SKY_DROP_YAWN - .endm - @ Tries to increase or decrease a battler's stat's stat stage by a specified amount. If impossible, jumps to \script. .macro modifybattlerstatstage battler:req, stat:req, mode:req, amount:req, script:req, animation:req, customString @@ -2535,11 +2425,10 @@ ANIM_ON = TRUE setstatchanger \stat, \amount, \mode - statbuffchange STAT_CHANGE_ALLOW_PTR, \script - setgraphicalstatchangevalues - .if \animation == TRUE - playanimation \battler, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + .if \animation == FALSE + setbyte sSTAT_ANIM_PLAYED, TRUE .endif + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, \script .ifnb \customString printstring \customString .else @@ -2554,12 +2443,6 @@ waitmessage B_WAIT_TIME_LONG .endm - @ Will jump to script pointer if the specified battler has or has not fainted. - .macro jumpiffainted battler:req, value:req, ptr:req - getbattlerfainted \battler - jumpifbyte CMP_EQUAL, gBattleCommunication, \value, \ptr - .endm - .macro flushtextbox printstring STRINGID_EMPTYSTRING3 waitmessage 1 @@ -2569,3 +2452,15 @@ callnative BS_JumpIfNoWhiteOut .4byte \jumpInstr .endm + + .macro tryboosterenergy onFieldStatus:req + callnative BS_TryBoosterEnergy + .byte \onFieldStatus + .endm + + .macro jumpifgenconfiglowerthan tag:req, gen:req, jumpInstr:req + callnative BS_JumpIfGenConfigLowerThan + .2byte \tag + .byte \gen + .4byte \jumpInstr + .endm diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 1cf9c7fca76c..6abaeff2652e 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -169,7 +169,10 @@ .endm @ Copies the value of source into destination. - .macro copyvar destination:req, source:req + .macro copyvar destination:req, source:req, warn=TRUE + .if \warn && !((\source >= VARS_START && \source <= VARS_END) || (\source >= SPECIAL_VARS_START && \source <= SPECIAL_VARS_END)) + .warning "copyvar with a value that is not a VAR_ constant; did you mean setvar instead?" + .endif .byte SCR_OP_COPYVAR .2byte \destination .2byte \source @@ -684,6 +687,14 @@ map \map .endm + @ Set the player object's invisibility to FALSE. + .macro showplayer + .byte SCR_OP_SHOWOBJECTAT + .2byte LOCALID_PLAYER + .byte 0 @ map group + .byte 0 @ map num + .endm + @ Sets the specified object's invisibility to TRUE. .macro hideobjectat localId:req, map:req .byte SCR_OP_HIDEOBJECTAT @@ -691,6 +702,14 @@ map \map .endm + @ Set the player object's invisibility to TRUE. + .macro hideplayer + .byte SCR_OP_HIDEOBJECTAT + .2byte LOCALID_PLAYER + .byte 0 @ map group + .byte 0 @ map num + .endm + @ Turns the currently selected object (if there is one) to face the player. .macro faceplayer .byte SCR_OP_FACEPLAYER @@ -986,7 +1005,7 @@ @ Gives the player a PokΓ©mon of the specified species and level, and allows to customize extra parameters. @ VAR_RESULT will be set to MON_GIVEN_TO_PARTY, MON_GIVEN_TO_PC, or MON_CANT_GIVE depending on the outcome. - .macro givemon species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, gmaxFactor, teraType, dmaxLevel + .macro givemon species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, shinyMode, gmaxFactor, teraType, dmaxLevel callnative ScrCmd_createmon, requests_effects=1 .byte 0 .byte PARTY_SIZE @ assign to first empty slot @@ -1014,7 +1033,7 @@ .ifnb \move2; .set givemon_flags, givemon_flags | (1 << 18); .endif .ifnb \move3; .set givemon_flags, givemon_flags | (1 << 19); .endif .ifnb \move4; .set givemon_flags, givemon_flags | (1 << 20); .endif - .ifnb \isShiny; .set givemon_flags, givemon_flags | (1 << 21); .endif + .ifnb \shinyMode; .set givemon_flags, givemon_flags | (1 << 21); .endif .ifnb \gmaxFactor; .set givemon_flags, givemon_flags | (1 << 22); .endif .ifnb \teraType; .set givemon_flags, givemon_flags | (1 << 23); .endif .ifnb \dmaxLevel; .set givemon_flags, givemon_flags | (1 << 24); .endif @@ -1040,7 +1059,7 @@ .ifnb \move2; .2byte \move2; .endif .ifnb \move3; .2byte \move3; .endif .ifnb \move4; .2byte \move4; .endif - .ifnb \isShiny; .2byte \isShiny; .endif + .ifnb \shinyMode; .2byte \shinyMode; .endif .ifnb \gmaxFactor; .2byte \gmaxFactor; .endif .ifnb \teraType; .2byte \teraType; .endif .ifnb \dmaxLevel; .2byte \dmaxLevel; .endif @@ -1048,7 +1067,7 @@ @ creates a mon for a given party and slot @ otherwise - .macro createmon side:req, slot:req, species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, gmaxFactor, teraType, dmaxLevel + .macro createmon side:req, slot:req, species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, shinyMode, gmaxFactor, teraType, dmaxLevel callnative ScrCmd_createmon, requests_effects=1 .byte \side @ 0 - player, 1 - opponent .byte \slot @ 0-5 @@ -1076,7 +1095,7 @@ .ifnb \move2; .set givemon_flags, givemon_flags | (1 << 18); .endif .ifnb \move3; .set givemon_flags, givemon_flags | (1 << 19); .endif .ifnb \move4; .set givemon_flags, givemon_flags | (1 << 20); .endif - .ifnb \isShiny; .set givemon_flags, givemon_flags | (1 << 21); .endif + .ifnb \shinyMode; .set givemon_flags, givemon_flags | (1 << 21); .endif .ifnb \gmaxFactor; .set givemon_flags, givemon_flags | (1 << 22); .endif .ifnb \teraType; .set givemon_flags, givemon_flags | (1 << 23); .endif .ifnb \dmaxLevel; .set givemon_flags, givemon_flags | (1 << 24); .endif @@ -1102,7 +1121,7 @@ .ifnb \move2; .2byte \move2; .endif .ifnb \move3; .2byte \move3; .endif .ifnb \move4; .2byte \move4; .endif - .ifnb \isShiny; .2byte \isShiny; .endif + .ifnb \shinyMode; .2byte \shinyMode; .endif .ifnb \gmaxFactor; .2byte \gmaxFactor; .endif .ifnb \teraType; .2byte \teraType; .endif .ifnb \dmaxLevel; .2byte \dmaxLevel; .endif @@ -1125,12 +1144,13 @@ .2byte \move .endm - @ Checks if at least one Pokemon in the player's party knows the specified move. If so, VAR_RESULT is set to the + @ Checks if at least one Pokemon in the player's party knows the specified field move and if the field move is unlocked. If so, VAR_RESULT is set to the @ (zero-indexed) slot number of the first Pokemon that knows the move. If not, VAR_RESULT is set to PARTY_SIZE. @ VAR_0x8004 is also set to this Pokemon's species. - .macro checkpartymove move:req - .byte SCR_OP_CHECKPARTYMOVE - .2byte \move + .macro checkfieldmove fieldMove:req, checkUnlocked=FALSE + .byte SCR_OP_CHECKFIELDMOVE + .byte \fieldMove + .byte \checkUnlocked .endm @ Converts STR_VAR_1, STR_VAR_2, or STR_VAR_3 to its corresponding index into sScriptStringVars (0, 1, or 2). @@ -1875,6 +1895,7 @@ @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. @ Lists of options are provided in argv. @ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. + @ For a simple menu supply DYN_MULTICHOICE_CB_NONE in callbacks. .macro dynmultichoice left:req, top:req, ignoreBPress:req, maxBeforeScroll:req, initialSelected:req, callbacks:req argv:vararg _dynmultichoice \left, \top, \ignoreBPress, \maxBeforeScroll, FALSE, \initialSelected, \callbacks, \argv .endm @@ -2174,7 +2195,7 @@ setvar VAR_0x8000, \evoMethod setvar VAR_0x8001, \canStopEvo setvar VAR_0x8002, \tryMultiple - special TrySpecialOverworldEvo + special TrySpecialScriptEvolution .endm .macro ai_vs_ai_battle trainer1:req, trainer2:req @@ -2311,6 +2332,11 @@ callnative ScriptSetDoubleBattleFlag, requests_effects=1 .endm + @ Stop using the ORAS dowsing machine. + .macro stoporasdowsing + callnative EndORASDowsing + .endm + @ ============================ @ @ FAKE RTC MACROS @ Will only function if OW_USE_FAKE_RTC is true. If it has any additional requirements, it will be listed accordingly. @@ -2480,7 +2506,7 @@ @ Hides any follower PokΓ©mon if present, putting them into their PokΓ© Ball; by default waits for their movement to finish. .macro hidefollower wait=1 - callnative ScrFunc_hidefollower + .byte SCR_OP_HIDEFOLLOWER .2byte \wait .endm @@ -2569,7 +2595,7 @@ @ Follower NPCs - @ Sets an NPC up to follow the player. + @ Sets an existing NPC up to follow the player. @ Follower flags are defined in include/constants/follower_npc.h @ If you want to specify a battle partner without specifying a custom script, you can set the script parameter to 0. .macro setfollowernpc localId:req, flags:req, script=0, battlePartner=0 @@ -2597,6 +2623,19 @@ .endif .endm + @ Creates a new follower NPC with the specified graphics id. + .macro createfollowernpc gfx:req, flags:req, script=0, battlePartner=0 + .if FNPC_ENABLE_NPC_FOLLOWERS + callnative ScriptCreateFollowerNPC + .2byte \gfx + .2byte \flags + .4byte \script + .2byte \battlePartner + .else + .error "createfollowernpc unavailable with FNPC_ENABLE_NPC_FOLLOWERS defined as FALSE" + .endif + .endm + @ Remove the follower NPC (assumes there will only ever be one). .macro destroyfollowernpc .if FNPC_ENABLE_NPC_FOLLOWERS @@ -2639,3 +2678,35 @@ callnative ScriptChangeFollowerNPCBattlePartner .2byte \battlePartner .endm + + @ Manually buffer a string as the speaker's name for namebox. + @ The next shown message/msgbox will include a namebox, if the provided string is not NULL. + @ An SP_NAME_* constant can also be used, it'll take the name from gSpeakerNamesTable instead. + .macro setspeaker name:req + callnative SetSpeaker + .4byte \name + .endm + +@ VS Seeker + .macro vsseeker_rematchid rematchId:req + callnative NativeVsSeekerRematchId, requests_effects=1 + .2byte \rematchId + .endm + + @ Sets the move relearner state + .macro setmoverelearnerstate state:req + callnative ScrCmd_setmoverelearnerstate, requests_effects=1 + .2byte \state + .endm + + @ Retrieves the move relearner state and stores it in the specified var + .macro getmoverelearnerstate varId:req + callnative ScrCmd_getmoverelearnerstate, requests_effects=1 + .4byte \varId + .endm + + @ Execute script if bag has TMs and/or HMs + .macro istmrelearneractive destination:req + callnative ScrCmd_istmrelearneractive, requests_effects=1 + .4byte \destination + .endm diff --git a/asm/macros/m4a.inc b/asm/macros/m4a.inc index b22da3d63470..0169a3c033c8 100644 --- a/asm/macros/m4a.inc +++ b/asm/macros/m4a.inc @@ -11,3 +11,41 @@ .space 1 @ Padding .2byte \unknown .endm + + .macro voice_group label:req, starting_note + .align 2 + .ifb \starting_note + .global voicegroup_\label + voicegroup_\label: + .else + .set voicegroup_\label, . - \starting_note * 0xC + .endif + .endm + + .macro keysplit label:req, starting_note + .ifb \starting_note + .global keysplit_\label + keysplit_\label: + .set _last_note, 0 + .else + .set keysplit_\label, . - \starting_note + .set _last_note, \starting_note + .endif + .set _last_split, 0 + .endm + + .macro split index:req, ending_note:req + .if \ending_note < _last_note + .if _last_split == 0 + .error "split's ending_note earlier than previous keysplit's starting_note" + .else + .error "split's ending_note earlier than previous split's ending_note" + .endif + .else + .rept \ending_note - _last_note + .byte \index + .endr + .endif + .set _last_note, \ending_note + .set _last_split, 1 + .endm diff --git a/asm/macros/map.inc b/asm/macros/map.inc index 74d2b5ff4214..56d738723809 100644 --- a/asm/macros/map.inc +++ b/asm/macros/map.inc @@ -2,8 +2,12 @@ @ Takes a MAP constant and outputs the map group and map number as separate bytes .macro map map_id:req + .ifdef \map_id .byte \map_id >> 8 @ map group .byte \map_id & 0xFF @ map num + .else + .error "undefined map (check for typos)" + .endif .endm @ Defines a map script. 'type' is any MAP_SCRIPT_* constant (see include/constants/map_scripts.h) diff --git a/audio_rules.mk b/audio_rules.mk index 3fce08ed3add..70d44664094c 100644 --- a/audio_rules.mk +++ b/audio_rules.mk @@ -20,16 +20,17 @@ $(MID_BUILDDIR)/%.o: $(MID_ASM_DIR)/%.s $(AS) $(ASFLAGS) -I sound -o $@ $< # Compressed cries -$(CRY_BIN_DIR)/%.bin: $(CRY_SUBDIR)/%.aif - $(AIF) $< $@ --compress +$(CRY_BIN_DIR)/%.bin: $(CRY_SUBDIR)/%.wav +# NOTE: If using ipatix's High Quality Audio Mixer, remove "--no-pad" below. + $(WAV2AGB) -b -c -l 1 --no-pad $< $@ # Uncompressed cries $(CRY_BIN_DIR)/uncomp_%.bin: $(CRY_SUBDIR)/uncomp_%.aif $(AIF) $< $@ # Uncompressed sounds -$(SOUND_BIN_DIR)/%.bin: sound/%.aif - $(AIF) $< $@ +$(SOUND_BIN_DIR)/%.bin: sound/%.wav + $(WAV2AGB) -b $< $@ # For each line in midi.cfg, we do some trickery to convert it into a make rule for the `.mid` file described on the line # Data following the colon in said file corresponds to arguments passed into mid2agb diff --git a/charmap.txt b/charmap.txt index 34fb683d0c98..dd2123f8f93b 100644 --- a/charmap.txt +++ b/charmap.txt @@ -379,7 +379,7 @@ B_LAST_ITEM = FD 16 B_LAST_ABILITY = FD 17 B_ATK_ABILITY = FD 18 B_DEF_ABILITY = FD 19 -B_SCR_ACTIVE_ABILITY = FD 1A +B_SCR_ABILITY = FD 1A B_EFF_ABILITY = FD 1B B_TRAINER1_CLASS = FD 1C B_TRAINER1_NAME = FD 1D @@ -424,8 +424,8 @@ B_TRAINER1_NAME_WITH_CLASS = FD 42 B_TRAINER2_NAME_WITH_CLASS = FD 43 B_PARTNER_NAME_WITH_CLASS = FD 44 B_ATK_TRAINER_NAME_WITH_CLASS = FD 45 -B_SCR_TEAM1 = FD 46 -B_SCR_TEAM2 = FD 47 +B_EFF_TEAM1 = FD 46 +B_EFF_TEAM2 = FD 47 @ indicates the end of a town/city name (before " TOWN" or " CITY") NAME_END = FC 00 @@ -459,6 +459,13 @@ JPN = FC 15 ENG = FC 16 PAUSE_MUSIC = FC 17 RESUME_MUSIC = FC 18 +SPEAKER = FC 19 + +@ Speaker names, the order must be matching with include/constants/speaker_names.h +NAME_NONE = 00 +NAME_MOM = 01 +NAME_PLAYER = 02 +NAME_COUNT = 03 @ fonts diff --git a/config.mk b/config.mk new file mode 100644 index 000000000000..7360c158efe2 --- /dev/null +++ b/config.mk @@ -0,0 +1,2 @@ +# Enable LTO when making a release build. Disable by setting to 0. +USE_LTO_ON_RELEASE ?= 1 diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 50a9b51dc763..56236540488c 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -100,26 +100,16 @@ gBattleAnimMove_WakeUpSlap:: end gBattleAnimMove_HammerArm:: - loadspritegfx ANIM_TAG_IMPACT - loadspritegfx ANIM_TAG_ROCKS - loadspritegfx ANIM_TAG_SLAM_HIT - monbg ANIM_TARGET - setalpha 12, 8 - playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 3, 0, 4 - delay 1 - createsprite gSlamHitSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 - delay 3 - setarg 7, 0 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, -8, ANIM_TARGET, 1 - playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 5, 1 - createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 32, 3, 4 - createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 8, 31, 2, 2 - createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -4, 28, 2, 3 - createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3 - createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, 0, 0, 5 - clearmonbg ANIM_TARGET + loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @punch + loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice + loadspritegfx ANIM_TAG_ECLIPSING_ORB @gray color + loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + createsprite gIceHammerPunchStompTemplate, ANIM_TARGET, 3, 0, -32, 15 + delay 19 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_SquishTarget, 2 + waitforvisualfinish blendoff end @@ -181,7 +171,7 @@ gBattleAnimMove_Brine:: playsewithpan SE_M_DIVE, -64 waitforvisualfinish delay 16 - createvisualtask AnimTask_WaterSpoutRain, 5 + createvisualtask AnimTask_BrineRain, 5 playsewithpan SE_M_SURF, +63 clearmonbg ANIM_DEF_PARTNER blendoff @@ -200,7 +190,7 @@ gBattleAnimMove_NaturalGift:: createvisualtask AnimTask_DragonDanceWaver, 5 playsewithpan SE_M_TELEPORT, -64 delay 8 - createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, 19456, 14, 0, 3 + createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB(0, 0, 19), 14, 0, 3 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 43 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 85 @@ -265,23 +255,23 @@ gBattleAnimMove_Tailwind:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 4, 4 createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 10 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 10, 2304, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 10, 2304, 96, 1 delay 12 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 90, 2048, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 90, 2048, 96, 1 delay 12 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 50, 2560, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 50, 2560, 96, 1 delay 12 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 20, 2304, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 20, 2304, 96, 1 delay 12 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 70, 1984, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 70, 1984, 96, 1 delay 12 - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0, 2816, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0, 2816, 96, 1 delay 10 - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 1 waitforvisualfinish stopsound call UnsetHighSpeedBg @@ -295,23 +285,23 @@ gBattleAnimGeneral_Tailwind:: playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER call SetHighSpeedBg setalpha 12, 8 - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 10, 2304, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 10, 2304, 96, 1 delay 12 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 90, 2048, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 90, 2048, 96, 1 delay 12 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 50, 2560, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 50, 2560, 96, 1 delay 12 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 20, 2304, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 20, 2304, 96, 1 delay 12 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 70, 1984, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 70, 1984, 96, 1 delay 12 - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0, 2816, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0, 2816, 96, 1 delay 10 - createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0 + createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 1 waitforvisualfinish stopsound call UnsetHighSpeedBg @@ -322,6 +312,7 @@ gBattleAnimGeneral_Tailwind:: gBattleAnimMove_Acupressure:: loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_SPARK_2 + playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER createsprite gAcupressureSpriteTemplate, ANIM_ATTACKER, 40, 0, -40, 40 waitforvisualfinish call ElectricityEffect @@ -375,33 +366,82 @@ gBattleAnimMove_UTurn:: gBattleAnimMove_CloseCombat:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET + monbg ANIM_DEF_PARTNER call SetHighSpeedBg createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 - createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 playsewithpan SE_M_COMET_PUNCH, +63 - delay 10 + delay 2 createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 - createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 playsewithpan SE_M_VITAL_THROW2, +63 - delay 10 + delay 2 createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 - createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 playsewithpan SE_M_MEGA_KICK2, +63 - delay 10 + delay 2 createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 - createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 playsewithpan SE_M_COMET_PUNCH, +63 - delay 10 + delay 2 createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 - createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 playsewithpan SE_M_VITAL_THROW2, +63 - delay 10 + delay 2 createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 - createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 7, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 playsewithpan SE_M_MEGA_KICK2, +63 - delay 10 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_VITAL_THROW2, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_MEGA_KICK2, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_VITAL_THROW2, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_MEGA_KICK2, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_VITAL_THROW2, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_MEGA_KICK2, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_VITAL_THROW2, +63 + delay 2 + createsprite gFistFootRandomPosSpriteTemplate, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 2, 0, 7, 1 + playsewithpan SE_M_MEGA_KICK2, +63 + delay 1 call UnsetHighSpeedBg - clearmonbg ANIM_TARGET + clearmonbg ANIM_DEF_PARTNER blendoff delay 1 setarg 7, 0x1000 @@ -617,9 +657,9 @@ gBattleAnimMove_PowerTrick:: loopsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET 0xa 0x3 createvisualtask AnimTask_UproarDistortion 0x2, 0x0 createsprite gPowerTrickSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 0, SOUND_PAN_TARGET, 0 - delay 0x10 + delay 16 createvisualtask AnimTask_UproarDistortion 0x2, 0x0 - delay 0x10 + delay 16 createvisualtask AnimTask_UproarDistortion 0x2, 0x0 waitforvisualfinish end @@ -687,7 +727,7 @@ gBattleAnimMove_MeFirst:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_FINGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 12, 12, 0x7FAF + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 12, 12, RGB(15, 29, 31) setalpha 11, 5 monbg_static ANIM_DEF_PARTNER splitbgprio_all @@ -848,7 +888,7 @@ gBattleAnimMove_LastResort:: waitbgfadein loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 4, 2, RGB_WHITE, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -930,6 +970,7 @@ gBattleAnimMove_HeartSwap:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_PINKVIO_ORB loadspritegfx ANIM_TAG_SPARKLE_2 + monbg ANIM_TARGET createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 8, RGB(31, 24, 26) createvisualtask AnimTask_HeartSwap, 3, ANIM_TARGET createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB_WHITE, 12, 3, 1 @@ -962,7 +1003,6 @@ gBattleAnimMove_HeartSwap:: createsprite gRedHeartCharmSpriteTemplate, ANIM_ATTACKER, 3, 20, 20 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER waitforvisualfinish - clearmonbg ANIM_ATTACKER clearmonbg ANIM_TARGET blendoff end @@ -1118,7 +1158,7 @@ gBattleAnimMove_FlareBlitz:: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 playsewithpan SE_M_COMET_PUNCH, +63 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_BLACK playsewithpan SE_M_COMET_PUNCH, +63 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 9 @@ -1179,7 +1219,7 @@ gBattleAnimMove_RockPolish:: setalpha 12, 8 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 3, 0, 12, RGB_BLACK waitforvisualfinish - loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 10, 7 + loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER, 10, 7 createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -10, 3 delay 1 createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, 24, -19 @@ -1217,7 +1257,7 @@ gBattleAnimMove_RockPolish:: createsprite gRockPolishStreakSpriteTemplate, ANIM_ATTACKER, 2, -21, -16 delay 2 waitforvisualfinish - playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -20, 9 createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, -10, -15 createsprite gRockPolishSparkleSpriteTemplate, ANIM_ATTACKER, 2, 1, 17 @@ -1295,32 +1335,39 @@ gBattleAnimMove_PoisonJab:: end gBattleAnimMove_DarkPulse:: - loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_PURPLE_RING monbg ANIM_TARGET fadetobg BG_DARK waitbgfadein - delay 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 - createvisualtask AnimTask_SpiteTargetShadow, 2 loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3 - delay 8 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 - delay 8 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 - delay 8 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 - delay 8 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 - delay 8 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 - delay 8 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1D09, 12 + createvisualtask AnimTask_SwayMon, ANIM_TARGET, 0, 6, 0x0800, 8, ANIM_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 4, 0, 12, RGB(30, 10, 13) + call DarkPulseParticle + call DarkPulseParticle + call DarkPulseParticle waitforvisualfinish + blendoff clearmonbg ANIM_TARGET - delay 1 restorebg waitbgfadein end +DarkPulseParticle: + createsprite gDarkPulseSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + createsprite gDarkPulseSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + createsprite gDarkPulseSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + createsprite gDarkPulseSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + createsprite gDarkPulseSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + createsprite gDarkPulseSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + createsprite gDarkPulseSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + createsprite gDarkPulseSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + return gBattleAnimMove_NightSlash:: loadspritegfx ANIM_TAG_SLASH @@ -1381,7 +1428,7 @@ gBattleAnimMove_AquaTail:: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gAquaTailKnockOffSpriteTemplate, ANIM_ATTACKER, 2, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, RGB_WHITE, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 createsprite gAquaTailHitSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -12, 10, 0, 3 @@ -1469,7 +1516,7 @@ gBattleAnimMove_XScissor:: playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -1482,19 +1529,19 @@ gBattleAnimMove_BugBuzz:: monbg ANIM_DEF_PARTNER call SetBugBg createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 29, -12, 0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -12, -29, 1 delay 16 createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 12, -29, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -29, -12, 0 delay 16 createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, -24, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, -24, 0 @@ -1546,7 +1593,7 @@ gBattleAnimMove_DragonRush:: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gDragonRushSpriteTemplate, ANIM_ATTACKER, 3, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, RGB_WHITE, 10, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 1 waitforvisualfinish @@ -1561,7 +1608,6 @@ gBattleAnimMove_DragonRush:: createsprite gRockFragmentSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -30, -18, 8, 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1 waitforvisualfinish - clearmonbg ANIM_DEF_PARTNER blendoff end @@ -1628,7 +1674,7 @@ gBattleAnimMove_VacuumWave:: setalpha 12, 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, -8, ANIM_TARGET, 2 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0, 0x7FFF, 3 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0, RGB_WHITE, 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish @@ -1683,7 +1729,7 @@ gBattleAnimMove_BraveBird:: loadspritegfx ANIM_TAG_BIRD call SetSkyBg monbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 16, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE delay 4 createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0 waitforvisualfinish @@ -1695,7 +1741,7 @@ gBattleAnimMove_BraveBird:: delay 20 createvisualtask AnimTask_AttackerFadeFromInvisible, 5, 1 delay 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 15, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 15, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATTACKER call UnsetSkyBg @@ -1706,7 +1752,11 @@ gBattleAnimMove_EarthPower:: loadspritegfx ANIM_TAG_FIRE_PLUME createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50 playsewithpan SE_M_EARTHQUAKE, SOUND_PAN_TARGET - delay 40 + delay 32 + fadetobg BG_FISSURE + waitbgfadeout + createvisualtask AnimTask_PositionFissureBgOnBattler, 5, ANIM_TARGET, 5, -1 + waitbgfadein loopsewithpan 145, SOUND_PAN_TARGET 11, 3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1 createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 @@ -1727,6 +1777,10 @@ gBattleAnimMove_EarthPower:: waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0, 0, 4 waitforvisualfinish + restorebg + waitbgfadeout + setarg 7, -1 + waitbgfadein end gBattleAnimMove_Switcheroo:: @@ -1925,40 +1979,30 @@ SnowSlide1: delay 2 return +@Credits to Skeli gBattleAnimMove_IceShard:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS - fadetobg BG_ICE - waitbgfadein - createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_BUBBLE_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 4, 4, 0, 10 - createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 70, 0, 42, 35 - createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 58, 0, 30, 35 - createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, -12, 0, 22, 40 - createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -20, 0, 0, 10, 40 - delay 5 - createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -30, 10, -12, 45 - createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -42, 10, -24, 45 - createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -20, 10, -36, 45 - createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, -10, -32, 10, -24, 45 - delay 5 - createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, 20, 22, 45 - createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, -2, 20, 10, 45 - createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 20, -2, 30 - createsprite gIceBeamInnerCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0, 8, 20, 10, 30 + loadspritegfx ANIM_TAG_IMPACT + createsprite gIceShardSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 delay 1 + createsprite gIceShardSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createsprite gIceShardSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gIceShardSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createsprite gIceShardSpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 4 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, -31, 0, 7, RGB(0, 20, 31) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 25, 1 - waitforvisualfinish - delay 20 call IceCrystalEffectShort createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) waitforvisualfinish - restorebg - waitbgfadein - clearmonbg ANIM_TARGET blendoff + clearmonbg ANIM_TARGET end gBattleAnimMove_ShadowClaw:: @@ -2028,7 +2072,7 @@ gBattleAnimMove_IceFang:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(12, 26, 31) delay 20 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0 @@ -2049,7 +2093,7 @@ gBattleAnimMove_IceFang:: delay 15 call IceCrystalEffectShort delay 5 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(12, 26, 31) waitforvisualfinish createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK waitforvisualfinish @@ -2064,7 +2108,7 @@ gBattleAnimMove_FireFang:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB_RED createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 0 createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 64 createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 128 @@ -2080,7 +2124,7 @@ gBattleAnimMove_FireFang:: delay 4 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 9, 0, RGB_RED waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -2094,7 +2138,7 @@ gBattleAnimMove_ShadowSneak:: loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x7, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 7, RGB_BLACK waitforvisualfinish playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 @@ -2102,9 +2146,9 @@ gBattleAnimMove_ShadowSneak:: waitforvisualfinish clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER - delay 0x1 + delay 1 createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 - delay 0x30 + delay 48 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 15, RGB_BLACK createsprite gShadowSneakImpactSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 call ShadowSneakMovement @@ -2116,13 +2160,13 @@ gBattleAnimMove_ShadowSneak:: call ShadowSneakMovement waitforvisualfinish visible ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x7, 0x0, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 7, 0, RGB_BLACK waitforvisualfinish end ShadowSneakMovement: playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x4 + delay 4 return gBattleAnimMove_MudBomb:: @@ -2184,8 +2228,8 @@ gBattleAnimMove_PsychoCut:: createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CROSS_IMPACT, 0, 9, 9, RGB_PURPLE createvisualtask AnimTask_SwayMon, ANIM_ATTACKER, 0, 6, 2048, 2, ANIM_ATTACKER createsprite gPsychoCutSpiralSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0, 0 - createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 0, 4, RGB_BLACK - createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 0, 10, RGB(20, 12, 23) + createvisualtask AnimTask_BlendBattleAnimPal, 1, F_PAL_BG, 2, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 1, F_PAL_ATTACKER, 2, 0, 10, RGB(20, 12, 23) delay 30 clearmonbg ANIM_ATK_PARTNER waitforvisualfinish @@ -2197,8 +2241,8 @@ gBattleAnimMove_PsychoCut:: waitforvisualfinish createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 - createvisualtask AnimTask_BlendBattleAnimPal, 1, 1, 2, 4, 0, RGB_BLACK - createvisualtask AnimTask_BlendBattleAnimPal, 1, 2, 2, 10, 0, RGB(20, 12, 23) + createvisualtask AnimTask_BlendBattleAnimPal, 1, F_PAL_BG, 2, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 1, F_PAL_ATTACKER, 2, 10, 0, RGB(20, 12, 23) clearmonbg ANIM_TARGET blendoff waitforvisualfinish @@ -2245,28 +2289,27 @@ gBattleAnimMove_MirrorShot:: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 10, RGB_WHITEALPHA createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(21, 21, 21) waitforvisualfinish - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 3 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 2 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 10, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 waitforvisualfinish - clearmonbg ANIM_ATTACKER blendoff end @@ -2301,7 +2344,7 @@ gBattleAnimMove_FlashCannon:: waitforvisualfinish playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createvisualtask AnimTask_Flash, 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 16, 0, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 16, 0, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -2349,12 +2392,12 @@ gBattleAnimMove_Defog:: playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER createsprite gLusterPurgeCircleSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 delay 20 - createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, -1 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, 2, 0, 16, -1 waitforvisualfinish waitforvisualfinish delay 16 - createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, -1 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -2366,7 +2409,7 @@ gBattleAnimGeneral_TrickRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_TRICK_ROOM waitbgfadein - delay 0x40 + delay 64 restorebg waitbgfadein blendoff @@ -2700,62 +2743,69 @@ gBattleAnimMove_LeafStorm:: end gBattleAnimMove_PowerWhip:: - loadspritegfx ANIM_TAG_WHIP_HIT + loadspritegfx ANIM_TAG_PUNISHMENT_BLADES + loadspritegfx ANIM_TAG_LEAF @green color + loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 10 delay 6 playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET - createsprite gVineWhipSpriteTemplate, ANIM_TARGET, 2, 0, 0 - delay 6 - call SetImpactBackground - createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + createsprite gSpinningVineSpriteTemplate, ANIM_ATTACKER, 2, -42, -25, 0, 0, 25 + createvisualtask AnimTask_IsTargetPlayerSide, 2 + jumpretfalse PowerWhipOnOpponent + goto PowerWhipOnPlayer +PowerWhipOnOpponent: + fadetobg BG_IMPACT_OPPONENT + goto PowerWhipContinue +PowerWhipOnPlayer: + fadetobg BG_IMPACT_PLAYER + goto PowerWhipContinue +PowerWhipContinue: + waitbgfadeout + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 + playsewithpan SE_BANG, SOUND_PAN_TARGET + waitforvisualfinish + delay 20 restorebg waitbgfadein + waitforvisualfinish end gBattleAnimMove_RockWrecker:: - jumpargeq 7, 1, RockWrecker_1 - fadetobg BG_ROCK_WRECKER - waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 5, -1024, 0, 1, -1 - goto RockWrecker_2 -RockWrecker_1: - fadetobg BG_ROCK_WRECKER - waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 5, -1024, 0, 0, -1 loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_REALLY_BIG_ROCK + loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_IMPACT - createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 - delay 3 + fadetobg BG_ROCK_WRECKER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0xF000, 0, 0, -1 + waitbgfadein + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 + delay 6 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + createsprite gContinentalCrushGrowingRockSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + delay 10 + loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER, 10, 3 + waitforvisualfinish playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - createsprite gRockBlastRockSpriteTemplate, ANIM_ATTACKER, 130, 16, 0, 0, 0, 25, (1 << 8) | 1 + createsprite gReallyBigRockBlastRockSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 25, 257 waitforvisualfinish createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 131, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 130, 0, 0, 20, 24, 14, 2 - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 8, 0, 40, 1 createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 130, 5, 0, -20, 24, 14, 1 createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 130, 0, 5, 20, -18, 14, 2 createsprite gRockFragmentSpriteTemplate, ANIM_TARGET, 130, -5, 0, -20, -18, 14, 2 + call OpposingExplosion2 waitforvisualfinish - call UnsetPsychicBg - end -RockWrecker_2: - loadspritegfx ANIM_TAG_ROCKS - loadspritegfx ANIM_TAG_IMPACT - createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 - delay 3 - playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - createsprite gRockBlastRockSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, 0, 0, 25, 257 - waitforvisualfinish - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 - playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET - createsprite gRockFragmentSpriteTemplate ANIM_TARGET, 2, 0, 0, 20, 24, 14, 2 - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 - createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 2, 5, 0, -20, 24, 14, 1 - createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 2, 0, 5, 20, -18, 14, 2 - createsprite gRockFragmentSpriteTemplate ANIM_ATTACKER, 2, -5, 0, -20, -18, 14, 2 waitforvisualfinish + blendoff call UnsetPsychicBg end @@ -2765,7 +2815,7 @@ gBattleAnimMove_CrossPoison:: monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_WHITE, 10, 0, 10 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 10, RGB_BLACK, 10 createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 waitforvisualfinish @@ -2964,10 +3014,10 @@ gBattleAnimMove_StoneEdge:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 @@ -3029,19 +3079,19 @@ gBattleAnimMove_Chatter:: loadspritegfx ANIM_TAG_MUSIC_NOTES monbg ANIM_DEF_PARTNER createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0x1d, -12, 0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 0xffe3, 1 delay 16 createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 12, 0xffe3, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0xffe3, -12, 0 delay 16 createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 0x1f, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0x18, 0xffe8, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 0xffe8, 0xffe8, 0 @@ -3070,10 +3120,10 @@ gBattleAnimMove_Judgment:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_ELECTRICITY - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUST, 0, 14, 14, 0 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HANDS_AND_FEET, 0, 10, 10, 0 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUST, 0, 14, 14, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HANDS_AND_FEET, 0, 10, 10, RGB_BLACK monbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 15, 32767 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 15, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 83, 1 createsprite gJudgmentBlackChargeTemplate, ANIM_TARGET, 1, 1, ANIM_TARGET @@ -3091,7 +3141,7 @@ gBattleAnimMove_Judgment:: call JudgmentInwardSpikes2 delay 5 call JudgmentInwardSpikes2 - delay 0x2F + delay 47 call JudgmentOutwardSpikes delay 5 call JudgmentOutwardSpikes2 @@ -3112,7 +3162,7 @@ gBattleAnimMove_Judgment:: delay 5 call JudgmentOutwardSpikes2 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 15, 0, 32767 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 15, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_TARGET end @@ -3286,16 +3336,11 @@ gBattleAnimMove_AquaJet:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_SPLASH loadspritegfx ANIM_TAG_SWEAT_BEAD - playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER - createsprite gDiveBallSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 + createvisualtask AnimTask_AttackerStretchAndDisappear, 2 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER waitforvisualfinish - playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER - createsprite gDiveWaterSplashSpriteTemplate, ANIM_ATTACKER, 3, 0 - call DiveSetUpWaterDroplets - call DiveSetUpWaterDroplets - call DiveSetUpWaterDroplets - call DiveSetUpWaterDroplets - call DiveSetUpWaterDroplets + delay 1 + createvisualtask AnimTask_SetAttackerInvisibleWaitForSignal, 2 loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_DEF_PARTNER @@ -3310,9 +3355,13 @@ gBattleAnimMove_AquaJet:: delay 12 call RisingWaterHitEffect waitforvisualfinish + createvisualtask AnimTask_ExtremeSpeedMonReappear, 2 + setarg 0x7, 0x1000 + waitforvisualfinish visible ANIM_ATTACKER clearmonbg ANIM_DEF_PARTNER blendoff + setarg 7, 0x1000 end gBattleAnimMove_AttackOrder:: @@ -3348,10 +3397,10 @@ gBattleAnimMove_AttackOrder:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 1, 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET delay 4 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 @@ -3487,8 +3536,8 @@ gBattleAnimMove_RoarOfTime:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_WATER_GUN - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, 0 - delay 0x20 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK + delay 32 monbg ANIM_ATK_PARTNER setalpha 0xc, 0x8 loopsewithpan 133, SOUND_PAN_ATTACKER 13 3 @@ -3496,11 +3545,11 @@ gBattleAnimMove_RoarOfTime:: waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 16, 0, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, -1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_WHITEALPHA createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL - delay 0x20 + delay 32 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 20, 1 playsewithpan 170, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 @@ -3520,7 +3569,7 @@ gBattleAnimMove_RoarOfTime:: playsewithpan 170, SOUND_PAN_TARGET createsprite gRoarOfTimeBombTemplate, ANIM_ATTACKER, 3, 0xffe8, 0x18, 1, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 16, 0, -1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_WHITEALPHA waitforvisualfinish end @@ -3529,7 +3578,7 @@ gBattleAnimMove_SpacialRend:: loadspritegfx ANIM_TAG_PINK_HEART_2 @ANIM_TAG_BERRY_EATEN monbg ANIM_ATK_PARTNER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 16, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK loopsewithpan 133, SOUND_PAN_ATTACKER 13 2 createsprite gSpacialRendBladesTemplate, ANIM_ATTACKER, 3, 0, 0, 0x38, 0 delay 2 @@ -3553,7 +3602,7 @@ gBattleAnimMove_SpacialRend:: waitforvisualfinish restorebg waitbgfadein - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 0, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 0, RGB_BLACK clearmonbg ANIM_ATK_PARTNER blendoff end @@ -3684,7 +3733,7 @@ gBattleAnimMove_SeedFlare:: loadspritegfx ANIM_TAG_FLYING_DIRT @heat wave animation monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 0, 12, 32767 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_WHITE waitforvisualfinish playsewithpan 133, SOUND_PAN_ATTACKER createsprite gSeedFlareGreenCirclesTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 16 @@ -3755,7 +3804,7 @@ gBattleAnimMove_SeedFlare:: delay 10 createsprite gSeedFlareGreenWavesTemplate, ANIM_ATTACKER, 0x28, 0x3c, 0xa00, 0x60, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 12, 0, 32767 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -3769,7 +3818,7 @@ gBattleAnimMove_OminousWind:: monbg ANIM_DEF_PARTNER @bankBG_over_partnerBG delay 0 - createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 0, 0, 0 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 0, 0, 0, RGB_BLACK delay 0 createvisualtask AnimTask_GetAttackerSide, 2 jumpargeq 7, 1, OminousWindFadeToBg @@ -3784,7 +3833,7 @@ OminousWindFadeToBg: goto OminousWindHit OminousWindHit: delay 0 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 4, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 4, 4, RGB_BLACK waitbgfadein createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 @@ -3815,7 +3864,7 @@ OminousWindHit: delay 0 restorebg waitbgfadeout - createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 0, 4, 0, RGB_BLACK setarg 7, -1 waitbgfadein end @@ -3937,7 +3986,7 @@ gBattleAnimMove_WideGuard:: createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x8, 0x18 delay 3 createsprite gWideGuardBlueConversionTemplate, ANIM_ATTACKER, 0x2, 0x18, 0x18 - delay 0x14 + delay 20 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET createvisualtask AnimTask_ConversionAlphaBlend, 5 waitforvisualfinish @@ -3947,7 +3996,7 @@ gBattleAnimMove_WideGuard:: gBattleAnimMove_GuardSplit:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3 call GuardSplitLaunch call GuardSplitLaunch @@ -3960,19 +4009,19 @@ gBattleAnimMove_GuardSplit:: call GuardSplitLaunch call GuardSplitLaunch waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish end GuardSplitLaunch: createsprite gGuardSwapOrbs1Template, ANIM_TARGET, 2, 0xfff4, 0x0 createsprite gGuardSwapOrbs2Template, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1E, 0x0 - delay 0x5 + delay 5 return gBattleAnimMove_PowerSplit:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_BLUEGREEN_ORB - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3 call PowerSplitLaunch call PowerSplitLaunch @@ -3985,7 +4034,7 @@ gBattleAnimMove_PowerSplit:: call PowerSplitLaunch call PowerSplitLaunch waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish end PowerSplitLaunch: @@ -4000,7 +4049,7 @@ gBattleAnimGeneral_WonderRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_WONDER_ROOM waitbgfadein - delay 0x40 + delay 64 restorebg waitbgfadein blendoff @@ -4120,16 +4169,16 @@ gBattleAnimMove_Autotomize:: playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x0 createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x1 - delay 0xc + delay 12 createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x2 createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x3 - delay 0xc + delay 12 createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x0 createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x1 - delay 0xc + delay 12 createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x2 createsprite gAutotomizeMetalShardsTemplate, ANIM_ATTACKER, 0x2, 0x0, 0x3 - delay 0x18 + delay 24 waitforvisualfinish stopsound clearmonbg ANIM_ATK_PARTNER @@ -4151,28 +4200,28 @@ gBattleAnimMove_RagePowder:: end RagePowderSprinkle: createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xffec, 0x55, 0x50, 0x0 - delay 0xc + delay 12 createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xfff6, 0xaa, 0x50, 0x0 - delay 0xc + delay 12 createsprite gRagePowderRedPowderTemplate, ANIM_ATTACKER, 0x2, 0x0, 0xfff1, 0x0, 0x50, 0x0 - delay 0xc + delay 12 return gBattleAnimMove_Telekinesis:: loadspritegfx ANIM_TAG_SPARKLE_4 @detect - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0x9, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 9, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0x1, 0x0, 0x9, 0x7fff - delay 0x12 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_WHITE + delay 18 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 0xd, 0x14, 0xffec waitforvisualfinish loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x3 createvisualtask AnimTask_SwayMon, 5, 1, 24, 208, 1, ANIM_TARGET waitforvisualfinish - delay 0xA - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x9, 0x0, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x7fff + delay 10 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 9, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_WHITE waitforvisualfinish end @@ -4182,7 +4231,7 @@ gBattleAnimGeneral_MagicRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_MAGIC_ROOM waitbgfadein - delay 0x40 + delay 64 restorebg waitbgfadein blendoff @@ -4325,20 +4374,20 @@ gBattleAnimMove_Synchronoise:: loadspritegfx ANIM_TAG_AIR_WAVE_2 @aero particles monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK @Darken waitforvisualfinish panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 - delay 0x1 + delay 1 createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 - delay 0x1 + delay 1 createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 - delay 0x25 + delay 37 panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 - delay 0x1 + delay 1 createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 - delay 0x1 + delay 1 createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0x0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 waitforvisualfinish loopsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET, 0x3, 0x5 @@ -4350,7 +4399,7 @@ gBattleAnimMove_Synchronoise:: createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0xff20, 0xffe0, 0x28 createsprite gSynchronoiseAeroWheelTemplate, ANIM_TARGET, 1, 0x0, 0xffef, 0x70, 0xff80, 0x28 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 @Darken + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK @Darken waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -4363,13 +4412,13 @@ gBattleAnimMove_ElectroBall:: setalpha 12, 8 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gGrowingChargeOrb2SpriteTemplate, ANIM_ATTACKER, 2, 0 - delay 0x19 + delay 25 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0x14 + delay 20 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0xF + delay 15 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0x6 + delay 6 loopsewithpan SE_M_CHARGE, 0xC, 0x6, 0x5 waitforvisualfinish createsprite gElectroBallCannonBallTemplate, ANIM_TARGET, 2, 16, 16, 8 @@ -4424,24 +4473,24 @@ gBattleAnimMove_FlameCharge:: loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x20, 0x6 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 6, 6, 3 call FlameChargeSwirl - delay 0x9 + delay 9 call FlameChargeSwirl - delay 0x9 + delay 9 call FlameChargeSwirl - delay 0x9 + delay 9 call FlameChargeSwirl - delay 0x9 + delay 9 call FlameChargeSwirl waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 5 - delay 0x3 + delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 6, 0, 8, 1 call FireSpreadEffect playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_ATTACKER waitforvisualfinish - delay 0x8 + delay 8 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x7 waitforvisualfinish clearmonbg ANIM_TARGET @@ -4454,14 +4503,14 @@ gBattleAnimMove_Coil:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 - delay 0x7 + delay 7 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x0, 0x2 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x8, 0x1, 0x2 - delay 0x7 + delay 7 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfff8, 0x1, 0x2 - delay 0x8 + delay 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x14 + delay 20 createvisualtask AnimTask_ShakeMon2, 131, ANIM_TARGET, 4, 0, 5, 1 createvisualtask AnimTask_StretchTargetUp, 0x3 playsewithpan SE_M_BIND, SOUND_PAN_TARGET @@ -4515,15 +4564,15 @@ gBattleAnimMove_FoulPlay:: monbg ANIM_TARGET setalpha 12, 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 - delay 0x6 + delay 6 createsprite gFoulPlayImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_VITAL_THROW SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0xa, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 10, 0, RGB_BLACK createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 - delay 0x8 + delay 8 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0xa, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 10, 0, RGB_BLACK createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 waitforvisualfinish clearmonbg ANIM_TARGET @@ -4537,12 +4586,12 @@ gBattleAnimMove_SimpleBeam:: loadspritegfx ANIM_TAG_THIN_RING @ring setalpha 8, 8 monbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_M_BUBBLE_BEAM, SOUND_PAN_ATTACKER call SimpleBeamsRegular call SimpleBeamsRegular - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB_WHITE createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 4, ANIM_TARGET call SimpleBeamWithRings call SimpleBeamWithRings @@ -4550,42 +4599,42 @@ gBattleAnimMove_SimpleBeam:: call SimpleBeamWithRings call SimpleBeamWithRings createsprite gSimpleBeamBrownRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 - delay 0x2 + delay 2 createsprite gSimpleBeamPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 - delay 0x2 + delay 2 stopsound waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x7FFF - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff end SimpleBeamsRegular: createsprite gSimpleBeamBrownTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xd, 0x0 - delay 0x2 + delay 2 createsprite gSimpleBeamPinkTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xd, 0x0 - delay 0x2 + delay 2 return SimpleBeamWithRings: createsprite gSimpleBeamBrownTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xd, 0x0 createsprite gSimpleBeamBrownRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 - delay 0x2 + delay 2 createsprite gSimpleBeamPinkTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xd, 0x0 createsprite gSimpleBeamPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1F, 0x8 - delay 0x2 + delay 2 return gBattleAnimMove_Entrainment:: createvisualtask AnimTask_TeeterDanceMovement, 5 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER - delay 0x18 + delay 24 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER - delay 0x18 + delay 24 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER - delay 0x18 + delay 24 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER - delay 0x18 + delay 24 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 31, 1 waitforvisualfinish @@ -4595,11 +4644,11 @@ gBattleAnimMove_AfterYou:: loadspritegfx ANIM_TAG_ANGER @rage loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color createvisualtask AnimTask_SwayMon, 5, 1, 15, 1536, 2, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gAfterYouGreenRageTemplate, ANIM_ATTACKER, 2, 0x0, 0xffec, 0xffe0 createsprite gAfterYouGreenRageTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xffe5 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER - delay 0x14 + delay 20 createsprite gAfterYouGreenRageTemplate, ANIM_ATTACKER, 2, 0x0, 0x14, 0xffe0 createsprite gAfterYouGreenRageTemplate, ANIM_ATTACKER, 2, 0x0, 0x23, 0xffe5 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER @@ -4639,29 +4688,29 @@ gBattleAnimMove_EchoedVoice:: call MetalSoundPlayNote waitforvisualfinish clearmonbg ANIM_DEF_PARTNER - delay 0x0 + delay 0 waitforvisualfinish end MetalSoundPlayNote: panse SE_M_UPROAR, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 createsprite gMetalSoundSpriteTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x1e, 0x0 - delay 0x2 + delay 2 return gBattleAnimMove_ChipAway:: loadspritegfx ANIM_TAG_IMPACT - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, RGB_WHITE waitforvisualfinish monbg ANIM_ATK_PARTNER setalpha 12, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 - delay 0x4 + delay 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_VITAL_THROW2 SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_WHITE waitforvisualfinish blendoff end @@ -4729,16 +4778,16 @@ gBattleAnimMove_QuickGuard:: loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles setalpha 12, 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 10, RGB_WHITE - delay 0x10 + delay 16 monbg ANIM_ATTACKER - createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xE, 0x0, 0x8, 0x0, 0x0 - createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xfff2, 0x0, 0x8, 0x0, 0x0 - delay 0x1 - createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xE, 0x0, 0x8, 0x0, 0x0 - createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xfff2, 0x0, 0x8, 0x0, 0x0 - delay 0x1 - createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xE, 0x0, 0x8, 0x0, 0x0 - createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 0xfff2, 0x0, 0x8, 0x0, 0x0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 14, 0, 8, ANIM_ATTACKER, 0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, -14, 0, 8, ANIM_ATTACKER, 0 + delay 1 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 14, 0, 8, ANIM_ATTACKER, 0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, -14, 0, 8, ANIM_ATTACKER, 0 + delay 1 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, 14, 0, 8, ANIM_ATTACKER, 0 + createsprite gQuickGuardArmImpactTemplate, ANIM_TARGET, 3, -14, 0, 8, ANIM_ATTACKER, 0 waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 0x0, 0xffe3 @up @@ -4814,24 +4863,25 @@ gBattleAnimMove_ShellSmash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_HANDS_AND_FEET - playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - createsprite gShellSmashRightShellSpriteTemplate, ANIM_ATTACKER, 2, 0xffd7, 0x0, 0x2, 0x333, 0x0, 10, 30 - createsprite gShellSmashLeftShellSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x0, 0x6, 0xfccd, 0x0, 10, 30 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + createsprite gShellSmashRightShellSpriteTemplate, ANIM_ATTACKER, 2, -41, 0, 2, 819, 0, 10, 30 + createsprite gShellSmashLeftShellSpriteTemplate, ANIM_ATTACKER, 2, 32, 0, 6, -819, 0, 10, 30 delay 10 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 - createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x8, 0x1, 0x0 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + invisible ANIM_ATTACKER + playsewithpan SE_M_STRENGTH, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 waitforvisualfinish - playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET - createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x18, 0xe, 0x2 - createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x5, 0x0, 0xffec, 0x18, 0xe, 0x1 - createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x5, 0x14, 0xffe8, 0xe, 0x2 - createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0xfffb, 0x0, 0xffec, 0xffe8, 0xe, 0x2 - createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0x1e, 0x12, 0x8, 0x2 - createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0xffee, 0x8, 0x2 - createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xffe2, 0x12, 0x8, 0x2 - createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xffe2, 0xffee, 0x8, 0x2 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 + visible ANIM_ATTACKER + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 20, 24, 14, 2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 5, 0, -20, 24, 14, 1 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0, 5, 20, -24, 14, 2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, -5, 0, -20, -24, 14, 2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0, -5, 30, 18, 8, 2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 30, -18, 8, 2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -30, 18, 8, 2 + createsprite gShellSmashPurpleRocksSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -30, -18, 8, 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 7, 1 waitforvisualfinish end @@ -4841,22 +4891,22 @@ gBattleAnimMove_HealPulse:: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB(13, 31, 12), 8 createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -16, 32, -3, 1 delay 3 createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 16, 32, -3, -1 delay 3 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB(13, 31, 12), 8 createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 32, 32, -3, 1 delay 3 createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -32, 32, -3, 1 delay 3 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB(13, 31, 12), 8 createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 0, 32, -3, 1 delay 3 createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1 delay 3 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 13293, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB(13, 31, 12), 8 createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, -8, 32, -3, 1 delay 3 createsprite gPresentHealParticleSpriteTemplate, ANIM_TARGET, 4, 24, 32, -3, 1 @@ -4870,7 +4920,7 @@ gBattleAnimMove_HealPulse:: gBattleAnimMove_Hex:: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x4C4A @;Deep purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 16, RGB(10, 2, 19) @;Deep purple waitforvisualfinish monbg ANIM_TARGET splitbgprio_all @@ -4879,12 +4929,12 @@ gBattleAnimMove_Hex:: createvisualtask AnimTask_PurpleFlamesOnTarget, 0x3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 2, 0, 37, 1 playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET - delay 0x20 + delay 32 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(10, 2, 19) @;Deep purple createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 4 waitforvisualfinish clearmonbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x10, 0x0, 0x4C4A @;Deep purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 16, 0, RGB(10, 2, 19) @;Deep purple waitforvisualfinish end @@ -4898,7 +4948,7 @@ SkyDropSetup: loadspritegfx ANIM_TAG_SMALL_BUBBLES @mist ball loadspritegfx ANIM_TAG_WHITE_FEATHER loadspritegfx ANIM_TAG_ROUND_SHADOW @fly - delay 0x0 + delay 0 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER createsprite gSkyDropFlyBallTemplate, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0 waitforvisualfinish @@ -4912,7 +4962,7 @@ SkyDropUnleash: setalpha 12, 8 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 - delay 0x7 + delay 7 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 11, 1 @@ -4941,17 +4991,17 @@ gBattleAnimMove_CircleThrow:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 1, 2 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 createsprite gCircleThrowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - delay 0x1 + delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -24, 0, 0, 4 createsprite gCircleThrowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 waitforvisualfinish - delay 0x3 + delay 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x7 - delay 0xb + delay 11 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0xa waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -5005,7 +5055,7 @@ gBattleAnimMove_Quash:: setalpha 12, 8 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createsprite gQuashArmHitTemplate, ANIM_TARGET, 3, 0x0, 0xffe0, 0xf - delay 0x13 + delay 19 playsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER createvisualtask AnimTask_SquishTarget, 0x2 waitforvisualfinish @@ -5099,29 +5149,29 @@ gBattleAnimMove_ReflectType:: setalpha 8, 8 playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET createsprite gReflectTypeBlueStringTemplate, ANIM_TARGET, 2, 0x0, 0xa - delay 0x4 + delay 4 createsprite gReflectTypeVioletStringTemplate, ANIM_TARGET, 2, 0x0, 0xfffe - delay 0x4 + delay 4 createsprite gReflectTypeWhiteStringTemplate, ANIM_TARGET, 2, 0x0, 0x16 waitforvisualfinish clearmonbg ANIM_TARGET - delay 0x1F + delay 31 monbg ANIM_ATTACKER playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER createsprite gReflectTypeWhiteRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gReflectTypePinkRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gReflectTypeVioletRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gReflectTypeBlueRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gReflectTypeWhiteRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gReflectTypePinkRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gReflectTypeVioletRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gReflectTypeBlueRingTemplate, ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATTACKER @@ -5133,17 +5183,17 @@ gBattleAnimMove_Retaliate:: monbg ANIM_DEF_PARTNER setalpha 9, 8 createvisualtask AnimTask_AttackerPunchWithTrace, 0x2, 0x7128, 0xa - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK waitforvisualfinish playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gGuillotineSpriteTemplate, ANIM_ATTACKER, 2, 0x0 createsprite gGuillotineSpriteTemplate, ANIM_ATTACKER, 2, 0x1 - delay 0x38 + delay 56 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x10, 0x43D + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 16, RGB(29, 1, 1) waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x043D + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB(29, 1, 1) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5153,26 +5203,26 @@ gBattleAnimMove_FinalGambit:: loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour loadspritegfx ANIM_TAG_EXPLOSION @explosion animation - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK @Darken waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE waitforvisualfinish playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER createsprite gFinalGambitBlueYawnTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x25 - delay 0x4 + delay 4 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 15, 1 createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_TARGET, 1 waitforvisualfinish monbg ANIM_TARGET - delay 0x1 + delay 1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gFinalGambitExplosionTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 waitforvisualfinish clearmonbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish end @@ -5191,14 +5241,14 @@ gBattleAnimMove_Inferno:: call SetImpactBackground loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 40, 4 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 94, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 9, RGB_RED call InfernoAnim call InfernoAnim call InfernoAnim call InfernoAnim call InfernoAnim call InfernoAnim - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 9, 0, RGB_RED restorebg waitbgfadein waitforvisualfinish @@ -5596,7 +5646,7 @@ gBattleAnimMove_StruggleBug:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, 0x0a1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, RGB(31, 16, 2) waitforvisualfinish createvisualtask AnimTask_FlailMovement, 2, ANIM_ATTACKER createsprite gMovementWavesSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 2 @@ -5607,7 +5657,7 @@ gBattleAnimMove_StruggleBug:: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0 createvisualtask AnimTask_ShakeTargetPartnerBasedOnMovePowerOrDmg, 2, FALSE, 1, 0x1e, 1, 0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, 0x0a1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB(31, 16, 2) delay 5 createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 delay 5 @@ -5619,7 +5669,7 @@ gBattleAnimMove_StruggleBug:: gBattleAnimMove_Bulldoze:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 - delay 0x8 + delay 8 goto gBattleAnimMove_Earthquake gBattleAnimMove_FrostBreath:: @@ -5641,19 +5691,19 @@ gBattleAnimMove_FrostBreath:: loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0xb, 0x3 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1 createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0x5, 0x0 - delay 0x1 + delay 1 createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0xfff6, 0xfff1 - delay 0x1 + delay 1 createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x19 - delay 0x1 + delay 1 createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0xf, 0x5 - delay 0x1 + delay 1 createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0xffe7, 0x0 - delay 0x1 + delay 1 createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 2, 0x1, 0x1e, 0x1e - delay 0x1 + delay 1 createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 2, 0x1, 0xffe5, 0x19 - delay 0x1 + delay 1 createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0x0, 0x8 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0x0, 0x0, 0x4 @@ -5666,23 +5716,23 @@ gBattleAnimMove_DragonTail:: loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SLAM_HIT, 0x2, 0xD, 0xD, 0x5CAE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SLAM_HIT, 2, 13, 13, RGB(14, 5, 23) waitforvisualfinish setalpha 12, 8 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 3, 0, 4 - delay 0x1 - createsprite gSlamHitSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 - delay 0x3 + delay 1 + createsprite gSlamHitSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 + delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -12, 10, 0, 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 call TailWhackDown - delay 0x3 + delay 3 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 0, 3, 6, 1 waitforvisualfinish - delay 0x5 + delay 5 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x6 waitforvisualfinish clearmonbg ANIM_TARGET @@ -5761,7 +5811,7 @@ gBattleAnimMove_WildCharge:: setalpha 12, 8 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 @electric circle - delay 0x1e + delay 30 waitforvisualfinish loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2 call ScreenFlash @@ -5771,9 +5821,9 @@ gBattleAnimMove_WildCharge:: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x6, 0x1, 0x0 waitforvisualfinish - delay 0xb + delay 11 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 - delay 0x6 + delay 6 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 16, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET @@ -5785,7 +5835,7 @@ gBattleAnimMove_WildCharge:: blendoff end ScreenFlash: - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB(30, 31, 1) return gBattleAnimMove_DrillRun:: @@ -5798,7 +5848,7 @@ gBattleAnimMove_DrillRun:: createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER waitforvisualfinish - delay 0x2 + delay 2 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x1 createsprite gHornHitSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0xc waitforvisualfinish @@ -5807,37 +5857,37 @@ gBattleAnimMove_DrillRun:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x2, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfffc, 0x3, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xfff8, 0xfffb, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x4, 0xfff4, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x0, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x5, 0x12, 0x1, 0x3 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffef, 0xc, 0x1, 0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffeb, 0xfff1, 0x1, 0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x8, 0xffe5, 0x1, 0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x0, 0x1, 0x2 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x2 waitforvisualfinish call UnsetPsychicBg @@ -5852,10 +5902,10 @@ gBattleAnimMove_DualChop:: setalpha 12, 8 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 - delay 0x6 + delay 6 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 - createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x0, 0x0, 0xa, 0x1, 0x3, 0x0 @left - createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, 0x0515, 0x0, 0x0, 0x0, 0xa, 0x1, 0x3, 0x0 @right + createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -32, 0, 0, 0, 10, 1, 3, 0 @left + createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, 1301, 0, 0, 0, 10, 1, 3, 0 @right waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gDualChopImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 @@ -5870,7 +5920,7 @@ gBattleAnimMove_HeartStamp:: monbg ANIM_TARGET loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3 createsprite gHeartStampSpinningHeartTemplate, ANIM_TARGET, 0, 0x0, 0x0, 0x1, 0x1e - delay 0x1E + delay 30 clearmonbg ANIM_TARGET playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 131, ANIM_TARGET, 4, 0, 5, 1 @@ -5904,16 +5954,16 @@ gBattleAnimMove_SacredSword:: setalpha 12, 8 playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 - delay 0x16 - createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, 0x2715, 0x2, 0x2, 0x7ff2, 0x10, 0x0, 0x0 + delay 22 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER - delay 0x1 + delay 1 monbg ANIM_TARGET playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSacredSwordBladesTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xFF00, 0xA createsprite gSacredSwordCutTemplate, ANIM_ATTACKER, 2, 0x28, 0xffe0, 0x0 - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -5928,7 +5978,7 @@ gBattleAnimMove_RazorShell:: createsprite gRazorShellTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x0, 25, 0 playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 1, 0x28, 0xffe0, 0x0 - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -5943,11 +5993,11 @@ gBattleAnimMove_HeatCrash:: setalpha 12, 8 playsewithpan SE_SUCCESS, SOUND_PAN_TARGET createsprite gHeatCrashEruptionRockTemplate, ANIM_ATTACKER, 3, 0x0, 0xffe0, 0xf - delay 0x13 + delay 19 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, -8, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 4, 9, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - delay 0x5 + delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, -8, ANIM_TARGET, 1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 5, 1 @@ -5977,17 +6027,17 @@ gBattleAnimMove_LeafTornado:: end LeafTornadoVortex: createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x1 - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x1 - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x1 - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x1 - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x1 - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x1 - delay 0x2 + delay 2 return gBattleAnimMove_Steamroller:: @@ -6031,26 +6081,26 @@ gBattleAnimMove_CottonGuard:: end CottonSporesSpiralInward: createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0x28, 0xfff6, 0xd - delay 0x3 + delay 3 createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0xffdd, 0xfff6, 0xd - delay 0x3 + delay 3 createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0xf, 0xffd8, 0xd - delay 0x3 + delay 3 createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xffe0, 0xd - delay 0x3 + delay 3 createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0x19, 0xffec, 0xd - delay 0x3 + delay 3 createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0xd - delay 0x3 + delay 3 createsprite gCottonGuardSporeTemplate, ANIM_ATTACKER, 2, 0x5, 0xffd8, 0xd - delay 0x3 + delay 3 return gBattleAnimMove_NightDaze:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color loadspritegfx ANIM_TAG_RED_ORB @circles - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_ORB, SOUND_PAN_ATTACKER createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 @@ -6062,25 +6112,25 @@ gBattleAnimMove_NightDaze:: createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0xa0 createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0x0 createsprite gNightDazeVioletCirclesTemplate, ANIM_TARGET, 2, 0xe0 - delay 0x1 + delay 1 createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 - delay 0x1 + delay 1 createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 - delay 0xF + delay 15 createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 - delay 0x1 + delay 1 createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 - delay 0x1 + delay 1 createsprite gNightDazeVioletRingsTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 31, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x2002 - delay 0x6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(2, 0, 8) + delay 6 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x2002 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(2, 0, 8) waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish end @@ -6134,15 +6184,15 @@ gBattleAnimMove_Hurricane:: playsewithpan SE_M_GUST, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 64, 1 call HurricaneGust - delay 0xA + delay 10 call HurricaneGust - delay 0xA + delay 10 call HurricaneGust - delay 0xA + delay 10 call HurricaneGust - delay 0xA + delay 10 call HurricaneGust - delay 0xA + delay 10 call HurricaneGust waitforvisualfinish stopsound @@ -6166,7 +6216,7 @@ gBattleAnimMove_HeadCharge:: createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER waitforvisualfinish - delay 0x2 + delay 2 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x1 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 2, 0, 4, 1 @@ -6187,13 +6237,13 @@ gBattleAnimMove_GearGrind:: playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x0, 0x333, 0x333, 0xa createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x0, 0xfccd, 0xfccd, 0xa - delay 0xa + delay 10 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 5, 2 waitforvisualfinish createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x0, 0xfccd, 0x333, 0xa createsprite gGearGrindTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x0, 0x333, 0xfccd, 0xa - delay 0xa + delay 10 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 8, 4, 2 waitforvisualfinish @@ -6208,64 +6258,64 @@ gBattleAnimMove_SearingShot:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_WARM_ROCK @eruption - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ELECTRIC_ORBS, 0x0, 0xC, 0xC, 0x0E3E @Orange - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_WARM_ROCK, 0x0, 0xB, 0xB, 0x01BE @Orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 12, 12, RGB(30, 17, 3) @Orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WARM_ROCK, 0, 11, 11, RGB(30, 13, 0) @Orange monbg ANIM_ATTACKER setalpha 8, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 60, 2, 12 - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, RGB_RED playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0x1e + delay 30 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0x1e + delay 30 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gSearingShotRedChargeTemplate, ANIM_ATTACKER, 2, 0x0 - delay 0x19 + delay 25 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0x14 + delay 20 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0xf + delay 15 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x1e, 0x19, 0xffec createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x20, 0x1e, 0x19, 0xffec createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x40, 0x1e, 0x19, 0xffec - delay 0x2 + delay 2 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x60, 0x1e, 0x19, 0xffec createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x80, 0x1e, 0x19, 0xffec - delay 0x2 + delay 2 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xa0, 0x1e, 0x19, 0xffec createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xa0, 0x1e, 0x19, 0xffec - delay 0x2 + delay 2 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xe0, 0x1e, 0x19, 0xffec - delay 0xF + delay 15 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x1e, 0x19, 0x0 - delay 0x2 + delay 2 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x20, 0x1e, 0x19, 0x0 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x40, 0x1e, 0x19, 0x0 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x60, 0x1e, 0x19, 0x0 - delay 0x2 + delay 2 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 2, 0x1, 0x80, 0x1e, 0x19, 0x0 - delay 0x2 + delay 2 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xa0, 0x1e, 0x19, 0x0 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xa0, 0x1e, 0x19, 0x0 - delay 0x2 + delay 2 createsprite gSearingShotEruptionRockTemplate, ANIM_ATTACKER, 66, 0x1, 0xe0, 0x1e, 0x19, 0x0 - delay 0x15 + delay 21 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_RED clearmonbg ANIM_ATTACKER fadetobg BG_FIRE waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 0x5, 0xA00, 0x0, 0x1, 0xffff waitbgfadein - delay 0x1E + delay 30 monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ADJACENT, 0x2, 0x0, 0x9, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ADJACENT, 2, 0, 9, RGB_RED playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 27, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 27, 1 @@ -6277,13 +6327,13 @@ gBattleAnimMove_SearingShot:: createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, 5, 10, 0x1, 0x1E, ANIM_DEF_PARTNER createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, -5, -5, 0x1, 0x1E, ANIM_ATK_PARTNER createsprite gSearingShotEruptionImpactTemplate, ANIM_TARGET, 3, 5, 10, 0x1, 0x1E, ANIM_ATK_PARTNER - delay 0x1E + delay 30 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ADJACENT, 0x2, 0x9, 0x0, 0x1F - delay 0x1E + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ADJACENT, 2, 9, 0, RGB_RED + delay 30 call UnsetPsychicBg - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 0, RGB_BLACK clearmonbg ANIM_ATK_PARTNER blendoff end @@ -6303,40 +6353,40 @@ TechnoBlastNormal: loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0xffec, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteChargeTemplate, ANIM_ATTACKER, 2, 0x0 call TechnoBlastWhiteCircles call TechnoBlastWhiteCircles createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0xffec, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0x10 - delay 0x2 + delay 2 waitforvisualfinish playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gTechnoBlastWhiteBlastTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 @@ -6352,47 +6402,47 @@ TechnoBlastNormal: playsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 createsprite gTechnoBlastWhiteSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER end TechnoBlastWhiteCircles: createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x1e, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x14, 0xffe2, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffec, 0xffe2, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x14, 0x1e, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0xffec, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gTechnoBlastWhiteCircleTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0x10 - delay 0x2 + delay 2 return TechnoBlastElectric: @@ -6403,26 +6453,26 @@ TechnoBlastElectric: loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8 createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 waitforvisualfinish playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gTechnoBlastYellowBlastTemplate, ANIM_TARGET, 3, 0xa, 0x0, 0x0, 0x0, 0x1e, 0x0 @@ -6440,20 +6490,20 @@ TechnoBlastElectric: createsprite gTechnoBlastYellowSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x5, 0x1 - delay 0x2 + delay 2 createsprite gTechnoBlastYellowSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xf, 0x14, 0x5, 0x2 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastYellowSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x19, 0x0, 0x5, 0x1 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 - delay 0x2 + delay 2 createsprite gTechnoBlastYellowSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x2, 0xfff8, 0x5, 0x0 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER @@ -6461,7 +6511,7 @@ TechnoBlastElectric: TechnoBlastCharging1: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 return @@ -6469,7 +6519,7 @@ TechnoBlastCharging2: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 return @@ -6482,79 +6532,79 @@ TechnoBlastWater: loadspritegfx ANIM_TAG_BUBBLE @bubbles monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB(1, 0, 0) waitforvisualfinish createsprite gTechnoBlastBlueChargeTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 waitforvisualfinish @@ -6574,20 +6624,20 @@ TechnoBlastWater: createsprite gTechnoBlastBlueSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x1 createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x1 - delay 0x2 + delay 2 createsprite gTechnoBlastBlueSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x1 createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x1 - delay 0x2 + delay 2 createsprite gTechnoBlastBlueSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x1 createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x1 - delay 0x2 + delay 2 createsprite gTechnoBlastBlueSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x1 createsprite gTechnoBlastBlueBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER @@ -6603,10 +6653,10 @@ TechnoBlastFire: loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish createsprite gTechnoBlastRedChargeTemplate, ANIM_ATTACKER, 2, 0x0 - delay 0x5 + delay 5 call TechnoBlastFireSpiral call TechnoBlastFireSpiral call TechnoBlastFireSpiral @@ -6632,14 +6682,14 @@ TechnoBlastFire: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 - delay 0x2 + delay 2 createsprite gTechnoBlastRedSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastRedSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastRedSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER @@ -6647,25 +6697,25 @@ TechnoBlastFire: TechnoBlastFireSpiral: createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 return TechnoBlastIce: @@ -6676,22 +6726,22 @@ TechnoBlastIce: loadspritegfx ANIM_TAG_SPARK_2 @blast particles loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish createsprite gTechnoBlastIceChargeTemplate, ANIM_ATTACKER, 2, 0x0 - delay 0x5 + delay 5 call TechnoBlastIceChargeParticles call TechnoBlastIceChargeParticles call TechnoBlastIceChargeParticles createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xfff6, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xa, 0x14, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfffb, 0xa, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0x11, 0xfff4, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET waitforvisualfinish @@ -6710,45 +6760,45 @@ TechnoBlastIce: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 createsprite gTechnoBlastIceSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x1, 0x0 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastIceSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastIceSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 - delay 0x2 + delay 2 createsprite gTechnoBlastIceSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0x14, 0x2, 0x0 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER end TechnoBlastIceChargeParticles: createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xfff6, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xa, 0x14, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfffb, 0xa, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0x11, 0xfff4, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xf, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gTechnoBlastIceCrystalsTemplate, ANIM_ATTACKER, 2, 0x14, 0x2, 0x0, 0x2 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 return gBattleAnimMove_RelicSong:: @@ -6761,55 +6811,55 @@ gBattleAnimMove_RelicSong:: waitforvisualfinish createvisualtask SoundTask_PlayCryWithEcho, 2, FALSE createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x7, 0x0, 0xc - delay 0x5 + delay 5 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x6, 0x1, 0xc - delay 0x5 + delay 5 createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xc, 0xffe3, 0x1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe3, 0xfff4, 0x0 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x2, 0xc - delay 0x5 + delay 5 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x2, 0x3, 0xc - delay 0x5 + delay 5 createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x18, 0xffe8, 0x1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0xffe8, 0x0 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x3, 0x0, 0xc - delay 0x5 + delay 5 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x2, 0x1, 0xc - delay 0x5 + delay 5 createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x5, 0x2, 0xc - delay 0x5 + delay 5 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x6, 0x3, 0xc - delay 0x5 + delay 5 createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xc, 0xffe3, 0x1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe3, 0xfff4, 0x0 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x2, 0x0, 0xc - delay 0x5 + delay 5 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x2, 0x1, 0xc - delay 0x5 + delay 5 createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x18, 0xffe8, 0x1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0xffe8, 0x0 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x2, 0xc - delay 0x5 + delay 5 createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x5, 0x3, 0xc - delay 0x5 + delay 5 createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 waitforvisualfinish @@ -6817,13 +6867,13 @@ gBattleAnimMove_RelicSong:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 - delay 0x5 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 + delay 5 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x5 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 + delay 5 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x5 + delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish @@ -6840,21 +6890,21 @@ gBattleAnimMove_SecretSword:: monbg ANIM_ATTACKER setalpha 12, 8 playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 16, RGB_BLACK createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 - delay 0x16 - createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, 0x2715, 0x2, 0x2, 0x7ff2, 0x10, 0x0, 0x0 + delay 22 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER - delay 0x1 + delay 1 monbg ANIM_TARGET playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSecretSwordBladesTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xFF00, 0xA createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0xffe0, 0x0 - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x10, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 16, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -6883,9 +6933,9 @@ gBattleAnimMove_Glaciate:: createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x50, 0x0, 0x4b createsprite gGlaciateSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x48, 0x1, 0x4b waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 0x2, 0x0, 0xA, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 2, 0, 10, RGB_WHITE call IceCrystalEffectLong - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 0x2, 0xA, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 2, 10, 0, RGB_WHITE waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER @@ -6899,38 +6949,38 @@ gBattleAnimMove_BoltStrike:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @Electric Circle monbg ANIM_ATTACKER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, RGB(30, 31, 1) createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 64, 0, 2 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0xc + delay 12 createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATTACKER playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 0x8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 - delay 0xA + delay 10 fadetobg BG_BOLT_STRIKE waitbgfadeout waitforvisualfinish monbg ANIM_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 - delay 0x6 + delay 6 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(30, 31, 1) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 32, 1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET call ElectricityEffect createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB(30, 31, 1) playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET call ElectricityEffect waitforvisualfinish clearmonbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(30, 31, 1) call UnsetPsychicBg - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 0, RGB_BLACK blendoff waitforvisualfinish end @@ -6938,31 +6988,31 @@ gBattleAnimMove_BoltStrike:: gBattleAnimMove_BlueFlare:: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire loadspritegfx ANIM_TAG_METAL_BITS @Blue Flare Colour - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 16, RGB_BLACK loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x7, 0x9 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe0, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xffea, 0x10 - delay 0x2 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x1, 0x0, 0x9, 0x1F + delay 2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 9, RGB_RED createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x1e, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1c, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffed, 0x13, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffe5, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffee, 0xffee, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe7, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x11, 0xffef, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x17, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gBlueFlareFlameJabTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0x10, 0x10 waitforvisualfinish playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET @@ -6976,24 +7026,24 @@ gBattleAnimMove_BlueFlare:: playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER call BlueFlareFlameSpreadEffect waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x0, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x1, 0x9, 0x0, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 9, 0, RGB_RED call UnsetPsychicBg waitforvisualfinish end BlueFlareFireSpin: createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x1 - delay 0x2 + delay 2 createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x1 - delay 0x2 + delay 2 createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x1 - delay 0x2 + delay 2 createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x1 - delay 0x2 + delay 2 createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x1 - delay 0x2 + delay 2 createsprite gBlueFlareFlameSwirlTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x1 - delay 0x2 + delay 2 return BlueFlareFlameSpreadEffect: createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x0, 0xb0, 0x28 @@ -7007,11 +7057,11 @@ BlueFlareFlameSpreadEffect: gBattleAnimMove_FieryDance:: loadspritegfx ANIM_TAG_SMALL_EMBER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xc, 0x14be + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB(30, 5, 5) waitforvisualfinish playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 64, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x0, 0x9, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 9, RGB_RED call FireSpinEffect call FireSpinEffect call FireSpinEffect @@ -7020,8 +7070,8 @@ gBattleAnimMove_FieryDance:: call FireSpinEffect call FireSpinEffect waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x9, 0x0, 0x1f - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xc, 0x0, 0x14be + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB(30, 5, 5) waitforvisualfinish end @@ -7034,15 +7084,15 @@ gBattleAnimMove_FreezeShock:: FreezeShockCharge: createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATTACKER, 2, 16 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x0, 0xf, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 15, RGB_WHITE createsprite gFreezeShockCircleTemplate, ANIM_ATTACKER, 2 @electric circle - delay 0x14 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xf, 0x0, 0x7fff + delay 20 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 15, 0, RGB_WHITE waitforvisualfinish end FreezeShockAttack: loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0x5, 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK monbg ANIM_TARGET waitforvisualfinish playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER @@ -7057,12 +7107,12 @@ FreezeShockAttack: createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 - delay 0xf + delay 15 waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 0x13 call ElectricityEffect waitforvisualfinish clearmonbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_BLACK waitforvisualfinish end @@ -7075,23 +7125,23 @@ gBattleAnimMove_IceBurn:: waitforvisualfinish end IceBurnCharge: - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0x4, 0x3 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x8, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 8, 0, RGB_BLACK createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATTACKER, 2, 16 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x0, 0xf, 0x7fff - delay 0x14 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xf, 0x0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 15, RGB_WHITE + delay 20 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 15, 0, RGB_WHITE waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish end IceBurnUnleash: monbg ANIM_TARGET fadetobg BG_ICE waitbgfadeout - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB_WHITE createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x68, 0x0, 0x4b @@ -7108,25 +7158,25 @@ IceBurnUnleash: createsprite gIceBurnSmokeTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x48, 0x1, 0x4b call FireSpreadEffect playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0x14, 0x2, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB_WHITE waitforvisualfinish restorebg clearmonbg ANIM_TARGET @@ -7140,19 +7190,19 @@ gBattleAnimMove_Snarl:: fadetobg BG_DARK waitbgfadeout createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1 - delay 0x10 + delay 16 createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xc, 0xffe3, 0x1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe3, 0xfff4, 0x0 - delay 0x10 + delay 16 createvisualtask AnimTask_UproarDistortion, 0x2, 0x0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x18, 0xffe8, 0x1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0xffe8, 0x0 @@ -7161,13 +7211,13 @@ gBattleAnimMove_Snarl:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 - delay 0x4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish @@ -7183,17 +7233,17 @@ gBattleAnimMove_IcicleCrash:: monbg ANIM_DEF_PARTNER createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xfffb, 0x0, 0xfffb, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x6, 0x1 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x13, 0x0, 0xa, 0x01 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xffe9, 0x0, 0xfff6, 0x1 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 50, 1 - delay 0x2 + delay 2 call LaunchIcicleCrashSpear call LaunchIcicleCrashSpear waitforvisualfinish @@ -7204,28 +7254,28 @@ gBattleAnimMove_IcicleCrash:: LaunchIcicleCrashSpear: createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x1c, 0x0, 0xa, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xfff6, 0x0, 0xfffb, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x18, 0x0, 0xa, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xffe0, 0x0, 0xfff6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gIcicleCrashSpearTemplate, ANIM_TARGET, 2, 0x1e, 0x0, 0xa, 0x0 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x2 + delay 2 return gBattleAnimMove_VCreate:: @@ -7234,13 +7284,13 @@ gBattleAnimMove_VCreate:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color loadspritegfx ANIM_TAG_ECLIPSING_ORB @defense curl animation monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @Darken + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK @Darken createsprite gVCreateRedOrbTemplate, ANIM_ATTACKER, 2, 0x0, 0x11, 0x0, 0x1 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gVCreateRedRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, RGB_RED playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET call VCreateFlames call VCreateFlames @@ -7266,21 +7316,21 @@ gBattleAnimMove_VCreate:: waitbgfadein playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -24, 8, 23, 10, 40, 10 - delay 0x23 + delay 35 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 50, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB_RED playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, 0x1, 0x1 waitforvisualfinish @@ -7290,20 +7340,20 @@ gBattleAnimMove_VCreate:: waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x1f - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x1f - delay 0x2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB_RED + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER call UnsetPsychicBg - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0xffff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 0, RGB_WHITEALPHA waitforvisualfinish end VCreateFlames: createsprite gVCreateFlameTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x16, 0xFFEA, 0x10 @upperright createsprite gVCreateFlameTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFEE, 0xFFEE, 0x10 @upperleft - delay 0x3 + delay 3 return gBattleAnimMove_FusionFlare:: @@ -7313,30 +7363,30 @@ gBattleAnimMove_FusionFlare:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @flame palette loadspritegfx ANIM_TAG_SMALL_BUBBLES @particles loadspritegfx ANIM_TAG_THIN_RING @ring - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SMALL_BUBBLES, 0x0, 0xD, 0xD, 0x015B @Reddish Orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SMALL_BUBBLES, 0, 13, 13, RGB(27, 10, 0) @Reddish Orange monbg ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call FusionFlareBuff - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x8, 0x1, 0x0 - delay 0x8 + delay 8 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gFusionFlareRedBallUpTemplate, ANIM_ATTACKER, 2 - delay 0x20 + delay 32 createsprite gFusionFlareRedBallTemplate, ANIM_ATTACKER, 3, 0x0, 0xffA0, 0x2F createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x14, 0x64, 0x10, 0x2, 0xa, 0x23, 0x1 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0xc8, 0x50, 0x8, 0x1, 0x28, 0x14, 0x0 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x50, 0x3c, 0xa, 0x3, 0x14, 0x32, 0x0 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x8c, 0x64, 0x10, 0x1, 0x14, 0x1e, 0x1 - delay 0x29 + delay 41 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 11, RGB_RED - delay 0x5 + delay 5 createsprite gFusionFlareRedRingTemplate, ANIM_ATTACKER, 3, 0x1, 0x1, 0x1, 0x1, 0x1F, 0x8 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x14, 0x64, 0x10, 0x2, 0xa, 0x23, 0x1 @@ -7344,23 +7394,23 @@ gBattleAnimMove_FusionFlare:: createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x50, 0x3c, 0xa, 0x3, 0x14, 0x32, 0x0 createsprite gFusionFlareRedBubblesTemplate, ANIM_ATTACKER, 66, 0x8c, 0x64, 0x10, 0x1, 0x14, 0x1e, 0x1 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 2, 16 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff end FusionFlareBuff: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return @@ -7368,16 +7418,16 @@ gBattleAnimMove_FusionBolt:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0x0, 0xC, 0xC, 0x7960 @Blue Electricity - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x0, 0x0, 0xE, 0x0 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0, 12, 12, RGB(0, 11, 30) @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 12, 12, RGB(0, 11, 30) @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, RGB(0, 11, 30) @Blue Electricity + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 14, RGB_BLACK waitforvisualfinish createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER invisible ANIM_ATTACKER waitforvisualfinish - delay 0x8 + delay 8 createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x0 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER waitforvisualfinish @@ -7392,21 +7442,21 @@ gBattleAnimMove_FusionBolt:: waitforvisualfinish createsprite gFusionBoltBallTemplate, ANIM_TARGET, 2, 0x10 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER - delay 0x8 + delay 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x10, 0x10 - delay 0x2 + delay 2 createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0xfff0, 0xfff0 - delay 0x8 + delay 8 createvisualtask AnimTask_VoltTackleAttackerReappear, 0x5 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 9, 1 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x10 - delay 0x2 + delay 2 createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0, 0xfff0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0xE, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 14, 0, RGB_BLACK waitforvisualfinish end @@ -7418,27 +7468,27 @@ gBattleAnimMove_FlyingPress:: playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish - delay 0xF + delay 15 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 - delay 0x2 + delay 2 createvisualtask AnimTask_SquishTarget, 0x2 - delay 0x5 + delay 5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0x8, 0x8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0xfff8, 0xfff8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0x8, 0xfff8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0xfff8, 0x8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0x8, 0x8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0xfff8, 0xfff8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0x8, 0xfff8, 0x1, 0x0 - delay 0x2 + delay 2 createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 0, 0xfff8, 0x8, 0x1, 0x0 waitforvisualfinish blendoff @@ -7450,26 +7500,26 @@ gBattleAnimMove_MatBlock:: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER setalpha 16, 0 - delay 0x0 + delay 0 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x18 createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0x18 - delay 0x3 + delay 3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x8 createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0x8 - delay 0x3 + delay 3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xfff8 createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0xfff8 - delay 0x3 + delay 3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xffe8 createsprite gMatBlockGreenConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0xffe8 - delay 0x14 + delay 20 createvisualtask AnimTask_ConversionAlphaBlend, 0x5 waitforvisualfinish - delay 0x1 + delay 1 clearmonbg ANIM_ATK_PARTNER blendoff end @@ -7482,23 +7532,23 @@ gBattleAnimMove_Belch:: setalpha 12, 8 playsewithpan SE_SUCCESS, SOUND_PAN_ATTACKER createsprite gBelchBerryTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff8, 0xfff8, 0xfff8, 0x14, 0xffe0 - delay 0x13 + delay 19 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 20, 1 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, 0x1, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0x18, 0x1, 0x1 waitforvisualfinish @@ -7510,7 +7560,7 @@ gBattleAnimMove_Rototiller:: loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_DIRT_MOUND loadspritegfx ANIM_TAG_GREEN_SPARKLE - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x112C + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB(12, 9, 4) waitforvisualfinish createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0x0, 0x0, 0xb4 createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0x0, 0x1, 0xb4 @@ -7521,7 +7571,7 @@ gBattleAnimMove_Rototiller:: call DigThrowDirt call DigThrowDirt waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x112C + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB(12, 9, 4) waitforvisualfinish end @@ -7738,9 +7788,9 @@ gBattleAnimMove_ParabolicCharge:: playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 16, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 16, 16, RGB_BLACK delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 0, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 0, 0, RGB_BLACK ParabolicChargeHeal: waitforvisualfinish unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @@ -7769,19 +7819,19 @@ ParabolicChargeDouble: createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 6, 18, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATK_PARTNER, 0, 6, 18, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 16, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_ADJACENT, 0, 16, 16, RGB_BLACK delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_ADJACENT, 0, 0, 0, RGB_BLACK goto ParabolicChargeHeal; gBattleAnimMove_ForestsCurse:: loadspritegfx ANIM_TAG_ROOTS @frenzy plant loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse monbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK waitforvisualfinish playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x8, 0x02E3 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 8, RGB(3, 23, 0) createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x64, 0x64, 0x8, 0x1, 0x14, 0x28, 0x0 createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0x14, 0x64, 0x10, 0x2, 0xa, 0x23, 0x1 createsprite gForestsCurseIngrainTemplate, ANIM_ATTACKER, 66, 0xc8, 0x50, 0x8, 0x1, 0x28, 0x14, 0x0 @@ -7805,9 +7855,9 @@ gBattleAnimMove_ForestsCurse:: createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 14, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x8, 0x0, 0x02E3 - delay 0x3 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 8, 0, RGB(3, 23, 0) + delay 3 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -7820,23 +7870,23 @@ gBattleAnimMove_PetalBlizzard:: splitbgprio ANIM_TARGET playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 120, 70, 5, 70, 30 - delay 0x1 + delay 1 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0x6, 0x3c, 0x19 - delay 0x1 + delay 1 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x3c, 0x7, 0x3c, 0x1e createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x73, 0x37, 0xA, 0x3c, 0x1e - delay 0x3 + delay 3 createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x64, 0x32, 0x4, 0x32, 0x1A - delay 0x1 + delay 1 createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x69, 0x19, 0x8, 0x3c, 0x14 - delay 0x1 + delay 1 createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x73, 0x28, 0xA, 0x30, 0x1E - delay 0x3 + delay 3 createsprite gPetalBlizzardTwister1Template, ANIM_TARGET, 2, 0x78, 0x1E, 0x6, 0x2d, 0x19 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x73, 0x23, 0xA, 0x3c, 0x1e - delay 0x3 + delay 3 createsprite gPetalBlizzardTwister2Template, ANIM_TARGET, 2, 0x69, 0x14, 0x8, 0x28, 0x0 - delay 0x3 + delay 3 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xff, 0xf, 0x20, 0x0 createsprite gTwisterLeafSpriteTemplate, ANIM_TARGET, 2, 0x6e, 0xA, 0x8, 0x20, 0x14 waitforvisualfinish @@ -7845,13 +7895,13 @@ gBattleAnimMove_PetalBlizzard:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATK_PARTNER, 3, 0, 12, 1 - delay 0x4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish @@ -7865,7 +7915,7 @@ gBattleAnimMove_FreezeDry:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_IMPACT createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(12, 26, 31) delay 20 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0 @@ -7887,7 +7937,7 @@ gBattleAnimMove_FreezeDry:: createvisualtask AnimTask_FrozenIceCube, 2 waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 17 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(12, 26, 31) waitforvisualfinish createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK waitforvisualfinish @@ -7897,17 +7947,17 @@ gBattleAnimMove_FreezeDry:: gBattleAnimMove_DisarmingVoice:: loadspritegfx ANIM_TAG_NOISE_LINE - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB(29, 19, 27) waitforvisualfinish createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL call RoarEffect - delay 0xA + delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 26, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 26, 1 waitforvisualfinish createvisualtask SoundTask_WaitForCry, 0x5 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB(29, 19, 27) waitforvisualfinish end @@ -7980,53 +8030,53 @@ gBattleAnimMove_CraftyShield:: loadspritegfx ANIM_TAG_CRAFTY_SHIELD monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x5, 0x4DBF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 5, RGB(31, 13, 19) setalpha 16, 0 - delay 0x0 + delay 0 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xffe8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xffe8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0xffe8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0xffe8 - delay 0x3 + delay 3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xfff8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xfff8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0xfff8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0xfff8 - delay 0x3 + delay 3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xffe8, 0x8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0x8 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0x8 - delay 0x3 + delay 3 playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xffe8, 0x18 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0xfff8, 0x18 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x8, 0x18 - delay 0x3 + delay 3 createsprite gCraftyShieldPinkConversionTemplate, ANIM_ATTACKER, 2, 0x18, 0x18 - delay 0x14 + delay 20 playsewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER - createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, 0x2722, 0x1, 0x1, 0x37ff, 0xc, 0x0, 0x0 - delay 0x6 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_CONVERSION, 1, 1, RGB(31, 31, 13), 12, 0, 0 + delay 6 createvisualtask AnimTask_ConversionAlphaBlend, 0x5 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x5, 0x0, 0x4DBF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 5, 0, RGB(31, 13, 19) waitforvisualfinish - delay 0x1 + delay 1 clearmonbg ANIM_ATK_PARTNER blendoff end @@ -8035,28 +8085,28 @@ gBattleAnimMove_FlowerShield:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_IMPACT setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB(29, 19, 27) waitforvisualfinish playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x8, 0x64 createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x8, 0x64 - delay 0xf + delay 15 createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe8, 0x8, 0x64 createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe8, 0x8, 0x64 - delay 0xf + delay 15 createsprite gPetalDanceBigFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xffe8, 0x8, 0x64 createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xffe8, 0x8, 0x64 - delay 0x1e + delay 30 createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x0, 0x64 createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x0, 0x64 - delay 0x1e + delay 30 createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff0, 0xe, 0x50 createsprite gPetalDanceSmallFlowerSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff2, 0x10, 0x50 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB(29, 19, 27) waitforvisualfinish blendoff end @@ -8148,9 +8198,9 @@ gBattleAnimMove_Electrify:: createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 - delay 0x4 + delay 4 createsprite gElectrifyRingTemplate, ANIM_ATTACKER, 2 - delay 0x4 + delay 4 createsprite gElectrifyRingTemplate, ANIM_ATTACKER, 2 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 @@ -8165,36 +8215,36 @@ gBattleAnimMove_Electrify:: createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x60, 0x28, 0x1 createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xa0, 0x28, 0x0 createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xe0, 0x28, 0x2 - delay 0xA - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x0, 0xB, 0x039B - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x3, 0x039B - delay 0x4 + delay 10 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(27, 28, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 3, RGB(27, 28, 0) + delay 4 clearmonbg ANIM_ATTACKER - delay 0x1 + delay 1 monbg ANIM_DEF_PARTNER playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET createsprite gElectrifyYellowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 - delay 0x1 + delay 1 createsprite gElectrifyYellowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 - delay 0x1 + delay 1 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x5, 0x1 createsprite gElectrifyYellowRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x0, 0x1f, 0x8 - delay 0x1 + delay 1 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xf, 0x14, 0x5, 0x2 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 - delay 0x2 + delay 2 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x19, 0x0, 0x5, 0x1 - delay 0x2 + delay 2 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 - delay 0x2 + delay 2 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x2, 0xfff8, 0x5, 0x0 - delay 0x2 + delay 2 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0xB, 0x0, 0x039B - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x3, 0x0, 0x039B + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(27, 28, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 3, 0, RGB(27, 28, 0) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -8221,7 +8271,7 @@ gBattleAnimMove_PlayRough:: createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0x80, 0xfff2 createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0x1a0, 0xffda createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0xff80, 0xffea - delay 0x0 + delay 0 call SubmissionHit playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xa0, 0xffe0 @@ -8230,14 +8280,14 @@ gBattleAnimMove_PlayRough:: createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0x1a0, 0xffda createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff80, 0xffea createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xfe80, 0xffe1 - delay 0x0 + delay 0 call SubmissionHit playsewithpan SE_M_DIVE, SOUND_PAN_TARGET createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0xff00, 0xffd6 createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0x80, 0xfff2 createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0x1a0, 0xffda createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, 0xff80, 0xffea - delay 0x0 + delay 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xa0, 0xffe0 createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff00, 0xffd8 @@ -8245,10 +8295,10 @@ gBattleAnimMove_PlayRough:: createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0x1a0, 0xffda createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xff80, 0xffea createsprite gDizzyPunchDuckSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x8, 0xfe80, 0xffe1 - delay 0x0 + delay 0 call SubmissionHit waitforvisualfinish - delay 0xD + delay 13 stopsound clearmonbg 0x3 blendoff @@ -8259,24 +8309,24 @@ gBattleAnimMove_FairyWind:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_DEF_PARTNER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB(29, 19, 27) waitforvisualfinish playsewithpan SE_M_GUST, SOUND_PAN_TARGET createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x14, 0x1 - delay 0x5 + delay 5 createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x5, 0x16, 0xffee, 0x1 - delay 0x5 + delay 5 createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0xfff6, 0x16, 0xf, 0x1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 18, 1 - delay 0x5 + delay 5 createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1 - delay 0x5 + delay 5 createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xc, 0x1 - delay 0x5 + delay 5 waitforvisualfinish stopsound playsewithpan SE_M_GUST2, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB(29, 19, 27) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -8360,7 +8410,7 @@ gBattleAnimMove_FairyLock:: loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS setalpha 8, 8 monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6B1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB(31, 24, 26) waitforvisualfinish loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x9 createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x7 @@ -8371,7 +8421,7 @@ gBattleAnimMove_FairyLock:: createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x6 createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x35 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6B1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB(31, 24, 26) waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -8379,14 +8429,14 @@ gBattleAnimMove_FairyLock:: gBattleAnimMove_KingsShield:: loadspritegfx ANIM_TAG_PROTECT @protect - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0x0, 0xC, 0xC, 0x318C @Gray + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 12, 12, RGB(12, 12, 12) @Gray goto gBattleAnimMove_Protect gBattleAnimMove_PlayNice:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_SANDSTORM, SOUND_PAN_ATTACKER, 0xc, 0x3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER - delay 0xF + delay 15 createsprite gRedHeartProjectileSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff8 end @@ -8403,50 +8453,50 @@ gBattleAnimMove_DiamondStorm:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x1888 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ICE_CRYSTALS, 0, 0xD, 0xD, 0x7DDE @Pink + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 15, RGB(8, 4, 6) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ICE_CRYSTALS, 0, 13, 13, RGB(30, 14, 31) @Pink waitforvisualfinish panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x48, 0x1 createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x1 - delay 0x3 + delay 3 createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff1, 0x0, 0xfff1, 0x48, 0x1 createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x50, 0x0, 0x0, 0x1 - delay 0x3 + delay 3 createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfffb, 0x0, 0xfffb, 0x48, 0x1 createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x50, 0x0, 0x0, 0x1 - delay 0x3 + delay 3 createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x48, 0x1 createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x50, 0x0, 0x0, 0x1 - delay 0x3 + delay 3 createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x48, 0x1 createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x50, 0x0, 0x0, 0x1 - delay 0x3 + delay 3 createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff1, 0x0, 0xfff1, 0x48, 0x1 createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x50, 0x0, 0x0, 0x1 - delay 0x3 + delay 3 createsprite gSwirlingSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xffe7, 0x0, 0xffe7, 0x48, 0x1 createsprite gDiamondStormBlizzardTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x50, 0x0, 0x0, 0x1 - delay 0x3 + delay 3 playsewithpan SE_M_TWISTER, SOUND_PAN_TARGET createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x78, 0x46, 0x5, 0x46, 0x1e - delay 0x1 + delay 1 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0x6, 0x3c, 0x19 - delay 0x1 + delay 1 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x3c, 0x7, 0x3c, 0x1e createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x37, 0xa, 0x3c, 0x1e - delay 0x3 + delay 3 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x64, 0x32, 0x4, 0x32, 0x1a - delay 0x1 + delay 1 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x69, 0x19, 0x8, 0x3c, 0x14 - delay 0x1 + delay 1 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x28, 0xa, 0x30, 0x1e - delay 0x3 + delay 3 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x78, 0x1e, 0x6, 0x2d, 0x19 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x73, 0x23, 0xa, 0x3c, 0x1e - delay 0x3 + delay 3 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x69, 0x14, 0x8, 0x28, 0x0 - delay 0x3 + delay 3 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x14, 0xff, 0xf, 0x20, 0x0 createsprite gDiamondStormDiamondsTemplate, ANIM_TARGET, 2, 0x6e, 0xa, 0x8, 0x20, 0x14 waitforvisualfinish @@ -8455,17 +8505,17 @@ gBattleAnimMove_DiamondStorm:: playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1 - delay 0x4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 3 playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xF, 0x0, 0x1888 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 15, 0, RGB(8, 4, 6) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -8473,16 +8523,16 @@ gBattleAnimMove_DiamondStorm:: gBattleAnimMove_SteamEruption:: loadspritegfx ANIM_TAG_STEAM_ERUPTION @Steam Eruption Particle - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x7, 0x043D - delay 0x20 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 7, RGB(29, 1, 1) + delay 32 monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET panse SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 call SteamEruptionBreath call SteamEruptionBreath - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x0, 0x9, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 9, RGB_RED call SteamEruptionBreath - delay 0x2 + delay 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 21, 1 call SteamEruptionBreath call SteamEruptionBreath @@ -8500,15 +8550,15 @@ gBattleAnimMove_SteamEruption:: call SteamEruptionBreath call SteamEruptionBreath call SteamEruptionBreath - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x9, 0x0, 0x1f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 9, 0, RGB_RED waitforvisualfinish clearmonbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x7, 0x0, 0x043D + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 7, 0, RGB(29, 1, 1) waitforvisualfinish end SteamEruptionBreath: createsprite gSteamEruptionBreathTemplate, ANIM_TARGET, 2, 0x0, 0x5, 0x0, 0x5, 0x14 - delay 0x1 + delay 1 return gBattleAnimMove_HyperspaceHole:: @@ -8516,27 +8566,27 @@ gBattleAnimMove_HyperspaceHole:: loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour loadspritegfx ANIM_TAG_POISON_BUBBLE @Poison Colour - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_WHITE waitforvisualfinish playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER invisible ANIM_ATTACKER - delay 0x1 + delay 1 visible ANIM_ATTACKER - delay 0x1 + delay 1 invisible ANIM_ATTACKER - delay 0x1 + delay 1 visible ANIM_ATTACKER - delay 0x1 + delay 1 invisible ANIM_ATTACKER waitsound createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 - delay 0x17 + delay 23 createvisualtask AnimTask_IsTargetSameSide, 0x2 createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 - delay 0x19 + delay 25 visible ANIM_ATTACKER invisible ANIM_ATTACKER - delay 0x5 + delay 5 createsprite gHyperspaceHoleImpactTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 call HyperspaceHoleMovement createsprite gHyperspaceHoleImpactTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 @@ -8547,21 +8597,21 @@ gBattleAnimMove_HyperspaceHole:: call HyperspaceHoleMovement waitforvisualfinish visible ANIM_ATTACKER - delay 0x1 + delay 1 invisible ANIM_ATTACKER - delay 0x1 + delay 1 visible ANIM_ATTACKER - delay 0x1 + delay 1 invisible ANIM_ATTACKER - delay 0x1 + delay 1 visible ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_WHITE waitforvisualfinish end HyperspaceHoleMovement: playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 15, 1 - delay 0x4 + delay 4 return gBattleAnimMove_WaterShuriken:: @@ -8572,17 +8622,22 @@ gBattleAnimMove_WaterShuriken:: loadspritegfx ANIM_TAG_IMPACT @hydro pump hit monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET - createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0x87, 0xffc0, SOUND_PAN_TARGET, 0x5, 0x5, 0x0, 0x5 - createsprite gWaterShurikenStarTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x27 - delay 0x8 - createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x28, 0xf - delay 0x5 - createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x28, 0xf - delay 0x5 - createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x28, 0xf - delay 0xC + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + createsprite gWaterShurikenStarTemplate, ANIM_TARGET, 2, 0, 0, 20 + delay 8 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 8, 1 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0, 0, 20, 15 + delay 5 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0, 0, 20, 15 + delay 5 + playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET + createsprite gWaterShurikenRingTemplate, ANIM_TARGET, 2, 0, 0, 20, 15 + delay 12 playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET - createsprite gWaterShurikenImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 4, 1 + createsprite gWaterShurikenImpactTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -8598,19 +8653,19 @@ gBattleAnimMove_MysticalFire:: waitsound blendoff createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0xffff, 0x0 - delay 0x1 + delay 1 createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x0, 0x1 - delay 0x1 + delay 1 createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0xffff, 0xffff - delay 0x1 + delay 1 createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x2, 0x1 - delay 0x1 + delay 1 createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x1, 0xffff - delay 0x1 + delay 1 createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0xffff, 0x1 - delay 0x1 + delay 1 createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x1, 0xfffe - delay 0x1 + delay 1 createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x1e, 0x3, 0x1 playse 0x8c waitforvisualfinish @@ -8624,29 +8679,29 @@ gBattleAnimMove_SpikyShield:: splitbgprio ANIM_ATTACKER waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0x0, 0x5a - delay 0xF + delay 15 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x0, 0xFFE0, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x16, 0xFFEA, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x1E, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x14, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x0, 0x1C, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFED, 0x13, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFE5, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0xFFEE, 0xFFEE, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x0, 0xFFE7, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x11, 0xFFEF, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x17, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1, 0x10, 0x10, 0x10 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -8655,9 +8710,9 @@ gBattleAnimMove_SpikyShield:: gBattleAnimMove_AromaticMist:: loadspritegfx ANIM_TAG_PINK_PETAL playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6E7D + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB(29, 19, 27) createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x64 - delay 0x19 + delay 25 setpan 0x0 call SweetScentEffect createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0x0 @@ -8665,7 +8720,7 @@ gBattleAnimMove_AromaticMist:: createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 1, 5, 5, 13, RGB(31, 21, 21) call SweetScentEffect waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6E7D + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB(29, 19, 27) waitforvisualfinish end @@ -8678,9 +8733,9 @@ gBattleAnimMove_EerieImpulse:: loadspritegfx ANIM_TAG_GOLD_RING @psybeam ring monbg ANIM_DEF_PARTNER waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET 0x13 - delay 0x4 + delay 4 createsprite gEerieImpulseRingTemplate, ANIM_ATTACKER, 0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1 - delay 0xB + delay 11 createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0 createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 1 createsprite gZapCannonSparkSpriteTemplate, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0 @@ -8698,15 +8753,15 @@ gBattleAnimMove_EerieImpulse:: createsprite gEerieImpulseImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0x1, 0x0, 0x20, 0x10 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x5, 0x1 - delay 0x7 + delay 7 createsprite gEerieImpulseImpactTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xa, 0x1, 0x0, 0x20, 0x10 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xf, 0x14, 0x5, 0x2 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 - delay 0x7 + delay 7 createsprite gEerieImpulseImpactTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xfff1, 0x1, 0x0, 0x20, 0x10 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x19, 0x0, 0x5, 0x1 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 - delay 0x7 + delay 7 createsprite gEerieImpulseImpactTemplate, ANIM_ATTACKER, 2, 0xa, 0xfffb, 0x1, 0x0, 0x20, 0x10 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0x2, 0xfff8, 0x5, 0x0 createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 @@ -8719,16 +8774,16 @@ gBattleAnimMove_VenomDrench:: monbg ANIM_DEF_PARTNER createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xfffb, 0x1, 0xfffb, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x13, 0x1, 0xa, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xffe9, 0x2, 0xfff6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 call AcidDrench call AcidDrench waitforvisualfinish @@ -8737,28 +8792,28 @@ gBattleAnimMove_VenomDrench:: AcidDrench: createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x1c, 0x1, 0xa, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xfff6, 0x1, 0xfffb, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x18, 0x1, 0xa, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xffe0, 0x2, 0xfff6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0x1e, 0x2, 0xa, 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET - delay 0x2 + delay 2 return gBattleAnimMove_Powder:: @@ -8775,11 +8830,11 @@ gBattleAnimMove_Powder:: end POWDER_SPORE: createsprite gPowderBlackSporeTemplate, ANIM_ATTACKER, 2, 0x0, 0xffec, 0x55, 0x50, 0x0 - delay 0xc + delay 12 createsprite gPowderBlackSporeTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0xaa, 0x50, 0x0 - delay 0xc + delay 12 createsprite gPowderBlackSporeTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff1, 0x0, 0x50, 0x0 - delay 0xc + delay 12 return gBattleAnimMove_Geomancy:: @@ -8794,19 +8849,19 @@ gBattleAnimMove_Geomancy:: choosetwoturnanim GeomancyChargeUp GeomancyUnleash GeomancyChargeUp: loadspritegfx ANIM_TAG_FOCUS_ENERGY @endure buff effect - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_M_COSMIC_POWER, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 95, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x5, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 5, RGB_RED call GeomancyRingBuff - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x5, 0x2C0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 5, RGB(0, 22, 0) call GeomancyRingBuff - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x5, 0x7C60 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 5, RGB(0, 3, 31) call GeomancyRingBuff waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x5, 0x0, 0x7C60 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 5, 0, RGB(0, 3, 31) waitforvisualfinish blendoff clearmonbg ANIM_ATK_PARTNER @@ -8815,69 +8870,69 @@ GeomancyRingBuff: createsprite gGeomancyRedCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x0 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyGreenCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x0 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyBlueCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x0 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x2 + delay 2 createsprite gGeomancyRedCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x0 - delay 0x2 + delay 2 createsprite gGeomancyGreenCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x0 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyBlueCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x0 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRedCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x0 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x2 + delay 2 createsprite gGeomancyGreenCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x0 - delay 0x2 + delay 2 createsprite gGeomancyBlueCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x0 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRedCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x0 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyGreenCellVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x0 - delay 0x2 + delay 2 return GeomancyUnleash: loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x24CF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB(15, 6, 9) playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 - delay 0x1 + delay 1 createsprite gGeomancyRingTemplate, ANIM_ATTACKER, 2 waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x10, 0x4D01 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 16, RGB(1, 8, 19) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 37, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x5, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 5, RGB_RED createsprite gGeomancyRedCellRaiseTemplate, ANIM_ATTACKER, 2, 0x14, 0x20, 0xffd0, 0x32, 0x1 createsprite gGeomancyGreenCellRaiseTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0xffda, 0x19, 0x1 createsprite gGeomancyBlueCellRaiseTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0xffe4, 0x28, 0x1 @@ -8887,60 +8942,60 @@ GeomancyUnleash: call GeomancyRageBuff call GeomancyRageBuff waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x4D01 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x5, 0x0, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB(1, 8, 19) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 5, 0, RGB_RED waitforvisualfinish blendoff clearmonbg ANIM_ATK_PARTNER end GeomancyRageBuff: createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0x5, 0x0 - delay 0x1 + delay 1 createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0xfff6, 0xfff1 - delay 0x1 + delay 1 createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x19 - delay 0x1 + delay 1 createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0xf, 0x5 - delay 0x1 + delay 1 createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0xffe7, 0x0 - delay 0x1 + delay 1 createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 2, 0x0, 0x1e, 0x1e - delay 0x1 + delay 1 createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 2, 0x0, 0xffe5, 0x19 - delay 0x1 + delay 1 createsprite gGeomancyYellowRageTemplate, ANIM_TARGET, 66, 0x0, 0x0, 0x8 - delay 0x1 + delay 1 return gBattleAnimMove_MagneticFlux:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color - createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_TARGET | F_PAL_ATK_SIDE), 2, 0, 9, 0x243B + createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_TARGET | F_PAL_ATK_SIDE), 2, 0, 9, RGB(27, 1, 9) loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 0x12, 0x3 createvisualtask AnimTask_DefenseCurlDeformMon, 0x5 call MagneticFluxSparks1 - delay 0xA + delay 10 call MagneticFluxSparks2 - delay 0xA + delay 10 call MagneticFluxSparks1 - delay 0xA + delay 10 createsprite gMagneticFluxUproarTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 call MagneticFluxSparks2 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_TARGET | F_PAL_ATK_SIDE), 2, 9, 0, 0x243B + createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_TARGET | F_PAL_ATK_SIDE), 2, 9, 0, RGB(27, 1, 9) waitforvisualfinish end MagneticFluxSparks1: createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 return MagneticFluxSparks2: createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 return @@ -8949,13 +9004,13 @@ gBattleAnimMove_HappyHour:: monbg ANIM_ATTACKER loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 0x8, 10 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xfffb, 0x0, 0xfffb, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x6, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x13, 0x0, 0xa, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xffe9, 0x0, 0xfff6, 0x1 - delay 0x2 + delay 2 call CoinShower call CoinShower waitforvisualfinish @@ -8963,21 +9018,21 @@ gBattleAnimMove_HappyHour:: end CoinShower: createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x1c, 0x0, 0xa, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xfff6, 0x0, 0xfffb, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x6, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x18, 0x0, 0xa, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xffe0, 0x0, 0xfff6, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0xffec, 0x0, 0xfff6, 0x1 - delay 0x2 + delay 2 createsprite gHappyHourCoinShowerTemplate, ANIM_TARGET, 2, 0x1e, 0x0, 0xa, 0x1 - delay 0x2 + delay 2 return gBattleAnimMove_ElectricTerrain:: @@ -9019,17 +9074,34 @@ gBattleAnimMove_ElectricTerrain:: gBattleAnimMove_DazzlingGleam:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_BLUE_STAR - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 13, RGB_WHITE - playsewithpan SE_M_TWISTER, SOUND_PAN_ATTACKER - @call 0x081D56B3 -> middle of GrantingStarsEffect + loadspritegfx ANIM_TAG_IMPACT + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 13, RGB(31, 25, 25) + loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 16, 3 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 12, -5, 0, 0, 32, 60 - delay 8 waitforvisualfinish createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 3, 0, 16, RGB_WHITE - delay 0x4 - playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB(31, 28, 28) + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 21, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 21, 1 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET + delay 3 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 2 + createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_HYPER_BEAM, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 13, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 13, 0, RGB(31, 25, 25) waitforvisualfinish clearmonbg 0x0 blendoff @@ -9039,9 +9111,9 @@ gBattleAnimMove_Celebrate:: loadspritegfx ANIM_TAG_ITEM_BAG createsprite gCelebrateBagTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER - delay 0x12 + delay 18 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER - delay 0x47 + delay 71 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER 0x16 0x3 end @@ -9052,35 +9124,35 @@ gBattleAnimMove_HoldHands:: playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 6, 6, 3 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c - delay 0x8 + delay 8 createsprite gHoldHandsHeartTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c waitforvisualfinish createvisualtask AnimTask_HelpingHandAttackerMovement, 0x5 createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0x0 createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0x1 - delay 0x13 + delay 19 playsewithpan SE_M_ENCORE, 0x0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 2, 0, 5, 1 - delay 0xe + delay 14 playsewithpan SE_M_ENCORE, 0x0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 2, 0, 5, 1 - delay 0x14 + delay 20 playsewithpan SE_M_ENCORE, 0x0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 3, 0, 10, 1 createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATK_PARTNER, RGB_YELLOW, 12, 1, 1 @@ -9092,17 +9164,17 @@ gBattleAnimMove_BabyDollEyes:: loadspritegfx ANIM_TAG_OPENING_EYE @eye setalpha 8, 8 monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0xA, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 10, RGB_WHITE waitforvisualfinish createsprite gOpeningEyeSpriteTemplate, ANIM_ATTACKER, 5, 0x0, 0x0, 0x1, 0x0 - delay 0x20 + delay 32 playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, ANIM_ATTACKER, 1 waitforvisualfinish - delay 0xa + delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 9, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 9, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0xA, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 10, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -9116,10 +9188,10 @@ gBattleAnimMove_Nuzzle:: createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x14 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER - delay 0xf + delay 15 createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0xffec, 0x14 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER - delay 0xf + delay 15 createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0x14, 0x14 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER waitforvisualfinish @@ -9161,7 +9233,7 @@ gBattleAnimMove_Infestation:: loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x7320 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(0, 25, 28) createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 79, 1 loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 0x4F call InfestationVortex @@ -9170,23 +9242,23 @@ gBattleAnimMove_Infestation:: call InfestationVortex call InfestationVortex waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x7320 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(0, 25, 28) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end InfestationVortex: createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x1 - delay 0x1 + delay 1 createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x1 - delay 0x1 + delay 1 createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x1 - delay 0x1 + delay 1 createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x1 - delay 0x1 + delay 1 createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x1 - delay 0x1 + delay 1 createsprite gInfestationBubbleTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x1 - delay 0x1 + delay 1 return gBattleAnimMove_PowerUpPunch:: @@ -9210,14 +9282,14 @@ gBattleAnimMove_OblivionWing:: loadspritegfx ANIM_TAG_HYDRO_PUMP loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_BLUE_STAR - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x289F @Pinkish Red - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0x0, 0xD, 0xD, 0x289F @Pinkish Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB(31, 4, 10) @Pinkish Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 13, 13, RGB(31, 4, 10) @Pinkish Red playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xE, 0x0 @Black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 14, RGB_BLACK @Black waitforvisualfinish - createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 call OblivionWingBeam call OblivionWingBeam createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 40, 1 @@ -9236,14 +9308,14 @@ gBattleAnimMove_OblivionWing:: visible ANIM_ATTACKER call HealingEffect waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xE, 0x0, 0x0 @From black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 14, 0, RGB_BLACK @From black waitforvisualfinish end OblivionWingBeam: createsprite gOblivionWingBeamTemplate, ANIM_TARGET, 2, 0, -90, 0, 20, 0x15, 0x0 - delay 0x2 + delay 2 createsprite gOblivionWingBeamTemplate, ANIM_TARGET, 2, 0, -90, 0, 20, 0x15, 0x0 - delay 0x2 + delay 2 return gBattleAnimMove_ThousandArrows:: @@ -9256,13 +9328,13 @@ gBattleAnimMove_ThousandArrows:: loadspritegfx ANIM_TAG_NEEDLE @sting monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish createsprite gThousandArrowsGreenChargeTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0x18 + delay 24 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0x18 + delay 24 call ThousandArrowsHexes call ThousandArrowsHexes call ThousandArrowsHexes @@ -9271,11 +9343,11 @@ gBattleAnimMove_ThousandArrows:: call ThousandArrowsHexes call ThousandArrowsHexes createsprite gThousandArrowsGreenDischargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x10 - delay 0x2 + delay 2 createsprite gThousandArrowsGreenDischargeTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0, 0xfff0 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER waitforvisualfinish - delay 0x30 + delay 48 createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x32 createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x32 call ThousandArrowsDown @@ -9283,7 +9355,7 @@ gBattleAnimMove_ThousandArrows:: call ThousandArrowsDown call ThousandArrowsDown waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0xffff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_WHITEALPHA waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -9291,45 +9363,45 @@ gBattleAnimMove_ThousandArrows:: ThousandArrowsHexes: createsprite gThousandArrowsGreenHexTemplate, ANIM_TARGET, 2, 0x0, 0xfffc, 0xfff0 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenHexTemplate, ANIM_TARGET, 2, 0x0, 0x100D, 0xfff0 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenHexTemplate, ANIM_TARGET, 2, 0x0, 0x4, 0xfff4 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenHexTemplate, ANIM_TARGET, 2, 0x0, 0xfff0, 0xfff0 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 return ThousandArrowsDown: createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0xdc, 0x3c playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x3c, 0x64 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x8c, 0x37 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0xb4, 0x32 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x14, 0x5a playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x5a, 0x5a playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0xa0, 0x3c playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x1e, 0x5a playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0x78, 0x3c playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gThousandArrowsGreenArrowTemplate, ANIM_TARGET, 2, 0x1, 0xc8, 0x28 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER return @@ -9341,7 +9413,7 @@ gBattleAnimMove_ThousandWaves:: loadspritegfx ANIM_TAG_IMPACT @pound hits monbg ANIM_ATK_PARTNER setalpha 8, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER createsprite gThousandWavesGreenWheelTemplate, ANIM_ATTACKER, 2, 0x0 @@ -9355,110 +9427,110 @@ gBattleAnimMove_ThousandWaves:: loopsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET, 0x3, 0x15 call ThousandWavesRecover createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0xfff6, 0xd - delay 0x3 + delay 3 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffdd, 0x8, 0xd - delay 0x3 + delay 3 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffdd, 0xfff6, 0xd - delay 0x3 + delay 3 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0x8, 0xd - delay 0x3 + delay 3 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xf, 0xffd8, 0xd - delay 0x3 + delay 3 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xffe0, 0xd - delay 0x3 + delay 3 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x5, 0x27, 0xd - delay 0x3 + delay 3 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x19, 0xffec, 0xd - delay 0x3 + delay 3 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0xd - delay 0x3 + delay 3 createvisualtask AnimTask_AttackerStretchAndDisappear, 0x2 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x5, 0xffd8, 0xd waitforvisualfinish panse SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - delay 0x4 + delay 4 createvisualtask AnimTask_MoveHeatWaveTargets, 0x5 - delay 0xc + delay 12 monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0xa, 0x900, 0x60, 0x1 - delay 0x2 + delay 2 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x5a, 0x800, 0x60, 0x1 - delay 0x2 + delay 2 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x32, 0xa00, 0x60, 0x1 - delay 0x2 + delay 2 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x14, 0x900, 0x60, 0x1 - delay 0x2 + delay 2 call ThousandWavesRotatingImpact call ThousandWavesRotatingImpact waitforvisualfinish createvisualtask AnimTask_ExtremeSpeedMonReappear, 0x2 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0xffff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_WHITEALPHA waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER end ThousandWavesRecover: createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0x28, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0xffec, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffec, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffec, 0x1e, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x14, 0xffe2, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffec, 0xffe2, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x14, 0x1e, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gThousandWavesGreenRecoverTemplate, ANIM_ATTACKER, 2, 0x28, 0x0, 0x10 - delay 0x2 + delay 2 return ThousandWavesRotatingImpact: createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x1c, 0x180, 0x32, 0x8, 0x32, 0x1 @1 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x46, 0x7c0, 0x60, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x3 createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x20, 0xf0, 0x28, 0xb, 0xffd2, 0x1 @2 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x0, 0xb00, 0x60, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0x5, 0xfff4, 0x3 createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x21, 0x1a0, 0x28, 0x4, 0x2a, 0x1 @3 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x3c, 0xa00, 0x60, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0xfffa, 0x9, 0x3 createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, 0x1 @4 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0xa, 0x900, 0x60, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0xfffa, 0xfff4, 0x3 createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, 0x1 @5 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x5a, 0x800, 0x60, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0x5, 0x9, 0x3 createsprite gThousandWavesRotatingImpactTemplate, ANIM_TARGET, 2, 0x23, 0x21, 0x1d0, 0x32, 0xa, 0xffce, 0x1 @6 createsprite gThousandWavesGreenWaveTemplate, ANIM_ATTACKER, 40, 0x32, 0xa00, 0x60, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0xfffa, 0x0, 0x3 return @@ -9467,7 +9539,7 @@ gBattleAnimMove_LandsWrath:: loadspritegfx ANIM_TAG_WATER_ORB @whirl motion loadspritegfx ANIM_TAG_SPARK_2 @yellow color monbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xE, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 14, RGB_BLACK waitforvisualfinish call LandsWrathVortex call LandsWrathVortex @@ -9483,23 +9555,23 @@ gBattleAnimMove_LandsWrath:: waitbgfadein waitforvisualfinish call UnsetPsychicBg - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 0, RGB_BLACK clearmonbg ANIM_ATTACKER end LandsWrathVortex: playsewithpan SE_M_SACRED_FIRE2 SOUND_PAN_TARGET createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, 0x0 - delay 0x2 + delay 2 createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, 0x0 - delay 0x2 + delay 2 createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, 0x0 - delay 0x2 + delay 2 createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, 0x0 - delay 0x2 + delay 2 createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, 0x0 - delay 0x2 + delay 2 createsprite gLandsWrathVortexTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, 0x0 - delay 0x2 + delay 2 return gBattleAnimMove_LightOfRuin:: @@ -9509,11 +9581,11 @@ gBattleAnimMove_LightOfRuin:: loadspritegfx ANIM_TAG_ELECTRICITY @discharge loadspritegfx ANIM_TAG_PINK_PETAL @pink color loadspritegfx ANIM_TAG_EXPLOSION @explosion - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 0xC, 0xC, 0x6DDE @Pink + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 12, 12, RGB(30, 14, 27) @Pink waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 20, 0, 2 panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x6B1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 15, RGB(31, 24, 26) createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call LightOfRuinBeam @@ -9543,24 +9615,24 @@ gBattleAnimMove_LightOfRuin:: call LightOfRuinBeam call LightOfRuinBeam call LightOfRuinBeam - delay 0x20 + delay 32 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gLightOfRuinPinkDischargeTemplate, ANIM_ATTACKER, 2, 0x1, 0x10, 0x10 - delay 0x2 + delay 2 createsprite gLightOfRuinPinkDischargeTemplate, ANIM_ATTACKER, 2, 0x1, 0xfff0, 0xfff0 - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 11, 1 createsprite gLightOfRuinPinkExplosionTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x1 - delay 0x10 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7FFF + delay 16 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_WHITE waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x1, 0x0, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 0, 0, RGB_BLACK waitforvisualfinish end LightOfRuinBeam: createsprite gLightOfRuinPinkOrbsTemplate, ANIM_TARGET, 2 createsprite gLightOfRuinPinkOrbsTemplate, ANIM_TARGET, 2 - delay 0x1 + delay 1 return gBattleAnimMove_OriginPulse:: @@ -9576,9 +9648,9 @@ gBattleAnimMove_OriginPulse:: waitbgfadein createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - delay 0x10 + delay 16 createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 - delay 0x10 + delay 16 createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 playsewithpan SE_INTRO_BLAST, SOUND_PAN_ATTACKER waitforvisualfinish @@ -9588,12 +9660,12 @@ gBattleAnimMove_OriginPulse:: createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0x80 createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0xaa createsprite gOriginPulseOrbTemplate, ANIM_ATTACKER, 2, 0xd5 - delay 0x35 + delay 53 createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 - delay 0x10 + delay 16 createsprite gOriginPulseRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 waitforvisualfinish - delay 0x2F + delay 47 createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xFF90, 0x10 @up createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x5F, 0xFF9D, 0x10 @upper right createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x73, 0x0, 0x10 @right @@ -9602,7 +9674,7 @@ gBattleAnimMove_OriginPulse:: createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFB0, 0x43, 0x10 @lower left createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFF60, 0x0, 0x10 @left createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xFFAA, 0xFF94, 0x10 @upper left - delay 0x5 + delay 5 createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x2D, 0xFF9D, 0x10 @between up and upper right createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xDF, 0xFF9D, 0x10 @between right and upper right createsprite gOriginPulseOrbInwardTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x9F, 0x37, 0x10 @between right and lower right @@ -9617,17 +9689,17 @@ gBattleAnimMove_OriginPulse:: createsprite gOriginPulseBasicSplatTemplate, ANIM_TARGET, 3, 0xffb0, 0xfff0, 0x1, 0x1 stopsound playsewithpan SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER - delay 0x5 + delay 5 createsprite gOriginPulseBlueImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gOriginPulseBasicSplatTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gOriginPulseBlueImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gOriginPulseBasicSplatTemplate, ANIM_TARGET, 3, 0xffc0, 0x14, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gOriginPulseBlueImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gOriginPulseBasicSplatTemplate, ANIM_TARGET, 3, 0xffe0, 0x5, 0x1, 0x1 waitsound call UnsetPsychicBg @@ -9638,7 +9710,7 @@ gBattleAnimMove_OriginPulse:: gBattleAnimMove_PrecipiceBlades:: loadspritegfx ANIM_TAG_LARGE_SPIKE loadspritegfx ANIM_TAG_FIRE_PLUME - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LARGE_SPIKE, 0, 10, 10, 0x159F @Blood orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LARGE_SPIKE, 0, 10, 10, RGB(31, 12, 5) @Blood orange monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET setalpha 12, 8 @@ -9659,21 +9731,21 @@ PrecipiceBladesPlayer: delay 5 createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 5, ANIM_ATTACKER, -10, 17, 120, 0x0 PrecipiceBladesContinue: - delay 0x10 + delay 16 createsprite gPrecipiceBladesPlumeTemplate, ANIM_TARGET, 2, -15, 18, ANIM_TARGET createsprite gPrecipiceBladesPlumeTemplate, ANIM_TARGET, 2, -15, 18, ANIM_DEF_PARTNER - delay 0x20 + delay 32 createsprite gPrecipiceBladesPlumeTemplate, ANIM_TARGET, 2, 15, 18, ANIM_TARGET createsprite gPrecipiceBladesPlumeTemplate, ANIM_TARGET, 2, 15, 18, ANIM_DEF_PARTNER - delay 0x20 + delay 32 stopsound playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET createsprite gPrecipiceBladesLargeSpikeTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, -25, 40, 0x0 createsprite gPrecipiceBladesLargeSpikeTemplate, ANIM_TARGET, 2, ANIM_DEF_PARTNER, 0, -25, 40, 0x0 - delay 0x6 + delay 6 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, -20, 0, 6, 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_DEF_PARTNER, -20, 0, 6, 1 - delay 0x22 + delay 34 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x6 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 2, ANIM_DEF_PARTNER, 0x0, 0x6 waitforvisualfinish @@ -9703,13 +9775,13 @@ gBattleAnimMove_DragonAscent:: invisible ANIM_ATTACKER createsprite gDragonAscentFlyUpTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x400, 0x24, 0x15, 0x1, ANIM_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 4, 0, 14, RGB(21, 31, 27) + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 4, 0, 14, RGB(21, 31, 27) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createvisualtask AnimTask_StartSlidingBg, 0x5, -7304, -784, 1, -1 delay 2 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 0, 14, 0, RGB(21, 31, 27) + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 0, 14, 0, RGB(21, 31, 27) waitforvisualfinish delay 1 monbg ANIM_DEF_PARTNER @@ -9721,7 +9793,7 @@ gBattleAnimMove_DragonAscent:: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 0, 3 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 6, 0, 12, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 2, 16, 0, RGB(26, 31, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 2, 16, 0, RGB(26, 31, 0) waitforvisualfinish delay 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 @@ -9736,19 +9808,19 @@ gBattleAnimMove_HyperspaceFury:: loadspritegfx ANIM_TAG_HOOPA_RING @Hoopa Ring loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xA, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 10, RGB_BLACK waitforvisualfinish playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 - delay 0x5 + delay 5 createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 - delay 0x5 + delay 5 createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 - delay 0x5 + delay 5 createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc - delay 0x5 + delay 5 createsprite gHyperspaceFuryRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 - delay 0x15 + delay 21 invisible ANIM_ATTACKER waitforvisualfinish fadetobg BG_HYPERSPACE_FURY @@ -9759,42 +9831,42 @@ gBattleAnimMove_HyperspaceFury:: createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 32, 1 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe0, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xffea, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x1e, 0x0, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createvisualtask AnimTask_IsTargetSameSide, 0x2 createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1c, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffed, 0x13, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffe5, 0x0, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffee, 0xffee, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe7, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x11, 0xffef, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x17, 0x0, 0x10 call HyperspaceFuryRandomImpact - delay 0x2 + delay 2 createsprite gHyperspaceFuryHandTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0x10, 0x10 call HyperspaceFuryRandomImpact - delay 0x7 + delay 7 createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL visible ANIM_ATTACKER createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 0, 3, 32, 1 @@ -9803,15 +9875,15 @@ gBattleAnimMove_HyperspaceFury:: call UnsetPsychicBg waitforvisualfinish visible ANIM_ATTACKER - delay 0x1 + delay 1 invisible ANIM_ATTACKER - delay 0x1 + delay 1 visible ANIM_ATTACKER - delay 0x1 + delay 1 invisible ANIM_ATTACKER - delay 0x1 + delay 1 visible ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 0, RGB_BLACK end HyperspaceFuryRandomImpact: createsprite gHyperspaceFuryImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 @@ -9823,19 +9895,19 @@ gBattleAnimMove_ShoreUp:: loadspritegfx ANIM_TAG_BLUE_STAR @heal2 playsewithpan SE_M_SANDSTORM, 0x0 createvisualtask AnimTask_LoadSandstormBackground, 0x5, 0x0 - delay 0x10 + delay 16 createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0xa, 0x900, 0x60, 0x0 - delay 0xa + delay 10 createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x5a, 0x800, 0x60, 0x0 - delay 0xa + delay 10 createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x32, 0xa00, 0x60, 0x0 - delay 0xa + delay 10 createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x14, 0x900, 0x60, 0x0 - delay 0xa + delay 10 createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x46, 0x7c0, 0x60, 0x0 - delay 0xa + delay 10 createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0xb00, 0x60, 0x0 - delay 0xa + delay 10 createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 0x3c, 0xa00, 0x60, 0x0 call HealingEffect waitforvisualfinish @@ -9851,21 +9923,21 @@ gBattleAnimMove_FirstImpression:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 createvisualtask AnimTask_StretchTargetUp, 0x3 waitforvisualfinish - delay 0x19 + delay 25 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x6 waitforvisualfinish monbg ANIM_TARGET @This is placed here on purpose (to not ruin astonishs animation) - delay 0x1 + delay 1 createsprite gFirstImpressionPoundTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0, 0x1, 0x0 loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET 0xA 0x2 - delay 0x1 + delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -28, 0, 0, 3 waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 waitforvisualfinish - delay 0xa + delay 10 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x6 - delay 0x5 + delay 5 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x6 waitforvisualfinish clearmonbg ANIM_TARGET @@ -9879,19 +9951,19 @@ gBattleAnimMove_BanefulBunker:: waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER 0x10 createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0x0, 0x5a createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gBanefulBunkerPoisonBubbleTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -9952,11 +10024,11 @@ gBattleAnimMove_DarkestLariat:: end DarkestLariatImpact: createsprite gDarkestLariatImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0xfff4, 0x1, 0x1 - delay 0x8 + delay 8 createsprite gDarkestLariatImpactTemplate, ANIM_ATTACKER, 3, 0xfff4, 0x8, 0x1, 0x1 - delay 0x8 + delay 8 createsprite gDarkestLariatImpactTemplate, ANIM_ATTACKER, 3, 0xc, 0x0, 0x1, 0x1 - delay 0x8 + delay 8 return gBattleAnimMove_SparklingAria:: @@ -9965,19 +10037,19 @@ gBattleAnimMove_SparklingAria:: loadspritegfx ANIM_TAG_HYDRO_PUMP @hydro pump monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xE, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 14, RGB_BLACK waitforvisualfinish createsprite gSparklingAriaBlueChargeTemplate, ANIM_ATTACKER, 2, 0x0 call SparklingAriaCharge call SparklingAriaCharge call SparklingAriaCharge waitforvisualfinish - delay 0x1E + delay 30 playsewithpan SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER call SparklingAriaRain call SparklingAriaRain waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xE, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 14, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -9986,69 +10058,69 @@ SparklingAriaRain: createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0xdc, 0x3c createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaBubbleRainTemplate, ANIM_TARGET, 2, 0x1, 0x3c, 0x64 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0x8c, 0x37 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0xb4, 0x32 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0x14, 0x5a createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaBubbleRainTemplate, ANIM_TARGET, 2, 0x1, 0x5a, 0x5a createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0xa0, 0x3c createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0x1e, 0x5a createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaRainTemplate, ANIM_TARGET, 2, 0x1, 0x78, 0x3c createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 createsprite gSparklingAriaBubbleRainTemplate, ANIM_TARGET, 2, 0x1, 0xc8, 0x28 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 3, 0, 6, 1 - delay 0x2 + delay 2 return SparklingAriaCharge: playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_ATTACKER createsprite gSparklingAriaBubblesTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 return gBattleAnimMove_IceHammer:: @@ -10057,11 +10129,11 @@ gBattleAnimMove_IceHammer:: loadspritegfx ANIM_TAG_ECLIPSING_ORB @gray color loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - createsprite gIceHammerPunchStompTemplate, ANIM_TARGET, 3, 0x0, 0xffe0, 0xf - delay 0x13 + createsprite gIceHammerPunchStompTemplate, ANIM_TARGET, 3, 0, -32, 15 + delay 19 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_SquishTarget, 0x2 createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x68, 0x0, 0x4b @@ -10077,7 +10149,7 @@ gBattleAnimMove_IceHammer:: createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x50, 0x0, 0x4b createsprite gIceHammerSmokesTemplate, ANIM_TARGET, 4, 0x0, 0x12, 0x48, 0x1, 0x4b call IceCrystalEffectShort - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish blendoff end @@ -10097,27 +10169,27 @@ gBattleAnimMove_FloralHealing:: playsewithpan SE_M_TWISTER, 0x0 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x46, 0x1, 0x40 clearmonbg ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3c, 0x0, 0x40 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0x1, 0x40 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3a, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5a, 0x0, 0x40 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0x0, 0x40 @2 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5f, 0x1, 0x50 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x4b, 0x1, 0x40 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0x0, 0x78 - delay 0x2 + delay 2 loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa monbg ANIM_TARGET call FloralHealingSpores @@ -10126,7 +10198,7 @@ gBattleAnimMove_FloralHealing:: waitforvisualfinish playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 16, 0xfff1, 0x0, 0x1, 0x0, 0x20, 0x3c, 0x1 - delay 0x8 + delay 8 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 16, 0xc, 0xfffb, 0x1, 0x0, 0x20, 0x3c, 0x1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -10134,80 +10206,80 @@ gBattleAnimMove_FloralHealing:: FloralHealingSpores: createsprite gFloralHealingFlowerTemplate, ANIM_ATTACKER, 2, 0x0, 0xffec, 0x55, 0x50, 0x0 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x46, 0x1, 0x40 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3c, 0x0, 0x40 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0x1, 0x40 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3a, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5a, 0x0, 0x40 - delay 0x3 + delay 3 createsprite gFloralHealingFlowerTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0xaa, 0x50, 0x0 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0x0, 0x40 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5f, 0x1, 0x50 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x4b, 0x1, 0x40 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x46, 0x1, 0x40 - delay 0x3 + delay 3 createsprite gFloralHealingFlowerTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff1, 0x0, 0x50, 0x0 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3c, 0x0, 0x40 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0x1, 0x40 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3a, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x64, 0x0, 0x78 - delay 0x2 + delay 2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x5a, 0x0, 0x40 - delay 0x2 + delay 2 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0x0, 0x40 - delay 0x3 + delay 3 return CIRCLES_LEAVES: createsprite gFloralHealingOrbsTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, 0x0 - delay 0x2 + delay 2 createsprite gFloralHealingLeavesTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, 0x0 - delay 0x2 + delay 2 createsprite gFloralHealingOrbsTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, 0x0 - delay 0x2 + delay 2 createsprite gFloralHealingLeavesTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, 0x0 - delay 0x2 + delay 2 createsprite gFloralHealingOrbsTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, 0x0 - delay 0x2 + delay 2 createsprite gFloralHealingLeavesTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, 0x0 - delay 0x2 + delay 2 return gBattleAnimMove_HighHorsepower:: loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @horseshoe monbg ANIM_TARGET - delay 0x2 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x0 + delay 2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 16, RGB_BLACK setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET createsprite gHighHorsepowerHorseshoeTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x32 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x7, 0x7fff - delay 0x32 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE + delay 50 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call SetImpactBackground createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x0, 0x7fff - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0x3, 0x1, 0x0, 0x8, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff - delay 0x2 + delay 2 restorebg waitbgfadein end @@ -10228,7 +10300,7 @@ gBattleAnimMove_StrengthSap:: createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffce, 0xffd8, 0x6 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffd8, 0x28, 0x6 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x32, 0xffce, 0x6 - delay 0x2 + delay 2 createsprite gStrengthSapRedSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x1, 0x0 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x32, 0xffe2, 0x6 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x3c, 0xa, 0x6 @@ -10236,7 +10308,7 @@ gBattleAnimMove_StrengthSap:: createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x0, 0xffd8, 0x6 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffc4, 0x14, 0x6 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffc4, 0xffe2, 0x6 - delay 0x2 + delay 2 createsprite gStrengthSapRedSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x1, 0x0 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffce, 0x32, 0x6 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0xffc4, 0x14, 0x6 @@ -10244,36 +10316,36 @@ gBattleAnimMove_StrengthSap:: createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x14, 0xffc4, 0x6 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x32, 0xffce, 0x6 createsprite gStrengthSapRedInwardTemplate, ANIM_ATTACKER, 4, 0x23, 0x28, 0x6 - delay 0x2 + delay 2 createsprite gStrengthSapRedSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x1, 0x0 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x3, 0x07FD - delay 0x5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 3, RGB(29, 31, 1) + delay 5 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0x0, 0x5, 0x8, 0x1a - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0xa, 0xfffb, 0xfff8, 0x1a - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0xfffb, 0xf, 0x10, 0x21 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0x0, 0xfff1, 0xfff0, 0x24 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0x0, 0x5, 0x8, 0x1a - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0xa, 0xfffb, 0xfff8, 0x1a - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0xfff6, 0x14, 0x14, 0x27 - delay 0x4 + delay 4 playsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET createsprite gStrengthSapAbsorbTemplate, ANIM_ATTACKER, 3, 0x5, 0xffee, 0xffec, 0x23 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x3, 0x0, 0x07FD + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 3, 0, RGB(29, 31, 1) loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3 call GrantingStarsEffect waitforvisualfinish @@ -10290,7 +10362,7 @@ SolarBladeUnleash: loadspritegfx ANIM_TAG_SUNLIGHT @sun rays monbg ANIM_ATTACKER setalpha 13, 3 - createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 6, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 6, RGB_WHITE waitforvisualfinish playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 16, 6, 1, 4 @@ -10299,15 +10371,15 @@ SolarBladeUnleash: call SolarBladeSunRays call SolarBladeSunRays call SolarBladeSunRays - createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, 0x2715, 0x2, 0x2, 0x7ff2, 0x10, 0x0, 0x0 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 waitforvisualfinish call SetSolarBeamBg playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSolarBladeImpactTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1 - delay 0x2 + delay 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 6, 0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 6, 0, RGB_WHITE waitforvisualfinish call UnsetPsychicBg clearmonbg ANIM_ATTACKER @@ -10315,7 +10387,7 @@ SolarBladeUnleash: end SolarBladeSunRays: createsprite gSunlightRaySpriteTemplate, ANIM_ATTACKER, 40 - delay 0x6 + delay 6 return gBattleAnimMove_Leafage:: @@ -10326,7 +10398,7 @@ gBattleAnimMove_Leafage:: createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x14, 0x1 createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1 createsprite gRazorLeafCutterSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x0, 0x1 - delay 0x14 + delay 20 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gLeafageImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x2 waitforvisualfinish @@ -10341,7 +10413,7 @@ gBattleAnimMove_Spotlight:: waitforvisualfinish playsewithpan SE_CONTEST_ICON_CHANGE, SOUND_PAN_ATTACKER createsprite gSpotlightSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff8 - delay 0x40 + delay 64 createvisualtask AnimTask_HardwarePaletteFade, 0x2, 0xf8, 0x3, 0xa, 0x0, 0x1 waitforvisualfinish createvisualtask AnimTask_RemoveSpotlight, 0x2 @@ -10350,11 +10422,11 @@ gBattleAnimMove_Spotlight:: gBattleAnimMove_ToxicThread:: loadspritegfx ANIM_TAG_STRING loadspritegfx ANIM_TAG_WEB_THREAD - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRING, 0, 0xA, 0xA, 0x6038 @Purple - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WEB_THREAD, 0x0, 0xA, 0xA, 0x6038 @Purple + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRING, 0, 10, 10, RGB(24, 1, 24) @Purple + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WEB_THREAD, 0, 10, 10, RGB(24, 1, 24) @Purple monbg ANIM_DEF_PARTNER - delay 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x9, 0x0 + delay 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 9, RGB_BLACK waitforvisualfinish loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 0x9, 0x6 call SpiderWebThread @@ -10378,15 +10450,15 @@ gBattleAnimMove_ToxicThread:: waitforvisualfinish playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET createsprite gToxicThreadString, ANIM_TARGET, 2, 0x0, 0xa - delay 0x4 + delay 4 createsprite gToxicThreadString, ANIM_TARGET, 2, 0x0, 0xfffe - delay 0x4 + delay 4 createsprite gToxicThreadString, ANIM_TARGET, 2, 0x0, 0x16 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER - delay 0x1 + delay 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x9, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 9, 0, RGB_BLACK end gBattleAnimMove_LaserFocus:: @@ -10394,14 +10466,14 @@ gBattleAnimMove_LaserFocus:: loadspritegfx ANIM_TAG_OPENING_EYE @eyes loadspritegfx ANIM_TAG_LEER @leer monbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish createsprite gLaserFocusRedEyesTemplate, ANIM_ATTACKER, 5, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xfff4 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -10409,54 +10481,54 @@ gBattleAnimMove_LaserFocus:: gBattleAnimMove_GearUp:: loadspritegfx ANIM_TAG_GEAR loadspritegfx ANIM_TAG_SPARK_2 @sparks - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x039B + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, RGB(27, 28, 0) createsprite gGearUpGearsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 - delay 0xF + delay 15 playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER createsprite gGearUpGearsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 - delay 0xF + delay 15 playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER createsprite gGearUpGearsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 - delay 0xF + delay 15 playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER call GearUpSparks call GearUpSparks call GearUpSparks playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x039B + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB(27, 28, 0) waitforvisualfinish end GearUpSparks: playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 - delay 0xF + delay 15 playsewithpan SE_ROULETTE_BALL2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 - delay 0xF + delay 15 return gBattleAnimMove_ThroatChop:: @@ -10467,28 +10539,28 @@ gBattleAnimMove_ThroatChop:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x0, 0x0, 0x0, 0xa, 0x1, 0x3, 0x0 + createsprite gKarateChopSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 + createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 - delay 0x3 + delay 3 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 - delay 0x3 + delay 3 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 - delay 0x3 + delay 3 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 - delay 0x3 + delay 3 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 - delay 0x3 + delay 3 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 - delay 0x3 + delay 3 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 - delay 0x3 + delay 3 createsprite gThroatChopRedImpactTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 + createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -10507,18 +10579,18 @@ PollenPuffOpponent: loadspritegfx ANIM_TAG_ORBS @hit monbg ANIM_ATTACKER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER - delay 0xD + delay 13 createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER - delay 0xD + delay 13 createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER - delay 0xD + delay 13 createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER clearmonbg ANIM_ATTACKER @@ -10533,7 +10605,7 @@ PollenPuffOpponent: createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x110, 0x28, 0x0 createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0xB0, 0x28, 0x0 createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x100, 0x28, 0x0 - delay 0x1 + delay 1 playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET createsprite gPollenPuffSporeTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x0, 0x0, 0x19, 0xffe0 waitforvisualfinish @@ -10542,15 +10614,15 @@ PollenPuffOpponent: createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0xFFE0, 0x10 @up createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0xFFEE, 0xFFEE, 0x10 @upperleft createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x1C, 0x10 @down - delay 0x4 + delay 4 createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0xFFE5, 0x0, 0x10 @left createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x14, 0x14, 0x10 @lowerright createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0xFFED, 0x13, 0x10 @lowerleft - delay 0x4 + delay 4 createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x1E, 0x0, 0x10 @right createsprite gPollenPuffImpactTemplates, ANIM_TARGET, 2, 0x1, 0x1, 0x16, 0xFFEA, 0x10 @upperright waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -10563,18 +10635,18 @@ PollenPuffAlly: loadspritegfx ANIM_TAG_SPORE @ball monbg ANIM_ATTACKER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER - delay 0xD + delay 13 createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER - delay 0xD + delay 13 createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER - delay 0xD + delay 13 createsprite gPollenPuffPinkStarTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER clearmonbg ANIM_ATTACKER @@ -10590,21 +10662,21 @@ PollenPuffAlly: createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x10, 0x1e, 0x120, 0x28, 0x0 createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x90, 0x28, 0x0 createsprite gPollenPuffYellowSparkleTemplate, ANIM_TARGET, 4, 0xa, 0x0, 0x8, 0x1e, 0x110, 0x28, 0x0 - delay 0x1 + delay 1 createsprite gPollenPuffSporeTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x0, 0x0, 0x19, 0xffe0 waitforvisualfinish unloadspritegfx ANIM_TAG_SPARKLE_2 @stars loadspritegfx ANIM_TAG_BLUE_STAR @heal playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER createsprite gPollenPuffHealTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0x1, 0x0 - delay 0x7 + delay 7 createsprite gPollenPuffHealTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xa, 0x1, 0x0 - delay 0x7 + delay 7 createsprite gPollenPuffHealTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xfff1, 0x1, 0x0 - delay 0x7 + delay 7 createsprite gPollenPuffHealTemplate, ANIM_ATTACKER, 2, 0xa, 0xfffb, 0x1, 0x0 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x1, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 1, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -10619,14 +10691,14 @@ gBattleAnimMove_AnchorShot:: waitforvisualfinish createsprite gAnchorShotAnchorTemplate, ANIM_ATTACKER, 3, 0x0, 0xffe0, 0xf createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 - delay 0x25 + delay 37 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 waitforvisualfinish loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER 0x1c 0x2 createsprite gAnchorShotChainTemplate, ANIM_TARGET, 2, 0xfff0, 0xfff0 - delay 0x4 + delay 4 createsprite gAnchorShotChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x0 - delay 0x4 + delay 4 createsprite gAnchorShotChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x10 waitforvisualfinish clearmonbg ANIM_TARGET @@ -10681,18 +10753,18 @@ gBattleAnimMove_Lunge:: createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 3, 0, 240, 0 loopsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, 0xe, 0xa createsprite gLungeGreenChargeTemplate, ANIM_ATTACKER, 2 - delay 0x6e - delay 0x3e + delay 110 + delay 62 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER - delay 0x15 + delay 21 clearmonbg ANIM_ATK_PARTNER invisible ANIM_ATTACKER waitforvisualfinish playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER createsprite gLungeGreenBubbleTemplate, ANIM_TARGET, 2, 0xa, 0x0, 0x0, 0x0, 0x19, 0xffe0 - delay 0xF + delay 15 monbg ANIM_DEF_PARTNER - delay 0x1 + delay 1 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x46, 0x0, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x28, 0x28, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xa, 0xffc4, 0x6 @@ -10700,14 +10772,14 @@ gBattleAnimMove_Lunge:: createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffd8, 0x28, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x32, 0xffce, 0x6 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 11, 1 - delay 0x2 + delay 2 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x32, 0xffe2, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x3c, 0xa, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x3c, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0xffd8, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffc4, 0x14, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffc4, 0xffe2, 0x6 - delay 0x2 + delay 2 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffce, 0x32, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffc4, 0x14, 0x6 createsprite gTealAlertSpriteTemplate, ANIM_ATTACKER, 4, 0xffd8, 0xffd8, 0x6 @@ -10728,38 +10800,38 @@ gBattleAnimMove_FireLash:: splitbgprio_foes ANIM_TARGET createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 6 - delay 0x4 + delay 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 8, 1 createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET loadspritegfx ANIM_TAG_SLASH createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 0x1, 0xfff8, 0x0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x8, 0x0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - delay 0x7 + delay 7 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x9 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -10773,21 +10845,21 @@ gBattleAnimMove_PowerTrip:: monbg ANIM_DEF_PARTNER playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call PowerTripBuffUp - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call PowerTripBuffUp - delay 0x8 + delay 8 call PowerTripBuffUp waitforvisualfinish playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createsprite gPowerTripImpactTemplate, ANIM_ATTACKER, 2, 0xFFF5, 0xA, 0x1, 0x2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x5 + delay 5 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createsprite gPowerTripImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0xFFF5, 0x1, 0x2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x5 + delay 5 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createsprite gPowerTripImpactTemplate, ANIM_ATTACKER, 2, 0xA, 0x0, 0x1, 0x2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 @@ -10796,13 +10868,13 @@ gBattleAnimMove_PowerTrip:: end PowerTripBuffUp: createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return @@ -10817,49 +10889,49 @@ gBattleAnimMove_BurnUp:: waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 0x5, 0xA00, 0x0, 0x1, 0xffff waitbgfadein - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x5, 0x1c + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 5, RGB(28, 0, 0) waitforvisualfinish createvisualtask AnimTask_AllocBackupPalBuffer, 0x5 waitforvisualfinish createvisualtask AnimTask_CopyPalUnfadedToBackup, 0x5, 0x0, 0x1 - delay 0x1 + delay 1 createvisualtask AnimTask_CopyPalFadedToUnfaded, 0x5, 0x0 - delay 0x1 + delay 1 loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER 0x9 0x2 createvisualtask AnimTask_CopyPalUnfadedToBackup, 0x5, 0x1, 0x0 - delay 0x1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x0, 0xd, 0x1c + delay 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 13, RGB(28, 0, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 2, 0, 15, 1 waitforvisualfinish - delay 0x1E - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8 + delay 30 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 waitforvisualfinish playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createsprite gBurnUpRedYawnTemplate, ANIM_TARGET, 0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0x0 - delay 0x1 + delay 1 createvisualtask AnimTask_CopyPalFadedToUnfaded, 0x5, 0x1 - delay 0x1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0x0, 0xd, 0x4a52 + delay 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 13, RGB(18, 18, 18) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 3, 0, 15, 1 - delay 0xF - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x0, 0xC, 0x1C - delay 0x1 + delay 15 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 12, RGB(28, 0, 0) + delay 1 createvisualtask AnimTask_CopyPalUnfadedFromBackup, 0x5, 0x0, 0x1 - delay 0x1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x5, 0x0, 0x1c - delay 0x1 + delay 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 5, 0, RGB(28, 0, 0) + delay 1 createvisualtask AnimTask_CopyPalUnfadedFromBackup, 0x5, 0x1, 0x0 - delay 0x1 + delay 1 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 2, 0, 15, 1 call FireSpreadEffect waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0xd, 0x0, 0x4a52 - delay 0x1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 13, 0, RGB(18, 18, 18) + delay 1 createvisualtask AnimTask_FreeBackupPalBuffer, 0x5 - delay 0x1 + delay 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0xC, 0x0, 0x1C + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 12, 0, RGB(28, 0, 0) waitforvisualfinish call UnsetPsychicBg clearmonbg ANIM_DEF_PARTNER @@ -10872,9 +10944,9 @@ gBattleAnimMove_SpeedSwap:: loadspritegfx ANIM_TAG_ORBS @circle monbg ANIM_TARGET panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0 - delay 0xf + delay 15 createsprite gSpeedSwapCircleTemplate, ANIM_TARGET, 2, 0xfff4, 0x18 - delay 0x5 + delay 5 createsprite gSpeedSwapRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0 createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xFFE0, 0x10 createsprite gSpeedSwapOrbTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xFFEA, 0x10 @@ -10911,7 +10983,7 @@ gBattleAnimMove_SmartStrike:: createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 0x2 createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 0x3 createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 0x4 - delay 0x78 + delay 120 setarg 0x7 0xffff waitforvisualfinish monbg ANIM_DEF_PARTNER @@ -10919,7 +10991,6 @@ gBattleAnimMove_SmartStrike:: setalpha 12, 8 call SonicBoomProjectile createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 10, 1 - loadspritegfx ANIM_TAG_FLASH_CANNON_BALL createsprite gSmartStrikeImpactTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x8, 0x1, 0x0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET createsprite gSmartStrikeGemTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0xffe8, 0xa @@ -10934,7 +11005,6 @@ gBattleAnimMove_SmartStrike:: clearmonbg ANIM_DEF_PARTNER blendoff waitforvisualfinish - clearmonbg ANIM_ATTACKER blendoff waitforvisualfinish end @@ -10948,7 +11018,7 @@ gBattleAnimMove_Purify:: setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER createsprite gPurifyWhiteBallTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff8, 0xfff8, 0xfff8, 0x14, 0xffe0 - delay 0x13 + delay 19 playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x68, 0x0, 0x4b createsprite gPurifySmokeTemplate, ANIM_TARGET, 4, 0x0, 0xfff4, 0x48, 0x1, 0x4b @@ -10974,25 +11044,25 @@ gBattleAnimMove_RevelationDance:: loadspritegfx ANIM_TAG_AIR_WAVE @sonicboom loadspritegfx ANIM_TAG_THIN_RING @ring monbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 15, RGB_BLACK waitforvisualfinish playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gRevelationDanceYellowOrbsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x8, 0x64 createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x8, 0x64 - delay 0xf + delay 15 createsprite gRevelationDanceYellowOrbsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe8, 0x8, 0x64 createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe8, 0x8, 0x64 - delay 0xf + delay 15 createsprite gRevelationDanceYellowOrbsTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x18, 0xffe8, 0x8, 0x64 createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xffe8, 0x8, 0x64 - delay 0x1e + delay 30 createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x10, 0xffe8, 0x0, 0x64 createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffe8, 0x0, 0x64 - delay 0x1e + delay 30 createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff0, 0xe, 0x50 createsprite gRevelationDanceYellowFlowerTemplate, ANIM_ATTACKER, 2, 0xffec, 0xfff2, 0x10, 0x50 @@ -11017,7 +11087,7 @@ gBattleAnimMove_RevelationDance:: createsprite gRevelationDanceYellowDispersalTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x70, 0xff80, 0x28 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xF, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 15, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -11039,102 +11109,102 @@ gBattleAnimMove_CoreEnforcer:: createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 createsprite gCoreEnforcerBlueRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 - delay 0x0 + delay 0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 waitforvisualfinish createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 - delay 0x0 + delay 0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 waitforvisualfinish createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 createsprite gCoreEnforcerYellowRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 - delay 0x0 + delay 0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 waitforvisualfinish createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 - delay 0x0 + delay 0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 waitforvisualfinish createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 createsprite gCoreEnforcerGreenRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 - delay 0x0 + delay 0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 waitforvisualfinish createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 - delay 0x0 + delay 0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 - delay 0x5 + delay 5 createsprite gCoreEnforcerBlueSparkTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gCoreEnforcerGreenChargeTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 - delay 0x5 + delay 5 createsprite gCoreEnforcerCircleChargeTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 waitforvisualfinish unloadspritegfx ANIM_TAG_SPARK_2 @yellow color @@ -11148,10 +11218,10 @@ gBattleAnimMove_CoreEnforcer:: loadspritegfx ANIM_TAG_SNORE_Z loadspritegfx ANIM_TAG_EXPLOSION clearmonbg ANIM_ATTACKER - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 0xD, 0xD, 0x079F @Yellow - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 0xA, 0xA, 0x7501 @Royal Blue - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SNORE_Z, 0, 0xA, 0xA, 0x0688 @Green - delay 0x10 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 13, 13, RGB(31, 28, 1) @Yellow + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 10, 10, RGB(1, 8, 29) @Royal Blue + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SNORE_Z, 0, 10, 10, RGB(8, 20, 1) @Green + delay 16 monbg ANIM_TARGET createvisualtask AnimTask_CreateSmallSolarBeamOrbs, 0x5 panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 @@ -11159,79 +11229,79 @@ gBattleAnimMove_CoreEnforcer:: createvisualtask AnimTask_ShakeMon2, 5, ANIM_DEF_PARTNER, 2, 0, 65, 1 createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x0 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff5, 0xffe2, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfffa, 0xffe2, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xffff, 0xffe2, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x5, 0xffe2, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xA, 0xffe2, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xF, 0xffe2, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x14, 0xffe2, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xF, 0xffe7, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x2 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xC, 0xffea, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x9, 0xffed, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x6, 0xfff0, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x3, 0xfff3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x3 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x0, 0xfff6, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfffc, 0xfff9, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff9, 0xfffc, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff6, 0xffff, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x4 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff3, 0x3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfff8, 0x3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xfffd, 0x3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x2, 0x3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x5 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x7, 0x3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0xC, 0x3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x11, 0x3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerImpactTemplate, ANIM_TARGET, 3, 0x16, 0x3, 0x1, 0x3 - delay 0x1 + delay 1 createsprite gCoreEnforcerBeamTemplate, ANIM_TARGET, 3, 0xf, 0x0, 0x14, 0x6 - delay 0x7 + delay 7 createsprite gCoreEnforcerSnoreTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 30, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 2, 0, 30, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 2, 0, 30, 1 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gCoreEnforcerExplosionTemplate, ANIM_ATTACKER, 3, 0xffe8, 0x18, ANIM_TARGET, 0x1 waitforvisualfinish @@ -11248,7 +11318,7 @@ gBattleAnimMove_TropKick:: createsprite gTropKickGreenFootTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x8, 0x0, 0x0, 0xa, 0x1, 0x1, 0x1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - delay 0xA + delay 10 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 @@ -11266,26 +11336,26 @@ gBattleAnimMove_Instruct:: loadspritegfx ANIM_TAG_SPOTLIGHT @spotlight setalpha 12, 8 createsprite gMetronomeFingerSpriteTemplate, ANIM_ATTACKER, 12, 0x0 - delay 0x18 + delay 24 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0x16, 0x3 waitforvisualfinish createvisualtask AnimTask_HardwarePaletteFade, 0x2, 0xf8, 0x3, 0x0, 0xa, 0x0 waitforvisualfinish createsprite gSpotlightSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x8, 0x7DB9 - delay 0x4 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 8, RGB(25, 13, 31) + delay 4 monbg ANIM_TARGET createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(27, 27, 0), 12, 1, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 41, 1 playsewithpan SE_M_BIND, SOUND_PAN_TARGET - delay 0x1A + delay 26 createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(27, 27, 0), 12, 1, 1 playsewithpan SE_M_BIND, SOUND_PAN_TARGET - delay 0x1A + delay 26 createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(27, 27, 0), 12, 1, 1 playsewithpan SE_M_BIND, SOUND_PAN_TARGET - delay 0x1D - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x8, 0x0, 0x7DB9 + delay 29 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 8, 0, RGB(25, 13, 31) waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -11294,21 +11364,21 @@ gBattleAnimMove_Instruct:: gBattleAnimGeneral_BeakBlastSetUp:: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - delay 0x3 + delay 3 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 waitforvisualfinish end gBattleAnimMove_BeakBlast:: loadspritegfx ANIM_TAG_IMPACT - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, RGB_RED waitforvisualfinish createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER waitforvisualfinish - delay 0x2 + delay 2 createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0x1 - delay 0x2 + delay 2 loopsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET 0x4 0x8 createvisualtask AnimTask_DrillPeckHitSplats, 0x5 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 18, 1 @@ -11317,7 +11387,7 @@ gBattleAnimMove_BeakBlast:: waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x6 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x9, 0x0, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_RED waitforvisualfinish end @@ -11326,46 +11396,46 @@ gBattleAnimMove_ClangingScales:: loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x2002 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_METAL_SOUND_WAVES, 0, 10, 10, 0x642D + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB(2, 0, 8) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_METAL_SOUND_WAVES, 0, 10, 10, RGB(13, 1, 25) waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 2, 0, 8, 1 call ClangingScalesMetalSound call ClangingScalesMetalSound call ClangingScalesMetalSound call ClangingScalesMetalSound - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 15, 1 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER - delay 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x2002 + delay 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB(2, 0, 8) waitforvisualfinish end ClangingScalesMetalSound: panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createsprite gClangingScalesPurpleMetalSoundTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x1e, 0x0, ANIM_TARGET createsprite gClangingScalesPurpleMetalSoundTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x1e, 0x0, ANIM_DEF_PARTNER - delay 0x2 + delay 2 return gBattleAnimMove_DragonHammer:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_GRAY_SMOKE - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, 0x7D7F @Pinkish purple + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, RGB(31, 11, 31) @Pinkish purple fadetobg BG_COSMIC waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, -500, 0x0, 0xffff waitbgfadein setalpha 15, 0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 - delay 0x6 + delay 6 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 - delay 0x2 + delay 2 createvisualtask AnimTask_SquishTarget, 0x2 - delay 0x5 + delay 5 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gOctazookaSmokeSpriteTemplate, ANIM_TARGET, 2, 8, 8, 1, 0 delay 2 @@ -11399,21 +11469,21 @@ gBattleAnimMove_BrutalSwing:: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x6, 0x1, 0x0 waitforvisualfinish - delay 0xb + delay 11 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 26, 0, 0, 5 - delay 0x6 + delay 6 createsprite gBrutalSwingBasicImpactTemplate, ANIM_TARGET, 3, 0xffe0, 0xfff0, 0x1, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 21, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 21, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATK_PARTNER, 0, 3, 21, 1 - delay 0x4 + delay 4 createsprite gBrutalSwingRandomImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gBrutalSwingRandomImpactTemplate, ANIM_TARGET, 3, 0x1, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gBrutalSwingBasicImpactTemplate, ANIM_TARGET, 3, 0x20, 0x14, 0x1, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitsound @@ -11434,9 +11504,9 @@ gBattleAnimMove_AuroraVeil:: setalpha 8, 8 playsewithpan SE_M_MILK_DRINK, SOUND_PAN_ATTACKER createsprite gAuroraVeilRingTemplate, ANIM_ATTACKER, 2 - delay 0x4 + delay 4 createsprite gAuroraVeilRingTemplate, ANIM_ATTACKER, 2 - delay 0x4 + delay 4 createsprite gAuroraVeilRingTemplate, ANIM_ATTACKER, 2 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER @@ -11454,9 +11524,9 @@ gBattleAnimGeneral_ShellTrapSetUp:: monbg ANIM_TARGET setalpha 12, 8 call FireSpreadEffect - delay 0x4 + delay 4 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET - delay 0x15 + delay 21 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, ANIM_TARGET, 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 @@ -11474,171 +11544,171 @@ ShellTrapUnleash: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red monbg ANIM_TARGET waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 - delay 0x6 + delay 6 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 - delay 0x5 + delay 5 waitforvisualfinish call ShellTrapFireLaunch1 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 - delay 0x3 + delay 3 call ShellTrapFireLaunch2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 - delay 0x3 + delay 3 waitforvisualfinish clearmonbg ANIM_TARGET end ShellTrapFireLaunch1: createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 - delay 0x3 + delay 3 return ShellTrapFireLaunch2: createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x3 + delay 3 createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - delay 0x3 + delay 3 return gBattleAnimMove_FleurCannon:: @@ -11648,7 +11718,7 @@ gBattleAnimMove_FleurCannon:: loadspritegfx ANIM_TAG_PINK_HEART @pink color setalpha 12, 8 monbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x7440 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 15, RGB(0, 2, 29) waitforvisualfinish panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 @@ -11675,14 +11745,14 @@ gBattleAnimMove_FleurCannon:: call FleurCannonBeam call FleurCannonBeam call FleurCannonBeam - delay 0x20 + delay 32 createsprite gFleurCannonDischargeTemplate, ANIM_ATTACKER, 2, 0x1, 0x10, 0x10 - delay 0x2 + delay 2 createsprite gFleurCannonDischargeTemplate, ANIM_ATTACKER, 2, 0x1, 0xfff0, 0xfff0 - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 11, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7440 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB(0, 2, 29) waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -11690,10 +11760,10 @@ gBattleAnimMove_FleurCannon:: FleurCannonBeam: createsprite gFleurCannonOrbTemplate, ANIM_TARGET, 2 createsprite gFleurCannonOrbTemplate, ANIM_TARGET, 2 - delay 0x1 + delay 1 createsprite gFleurCannonOrbTemplate, ANIM_TARGET, 2 createsprite gFleurCannonOrbTemplate, ANIM_TARGET, 2 - delay 0x1 + delay 1 return gBattleAnimMove_PsychicFangs:: @@ -11709,14 +11779,14 @@ PsychicFangsRegular: playsewithpan SE_M_BITE, SOUND_PAN_TARGET createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa - delay 0xa + delay 10 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 5, 2 - delay 0x10 + delay 16 playsewithpan SE_M_BITE, SOUND_PAN_TARGET createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x7, 0xfccd, 0x333, 0xa createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x3, 0x333, 0xfccd, 0xa - delay 0xa + delay 10 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 8, 4, 2 PsychicFangsEnd: @@ -11731,14 +11801,14 @@ PsychicFangsDestroyWall: playsewithpan SE_M_BITE, SOUND_PAN_TARGET createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa - delay 0xa + delay 10 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 5, 2 - delay 0x10 + delay 16 playsewithpan SE_M_BITE, SOUND_PAN_TARGET createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffe0, 0x7, 0xfccd, 0x333, 0xa createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x20, 0x3, 0x333, 0xfccd, 0xa - delay 0xa + delay 10 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 1 createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0xfff8, 0xfff4 createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1, 0x8, 0xfff4 @@ -11746,7 +11816,7 @@ PsychicFangsDestroyWall: createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3, 0x8, 0xc playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 8, 4, 2 - delay 0x10 + delay 16 goto PsychicFangsEnd gBattleAnimMove_StompingTantrum:: @@ -11756,7 +11826,7 @@ gBattleAnimMove_StompingTantrum:: loadspritegfx ANIM_TAG_SMALL_EMBER @hit color monbg ANIM_TARGET createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 - delay 0x5 + delay 5 createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x5 createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x5 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 @@ -11765,14 +11835,14 @@ gBattleAnimMove_StompingTantrum:: createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x3 call StompingTantrumImpact playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x25 + delay 37 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x1 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x2 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x3 call StompingTantrumImpact playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x25 + delay 37 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x1 createsprite gStompingTantrumRockTemplate, ANIM_ATTACKER, 2, 0x0, 0x2 @@ -11783,7 +11853,7 @@ gBattleAnimMove_StompingTantrum:: clearmonbg ANIM_TARGET end StompingTantrumImpact: - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x1 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 return gBattleAnimMove_ShadowBone:: @@ -11796,10 +11866,10 @@ gBattleAnimMove_ShadowBone:: setalpha 12, 8 playsewithpan SE_M_BONEMERANG, SOUND_PAN_TARGET createsprite gSpinningBoneSpriteTemplate, ANIM_ATTACKER, 2, 0xffd6, 0xffe7, 0x0, 0x0, 0xf - delay 0xc + delay 12 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x7, 0x5, 0x1, 0x0, 0xa, 0x0, 0x0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 0x5, 0x1, 0x0, 10, RGB_BLACK, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_NightmareClone, 0x2 @@ -11820,7 +11890,7 @@ gBattleAnimMove_Accelerock:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 createvisualtask AnimTask_TraceMonBlended, 0x2, 0x0, 0x4, 0x7, 0x3 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER - delay 0x4 + delay 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET @@ -11843,7 +11913,7 @@ gBattleAnimMove_Liquidation:: monbg ANIM_TARGET setalpha 12, 8 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 - delay 0x6 + delay 6 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET @@ -11863,10 +11933,9 @@ gBattleAnimMove_PrismaticLaser:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation loadspritegfx ANIM_TAG_TEAL_ALERT @straight lines loadspritegfx ANIM_TAG_GREEN_SPIKE @needle arm animation - loadspritegfx ANIM_TAG_NEEDLE @sting monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER createsprite gPrismaticLaserChargeTemplate, ANIM_ATTACKER, 2, 0x0 call PrismaticLaserInwardSpikes @@ -11877,22 +11946,23 @@ gBattleAnimMove_PrismaticLaser:: playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER call PrismaticLaserInwardSpikes playsewithpan SE_ELEVATOR, SOUND_PAN_ATTACKER - delay 0x1E + delay 30 call PrismaticLaserOutwardSpikes - delay 0x5 + delay 5 call PrismaticLaserOutwardSpikes2 - delay 0x5 + delay 5 call PrismaticLaserOutwardSpikes - delay 0x5 + delay 5 call PrismaticLaserOutwardSpikes2 - delay 0x5 + delay 5 call PrismaticLaserOutwardSpikes waitforvisualfinish unloadspritegfx ANIM_TAG_TEAL_ALERT unloadspritegfx ANIM_TAG_GREEN_SPIKE unloadspritegfx ANIM_TAG_ICE_CHUNK unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT - delay 0x1E + loadspritegfx ANIM_TAG_NEEDLE @sting + delay 30 createvisualtask AnimTask_HorizontalShake, 5, (MAX_BATTLERS_COUNT + 1), 10, 0x32 createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 0x32 playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER @@ -11901,7 +11971,7 @@ gBattleAnimMove_PrismaticLaser:: call PrismaticLaserRain call PrismaticLaserRain waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -11931,48 +12001,48 @@ PrismaticLaserOutwardSpikes2: PrismaticLaserInwardSpikes: createsprite gPrismaticLaserRedInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0, 0xFF90, 0x10 @up createsprite gPrismaticLaserVioletInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFE0, 0x43, 0x10 @between lower left and down - delay 0x1 + delay 1 createsprite gPrismaticLaserGreenInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x5F, 0xFF9D, 0x10 @upper right createsprite gPrismaticLaserYellowInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1F, 0x37, 0x10 @between lower right and down createsprite gPrismaticLaserYellowInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFDA, 0xFF94, 0x10 @between up and upper left - delay 0x1 + delay 1 createsprite gPrismaticLaserYellowInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x73, 0x0, 0x10 @right createsprite gPrismaticLaserRedInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFF60, 0x43, 0x10 @between left and lower left - delay 0x1 + delay 1 createsprite gPrismaticLaserVioletInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x4F, 0x37, 0x10 @lower right createsprite gPrismaticLaserGreenInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFF2A, 0xFFAA, 0x10 @between left and upper left - delay 0x1 + delay 1 createsprite gPrismaticLaserRedInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0, 0x53, 0x10 @down createsprite gPrismaticLaserVioletInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x2D, 0xFF9D, 0x10 @between up and upper right - delay 0x1 + delay 1 createsprite gPrismaticLaserGreenInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFB0, 0x43, 0x10 @lower left createsprite gPrismaticLaserRedInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xDF, 0xFF9D, 0x10 @between right and upper right - delay 0x1 + delay 1 createsprite gPrismaticLaserYellowInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFF60, 0x0, 0x10 @left createsprite gPrismaticLaserGreenInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x9F, 0x37, 0x10 @between right and lower right - delay 0x1 + delay 1 createsprite gPrismaticLaserVioletInwardTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xFFAA, 0xFF94, 0x10 @upper left - delay 0x1 + delay 1 return PrismaticLaserRain: createsprite gPrismaticLaserYellowRainTemplate, ANIM_TARGET, 2, 35, 0x3c, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserGreenRainTemplate, ANIM_TARGET, 2, -30, 0x44, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserRedRainTemplate, ANIM_TARGET, 2, 27, 0x37, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserVioletRainTemplate, ANIM_TARGET, 2, -20, 0x32, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserYellowRainTemplate, ANIM_TARGET, 2, 33, 0x3a, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserGreenRainTemplate, ANIM_TARGET, 2, -12, 0x3a, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserRedRainTemplate, ANIM_TARGET, 2, 19, 0x3c, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserVioletRainTemplate, ANIM_TARGET, 2, -38, 0x3a, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserYellowRainTemplate, ANIM_TARGET, 2, 5, 0x3c, 4, ANIM_TARGET - delay 0x2 + delay 2 createsprite gPrismaticLaserGreenRainTemplate, ANIM_TARGET, 2, -23, 0x28, 4, ANIM_TARGET return @@ -11987,77 +12057,77 @@ SpectralThiefUnleash: loadspritegfx ANIM_TAG_POISON_BUBBLE fadetobg BG_GHOST waitbgfadein - delay 0x5 + delay 5 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x0, 0x0 invisible ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0x8, 0x8, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0xfff8, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0x8, 0xfff8, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gSpectralThiefBlackSmokeTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x0, 0x0 waitforvisualfinish playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitforvisualfinish createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 - delay 0x30 + delay 48 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 24, 1 - createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x2, 0x6, 0x1, 0x0, 0xc, 0x77bd - delay 0x18 - createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x2, 0x6, 0x1, 0xc, 0x0, 0x77bd + createvisualtask AnimTask_BlendBattleAnimPalExclude, 2, 6, 1, 0, 12, RGB(29, 29, 29) + delay 24 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 2, 6, 1, 12, 0, RGB(29, 29, 29) waitforvisualfinish setalpha 0, 16 - delay 0x1 + delay 1 monbg_static ANIM_TARGET createvisualtask AnimTask_MoveTargetMementoShadow, 0x5 playsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET waitforvisualfinish clearmonbg_static ANIM_TARGET - delay 0x1 + delay 1 blendoff - delay 0x1 + delay 1 setalpha 12, 8 monbg ANIM_TARGET - delay 0x1 + delay 1 createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x4 + delay 4 createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x4 + delay 4 createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x4 + delay 4 createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x4 + delay 4 createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x4 + delay 4 createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x4 + delay 4 createsprite gSpectralThiefThiefImpactTemplate, ANIM_TARGET, 2, 0x14, 0x2, 0x0 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish visible ANIM_ATTACKER - delay 0x2 + delay 2 restorebg waitbgfadein clearmonbg ANIM_TARGET @@ -12070,30 +12140,30 @@ SpectralThiefSteal: setalpha 11, 5 splitbgprio_all panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, 0xfd, 0x0 - delay 0xf + delay 15 createsprite gSpectralThiefBlackOrbsTemplate, ANIM_TARGET, 2, 0xfff4, 0x18 - delay 0xB + delay 11 setarg 0x7 0xffff waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call SpectralThiefBuffUp - delay 0x8 + delay 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call SpectralThiefBuffUp - delay 0x8 + delay 8 call SpectralThiefBuffUp waitforvisualfinish blendoff end SpectralThiefBuffUp: createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return @@ -12107,11 +12177,11 @@ gBattleAnimMove_SunsteelStrike:: playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET createsprite gSunsteelStrikeBlackFlyBallTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATK_PARTNER, 1, 20 - delay 0x18 - createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0x0, 0x0 @The rock particles mess up the fly animation - createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0x0, 0x1 - createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0x0, 0x2 - createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0x0, 0x3 + delay 24 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 0 @The rock particles mess up the fly animation + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 1 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 2 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 3 waitforvisualfinish unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly unloadspritegfx ANIM_TAG_AIR_WAVE_2 @black color @@ -12135,7 +12205,7 @@ gBattleAnimMove_SunsteelStrike:: stopsound playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gSunsteelStrikeSuperpowerTemplate, ANIM_TARGET, 2, 0x14 - delay 0x14 + delay 20 createsprite gSunsteelStrikeRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x0 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 waitforvisualfinish @@ -12145,7 +12215,7 @@ gBattleAnimMove_SunsteelStrike:: unloadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_SMALL_EMBER @FireSpreadEffect call FireSpreadEffect - delay 0x4 + delay 4 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET waitforvisualfinish visible ANIM_ATTACKER @@ -12156,9 +12226,9 @@ gBattleAnimMove_SunsteelStrike:: end SunsteelStrikeBeam: createsprite gSunsteelStrikeYellowBeamTemplate, ANIM_TARGET, 2, 0x14 - delay 0x1 + delay 1 createsprite gSunsteelStrikeRedBeamTemplate, ANIM_TARGET, 2, 0x14 - delay 0x1 + delay 1 return gBattleAnimMove_MoongeistBeam:: @@ -12169,9 +12239,9 @@ gBattleAnimMove_MoongeistBeam:: loadspritegfx ANIM_TAG_WATER_GUN @water gun colour loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple colour setalpha 8, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 15, 15, 0x7FFF @White - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 15, 15, 0x7FFC @Light Blue + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 15, 15, RGB_WHITE @White + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 15, 15, RGB(28, 31, 31) @Light Blue waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET createsprite gMoonSpriteTemplate, ANIM_TARGET, 0, 0x20, 0x15 @@ -12182,8 +12252,8 @@ gBattleAnimMove_MoongeistBeam:: call MoongeistBeamCharge createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0 @;Charge circle call MoongeistBeamCharge - delay 0x20 - createsoundtask SoundTask_LoopSEAdjustPanning, 0x7, 0xCC, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 + delay 32 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call MoongeistBeamOrbs @@ -12192,7 +12262,7 @@ gBattleAnimMove_MoongeistBeam:: call MoongeistBeamOrbs call MoongeistBeamOrbs createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0xb, 0x6739 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(25, 25, 25) call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs @@ -12222,8 +12292,8 @@ gBattleAnimMove_MoongeistBeam:: call MoongeistBeamOrbs call MoongeistBeamOrbs call MoongeistBeamOrbs - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0xb, 0x0, 0x6739 - delay 0x1A + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(25, 25, 25) + delay 26 stopsound createvisualtask AnimTask_MoonlightEndFade, 0x2 end @@ -12234,36 +12304,36 @@ MoongeistBeamCharge: createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, 25, -40, 0, 0, 30, 20 @From top right createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, 25, 20, 0, 0, 30, 20 @From bottom right createsprite gMoongeistBeamChargeTemplate, ANIM_ATTACKER, 0, -25, 40, 0, 0, 30, -20 @From bottom left - delay 0x5 + delay 5 return MoongeistBeamOrbs: createsprite gMoongeistBeamBlueOrbsTemplate, ANIM_TARGET, 2 createsprite gMoongeistBeamPurpleOrbsTemplate, ANIM_TARGET, 2 - delay 0x1 + delay 1 return gBattleAnimMove_TearfulLook:: loadspritegfx ANIM_TAG_SMALL_BUBBLES @tears loadspritegfx ANIM_TAG_OPENING_EYE @eye monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x5, 0x7DE0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 5, RGB(0, 15, 31) waitforvisualfinish playsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET createsprite gOpeningEyeSpriteTemplate, ANIM_ATTACKER, 5, 0x0, 0x0, 0x1, 0x0 - delay 0x35 + delay 53 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 0xC, 0x2 - delay 0x8 + delay 8 createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0 createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1 createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2 createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3 - delay 0x8 + delay 8 createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0 createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1 createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2 createsprite gTearDropSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x3 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x5, 0x0, 0x7DE0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 5, 0, RGB(0, 15, 31) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -12277,24 +12347,24 @@ gBattleAnimMove_ZingZap:: monbg ANIM_TARGET call ZingZapSparks1 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 4, 0, 6, 1 - delay 0xA + delay 10 call ZingZapSparks2 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 4, 0, 6, 1 - delay 0xA + delay 10 call ZingZapSparks1 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 4, 0, 6, 1 - delay 0xA + delay 10 call ZingZapSparks2 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 4, 0, 6, 1 - delay 0xA + delay 10 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 - delay 0x4 + delay 4 call ZingZapSparks1 invisible ANIM_ATTACKER createsprite gZingZapYellowBallTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xF - delay 0xA + delay 10 call ZingZapSparks2 - delay 0x5 + delay 5 stopsound playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER waitforvisualfinish @@ -12308,7 +12378,7 @@ gBattleAnimMove_ZingZap:: ZingZapSparks1: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 return @@ -12316,7 +12386,7 @@ ZingZapSparks2: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 return @@ -12328,47 +12398,47 @@ gBattleAnimMove_NaturesMadness:: loadspritegfx ANIM_TAG_ICE_CHUNK @blue green CrystalsTemplate monbg ANIM_ATTACKER setalpha 14, 8 - delay 0x1 + delay 1 loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3 createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x14, 0xa, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff6, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xf, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0x19, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x0 - delay 0x4 + delay 4 createsprite gNaturesMadnessPinkRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1F, 0x8 createsprite gNaturesMadnessPinkStarsTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x0 clearmonbg ANIM_ATTACKER - delay 0x1 + delay 1 monbg ANIM_TARGET waitforvisualfinish unloadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green grayRing createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0 playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER - delay 0xe + delay 14 createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0 playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER - delay 0xe + delay 14 createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0 playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER waitforvisualfinish @@ -12393,9 +12463,9 @@ gBattleAnimMove_NaturesMadness:: createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xffec, 0x14, 0x19, 0x1 createsprite gNaturesMadnessCrystalsTemplate, ANIM_ATTACKER, 2, 0xc, 0x0, 0x19, 0x1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish clearmonbg ANIM_TARGET @@ -12406,36 +12476,36 @@ gBattleAnimMove_MultiAttack:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CUT @cut monbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call MultiAttackBuff - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call MultiAttackBuff - delay 0x8 + delay 8 call MultiAttackBuff waitforvisualfinish - delay 0xF + delay 15 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0xffe0, 0x0 createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0xffd0, 0x0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end MultiAttackBuff: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return @@ -12447,7 +12517,7 @@ gBattleAnimMove_MindBlown:: loadspritegfx ANIM_TAG_IMPACT @hit monbg ANIM_TARGET setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_FALL, SOUND_PAN_TARGET createsprite gMindBlownHeadTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x25 @@ -12455,22 +12525,22 @@ gBattleAnimMove_MindBlown:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 2, 0, 15, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATK_PARTNER, 2, 0, 15, 1 - delay 0x1 + delay 1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMindBlownBlueImpactTemplate, ANIM_TARGET, 3, 0x1, 0x0 createsprite gMindBlownPinkImpactTemplate, ANIM_TARGET, 3, 0x1, 0x0 call MindBlownBlueOrbs - delay 0x1 + delay 1 call MindBlownPinkOrbs - delay 0x1 + delay 1 call MindBlownBlueOrbs - delay 0x1 + delay 1 call MindBlownPinkOrbs - delay 0x1 + delay 1 call MindBlownBlueOrbs - delay 0x1 + delay 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish blendoff clearmonbg ANIM_TARGET @@ -12505,32 +12575,32 @@ gBattleAnimMove_PlasmaFists:: loadspritegfx ANIM_TAG_LIGHTNING @thunder punch monbg ANIM_ATTACKER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK waitforvisualfinish createsprite gPlasmaFistsChargeTemplate, ANIM_ATTACKER, 2, 0x0 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 3, 92, 1 call PlasmaFistSpark1 - delay 0xA + delay 10 call PlasmaFistSpark2 - delay 0xA + delay 10 call PlasmaFistSpark1 - delay 0xA + delay 10 call PlasmaFistSpark2 - delay 0xA + delay 10 call PlasmaFistSpark1 - delay 0xA + delay 10 call PlasmaFistSpark2 - delay 0xA + delay 10 call PlasmaFistSpark1 - delay 0xA + delay 10 call PlasmaFistSpark2 - delay 0xA + delay 10 call PlasmaFistSpark1 - delay 0xA + delay 10 call PlasmaFistSpark2 - delay 0xA + delay 10 call PlasmaFistSpark1 - delay 0xA + delay 10 call PlasmaFistSpark2 waitforvisualfinish clearmonbg ANIM_ATTACKER @@ -12541,7 +12611,7 @@ gBattleAnimMove_PlasmaFists:: waitforvisualfinish call PlasmaFistsImpact waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -12550,7 +12620,7 @@ PlasmaFistSpark1: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB(31, 31, 22) createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 return @@ -12558,25 +12628,25 @@ PlasmaFistSpark2: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 return PlasmaFistsImpact: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x8, 0x1, 0x0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 - delay 0x1 - createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffd0 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10 - delay 0x1 + delay 1 + createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -48 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_ATTACKER, 2, 0, 16 + delay 1 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 - delay 0x2 + createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 + delay 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 return @@ -12594,34 +12664,34 @@ gBattleAnimMove_PhotonGeyser:: call PhotonGeyserSparks1 createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xffd8, 0x10 createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x28, 0x10 - delay 0xA + delay 10 call PhotonGeyserSparks2 - delay 0xA + delay 10 call PhotonGeyserSparks1 - delay 0xA + delay 10 call PhotonGeyserSparks2 - delay 0xA + delay 10 call PhotonGeyserSparks1 createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd8, 0x10 createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0x14, 0x10 - delay 0xA + delay 10 call PhotonGeyserSparks2 - delay 0xA + delay 10 call PhotonGeyserSparks1 - delay 0xA + delay 10 call PhotonGeyserSparks2 - delay 0xA + delay 10 call PhotonGeyserSparks1 createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0x0, 0x10 createsprite gPowerAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0x0, 0x10 - delay 0xA + delay 10 call PhotonGeyserSparks2 - delay 0xA + delay 10 call PhotonGeyserSparks1 - delay 0xA + delay 10 call PhotonGeyserSparks2 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xF, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 15, RGB_BLACK clearmonbg ANIM_ATTACKER playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER unloadspritegfx ANIM_TAG_ORBS @recover @@ -12649,13 +12719,13 @@ gBattleAnimMove_PhotonGeyser:: unloadspritegfx ANIM_TAG_AIR_WAVE_2 @white/gray color @Shoot beam to the sky loadspritegfx ANIM_TAG_STRAIGHT_BEAM - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x6, 0x0, 0x10, 0x43FF @Light yellow + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 6, 0, 16, RGB(31, 31, 16) @Light yellow createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 4, 0, 96, 1 panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 call PhotonGeyserBeam waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x10, 0x0, 0x43FF @Light yellow - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xF, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 16, 0, RGB(31, 31, 16) @Light yellow + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 15, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -12664,7 +12734,7 @@ PhotonGeyserSparks1: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gThinRingShrinkingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0 - delay 0x0 + delay 0 createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1 return @@ -12672,22 +12742,22 @@ PhotonGeyserSparks2: playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1 - delay 0x0 + delay 0 createsprite gPhotonGeyserSparkTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return PhotonGeyserBeam: createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, 19, ANIM_TARGET, 180, 2, 6 - delay 0x1 + delay 1 createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, 3, ANIM_TARGET, 180, 2, 5 - delay 0x1 + delay 1 createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -13, ANIM_TARGET, 180, 2, 4 - delay 0x1 + delay 1 createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -29, ANIM_TARGET, 180, 2, 3 - delay 0x1 + delay 1 createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -45, ANIM_TARGET, 180, 2, 2 - delay 0x1 + delay 1 createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -61, ANIM_TARGET, 180, 2, 1 - delay 0x1 + delay 1 createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -77, ANIM_TARGET, 180, 2, 0 return @@ -12863,7 +12933,7 @@ gBattleAnimMove_GlitzyGlow:: loadspritegfx ANIM_TAG_POISON_BUBBLE @violet color loadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 12, 12, 0x289F + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 12, 12, RGB(31, 4, 10) monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, 0 @Darken @@ -13005,8 +13075,8 @@ gBattleAnimMove_FreezyFrost:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_ICE_SPIKES loadspritegfx ANIM_TAG_IMPACT - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICICLE_SPEAR, 0, 0, 12, RGB_BLACK - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICE_SPIKES, 0, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ICICLE_SPEAR, 0, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ICE_SPIKES, 0, 0, 12, RGB_BLACK waitforvisualfinish call FreezyFrostHitEffect call FreezyFrostHitEffect @@ -13086,9 +13156,9 @@ gBattleAnimMove_DoubleIronBash:: createvisualtask AnimTask_AnimateGustTornadoPalette, 0x5, 0x1, 0x46 createsprite gGustToTargetSpriteTemplate, ANIM_ATTACKER, 2, 0xffe7, 0x0, 0x0, 0x0, 0x0 @wing attack createsprite gGustToTargetSpriteTemplate, ANIM_ATTACKER, 2, 0x19, 0x0, 0x0, 0x0, 0x0 @wing attack - delay 0x18 + delay 24 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 9 - delay 0x11 + delay 17 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 0, 3 waitforvisualfinish @@ -13096,7 +13166,7 @@ gBattleAnimMove_DoubleIronBash:: waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0xb waitforvisualfinish - delay 0x3 + delay 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x7 clearmonbg ANIM_DEF_PARTNER blendoff @@ -13104,7 +13174,69 @@ gBattleAnimMove_DoubleIronBash:: @@@@@@@@@@@@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@@@@@@@@@@@@ gBattleAnimMove_DynamaxCannon:: - goto gBattleAnimMove_HyperBeam + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ORBS @hyper beam + loadspritegfx ANIM_TAG_WATER_GUN @water gun colour + loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple colour + loadspritegfx ANIM_TAG_HYDRO_PUMP + loadspritegfx ANIM_TAG_SPARK_2 @spark + loadspritegfx ANIM_TAG_LEAF @green + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 15, 15, RGB(30, 2, 11) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 15, 15, RGB(30, 2, 11) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB(30, 2, 11) + setalpha 8, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 2, 0, 15, 0 + waitforvisualfinish + loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 14, 10 + createsprite gGrowingChargeOrb3SpriteTemplate, ANIM_ATTACKER, 2, 0 @;Charge circle + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + call LightThatBurnsTheSkyGreenSparks + delay 20 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 2, 15, 0, 0 + fadetobg BG_DYNAMAX_CANNON + waitbgfadein + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 4, 10) @Pinkish Red + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER SOUND_PAN_TARGET 2 0 + createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 87, 1 + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 0, 4, 81, 1 + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + call DynamaxCannonLaunch + waitforvisualfinish + restorebg + waitbgfadein + blendoff + end + +DynamaxCannonLaunch: + createsprite gSpriteTemplate_DynamaxCannonOrb, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + createsprite gSpriteTemplate_DynamaxCannonOrb, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + return gBattleAnimMove_SnipeShot:: loadspritegfx ANIM_TAG_IMPACT_2 @@ -13114,7 +13246,7 @@ gBattleAnimMove_SnipeShot:: createsprite gLeerSpriteTemplate, ANIM_TARGET, 2, 0x18, -12 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER waitforvisualfinish - delay 0x20 + delay 32 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET createsprite gSnipeShotBallTemplate, ANIM_TARGET, 2, 0, 0, 16 waitforvisualfinish @@ -13127,21 +13259,21 @@ gBattleAnimMove_SnipeShot:: gBattleAnimMove_JawLock:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0B1D @Light orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, RGB(29, 24, 2) @Light orange monbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x7, 0x0 @Black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 7, RGB_BLACK @Black waitforvisualfinish playsewithpan SE_M_BITE, SOUND_PAN_TARGET createsprite gJawLockTeethTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffe0, 0x1, 0x333, 0x333, 0xa, 15 createsprite gJawLockTeethTemplate, ANIM_ATTACKER, 2, 0x20, 0x20, 0x5, 0xfccd, 0xfccd, 0xa, 15 - delay 0xa + delay 10 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 10, 2 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x7, 0x0, 0x0 @;Black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 7, 0, RGB_BLACK @;Black waitforvisualfinish clearmonbg ANIM_TARGET - delay 0x1 + delay 1 end gBattleAnimMove_StuffCheeks:: @@ -13150,23 +13282,23 @@ gBattleAnimMove_StuffCheeks:: loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_METRONOME, 0xc0 createsprite gFloatingBerryTemplate, ANIM_ATTACKER, 1, 0x0 - delay 0x45 + delay 69 createvisualtask AnimTask_IsTargetPlayerSide, 0x2 jumpargeq 0x7 0x1 BERRYEAT_ON_PLAYER BerryEatingOpponent: call BiteOpponent - delay 0x10 + delay 16 call BiteOpponent - delay 0xA + delay 10 goto POST_BERRY_EAT BERRYEAT_ON_PLAYER: call BitePlayer - delay 0x10 + delay 16 call BitePlayer - delay 0xA + delay 10 POST_BERRY_EAT: playsewithpan SE_SHINY, 0xc0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x2, 0x3, 0x7, 0x0, 0x67f1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 7, 0, RGB(17, 31, 25) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish end @@ -13192,22 +13324,22 @@ gBattleAnimMove_NoRetreat:: gBattleAnimMove_TarShot:: loadspritegfx ANIM_TAG_POISON_BUBBLE - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 15, 15, 0 @Black + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 15, 15, RGB_BLACK @Black monbg ANIM_TARGET createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0x0, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0x5 + delay 5 createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0xffe8, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0xf + delay 15 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 16, RGB_BLACK @;Black createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xffe6, 0xffe8, 0x0, 0xf, 0x37 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET - delay 0xa + delay 10 createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xf, 0xffe5, 0x0, 0xC, 0x32 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET - delay 0xa + delay 10 createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xfff1, 0xffef, 0x0, 0xa, 0x2d playsewithpan SE_M_BUBBLE SOUND_PAN_TARGET waitforvisualfinish @@ -13221,17 +13353,17 @@ gBattleAnimMove_MagicPowder:: createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xffe2, 0xffea, 0x75, 0x50, 0x5, 0x1 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xa, 0xffea, 0x75, 0x50, 0xfffb, 0x1 createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xffe7, 0xffea, 0x75, 0x70, 0x5, 0x3 - delay 0xf + delay 15 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfffb, 0xffea, 0x75, 0x50, 0xfffb, 0x1 createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xffea, 0x75, 0x60, 0x5, 0x1 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0x0, 0xffea, 0x75, 0x45, 0xfffb, 0x1 createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xffea, 0x75, 0x70, 0x5, 0x2 - delay 0x1e + delay 30 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff1, 0xffea, 0x75, 0x70, 0x5, 0x2 createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xf, 0xffea, 0x75, 0x50, 0xfffb, 0x1 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff6, 0xffea, 0x75, 0x60, 0x7, 0x2 createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xffea, 0x75, 0x5a, 0xfff8, 0x0 - delay 0x14 + delay 20 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0xfff6, 0xffea, 0x75, 0x50, 0xfffb, 0x1 createsprite gPoisonPowderParticleSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffea, 0x75, 0x59, 0x5, 0x2 createsprite gMagicPowderBluePowderTemplate, ANIM_TARGET, 2, 0x14, 0xffea, 0x75, 0x70, 0xfff8, 0x2 @@ -13249,7 +13381,7 @@ gBattleAnimMove_DragonDarts:: loadspritegfx ANIM_TAG_EXPLOSION playsewithpan SE_FALL, SOUND_PAN_ATTACKER createdragondartsprite ANIM_TARGET, 2, 0x0, 0x0, 0x19 - delay 0x19 + delay 25 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 16, 1 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 @@ -13272,17 +13404,17 @@ gBattleAnimMove_Teatime:: gBattleAnimMove_Octolock:: loadspritegfx ANIM_TAG_TENDRILS - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TENDRILS, 0, 12, 12, 0x3D98 @Pinkish Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TENDRILS, 0, 12, 12, RGB(24, 12, 15) @Pinkish Red loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET 0x6 0x4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 - delay 0x7 + delay 7 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x0, 0x2 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x8, 0x1, 0x2 - delay 0x7 + delay 7 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfff8, 0x1, 0x2 - delay 0x8 + delay 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 6, 1 - delay 0x14 + delay 20 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 8, RGB_RED playsewithpan SE_M_BIND, SOUND_PAN_TARGET setarg 0x7 0xffff @@ -13294,13 +13426,13 @@ gBattleAnimMove_BoltBeak:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_ELECTRICITY - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, 0x76E1 @Blue Electricity - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HORN_HIT, 0, 12, 12, 0x079D @Yellow + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, RGB(1, 23, 29) @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HORN_HIT, 0, 12, 12, RGB(29, 28, 1) @Yellow call BoltBeakSparks waitforvisualfinish createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) createsprite gHorizontalLungeSpriteTemplate, 0x2, 0x2, 0x4, 0x4 - delay 0x4 + delay 4 createsprite gHornHitSpriteTemplate, 0x84, 0x3, 0x8, 0x8, 0xa waitforvisualfinish createsprite gFlashingHitSplatSpriteTemplate, 0x83, 0x4, 0x0, 0x0, 0x1, 0x1 @@ -13314,21 +13446,21 @@ gBattleAnimMove_BoltBeak:: BoltBeakSparks: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 7, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 - delay 0x0 + delay 0 createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 7, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) - delay 0xa + delay 10 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 7, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 - delay 0x0 + delay 0 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(1, 23, 29) - delay 0x14 + delay 20 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 4, 4, RGB(1, 23, 29) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x0, 0x0 @@ -13339,13 +13471,13 @@ BoltBeakSparks: createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x60, 0x14, 0x1, 0x0 createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xa0, 0x14, 0x0, 0x0 createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xe0, 0x14, 0x2, 0x0 - delay 0x4 + delay 4 return gBattleAnimMove_FishiousRend:: loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth loadspritegfx ANIM_TAG_SMALL_BUBBLES - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x726A @Blue Teeth + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, RGB(10, 19, 28) @Blue Teeth playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET createsprite gFishiousRendTeethTemplate, ANIM_TARGET, 0, 50, 4 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 4, 0, 12, 2 @@ -13355,43 +13487,43 @@ gBattleAnimMove_FishiousRend:: FishousRendBubbles: createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xF, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xF, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x5, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x5, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfffb, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfffb, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff1, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff1, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xffec, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xffec, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff1, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff1, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfff6, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfffb, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xfffb, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x5, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0x5, 0x0 - delay 0x2 + delay 2 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 return @@ -13427,29 +13559,29 @@ gBattleAnimMove_ClangorousSoul:: ClangorousSoulStarBuffEffect: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createsprite gClangorousSoulBlueBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gClangorousSoulPurpleBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c - delay 0x4 + delay 4 createsprite gClangorousSoulWhiteBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c return gBattleAnimMove_BodyPress:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly and bounce animation loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 0xD, 0xD, 0x1E5D @Orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 13, 13, RGB(29, 18, 7) @Orange playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x6, 0x1, 0x0 - delay 0x7 + delay 7 createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 @Fly up waitforvisualfinish - delay 0x2F + delay 47 createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 @Bounce down - delay 0x2 + delay 2 playsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER createvisualtask AnimTask_SquishTarget, 0x2 waitforvisualfinish @@ -13463,55 +13595,55 @@ gBattleAnimMove_DrumBeating:: loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_IMPACT - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_MUSIC_NOTES, 0, 0xD, 0xD, 0x03AC @Green + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_MUSIC_NOTES, 0, 13, 13, RGB(12, 29, 0) @Green monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 call BellyDrumRight createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER - delay 0xf + delay 15 call BellyDrumLeft createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1, 0x1, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER - delay 0xf + delay 15 call BellyDrumRight createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x3, 0x3, 0x80 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER - delay 0x7 + delay 7 call BellyDrumLeft createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0x0, 0x80 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER - delay 0x7 + delay 7 call BellyDrumRight createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0x1, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER - delay 0x7 + delay 7 call BellyDrumLeft createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x3, 0x0 playsewithpan SE_M_BELLY_DRUM, SOUND_PAN_ATTACKER createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0x10, 0x6, 0x0, 0x3, 0x50 playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET - delay 0x5 + delay 5 createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0xfff0, 0xfffa, 0x0, 0x2, 0x4b playsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET - delay 0x5 + delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -10, ANIM_TARGET, 3 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 8, 0, 20, 1 - delay 0x3 + delay 3 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 8, ANIM_TARGET, 3 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - delay 0x3 + delay 3 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, -3, ANIM_TARGET, 2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - delay 0x3 + delay 3 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -3, 1, ANIM_TARGET, 2 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 1, ANIM_TARGET, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, ANIM_TARGET, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish @@ -13524,7 +13656,7 @@ gBattleAnimMove_SnapTrap:: loadspritegfx ANIM_TAG_FLOWER @flowers loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0688 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, RGB(8, 20, 1) monbg ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_BITE, SOUND_PAN_TARGET @@ -13550,77 +13682,269 @@ gBattleAnimMove_PyroBall:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop createsprite gPyroBallRockTemplate, ANIM_ATTACKER, 2, 0, 0, 0 - delay 0x19 + delay 25 playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop - delay 0x19 + delay 25 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x3, 0x0, 0x7, 0x043D + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 7, RGB(29, 1, 1) createsprite gPyroBallBurningRockTemplate, ANIM_ATTACKER, 2, 0, 0, 0 - delay 0x19 + delay 25 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET - delay 0x19 + delay 25 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET createsprite gPyroBallFlamesUpTemplate, ANIM_ATTACKER, 2, 0, 0, 1 - delay 0x19 + delay 25 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET createsprite gPyroBallEmberBallTemplate, ANIM_ATTACKER, 2, 0, 10, 0, 5, 20, -20 waitforvisualfinish createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB_RED createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 call FireSpreadEffect - delay 0x20 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x7, 0x0, 0x043D + delay 32 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 7, 0, RGB(29, 1, 1) waitforvisualfinish end gBattleAnimMove_BehemothBlade:: - goto gBattleAnimMove_SacredSword + loadspritegfx ANIM_TAG_CUT @Cut + loadspritegfx ANIM_TAG_SWORD @Sword + loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour + loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade + monbg ANIM_ATTACKER + setalpha 12, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 3, 0, 15, 0 + waitforvisualfinish + playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER + createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 + delay 22 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 1 + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_AIR_WAVE_2 @black color + loadspritegfx ANIM_TAG_ROCKS @rock colour + loadspritegfx ANIM_TAG_SMALL_ROCK @small rock + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + createsprite gSunsteelStrikeBlackFlyBallTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 + createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATK_PARTNER, 1, 20 + delay 24 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 0 @The rock particles mess up the fly animation + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 1 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 2 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 3 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly + unloadspritegfx ANIM_TAG_AIR_WAVE_2 @black color + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + createsprite gSacredSwordBladesTemplate, ANIM_TARGET, 1, 0, 10, 0, 0xFF00, 10 + createsprite gSacredSwordCutTemplate, ANIM_ATTACKER, 2, 40, 0xffe0, 0 + delay 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + loadspritegfx ANIM_TAG_WHITE_STREAK + call BehemothBladeSlashes + unloadspritegfx ANIM_TAG_WHITE_STREAK + waitforvisualfinish + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_RIGHT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_LEFT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_RIGHT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER_FORCE, 8, 0, 40, 1 + call OpposingExplosion2 + waitforvisualfinish + visible ANIM_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 3, 15, 0, 0 + waitforvisualfinish + blendoff + clearmonbg ANIM_TARGET + end +OpposingExplosion2: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 24, -24, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, -16, 16, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, -24, -12, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 16, 16, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, -24, -12, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 16, 16, 1, 1 + delay 6 + return + +BehemothBladeSlashes: + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -10, 3 + playsewithpan SE_SHINY, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, 24, -19 + playsewithpan SE_SHINY, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -28, -15 + playsewithpan SE_SHINY, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -6, -30 + playsewithpan SE_SHINY, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -20, 6 + playsewithpan SE_SHINY, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -28, -15 + playsewithpan SE_SHINY, SOUND_PAN_TARGET + delay 2 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -6, -30 + playsewithpan SE_SHINY, SOUND_PAN_TARGET + delay 1 + createsprite gAcrobaticsSlashesSpriteTemplate, ANIM_TARGET, 2, -20, 6 + playsewithpan SE_SHINY, SOUND_PAN_TARGET + delay 1 + return gBattleAnimMove_BehemothBash:: - goto gBattleAnimMove_SunsteelStrike + loadspritegfx ANIM_TAG_ROUND_SHADOW @fly + loadspritegfx ANIM_TAG_AIR_WAVE_2 @black color + loadspritegfx ANIM_TAG_ROCKS @rock colour + loadspritegfx ANIM_TAG_SMALL_ROCK @small rock + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET + createsprite gSunsteelStrikeBlackFlyBallTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 + createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATK_PARTNER, 1, 20 + delay 24 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 0 @The rock particles mess up the fly animation + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 1 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 2 + createsprite gSunsteelStrikeRocksTemplate, ANIM_ATTACKER, 2, 0, 3 + waitforvisualfinish + unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly + unloadspritegfx ANIM_TAG_AIR_WAVE_2 @black color + loadspritegfx ANIM_TAG_METEOR @superpower + loadspritegfx ANIM_TAG_GOLD_RING @beam + loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color + loadspritegfx ANIM_TAG_IMPACT @hit + playsewithpan SE_ORB, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 3, 0, 15, 0 + waitforvisualfinish + call BehemothBashBeam + call BehemothBashBeam + call BehemothBashBeam + call BehemothBashBeam + call BehemothBashBeam + call BehemothBashBeam + call BehemothBashBeam + call BehemothBashBeam + call BehemothBashBeam + call BehemothBashBeam + stopsound + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gSunsteelStrikeSuperpowerTemplate, ANIM_TARGET, 2, 20 + delay 20 + createsprite gSunsteelStrikeRedImpactTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 + waitforvisualfinish + unloadspritegfx ANIM_TAG_METEOR @superpower + unloadspritegfx ANIM_TAG_GOLD_RING @beam + unloadspritegfx ANIM_TAG_SMALL_RED_EYE @red color + unloadspritegfx ANIM_TAG_IMPACT @hit + loadspritegfx ANIM_TAG_SMALL_EMBER @FireSpreadEffect + clearmonbg ANIM_TARGET + blendoff + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_RIGHT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_LEFT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_RIGHT, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER_FORCE, 8, 0, 40, 1 + call OpposingExplosion1 + call OpposingExplosion1 + waitforvisualfinish + visible ANIM_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 3, 15, 0, 0 + waitforvisualfinish + blendoff + clearmonbg ANIM_TARGET + end +BehemothBashBeam: + createsprite gSunsteelStrikeYellowBeamTemplate, ANIM_TARGET, 2, 20 + delay 1 + createsprite gSunsteelStrikeRedBeamTemplate, ANIM_TARGET, 2, 20 + delay 1 + return +OpposingExplosion1: + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 24, -24, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, -16, 16, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, -24, -12, 1, 1 + delay 6 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 16, 16, 1, 1 + delay 6 + return gBattleAnimMove_AuraWheel:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0x0, 0xC, 0xC, 0x303B @Pinkish-Red Electricity - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0x0, 0xC, 0xC, 0x76E1 @Blue Electricity - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0x0, 0xA, 0xA, 0x303B @Pinkish-Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK, 0, 12, 12, RGB(27, 1, 12) @Pinkish-Red Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0, 12, 12, RGB(1, 23, 29) @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 10, 10, RGB(27, 1, 12) @Pinkish-Red setalpha 12, 8 monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET createsprite gAuraWheelBlueElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gAuraWheelRedElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gAuraWheelBlueElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gAuraWheelRedElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gAuraWheelBlueElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gAuraWheelRedElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gAuraWheelBlueElectricityTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 6 - delay 0x4 + delay 4 playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 23, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 2, 12, 0, 0x76E1 @Revert blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 2, 12, 0, RGB(1, 23, 29) @Revert blue Electricity createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x0, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x40, 0x28, 0x1, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x80, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0xc0, 0x28, 0x2, 0x8003 - delay 0x7 + delay 7 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x9 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -13630,8 +13954,8 @@ gBattleAnimMove_AuraWheel:: gBattleAnimMove_BreakingSwipe:: loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_SPARK_2 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, 0x001F @Red - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0, 12, 12, 0x001F @Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, RGB_RED @Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPARK_2, 0, 12, 12, RGB_RED @Red monbg ANIM_TARGET setalpha 12, 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, ANIM_TARGET, 1 @@ -13639,15 +13963,15 @@ gBattleAnimMove_BreakingSwipe:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 21, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 21, 1 - delay 0x4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x1 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x4 - createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x1 + delay 4 + createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, ANIM_TARGET, 1 createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, ANIM_TARGET, 1 createsprite gBreakingSwipeCenteredElectricity, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET @@ -13673,15 +13997,15 @@ gBattleAnimMove_Overdrive:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_ELECTRICITY - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, 0x76E1 @Blue Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRICITY, 0, 12, 12, RGB(1, 23, 29) @Blue Electricity call BoltBeakSparks waitforvisualfinish - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 12, 12, 0x17BF @Yellow Electricity + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 12, 12, RGB(31, 29, 5) @Yellow Electricity call OverdriveRings - delay 0x8 + delay 8 call OverdriveRings - delay 0x10 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 0, 12, 0x76E1 @Blue Electricity + delay 16 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 0, 12, RGB(1, 23, 29) @Blue Electricity waitforvisualfinish end OverdriveRings: @@ -13698,33 +14022,33 @@ OverdriveRings: gBattleAnimMove_AppleAcid:: loadspritegfx ANIM_TAG_APPLE loadspritegfx ANIM_TAG_POISON_BUBBLE - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, 0x061D @Orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, RGB(29, 16, 1) @Orange playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER createsprite gAppleAcidFloatingAppleTemplate, ANIM_ATTACKER, 12, 0x0 - delay 0x30 + delay 48 monbg ANIM_TARGET createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0x0, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0x5 + delay 5 createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0x18, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0x5 + delay 5 createsprite gAppleAcidLaunchTemplate, ANIM_TARGET, 2, 0x14, 0x0, 0x28, 0x1, 0xffe8, 0x0 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0xf + delay 15 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0x0, 0xffea, 0x0, 0xf, 0x37 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET - delay 0xa + delay 10 createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xffe6, 0xffe8, 0x0, 0xf, 0x37 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET - delay 0xa + delay 10 createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xf, 0xffe5, 0x0, 0xf, 0x32 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET - delay 0xa + delay 10 createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0xfff1, 0xffef, 0x0, 0xa, 0x2d playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET - delay 0xa + delay 10 createsprite gAppleAcidDripTemplate, ANIM_TARGET, 2, 0x1b, 0xffea, 0x0, 0xf, 0x32 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET waitforvisualfinish @@ -13740,10 +14064,10 @@ gBattleAnimMove_GravApple:: call SmallAppleShower call SmallAppleShower createsprite gGravAppleLargeApple, ANIM_TARGET, 2, 0x0, 0x3c, 4, ANIM_TARGET - delay 0x7 + delay 7 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 21, 0, 4 - delay 0x30 + delay 48 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 waitforvisualfinish call UnsetPsychicBg @@ -13751,34 +14075,34 @@ gBattleAnimMove_GravApple:: SmallAppleShower: createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 35, 0x3c, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -30, 0x44, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 27, 0x37, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -20, 0x32, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 33, 0x3a, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -12, 0x3a, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 19, 0x3c, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -38, 0x3a, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, 5, 0x3c, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 createsprite gGravAppleSmallApple, ANIM_TARGET, 2, -23, 0x28, 4, ANIM_TARGET playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x2 + delay 2 return @ credits to Skeli @@ -13786,9 +14110,9 @@ gBattleAnimMove_SpiritBreak:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_EXPLOSION_2 - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0x10, 0x10, 0x7FFF - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_TEAL_ALERT, 0x0, 0xA, 0xA, 0x7DDE - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xA, 0xA, 0x7DDE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 16, 16, RGB_WHITE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TEAL_ALERT, 0, 10, 10, RGB(30, 14, 31) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION_2, 0, 10, 10, RGB(30, 14, 31) monbg ANIM_DEF_PARTNER createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -20, 8, 48, 8, 56, 6 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET @@ -13802,7 +14126,7 @@ gBattleAnimMove_SpiritBreak:: playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gSpriteTemplate_SpiritBreakExplode, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 waitforvisualfinish - delay 0x5 + delay 5 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 clearmonbg ANIM_DEF_PARTNER waitforvisualfinish @@ -13812,7 +14136,7 @@ gBattleAnimMove_StrangeSteam:: loadspritegfx ANIM_TAG_PINK_CLOUD loadspritegfx ANIM_TAG_FINGER loadspritegfx ANIM_TAG_WATER_GUN @blue colour - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FINGER, 0, 10, 10, 0x4798 @Green + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FINGER, 0, 10, 10, RGB(24, 28, 17) @Green monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 0x4, 0xA @@ -13835,10 +14159,10 @@ StrangeSteamCloud: createsprite gStrangeSteamPinkCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0, 0 createsprite gStrangeSteamGreenCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0xa, 0x5 createsprite gStrangeSteamPinkCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0xfff6, 0xfffb - delay 0x1 + delay 1 createsprite gStrangeSteamGreenCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0x14, 0xa createsprite gStrangeSteamBlueCloudTemplate, ANIM_TARGET, 2, 0xf, 0xf, 0x14, 0xffec, 0xfff6 - delay 0x2 + delay 2 return gBattleAnimMove_LifeDew:: @@ -13847,22 +14171,22 @@ gBattleAnimMove_LifeDew:: monbg ANIM_ATK_PARTNER createsprite gLifeDewDropletTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_ATTACKER createsprite gLifeDewDropletTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_ATK_PARTNER - delay 0x15 + delay 21 playsewithpan SE_M_BUBBLE, SOUND_PAN_ATTACKER waitforvisualfinish playsewithpan SE_M_ABSORB_2, SOUND_PAN_ATTACKER createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, 0, -5, ANIM_ATTACKER, FALSE createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, 0, -5, ANIM_ATK_PARTNER, FALSE - delay 0x7 + delay 7 createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, -15, 10, ANIM_ATTACKER, FALSE createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, -15, 10, ANIM_ATK_PARTNER, FALSE - delay 0x7 + delay 7 createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, -15, -15, ANIM_ATTACKER, FALSE createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, -15, -15, ANIM_ATK_PARTNER, FALSE - delay 0x7 + delay 7 createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, 10, -5, ANIM_ATTACKER, FALSE createsprite gLifeDewSpecialOrbsTemplate, ANIM_ATTACKER, 2, 10, -5, ANIM_ATK_PARTNER, FALSE - delay 0x7 + delay 7 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER end @@ -13871,12 +14195,12 @@ gBattleAnimMove_Obstruct:: loadspritegfx ANIM_TAG_NOISE_LINE @growl loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_OBSTRUCT_CROSS - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_NOISE_LINE, 0, 10, 10, 0 @Black - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 10, 10, 0 @Black + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_NOISE_LINE, 0, 10, 10, RGB_BLACK @Black + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 10, 10, RGB_BLACK @Black createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL call RoarEffect waitforvisualfinish - delay 0x10 + delay 16 monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 @@ -13895,34 +14219,34 @@ gBattleAnimMove_FalseSurrender:: monbg ANIM_ATTACKER fadetobg BG_DARK waitbgfadein - delay 0x0 + delay 0 playsewithpan SE_M_FAINT_ATTACK, 0xc0 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 1, 3 createvisualtask AnimTask_AttackerFadeToInvisible, 0x2, 0x1 waitforvisualfinish clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER - delay 0x1 + delay 1 createvisualtask AnimTask_SetAttackerInvisibleWaitForSignal, 0x2, monbg ANIM_TARGET setalpha 12, 8 - delay 0x1 + delay 1 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0x3, 0x1, 0x7fff, 0xa, 0x0, 0xa + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 10, RGB_BLACK, 10 createsprite gSpriteTemplate_LargeCrossImpact, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x14 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 waitforvisualfinish clearmonbg ANIM_TARGET blendoff - delay 0x1 + delay 1 setarg 0x7, 0x1000 - delay 0x1 + delay 1 createvisualtask AnimTask_InitAttackerFadeFromInvisible, 0x2, monbg ANIM_ATTACKER createvisualtask AnimTask_AttackerFadeFromInvisible, 0x2, 0x1 waitforvisualfinish clearmonbg ANIM_ATTACKER - delay 0x1 + delay 1 restorebg waitbgfadein end @@ -13931,43 +14255,124 @@ gBattleAnimMove_MeteorAssault:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_EXPLOSION - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 12, 12, 0x0B1D @Light orange - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, 0x0B1D @Light orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 12, 12, RGB(29, 24, 2) @Light orange + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB(29, 24, 2) @Light orange createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 48, 0, 4 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish invisible ANIM_ATTACKER createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - delay 0xF - createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 1, 0x10, 0x10, 0x7FFF @Screen flash white + delay 15 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 1, 16, 16, RGB_WHITE @Screen flash white createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 32, 1 call BasicExplosion call BasicExplosion waitforvisualfinish visible ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 1, 0x10, 0, 0x7FFF @Screen revert from white + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 1, 16, 0, RGB_WHITE @Screen revert from white waitforvisualfinish end BasicExplosion: playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 - delay 0x3 + delay 3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, 0x1, 0x1 - delay 0x3 + delay 3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, 0x1, 0x1 - delay 0x3 + delay 3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, 0x1, 0x1 - delay 0x3 + delay 3 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, 0x1, 0x1 return gBattleAnimMove_Eternabeam:: - goto gBattleAnimMove_HyperBeam + loadspritegfx ANIM_TAG_HYDRO_PUMP + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_BLUE_STAR + loadspritegfx ANIM_TAG_PURPLE_DRAKE + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB(31, 4, 10) @Pinkish Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 13, 13, RGB(31, 4, 10) @Pinkish Red + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(11, 1, 22) + fadetobgfromset BG_SPACIAL_REND_ON_OPPONENT BG_SPACIAL_REND_ON_PLAYER BG_SPACIAL_REND_ON_OPPONENT + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + invisible ANIM_ATTACKER + createsprite gDevastatingDrakeDrakeUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0x04E0, 36, 21, 1, ANIM_ATTACKER + waitforvisualfinish + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_SOLAR_BEAM, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 + call OblivionWingBeam + call OblivionWingBeam + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 4, 0, 12, RGB(31, 4, 10) @Pinkish Red + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + call OblivionWingBeam + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + visible ANIM_ATTACKER + waitforvisualfinish + restorebg + waitbgfadein + blendoff + end +EternabeamGeyser: + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 3, 5, 1, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, -11, -15, 1, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 8, -5, 1, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, -6, 18, 1, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 3, -11, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, -11, -31, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 8, -21, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, -6, 2, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0, -11, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 3, -27, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, -11, -47, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 8, -47, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, -6, -14, ANIM_TARGET, 0 + delay 0 + createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0, -27, ANIM_TARGET, 0 + delay 0 + return gBattleAnimMove_SteelBeam:: loadspritegfx ANIM_TAG_CLAW_SLASH @@ -13987,7 +14392,7 @@ gBattleAnimMove_SteelBeam:: delay 4 createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 10, RGB(24, 24, 48) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 10, RGB(24, 24, 48) createsprite gSteelBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 delay 4 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 65, 1 @@ -14002,7 +14407,7 @@ gBattleAnimMove_SteelBeam:: call SteelBeam_Continuity call SteelBeam_Continuity waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 10, 0, RGB(24, 24, 48) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 10, 0, RGB(24, 24, 48) call UnsetHighSpeedBg end SteelBeam_Continuity: @@ -14028,13 +14433,14 @@ SetSteelBeamBackground: goto SetHighSpeedBgFade SetSteelBeamBgPlayer: fadetobg BG_STEEL_BEAM_PLAYER + goto SetHighSpeedBgFade @Credits to Skeli gBattleAnimMove_ExpandingForce:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_EXPLOSION_2 - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x7DDE - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xA, 0xA, 0x7DDE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 10, 10, RGB(30, 14, 31) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION_2, 0, 10, 10, RGB(30, 14, 31) monbg ANIM_DEF_PARTNER call SetPsychicBackground createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 @@ -14068,74 +14474,74 @@ ExpandingForceBothTargets: ExpandingForceExplosionGeyser: createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0003, 0x0005, ANIM_TARGET playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfff5, 0xfff1, ANIM_TARGET playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0008, 0xfffb, ANIM_TARGET playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfffa, 0x0012, ANIM_TARGET playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0000, 0x0005, ANIM_TARGET playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET - delay 0x0 + delay 0 createsprite gSpriteTemplate_ExpandingForceExplode, ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET return MaxKnuckleExplosionGeyser: createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, ANIM_TARGET, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xfff1, ANIM_TARGET, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xfffb, ANIM_TARGET, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0012, ANIM_TARGET, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0x0005, ANIM_TARGET, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 return @@ -14168,14 +14574,14 @@ gBattleAnimMove_ScaleShot:: loadspritegfx ANIM_TAG_SHELL_RIGHT loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x6 - delay 0x3 + delay 3 playsewithpan SE_M_BONEMERANG, SOUND_PAN_ATTACKER createsprite gSpriteTemplate_ScaleShotScale, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0x14, 0x101 waitforvisualfinish playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 5, 1 - delay 0x10 + delay 16 stopsound waitforvisualfinish end @@ -14235,9 +14641,9 @@ MeteorBeamBlast: MeteorBeamRockLaunch: createsprite gSpriteTemplate_MeteorBeamRock, ANIM_TARGET, 2, 0, 0, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_MeteorBeamRock, ANIM_TARGET, 2, 0, 0, 0x10 - delay 0x2 + delay 2 return gBattleAnimMove_ShellSideArm:: @@ -14278,7 +14684,7 @@ gBattleAnimMove_ShellSideArmSpecial:: @ Modified Snipe Shot, placeholder playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_TARGET, 2, 0x18, -12 waitforvisualfinish - delay 0x20 + delay 32 playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_TARGET createsprite gSnipeShotBallTemplate, ANIM_TARGET, 2, 0, 0, 24 waitforvisualfinish @@ -14289,7 +14695,7 @@ gBattleAnimMove_ShellSideArmSpecial:: @ Modified Snipe Shot, placeholder @Credits to Skeli gBattleAnimMove_MistyExplosion:: loadspritegfx ANIM_TAG_EXPLOSION - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x8, 0x9, 0x7A5B, 0x8, 0x0, 0x8 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(27, 18, 30), 8, RGB_BLACK, 8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_RIGHT, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_OPPONENT_LEFT, 8, 0, 40, 1 @@ -14298,9 +14704,9 @@ gBattleAnimMove_MistyExplosion:: call Explosion1 call Explosion1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x1, 0x1, 0x10, 0x10, 0x7F7F @;White Pink - delay 0x32 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x1, 0x3, 0x10, 0x0, 0x7F7F @;White Pink + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 16, RGB(31, 27, 31) @;White Pink + delay 50 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 16, 0, RGB(31, 27, 31) @;White Pink end @Credits to Skeli @@ -14308,9 +14714,9 @@ gBattleAnimMove_GrassyGlide:: loadspritegfx ANIM_TAG_LEAF @leaves loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_WHIP_HIT - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_IMPACT, 0x0, 0xD, 0xD, 0x0266 @;Leaf Green + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 13, 13, RGB(6, 19, 0) @;Leaf Green createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(12, 29, 0) - delay 0x2 + delay 2 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, -120, 0, 0, 10 @;Slide off off, screen waitforvisualfinish @@ -14330,63 +14736,63 @@ gBattleAnimMove_RisingVoltage:: createvisualtask AnimTask_GetBattleEnvironment, 0x5, jumpargeq 0x0, BG_ELECTRIC_TERRAIN, ANIM_RISING_VOLTAGE_STRONGER ANIM_RISING_VOLTAGE_NORMAL: - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 @;To black + createvisualtask AnimTask_BlendBattleAnimPal, 2, F_PAL_BG, 1, 0, 4, RGB_BLACK @;To black waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 30, 0, 3 @;Amount, Slowness, Slowness, Compaction playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0xc + delay 12 createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 0, 0x0 waitforvisualfinish createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 0x2, 0x0, 0x1, 0x34, 0x1, 0x0 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 4, 0, 12, RGB(29, 28, 1) playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffe0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32 call StokedSparksurferSparkGeyser call StokedSparksurferSparkGeyser waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0x4, 0x0, 0x0 @;From black + createvisualtask AnimTask_BlendBattleAnimPal, 2, F_PAL_BG, 1, 4, 0, RGB_BLACK @;From black waitforvisualfinish clearmonbg ANIM_ATTACKER end ANIM_RISING_VOLTAGE_STRONGER: - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @;To black + createvisualtask AnimTask_BlendBattleAnimPal, 2, F_PAL_BG, 1, 0, 12, RGB_BLACK @;To black waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 55, 0, 0 @;Amount, Slowness, Slowness, Compaction playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0xc + delay 12 createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2, waitforvisualfinish createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 0x2, 0x0, 0x1, 0x54, 0x1, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0x10, 0x079D + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 4, 0, 16, RGB(29, 28, 1) playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x10, 0x10 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x10, 0xfff0 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x10, 0xffe0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, 16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 16, -32 call StokedSparksurferSparkGeyser playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -0x18, 0x10 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -0x18, 0xfff0 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -0x18, 0xffe0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -24, 16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -24, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -24, -32 call StokedSparksurferSparkGeyser playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xffe0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32 call StokedSparksurferSparkGeyser waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x10, 0x0, 0x079D @;From Yellow - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 @;From black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 16, 0, RGB(29, 28, 1) @;From Yellow + createvisualtask AnimTask_BlendBattleAnimPal, 2, F_PAL_BG, 1, 12, 0, RGB_BLACK @;From black waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -14480,7 +14886,7 @@ gBattleAnimMove_SkitterSmack:: loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour loadspritegfx ANIM_TAG_RAZOR_LEAF - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_WHITE waitforvisualfinish playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER invisible ANIM_ATTACKER @@ -14494,10 +14900,10 @@ gBattleAnimMove_SkitterSmack:: invisible ANIM_ATTACKER waitsound createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x30 - delay 0x17 + delay 23 createvisualtask AnimTask_IsTargetSameSide, 0x2, createvisualtask AnimTask_SnatchOpposingMonMove, 0x2, - delay 0x19 + delay 25 visible ANIM_ATTACKER invisible ANIM_ATTACKER delay 5 @@ -14519,7 +14925,7 @@ gBattleAnimMove_SkitterSmack:: invisible ANIM_ATTACKER delay 1 visible ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_WHITE waitforvisualfinish end @@ -14530,19 +14936,19 @@ gBattleAnimMove_BurningJealousy:: createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 42, 1 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 8, RGB_RED call BurningJealousyFireBuffEffect - delay 0x8 + delay 8 call BurningJealousyFireBuffEffect createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 8, RGB_RED - delay 0x4 + delay 4 call BurningJealousyFireBuffEffect waitforvisualfinish monbg ANIM_TARGET playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER createvisualtask AnimTask_FlailMovement, 2, ANIM_ATTACKER call BurningJealousyFlames - delay 0x8 + delay 8 call BurningJealousyFlames - delay 0x8 + delay 8 call BurningJealousyFlames playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 @@ -14556,13 +14962,13 @@ gBattleAnimMove_BurningJealousy:: BurningJealousyFireBuffEffect: createsprite gSpriteTemplate_BurningJealousyFireBuff, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xffe8, 0x1a, 0x2, 0x18 - delay 0x3 + delay 3 createsprite gSpriteTemplate_BurningJealousyFireBuff, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xe, 0x1c, 0x1, 0x18 - delay 0x3 + delay 3 createsprite gSpriteTemplate_BurningJealousyFireBuff, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xfffb, 0xa, 0x2, 0x18 - delay 0x3 + delay 3 createsprite gSpriteTemplate_BurningJealousyFireBuff, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x1c, 0x1a, 0x3, 0x18 - delay 0x3 + delay 3 return BurningJealousyFlames: @@ -14582,35 +14988,35 @@ gBattleAnimMove_LashOut:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT @hit - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SLAM_HIT_2, 0x0, 0xA, 0xA, 0x1F + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SLAM_HIT_2, 0, 10, 10, RGB_RED monbg ANIM_DEF_PARTNER playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call PowerTripBuffUp - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call PowerTripBuffUp - delay 0x8 + delay 8 call PowerTripBuffUp waitforvisualfinish fadetobg BG_DARK waitbgfadein playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gSpriteTemplate_LashOutStrike, ANIM_TARGET, 2, 0xfff0, 0xfff0, FALSE - delay 0x8 + delay 8 createsprite gFoulPlayImpactTemplate, ANIM_TARGET, 3, 10, 0x0, ANIM_TARGET, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -12, 10, 0, 3 - delay 0x8 + delay 8 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x5 - delay 0x8 + delay 8 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gSpriteTemplate_LashOutStrike, ANIM_TARGET, 2, 0xfff0, 0xfff0, TRUE - delay 0x8 + delay 8 createsprite gFoulPlayImpactTemplate, ANIM_TARGET, 3, -10, 0x0, ANIM_TARGET, 0x1 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 12, 10, 0, 3 - delay 0x8 + delay 8 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x5 restorebg @@ -14634,16 +15040,16 @@ gBattleAnimMove_Poltergeist:: waitforvisualfinish createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 16, 0, RGB_BLACK playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER - delay 0x1 + delay 1 createvisualtask AnimTask_DestinyBondWhiteShadow, 0x5, 0x0, 0x24 - delay 0x30 + delay 48 playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_PoltergeistItem, 2 waitforvisualfinish setalpha 12, 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x7, 0x5, 0x1, 0x0, 0xa, 0x0, 0x0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 5, 1, 0, 10, RGB_BLACK, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_NightmareClone, 0x2 @@ -14654,26 +15060,27 @@ gBattleAnimMove_Poltergeist:: waitbgfadein clearmonbg 0x3 blendoff + unloadspritegfx ANIM_TAG_ITEM_BAG end @Credits to Skeli gBattleAnimMove_CorrosiveGas:: loadspritegfx ANIM_TAG_PINK_CLOUD @Fumes - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_PINK_CLOUD, 0x0, 0xE, 0xE, 0x19EF @;Garbage green + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PINK_CLOUD, 0, 14, 14, RGB(15, 15, 6) @;Garbage green monbg ANIM_ATTACKER loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER, 0x8, 0x3 - delay 0x0 + delay 0 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 1, 2, 0, 15, RGB(15, 15, 6) @;Garbage green createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x7a, 0x3, 0xfff2, 0x12, 0x2e - delay 0x0 + delay 0 createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x79, 0x3, 0xe, 0xfff2, 0x2e - delay 0x0 + delay 0 createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x78, 0x3, 0xfff4, 0xfff6, 0x2e - delay 0x0 + delay 0 createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x77, 0x3, 0xe, 0xe, 0x2e - delay 0x0 + delay 0 createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x76, 0x3, 0x0, 0x0, 0x2e - delay 0x0 + delay 0 createsprite gSpriteTemplate_CorrosiveGasSmoke, ANIM_ATTACKER, 0x7b, 0x3, 0x4, 0x4, 0x1e waitforvisualfinish playsewithpan SE_M_TOXIC, SOUND_PAN_TARGET @@ -14853,28 +15260,28 @@ gBattleAnimMove_JungleHealing:: waitbgfadeout createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x1a, 0xffff, 0x2, 0x96 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - delay 0xa + delay 10 createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x14, 0x1, 0x1, 0x8c playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - delay 0xa + delay 10 createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x16, 0x1, 0x0, 0x82 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - delay 0xa + delay 10 createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x19, 0xffff, 0x3, 0x78 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER - delay 0x28 + delay 40 createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0x20, 0x1a, 0xffff, 0x3, 0x1e - delay 0x5 + delay 5 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0x5 + delay 5 createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0xffd0, 0x14, 0x1, 0x2, 0x1e playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0x5 + delay 5 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0x5 + delay 5 createsprite gIngrainOrbSpriteTemplate, ANIM_ATTACKER, 3, 0x30, 0x1a, 0xfffe, 0x3, 0x12 playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - delay 0xa + delay 10 playsewithpan SE_M_STAT_INCREASE, 0xc0 createvisualtask AnimTask_StatusClearedEffect, 0x2, 0x1 waitforvisualfinish @@ -14922,22 +15329,22 @@ gBattleAnimMove_WickedBlow:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_PAIN_SPLIT loadspritegfx ANIM_TAG_SPARKLE_4 - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_PAIN_SPLIT, 0x0, 0x9, 0x9, 0x1F - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_FOCUS_ENERGY, 0x0, 0x8, 0x8, 0x1F + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PAIN_SPLIT, 0, 9, 9, RGB_RED + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FOCUS_ENERGY, 0, 8, 8, RGB_RED playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call WickedBlowBuffEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call WickedBlowBuffEffect - delay 0x8 + delay 8 call WickedBlowBuffEffect waitforvisualfinish fadetobg BG_DARK waitbgfadeout playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 28, 0, 0, 5 - delay 0x5 + delay 5 createsprite gSpriteTemplate_WickedBlowFist, ANIM_TARGET, 4, ANIM_TARGET, 0, 0, 16, 32 delay 6 loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 0x4, 0x6 @@ -14966,13 +15373,13 @@ gBattleAnimMove_WickedBlow:: WickedBlowBuffEffect: createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return @@ -15044,7 +15451,7 @@ gBattleAnimMove_ThunderCage:: createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 16 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 50, 1 call ThunderCageBolts - delay 0x4 + delay 4 createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, -16 delay 4 createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 0 @@ -15056,24 +15463,24 @@ gBattleAnimMove_ThunderCage:: end ThunderCageBolts: createvisualtask AnimTask_ElectricBolt, 2, 25, -40, 1 - delay 0x9 + delay 9 createvisualtask AnimTask_ElectricBolt, 2, -25, -40, 1 - delay 0x9 + delay 9 createvisualtask AnimTask_ElectricBolt, 2, 0, -40, 1 - delay 0x9 + delay 9 return @Credits to Skeli gBattleAnimMove_DragonEnergy:: loadspritegfx ANIM_TAG_HYDRO_PUMP - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x2C5E @;Regidrago Reddish Reddish, Purple + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB(30, 2, 11) @;Regidrago Reddish Reddish, Purple monbg ANIM_TARGET playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 4, 0, 11, RGB(31, 28, 31) @;Pinkish White waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x10, 0x0, 0x2C5E @;Regidrago Reddish Reddish, Purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 16, 0, RGB(30, 2, 11) @;Regidrago Reddish Reddish, Purple createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, -120, 0, 0, 1 @;Slide off off, screen waitforvisualfinish playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_TARGET @@ -15117,9 +15524,9 @@ gBattleAnimMove_DragonEnergy:: DragonEnergyShot: createsprite gSpriteTemplate_DragonEnergyShot, ANIM_TARGET, 2, 0x19 - delay 0x1 + delay 1 createsprite gSpriteTemplate_DragonEnergyShot, ANIM_TARGET, 2, 0x19 - delay 0x1 + delay 1 return @@ -15148,14 +15555,14 @@ gBattleAnimMove_FieryWrath:: loadspritegfx ANIM_TAG_PURPLE_RING monbg ANIM_DEF_PARTNER playsewithpan SE_M_SACRED_FIRE2, 0xc0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x2, 0x0, 0xE, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x4, 0x0, 0x8, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 2, 0, 14, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 4, 0, 8, RGB_RED createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 32, 1 call DragonClawFireSpiral call DragonClawFireSpiral waitforvisualfinish loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_DEF_SIDE, 0x4, 0x0, 0xF, 0x3006 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 4, 0, 15, RGB(6, 0, 12) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 60, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 4, 0, 60, 1 call FieryWrathGeyser @@ -15163,9 +15570,9 @@ gBattleAnimMove_FieryWrath:: call FieryWrathGeyser call FieryWrathGeyser waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x8, 0x0, 0x1F - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_DEF_SIDE, 0x2, 0x9, 0x0, 0x3006 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xE, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 8, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 2, 9, 0, RGB(6, 0, 12) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 14, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -15173,52 +15580,52 @@ gBattleAnimMove_FieryWrath:: FieryWrathGeyser: createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 createsprite gSpriteTemplate_FieryWrathGeyser, ANIM_TARGET, 4, ANIM_DEF_PARTNER, 0xfff0, 0x10 - delay 0x0 + delay 0 return @@ -15234,23 +15641,23 @@ gBattleAnimMove_ThunderousKick:: setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x32 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x7, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 2, 0, 22, 1 call ZingZapSparks1 - delay 0xA + delay 10 call ZingZapSparks2 - delay 0xA + delay 10 call ZingZapSparks1 - delay 0xA + delay 10 call ZingZapSparks2 - delay 0x3 + delay 3 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 48, 3, 0, 4 - delay 0x7 + delay 7 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x10, 0x0, 0x7fff - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0x3, 0x1, 0x0, 0x8, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 16, 0, RGB_WHITE + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 clearmonbg ANIM_TARGET @@ -15264,13 +15671,13 @@ gBattleAnimMove_GlacialLance:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_ICE_CUBE loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xA, 0x3C00 @;Royal Blue + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 10, RGB(0, 0, 15) @;Royal Blue monbg ANIM_TARGET playsewithpan SE_M_HAIL, SOUND_PAN_TARGET createvisualtask AnimTask_CentredFrozenIceCube, ANIM_TARGET, 0 createsprite gSpriteTemplate_GlacialLance, ANIM_TARGET, 2, 0, 40, 0, 0, 40, 50, 10 delay 60 - createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, ANIM_TAG_ICICLE_SPEAR, 0x4, 0x1, 0x7FFF, 0x10, 0x0, 0x0 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ICICLE_SPEAR, 4, 1, RGB_WHITE, 16, 0, 0 playsewithpan SE_M_DETECT, SOUND_PAN_TARGET delay 38 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET @@ -15279,44 +15686,62 @@ gBattleAnimMove_GlacialLance:: delay 4 call IceCrystalEffectLong waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0xA, 0x0, 0x3C00 @;Royal Blue + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 10, 0, RGB(0, 0, 15) @;Royal Blue waitforvisualfinish clearmonbg ANIM_TARGET end gBattleAnimMove_AstralBarrage:: - loadspritegfx ANIM_TAG_FLAT_ROCK - loadspritegfx ANIM_TAG_ICE_CRYSTALS - loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_FLAT_ROCK, 0x0, 0xA, 0xA, RGB(2, 1, 4) - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICE_CRYSTALS, 0x0, 0xA, 0xA, RGB(2, 1, 4) + loadspritegfx ANIM_TAG_PURPLE_FLAME + loadspritegfx ANIM_TAG_SHADOW_BALL + loadspritegfx ANIM_TAG_THIN_RING + loadspritegfx ANIM_TAG_ICE_CHUNK + loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER setalpha 12, 8 fadetobg BG_GHOST waitbgfadein - createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1 - createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 20, 0, 5 - createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 200, 96, 1, 120 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + createvisualtask AnimTask_GrudgeFlames, 3 + createsprite gBlackHoleEclipseHoleUserSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_ATTACKER, 0 + createsprite gBlackHoleEclipseBlueRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 delay 8 - createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 20, 248, 4, 112 + createsprite gBlackHoleEclipseBlackRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 delay 8 - createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 130, 160, 2, 104 + createsprite gBlackHoleEclipseBlueRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 delay 8 - createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 160, 192, 0, 96 + createsprite gBlackHoleEclipseBlackRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 delay 8 - createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 60, 288, 3, 88 - delay 74 - panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 - call BlizzardIceCrystals - call BlizzardIceCrystals - playsewithpan SE_M_BLIZZARD2, SOUND_PAN_TARGET + unloadspritegfx ANIM_TAG_SHADOW_BALL + unloadspritegfx ANIM_TAG_THIN_RING + unloadspritegfx ANIM_TAG_ICE_CHUNK + unloadspritegfx ANIM_TAG_HANDS_AND_FEET waitforvisualfinish - playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET + loadspritegfx ANIM_TAG_WISP_FIRE + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_PURPLE + call AstralBarrageFlames1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 50, 1 + call AstralBarrageFlames2 + call AstralBarrageFlames3 + call AstralBarrageFlames4 + call AstralBarrageFlames5 + waitforvisualfinish + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET createspriteontargets gCurseGhostSpriteTemplate, ANIM_TARGET, 3, 2, 8, -5, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 8, 0, 16, 1 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 42 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 84 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 126 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 168 + createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 210 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER restorebg @@ -15324,6 +15749,76 @@ gBattleAnimMove_AstralBarrage:: blendoff delay 1 end +AstralBarrageFlames1: + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, -30, -20 @;Top left + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left + delay 2 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right + delay 2 + return +AstralBarrageFlames2: + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, -30, -20 @;Top left + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left + delay 2 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right + delay 2 + return +AstralBarrageFlames3: + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, -30, -20 @;Top left + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left + delay 2 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right + delay 2 + return +AstralBarrageFlames4: + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, -30, -20 @;Top left + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left + delay 2 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right + delay 2 + return +AstralBarrageFlames5: + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, -30, -20 @;Top left + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left + delay 2 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right + delay 2 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 3, 0 + createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right + delay 2 + return @Credits to Skeli @@ -15346,25 +15841,25 @@ gBattleAnimMove_EerieSpell:: EerieSpellConvergingFlames: createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe0, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xffea, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x1e, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1c, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0xffed, 0x13, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0xffe5, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0xffee, 0xffee, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe7, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x11, 0xffef, 0x10 - delay 0x2 + delay 2 createsprite gSpriteTemplate_EerieSpellFlame, ANIM_TARGET, 2, 0x1, 0x0, 0x17, 0x0, 0x10 return @@ -15373,16 +15868,16 @@ EerieSpellConvergingFlames: gBattleAnimMove_DireClaw:: loadspritegfx ANIM_TAG_SLASH loadspritegfx ANIM_TAG_POISON_BUBBLE - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SLASH, 0x0, 0xC, 0xC, 0x6038 @;Purple + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SLASH, 0, 12, 12, RGB(24, 1, 24) @;Purple createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 6 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x0 - delay 0x2 + delay 2 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 36, 1 - delay 0x2 + delay 2 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0 call PoisonBubblesEffect @@ -15398,20 +15893,20 @@ gBattleAnimMove_PsyshieldBash:: monbg ANIM_DEF_PARTNER setalpha 12, 8 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x0, 0xB, 0x7FAF @;Light blue + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 11, RGB(15, 29, 31) @;Light blue createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -24, 8, 23, 10, 56, 10 - delay 0x23 + delay 35 createsprite gSpriteTemplate_PsyshieldBashHit, ANIM_ATTACKER, 4, -10, 0x0, 0x1, 0x0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - delay 0x1 + delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, -16, 0, 0, 4 waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 waitforvisualfinish - delay 0x2 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xB, 0x0, 0x7FAF @;Light blue + delay 2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 11, 0, RGB(15, 29, 31) @;Light blue createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x5 - delay 0x3 + delay 3 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x7 waitforvisualfinish call UnsetPsychicBg @@ -15443,11 +15938,11 @@ gBattleAnimMove_StoneAxe:: splitbgprio ANIM_TARGET playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gSpriteTemplate_StoneAxeSlash, ANIM_TARGET, 2, 50, -10, 100, 8, 1 @;Move left - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 4, 16, 1 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET call StoneAxeRockFragments - delay 0x8 + delay 8 call StoneAxeRockFragments waitforvisualfinish clearmonbg ANIM_TARGET @@ -15472,7 +15967,7 @@ gBattleAnimMove_SpringtideStorm:: playsewithpan SE_M_GUST, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 - createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 2, 6, 0, 11, 0x7ADF + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 2, 6, 0, 11, RGB(31, 22, 30) call HurricaneGustCentered call SpringtideStormHeartSwirl call HurricaneGustCentered @@ -15491,15 +15986,15 @@ gBattleAnimMove_SpringtideStorm:: SpringtideStormHeartSwirl: createspriteontargets gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 6, 0x0, 0x20, 0x210, 0x1e, 0xa, 0x32, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 6, 0x0, 0x24, 0x1e0, 0x14, 0xd, 0xffd2, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 6, 0x0, 0x25, 0x240, 0x14, 0x5, 0x2a, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 6, 0x0, 0x23, 0x190, 0x19, 0x8, 0xffd6, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 6, 0x0, 0x20, 0x200, 0x19, 0xd, 0x2e, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_SpringtideHeart, ANIM_TARGET, 2, 6, 0x0, 0x25, 0x1d0, 0x1e, 0xc, 0xffce, ANIM_TARGET return @@ -15514,13 +16009,13 @@ gBattleAnimMove_MysticalPower:: monbg ANIM_TARGET splitbgprio ANIM_TARGET call PsystrikeInwardRing - delay 0xA + delay 10 call PsystrikeInwardRing - delay 0xA + delay 10 call PsystrikeInwardRing - delay 0xA + delay 10 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x6, 0x0, 0xB, 0x7FAF @;Light blue + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 6, 0, 11, RGB(15, 29, 31) @;Light blue createvisualtask AnimTask_ExtrasensoryDistortion, 0x5, 0x0 call MysticalPowerFoeRings createvisualtask AnimTask_ExtrasensoryDistortion, 0x5, 0x1 @@ -15529,7 +16024,7 @@ gBattleAnimMove_MysticalPower:: call MysticalPowerFoeTwoRingsOnly waitforvisualfinish clearmonbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x7FAF @;Light blue + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 11, 0, RGB(15, 29, 31) @;Light blue call UnsetPsychicBg blendoff end @@ -15582,16 +16077,16 @@ gBattleAnimMove_WaveCrash:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @Bubbles on attacker monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xB, 0x726A + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 11, RGB(10, 19, 28) createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -20, 8, 48, 8, 56, 6 call WaterfallBubblesOnAttacker waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 5, 1 call RisingWaterHitEffect waitforvisualfinish - delay 0x5 + delay 5 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xB, 0x0, 0x726A + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 11, 0, RGB(10, 19, 28) clearmonbg ANIM_DEF_PARTNER waitforvisualfinish end @@ -15601,23 +16096,23 @@ gBattleAnimMove_WaveCrash:: gBattleAnimMove_Chloroblast:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_HYDRO_PUMP - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_THIN_RING, 0x0, 0xA, 0xA, 0x03AC - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x03AC - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x2, 0x0, 0x10, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x10, 0x03AC - createvisualtask AnimTask_BlendNonAttackerPalettes, 0x2, 0x2, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_THIN_RING, 0, 10, 10, RGB(12, 29, 0) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB(12, 29, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 2, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 16, RGB(12, 29, 0) + createvisualtask AnimTask_BlendNonAttackerPalettes, 2, 2, 0, 16, RGB_BLACK playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER createsprite gThinRingShrinkingSpriteTemplate ANIM_ATTACKER, 0x28, 0, 0, 0, 0 - delay 0xe + delay 14 createsprite gThinRingShrinkingSpriteTemplate ANIM_ATTACKER, 0x28, 0, 0, 0, 0 - delay 0xe + delay 14 createsprite gThinRingShrinkingSpriteTemplate ANIM_ATTACKER, 0x28, 0, 0, 0, 0 waitforvisualfinish createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA, fadetobg BG_CHLOROBLAST waitbgfadeout - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x0, 0x10, 0x0, 0x0 - delay 0x10 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 16, 0, RGB_BLACK + delay 16 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 74, 1 createsoundtask SoundTask_LoopSEAdjustPanning, 0xf0, 0xFF00 | SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x1, 0x17, 0x0, 0x5 createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATTACKER, 1, 67 @@ -15641,21 +16136,21 @@ gBattleAnimMove_Chloroblast:: call ChloroblastShot call ChloroblastShot waitforvisualfinish - delay 0x5 - createvisualtask AnimTask_BlendNonAttackerPalettes, 0x2, 0x2, 0x0, 0x0, 0x0 @;From Black - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0x10, 0x0, 0x03AC + delay 5 + createvisualtask AnimTask_BlendNonAttackerPalettes, 2, 2, 0, 0, RGB_BLACK @;From Black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 16, 0, RGB(12, 29, 0) restorebg waitbgfadeout createvisualtask AnimTask_AllBattlersVisible, 0xA, clearmonbg ANIM_DEF_PARTNER waitbgfadein - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x0, 0x0 @;From Black + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 0, RGB_BLACK @;From Black end ChloroblastShot: createsprite gSpriteTemplate_ChloroblastShot, ANIM_TARGET, 2, 0, 0, 0x19 - delay 0x2 + delay 2 createsprite gSpriteTemplate_ChloroblastShot, ANIM_TARGET, 2, 0, 0, 0x19 - delay 0x2 + delay 2 return @Credits to Skeli @@ -15664,21 +16159,21 @@ gBattleAnimMove_MountainGale:: loadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @White Rock Colour monbg ANIM_TARGET call MountainGaleIceRock - delay 0x6 + delay 6 call MountainGaleIceRock - delay 0x6 + delay 6 call MountainGaleIceRock createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 4, 24, 1 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET - delay 0x6 + delay 6 call MountainGaleIceRock playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET - delay 0x6 + delay 6 call MountainGaleIceRock playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET - delay 0x6 + delay 6 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET - delay 0x6 + delay 6 playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -15696,17 +16191,17 @@ gBattleAnimMove_VictoryDance:: loadspritegfx ANIM_TAG_HOLLOW_ORB createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 40, 6, 3, 3 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER - delay 0x8 - createvisualtask AnimTask_BlendPalInAndOutByTag, 0x5, ANIM_TAG_HOLLOW_ORB, 0x0B1D, 0xe, 0x0, 0x3 @;Light orange + delay 8 + createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB(29, 24, 2), 14, 0, 3 @;Light orange createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x2b createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x55 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x80 createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xaa createsprite gDragonDanceOrbSpriteTemplate, ANIM_ATTACKER, 2, 0xd5 - delay 0x1e + delay 30 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER - delay 0x1e + delay 30 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitforvisualfinish end @@ -15734,7 +16229,7 @@ gBattleAnimMove_HeadlongRush:: waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 42, 0, 0, 5 createsprite gSpriteTemplate_HeadlongRushImpact, ANIM_TARGET, 4, 0xfff6, 0x0, 0x1, 0x0 - delay 0x5 + delay 5 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 44, 1 call MaxQuake_DirtGeyser call MaxQuake_DirtGeyser @@ -15748,52 +16243,52 @@ MaxQuake_DirtGeyser: createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0003, 0x0005, 0x1, 0x0 createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff1, 0x1, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x100D, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0008, 0xfffb, 0x1, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x4, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfffa, 0x0012, 0x1, 0x0 createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0000, 0x0005, 0x1, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0xfffc, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0003, 0xfff5, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0008, 0xffeb, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfffa, 0x0002, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0000, 0xfff5, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0003, 0xffe5, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0008, 0xffdb, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0000, 0xffe5, ANIM_TARGET, 0x0 createsprite gSpriteTemplate_MaxQuakeDirtGeyser, ANIM_TARGET, 4, 0, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gSpriteTemplate_MaxQuakeRockGeyser, ANIM_TARGET, 4, ANIM_TARGET, 0xfff0, 0x10 return @@ -15807,25 +16302,25 @@ gBattleAnimMove_BarbBarrage:: call BarbBarrageSpikeShoot loopsewithpan SE_M_DIG, SOUND_PAN_ATTACKER, 0x7, 0x3 createvisualtask AnimTask_FlailMovement, 2, ANIM_ATTACKER - delay 0x14 + delay 20 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 32, 1 call PoisonBubblesEffect clearmonbg ANIM_TARGET end BarbBarrageSpikeShoot: - delay 0x3 + delay 3 createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0xfb00, 0x0, 0x3 - delay 0x0 + delay 0 createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x0, 0x0500, 0x3 - delay 0x0 + delay 0 createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x0, 0xfb00, 0x3 - delay 0x0 + delay 0 createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x0500, 0x0300, 0x3 - delay 0x0 + delay 0 createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0xfb00, 0x0300, 0x3 - delay 0x0 + delay 0 createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0x0500, 0xfd00, 0x3 - delay 0x0 + delay 0 createsprite gSpriteTemplate_BarbBarrage, ANIM_TARGET, 2, 0x0, 0x0, 0x1e, 0xfb00, 0xfd00, 0x3 return @@ -15835,7 +16330,7 @@ BarbBarrageSpikeShoot: gBattleAnimMove_EsperWing:: loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade loadspritegfx ANIM_TAG_WHITE_FEATHER - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_WHITE_FEATHER, 0x0, 0xA, 0xA, 0x7DDE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_WHITE_FEATHER, 0, 10, 10, RGB(30, 14, 31) monbg ANIM_TARGET call SetPsychicBackground playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER @@ -15876,30 +16371,30 @@ gBattleAnimMove_BitterMalice:: playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET createvisualtask AnimTask_ScaryFace, 0x5 @ internally checks side createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 76, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xF, 0x3006 @;Dark Purple - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_PURPLE_RING, 0x4, 0x0, 0xE, 0x3006 @;Dark Purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 4, 0, 15, RGB(6, 0, 12) @;Dark Purple + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PURPLE_RING, 4, 0, 14, RGB(6, 0, 12) @;Dark Purple call BitterMaliceSwirl call BitterMaliceSwirl call BitterMaliceSwirl - delay 0x4 @;Wait until the blends are reset after the scary face fades out + delay 4 @;Wait until the blends are reset after the scary face fades out call IceCrystalEffectShort waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xF, 0x0, 0x3006 @;Dark Purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 15, 0, RGB(6, 0, 12) @;Dark Purple end BitterMaliceSwirl: createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, 0x1 - delay 0x2 + delay 2 createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, 0x1 - delay 0x2 + delay 2 createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, 0x1 - delay 0x2 + delay 2 createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, 0x1 - delay 0x2 + delay 2 createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, 0x1 - delay 0x2 + delay 2 createsprite gSpriteTemplate_BitterMaliceRing, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, 0x1 - delay 0x2 + delay 2 return @ credits to Skeli @@ -15908,8 +16403,8 @@ gBattleAnimMove_Shelter:: loadspritegfx ANIM_TAG_SHELL_RIGHT playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShellSmashShrinkAttacker, 0x2 - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SHELL_LEFT, 0x1, 0x0, 0xE, 0x6B5A @ light light, gray - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SHELL_RIGHT, 0x1, 0x0, 0xE, 0x6B5A @ light light, gray + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHELL_LEFT, 1, 0, 14, RGB(26, 26, 26) @ light light, gray + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHELL_RIGHT, 1, 0, 14, RGB(26, 26, 26) @ light light, gray createsprite gShellSmashRightShellSpriteTemplate, ANIM_ATTACKER, 2, 0xffd7, 0x0, 0x2, 0x333, 0x0, 10, 30 createsprite gShellSmashLeftShellSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0x0, 0x6, 0xfccd, 0x0, 10, 30 createvisualtask AnimTask_FadeOutParticles, 0x2, 0 @@ -15929,20 +16424,20 @@ gBattleAnimMove_TripleArrows:: waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 6, 1 - delay 0x4 + delay 4 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, -40, 0, 0, 0, TRIPLE_ARROW_FLY_TIME - delay 0x3 + delay 3 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 40, 0, 0, 0, TRIPLE_ARROW_FLY_TIME - delay 0x3 + delay 3 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 10, 1 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER createvisualtask AnimTask_IsAttackerPlayerSide, 0x2, jumpargeq 0x7, FALSE, TripleArrowsOnOpponent createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 0, -60, 0, 0, TRIPLE_ARROW_FLY_TIME TripleArrowsEnd: - delay 0x3 + delay 3 waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -15962,11 +16457,11 @@ gBattleAnimMove_InfernalParade:: playsewithpan SE_M_PSYBEAM, 0xc0 waitbgfadein createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left - delay 0x3 + delay 3 createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right - delay 0x3 + delay 3 createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right - delay 0x3 + delay 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 call InfernalFlames call InfernalFlames @@ -15980,20 +16475,20 @@ gBattleAnimMove_InfernalParade:: createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0xa8 createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0xd2 waitforvisualfinish - delay 0xC + delay 12 restorebg waitbgfadein clearmonbg ANIM_TARGET end InfernalFlames: createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, -30, -20 @;Top left - delay 0x3 + delay 3 createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, -30, 10, 20 @;Bottom left - delay 0x3 + delay 3 createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, -30, -20 @;Top right - delay 0x3 + delay 3 createsprite gSpriteTemplate_InfernalParadeFlame, ANIM_TARGET, 2, 30, 10, 20 @;Bottom right - delay 0x3 + delay 3 return @@ -16004,33 +16499,33 @@ gBattleAnimMove_CeaselessEdge:: playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 44, 0, 0, 5 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x10, 0x10, 0x1F @;Fully to to, Red - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_ATTACKER | F_PAL_TARGET), 0x0, 0x10, 0x10, 0x0 @;Fully to to, Black + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 16, 16, RGB_RED @;Fully to to, Red + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_ATTACKER | F_PAL_TARGET), 0, 16, 16, RGB_BLACK @;Fully to to, Black createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xa, - delay 0x10 + delay 16 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 48, 1 call CeaselessEdgeSlashes call CeaselessEdgeSlashes call CeaselessEdgeSlashes waitforvisualfinish - delay 0x8 + delay 8 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xA, - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x10, 0x0, 0x7FFF @;From White + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 16, 0, RGB_WHITE @;From White waitforvisualfinish end CeaselessEdgeSlashes: playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSpriteTemplate_CeaselessEdgeSlash, ANIM_TARGET, 2, 8, 0, FALSE, FALSE - delay 0x4 + delay 4 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSpriteTemplate_CeaselessEdgeSlash, ANIM_TARGET, 2, -8, -8, TRUE, FALSE - delay 0x4 + delay 4 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSpriteTemplate_CeaselessEdgeSlash, ANIM_TARGET, 2, -8, 0, TRUE, TRUE - delay 0x4 + delay 4 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET createsprite gSpriteTemplate_CeaselessEdgeSlash, ANIM_TARGET, 2, 8, -4, FALSE, TRUE return @@ -16043,7 +16538,7 @@ gBattleAnimMove_BleakwindStorm:: playsewithpan SE_M_GUST, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, RGB_WHITE call HurricaneGustCentered call BleakwindStormIceSwirl call HurricaneGustCentered @@ -16058,20 +16553,20 @@ gBattleAnimMove_BleakwindStorm:: call BleakwindStormIceSwirl waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, RGB_WHITE waitforvisualfinish end BleakwindStormIceSwirl: createspriteontargets gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 6, 0x0, 0x20, 0x210, 0x1e, 0xa, 0x32, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 6, 0x0, 0x24, 0x1e0, 0x14, 0xd, 0xffd2, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 6, 0x0, 0x25, 0x240, 0x14, 0x5, 0x2a, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 6, 0x0, 0x23, 0x190, 0x19, 0x8, 0xffd6, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 6, 0x0, 0x20, 0x200, 0x19, 0xd, 0x2e, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_BleakwindIce, ANIM_TARGET, 2, 6, 0x0, 0x25, 0x1d0, 0x1e, 0xc, 0xffce, ANIM_TARGET return @@ -16087,7 +16582,7 @@ gBattleAnimMove_WildboltStorm:: playsewithpan SE_M_GUST, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, RGB(30, 31, 1) call HurricaneGustCentered call WildboltStormSparkSwirl call HurricaneGustCentered @@ -16102,22 +16597,22 @@ gBattleAnimMove_WildboltStorm:: call WildboltStormSparkSwirl waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, RGB(30, 31, 1) call UnsetPsychicBg waitforvisualfinish end WildboltStormSparkSwirl: createspriteontargets gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 6, 0x0, 0x20, 0x210, 0x1e, 0xa, 0x32, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 6, 0x0, 0x24, 0x1e0, 0x14, 0xd, 0xffd2, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 6, 0x0, 0x25, 0x240, 0x14, 0x5, 0x2a, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 6, 0x0, 0x23, 0x190, 0x19, 0x8, 0xffd6, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 6, 0x0, 0x20, 0x200, 0x19, 0xd, 0x2e, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gSpriteTemplate_WildboltStormSpark, ANIM_TARGET, 2, 6, 0x0, 0x25, 0x1d0, 0x1e, 0xc, 0xffce, ANIM_TARGET return @@ -16126,11 +16621,11 @@ WildboltStormSparkSwirl: gBattleAnimMove_SandsearStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_SMALL_EMBER - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_GUST, 0x0, 0xA, 0xA, 0x190B + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUST, 0, 10, 10, RGB(11, 8, 6) playsewithpan SE_M_GUST, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, RGB_RED call HurricaneGustCentered call SandsearStormFireSpin call HurricaneGustCentered @@ -16145,21 +16640,21 @@ gBattleAnimMove_SandsearStorm:: call SandsearStormFireSpin waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, RGB_RED waitforvisualfinish end SandsearStormFireSpin: createspriteontargets gFireSpinSpriteTemplate, ANIM_TARGET, 2, 6, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gFireSpinSpriteTemplate, ANIM_TARGET, 2, 6, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gFireSpinSpriteTemplate, ANIM_TARGET, 2, 6, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gFireSpinSpriteTemplate, ANIM_TARGET, 2, 6, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gFireSpinSpriteTemplate, ANIM_TARGET, 2, 6, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_TARGET - delay 0x2 + delay 2 createspriteontargets gFireSpinSpriteTemplate, ANIM_TARGET, 2, 6, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_TARGET return @@ -16172,26 +16667,26 @@ gBattleAnimMove_LunarBlessing:: loadspritegfx ANIM_TAG_SMALL_EMBER @Yellow colour for ring monbg ANIM_ATK_PARTNER setalpha 16, 0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 - createvisualtask AnimTask_BlendNonAttackerPalettes, 0x2, 0x1, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendNonAttackerPalettes, 2, 1, 0, 16, RGB_BLACK waitforvisualfinish createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 0x78, 0x38 createvisualtask AnimTask_AlphaFadeIn, 0x3, 0x0, 0x10, 0x10, 0x0, 0x1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x7, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 7, 0, 16, RGB_BLACK loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x3 call HealingEffect2 createsprite gSpriteTemplate_LunarDanceRing, ANIM_ATTACKER, 2, - delay 0x4 + delay 4 createsprite gSpriteTemplate_LunarDanceRing, ANIM_ATTACKER, 2, - delay 0x4 + delay 4 createsprite gSpriteTemplate_LunarDanceRing, ANIM_ATTACKER, 2, - delay 0x24 + delay 36 clearmonbg ANIM_ATK_PARTNER call HealingEffect - delay 0x28 + delay 40 createvisualtask AnimTask_AllBattlersInvisible, 0xA, createvisualtask AnimTask_MoonlightEndFade, 0x2, - delay 0x10 + delay 16 createvisualtask AnimTask_AllBattlersVisible, 0xA, waitforvisualfinish blendoff @@ -16205,7 +16700,7 @@ gBattleAnimMove_TakeHeart:: loadspritegfx ANIM_TAG_GUARD_RING playsewithpan SE_M_BUBBLE, SOUND_PAN_ATTACKER createsprite gSpriteTemplate_TakeHeartFallingHeart, ANIM_ATTACKER, 2, 0, 0x3a, 4, ANIM_ATTACKER - delay 0x15 + delay 21 loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 0x10, 0x4 createvisualtask AnimTask_StatusClearedEffect, 0x2, 0x0 call TakeHeartRings @@ -16225,7 +16720,7 @@ gBattleAnimMove_TakeHeart:: TakeHeartRings: createsprite gSpriteTemplate_TakeHeartRing, ANIM_ATTACKER, 2, - delay 0x4 + delay 4 return gBattleAnimMove_BitterBlade:: @@ -16480,7 +16975,7 @@ gBattleAnimMove_BurningBulwark:: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER 16 - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 13, 13, 0x015B + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 13, 13, RGB(27, 10, 0) createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 90 createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 delay 2 @@ -16502,7 +16997,7 @@ gBattleAnimMove_BurningBulwark:: gBattleAnimMove_AlluringVoice:: loadspritegfx ANIM_TAG_THIN_RING - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 8, RGB(29, 19, 27) waitforvisualfinish createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 @@ -16510,13 +17005,13 @@ gBattleAnimMove_AlluringVoice:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1 createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1 createvisualtask SoundTask_WaitForCry, 5 - delay 0xA + delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 26, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 26, 1 waitforvisualfinish createvisualtask SoundTask_WaitForCry, 0x5 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 8, 0, RGB(29, 19, 27) waitforvisualfinish end @@ -16727,7 +17222,7 @@ gBattleAnimMove_UpperHand:: splitbgprio ANIM_TARGET setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET - createsprite gKarateChopSpriteTemplate, 2, 8, -16, 0, 0, 0, 10, 1, 3, 0 + createsprite gKarateChopSpriteTemplate, ANIM_ATK_PARTNER, 8, -16, 0, 0, 0, 10, 1, 3, 0 waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gForcePalmSpriteTemplate 3, 4, 0, 0, 1, 2 @@ -16794,19 +17289,19 @@ gBattleAnimMove_PsychicNoise:: monbg ANIM_DEF_PARTNER call SetPsychicBackground createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 29, -12, 0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -12, -29, 1 delay 16 createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 12, -29, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -29, -12, 0 delay 16 createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, -24, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, -24, 0 @@ -16868,7 +17363,7 @@ gBattleAnimMove_Trailblaze:: call TrailblazeVortex waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 24, 0, 0, 5 - delay 0x3 + delay 3 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 6, 0, 8, 1 @@ -16881,24 +17376,24 @@ gBattleAnimMove_Trailblaze:: createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_ATTACKER waitforvisualfinish - delay 0x8 + delay 8 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x7 waitforvisualfinish clearmonbg ANIM_TARGET end TrailblazeVortex: createsprite gLeafTornadoVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gLeafTornadoVortexTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 return gBattleAnimMove_LastRespects:: @@ -17292,32 +17787,32 @@ ElectroShotSetUp: loadspritegfx ANIM_TAG_GRAY_SMOKE @dispersal monbg ANIM_ATTACKER setalpha 14, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 0xE, 0x8 createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, 0x0 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 call TechnoBlastCharging1 - delay 0xF + delay 15 call TechnoBlastCharging2 - delay 0xF + delay 15 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish blendoff clearmonbg ANIM_ATTACKER @@ -17328,7 +17823,7 @@ ElectroShotUnleash: loadspritegfx ANIM_TAG_ELECTRICITY loadspritegfx ANIM_TAG_SPARK_2 setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, RGB_BLACK waitforvisualfinish playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER delay 12 @@ -17360,7 +17855,7 @@ ElectroShotUnleash: call SparkBeam call SparkBeam delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(31, 31, 22) waitforvisualfinish @@ -17388,6 +17883,7 @@ gBattleAnimMove_IvyCudgel:: end IvyCudgelFire: loadspritegfx ANIM_TAG_IVY_CUDGEL_FIRE + loadspritegfx ANIM_TAG_SMALL_EMBER createsprite gIvyCudgelFireSpriteTemplate, ANIM_TARGET, 2 delay 60 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 @@ -17395,10 +17891,14 @@ IvyCudgelFire: createvisualtask AnimTask_SquishTarget, 0x2 delay 6 call WoodHammerImpact + call FireSpreadEffect + delay 4 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET waitforvisualfinish end IvyCudgelRock: loadspritegfx ANIM_TAG_IVY_CUDGEL_ROCK + loadspritegfx ANIM_TAG_ROCKS createsprite gIvyCudgelRockSpriteTemplate, ANIM_TARGET, 2 delay 60 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 @@ -17406,10 +17906,16 @@ IvyCudgelRock: createvisualtask AnimTask_SquishTarget, 0x2 delay 6 call WoodHammerImpact + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -12, 32, 3, 4 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 8, 31, 2, 2 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, -4, 28, 2, 3 + createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3 waitforvisualfinish end IvyCudgelWater: loadspritegfx ANIM_TAG_IVY_CUDGEL_WATER + loadspritegfx ANIM_TAG_SPLASH createsprite gIvyCudgelWaterSpriteTemplate, ANIM_TARGET, 2 delay 60 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 @@ -17417,6 +17923,8 @@ IvyCudgelWater: createvisualtask AnimTask_SquishTarget, 0x2 delay 6 call WoodHammerImpact + playsewithpan SE_M_DIVE, SOUND_PAN_TARGET + createsprite gDiveWaterSplashSpriteTemplate, ANIM_TARGET, 3, 1 waitforvisualfinish end @@ -17424,7 +17932,7 @@ gBattleAnimMove_SpicyExtract:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES - createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, 0x061D @Orange + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, RGB(29, 16, 1) @Orange call SludgeBombProjectile call SludgeBombProjectile call SludgeBombProjectile @@ -17455,9 +17963,9 @@ gBattleAnimMove_SpicyExtract:: createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -16, 44, 20 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET call LetsSnuggleForeverTears - delay 0x8 + delay 8 call LetsSnuggleForeverTears - delay 0x8 + delay 8 call LetsSnuggleForeverTears waitsound waitforvisualfinish @@ -17542,11 +18050,11 @@ gBattleAnimMove_FilletAway:: createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 60, -37, 0 playsewithpan SE_M_CUT, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 2, 4, 4 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_WHITE waitforvisualfinish blendoff end @@ -17960,328 +18468,2686 @@ gBattleAnimMove_Thunderclap:: delay 4 createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 0, 0, RGB_BLACK waitforvisualfinish - clearmonbg ANIM_ATK_PARTNER + clearmonbg ANIM_ATK_PARTNER + blendoff + waitforvisualfinish + end + +gBattleAnimMove_HardPress:: + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_ACUPRESSURE + loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE + setalpha 15, 0 + call SetSteelBeamBackground + createvisualtask AnimTask_CompressTargetHorizontallyFast, 2 + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0, 0, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 24, -24, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, -16, 16, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, -24, -12, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 16, 16, 1, 1 + waitforvisualfinish + blendoff + call UnsetHighSpeedBg + end + +gBattleAnimMove_DragonCheer:: + loadspritegfx ANIM_TAG_NOISE_LINE + loadspritegfx ANIM_TAG_CONFETTI + loadspritegfx ANIM_TAG_PINK_CLOUD + createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER + delay 12 + call RoarEffect + createvisualtask SoundTask_PlayCryHighPitch, 2, ANIM_ATTACKER, 3 + waitforvisualfinish + monbg ANIM_ATTACKER + playsewithpan SE_BALL_OPEN, SOUND_PAN_TARGET + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 122, 3, -14, 18, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 121, 3, 14, 6, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 120, 3, -12, 12, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 119, 3, 14, 18, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 118, 3, 0, 0, 24 + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 10 + end + +gBattleAnimMove_MalignantChain:: + loadspritegfx ANIM_TAG_PURPLE_CHAIN + loadspritegfx ANIM_TAG_POISON_BUBBLE + loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 1 + delay 7 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 1 + delay 3 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + delay 20 + setarg 7, -1 + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + waitforvisualfinish + call PoisonBubblesEffect + waitforvisualfinish + end + +gBattleAnimMove_PopulationBomb:: + loadspritegfx ANIM_TAG_CUT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + createvisualtask AnimTask_RandomBool, 2 + jumpretfalse PopulationBombSliceRight + jumprettrue PopulationBombSliceLeft +PopulationBombSliceRight: + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + goto PopulationBombContinue +PopulationBombSliceLeft: + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 +PopulationBombContinue: + delay 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + end + +gBattleAnimMove_RevivalBlessing:: + goto gBattleAnimMove_LunarBlessing + +gBattleAnimMove_TeraStarstorm:: + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_STARSTORM + loadspritegfx ANIM_TAG_YELLOW_STAR + loadspritegfx ANIM_TAG_IMPACT + fadetobg BG_COSMIC + waitbgfadein + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 15, 15, RGB_WHITE + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 + delay 20 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 2 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + call TeraStarstormCreateBeam + delay 20 + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + delay 20 + playsewithpan SE_FALL, SOUND_PAN_ATTACKER + jumpifmovetypeequal TYPE_STELLAR, TeraStarstormStellar + goto TeraStarstormSingle +TeraStarstormStellar: + jumpifdoublebattle TeraStarstormDouble +TeraStarstormSingle: + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 + delay 3 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 + delay 2 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 + delay 3 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 + delay 2 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 + delay 3 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, -5, 30, 0, 1 + delay 3 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -16, 8, ANIM_TARGET, 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 5, 30, 0, 1 + delay 3 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 16, 8, ANIM_TARGET, 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + delay 5 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 24, 0, ANIM_TARGET, 2 + delay 5 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 24, 16, ANIM_TARGET, 2 + waitforvisualfinish + restorebg + waitbgfadeout + end +TeraStarstormDouble: + loadspritegfx ANIM_TAG_EXPLOSION_2 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION_2, 0, 12, 12, RGB_WHITE + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 1, 1 + delay 2 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1 + delay 3 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 1, 1 + delay 2 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1 + delay 3 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 1, 1 + delay 2 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 1, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, -8, 0, ANIM_DEF_PARTNER, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -16, 0, ANIM_TARGET, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, -16, 0, ANIM_DEF_PARTNER, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 16, 8, ANIM_TARGET, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, 16, 8, ANIM_DEF_PARTNER, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 2 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 1, 1 + delay 3 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 + createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 24, 0, ANIM_TARGET, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, 24, 0, ANIM_DEF_PARTNER, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 5 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 24, 16, ANIM_TARGET, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, 24, 16, ANIM_DEF_PARTNER, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 5 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -24, 16, ANIM_TARGET, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, -24, 16, ANIM_DEF_PARTNER, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + delay 5 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -24, -8, ANIM_TARGET, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_DEF_PARTNER, 2, -24, -8, ANIM_DEF_PARTNER, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 3, 50, 1 + call ExpandingForceExplosionGeyser + delay 5 + call ExpandingForceExplosionGeyser + delay 5 + waitforvisualfinish + restorebg + waitbgfadeout + end + +TeraStarstormCreateBeam:: + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -3, 1, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 1, 0, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 3, -1, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -2, 0, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 0, 1, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -1, -1, 0, 0, 20 + createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 2, 0, 0, 0, 20 + return + +gBattleAnimMove_TachyonCutter:: + loadspritegfx ANIM_TAG_CUT + loadspritegfx ANIM_TAG_BUBBLE + createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + waitforvisualfinish + end + +gBattleAnimMove_SaltCure:: + loadspritegfx ANIM_TAG_SALT_PARTICLE + loadspritegfx ANIM_TAG_WATER_ORB + call SaltCureEffect + call SaltCureEffect + call SaltCureEffect + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + waitforvisualfinish + call gBattleAnimGeneral_SaltCureDamage + end + +SaltCureEffect: + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 384, 50, 8, 50, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 32, 240, 40, 11, -46, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 416, 40, 4, 42, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 31, 288, 45, 6, -42, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 448, 45, 11, 46, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 50, 10, -50, ANIM_TARGET + delay 2 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + return + +gBattleAnimMove_GlaiveRush:: + loadspritegfx ANIM_TAG_CUT @Cut + loadspritegfx ANIM_TAG_SWORD @Sword + call SetHighSpeedBg + setalpha 12, 8 + playsewithpan SE_M_SWORDS_DANCE, SOUND_PAN_ATTACKER + createsprite gSwordsDanceBladeSpriteTemplate, ANIM_ATTACKER, 2, 0, 0 + delay 22 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_SWORD, 2, 2, RGB(18, 31, 31), 16, 0, 0 + waitforvisualfinish + delay 1 + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_DRAGON_ASCENT + monbg ANIM_ATTACKER + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_ASCENT, 0, 10, 10, RGB(0, 0, 31) @Blue + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE + delay 4 + createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0 + waitforvisualfinish + createvisualtask SoundTask_PlaySE2WithPanning, 5, 238, SOUND_PAN_ATTACKER + createsprite gGlaiveRushSpriteTemplate, ANIM_TARGET, 2 + delay 14 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, 1, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 6, 0, 12, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_ATTACKER | F_PAL_BG | F_PAL_ANIM_1 | F_PAL_ANIM_2), 2, 16, 0, RGB(26, 31, 0) + waitforvisualfinish + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 15, 0, RGB_WHITE + waitforvisualfinish + clearmonbg ANIM_ATTACKER + call UnsetHighSpeedBg + end + +gBattleAnimMove_ArmorCannon:: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_FLASH_CANNON_BALL + monbg ANIM_ATTACKER + setalpha 13, 8 + fadetobg BG_FIRE + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 2560, 0, 1, -1 + waitbgfadein + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HANDS_AND_FEET, 0, 12, 12, RGB(31, 0, 0) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ELECTRIC_ORBS, 0, 15, 15, RGB(31, 0, 0) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 15, 15, RGB(31, 0, 0) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLASH_CANNON_BALL, 0, 15, 15, RGB(31, 16, 0) + createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 60, 2, 12 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 30 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 30 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + createsprite gFlashCannonGrayChargeTemplate, ANIM_ATTACKER, 2, 0 + delay 25 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 15 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 10 + delay 6 + loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER, 6, 5 + waitforvisualfinish + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER + createsprite gFlashCannonBallMovementTemplate, ANIM_TARGET, 2, 0, 0, 21 + clearmonbg ANIM_ATTACKER + waitforvisualfinish + loadspritegfx ANIM_TAG_SMALL_EMBER @FireSpreadEffect + call FireSpreadEffect + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 + delay 4 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + call UnsetPsychicBg + end + +gBattleAnimMove_TripleDive:: + loadspritegfx ANIM_TAG_SPARKLE_6 + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_SPLASH + playsewithpan SE_M_DIVE, SOUND_PAN_ATTACKER + invisible ANIM_ATTACKER + createsprite gDiveWaterSplashSpriteTemplate, ANIM_ATTACKER, 3, 0 + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + call DiveSetUpWaterDroplets + loadspritegfx ANIM_TAG_WATER_IMPACT + loadspritegfx ANIM_TAG_SMALL_BUBBLES + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET + createsprite gDiveWaterSplashSpriteTemplate, ANIM_TARGET, 131, 1 + call DiveAttackWaterDroplets + call DiveAttackWaterDroplets + call DiveAttackWaterDroplets + call DiveAttackWaterDroplets + call DiveAttackWaterDroplets + delay 12 + call RisingWaterHitEffect + waitforvisualfinish + visible ANIM_ATTACKER + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +gBattleAnimMove_Doodle:: + loadspritegfx ANIM_TAG_PENCIL + monbg ANIM_TARGET + createvisualtask AnimTask_SketchDrawMon, 2 + createsprite gPencilSpriteTemplate, ANIM_TARGET, 2 + waitforvisualfinish + clearmonbg ANIM_TARGET + delay 12 + call GrowthEffect + waitforvisualfinish + call GrowthEffect + waitforvisualfinish + end + +gBattleAnimMove_Ruination:: + setalpha 0, 16 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 1, 0, 20, 1 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 48, 1 + createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATTACKER, RGB(31, 6, 1), 12, 4, 1 + waitforvisualfinish + delay 20 + delay 1 + createvisualtask AnimTask_InitMementoShadow, 2 + delay 1 + createvisualtask AnimTask_MoveAttackerMementoShadow, 5 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + delay 48 + playsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_MementoHandleBg, 2 + delay 12 + setalpha 0, 16 + delay 1 + monbg_static ANIM_TARGET + createvisualtask AnimTask_MoveTargetMementoShadow, 5 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg_static ANIM_TARGET + delay 1 + blendoff + delay 1 + end + +gBattleAnimMove_CollisionCourse:: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ELECTRICITY + monbg ANIM_ATTACKER + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 8, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 10, 10, RGB(31, 0, 0) + waitforvisualfinish + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 2 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 6 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 10 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + clearmonbg ANIM_ATTACKER + createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 0 + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 1 + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 2 + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 3 + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 4 + playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER + delay 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 8, 0, RGB_BLACK + call SetImpactBackground + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createsprite gFireSpreadSpriteTemplate, ANIM_ATTACKER, 2, 1, 16, 16 + delay 2 + createsprite gFireSpreadSpriteTemplate, ANIM_ATTACKER, 2, 1, -16, -16 + delay 8 + createvisualtask AnimTask_VoltTackleAttackerReappear, 5 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 9, 1 + waitforvisualfinish + call FireSpreadEffect + delay 4 + playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET + waitforvisualfinish + restorebg + waitbgfadein + end + +gBattleAnimMove_ElectroDrift:: + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_ELECTRICITY + loadspritegfx ANIM_TAG_LIGHTNING + monbg ANIM_ATTACKER + waitforvisualfinish + fadetobg BG_THUNDER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, -256, 0, 1, -1 + waitbgfadein + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, ANIM_ATTACKER, 1, 0 + delay 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, ANIM_ATTACKER, 1, 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, ANIM_ATTACKER, 1, 1 + delay 10 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, ANIM_ATTACKER, 1, 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, ANIM_ATTACKER, 1, 1 + delay 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, ANIM_ATTACKER, 1, 1 + delay 0 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 128, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 192, 20, 2, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 32, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 96, 20, 1, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 160, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 + delay 4 + createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + delay 8 + createvisualtask AnimTask_VoltTackleBolt, 5, 0 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 1 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 2 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 3 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + waitforvisualfinish + createvisualtask AnimTask_VoltTackleBolt, 5, 4 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_ATTACKER + delay 2 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + delay 5 + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + delay 1 + playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 10, 0, 18, 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32 + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 + delay 10 + createvisualtask AnimTask_ShakeTargetInPattern, 2, 30, 3, TRUE, 0 + delay 2 + createvisualtask AnimTask_VoltTackleAttackerReappear, 5 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 9, 1 + call ElectricityEffect + waitforvisualfinish + blendoff + delay 2 + call UnsetPsychicBg + end + +gBattleAnimMove_Psyblade:: + loadspritegfx ANIM_TAG_SLASH + loadspritegfx ANIM_TAG_CROSS_IMPACT + loadspritegfx ANIM_TAG_LEER + call SetPsychicBackground + waitbgfadein + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 12 + createsprite gLeerSpriteTemplate, ANIM_TARGET, 2, 24, -12 + playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER + waitforvisualfinish + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1 + waitforvisualfinish + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 15, 0, 40, 1 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CROSS_IMPACT, 0, 10, 10, RGB_RED + createsprite gSpriteTemplate_LargeCrossImpact, ANIM_TARGET, 2, 0, 0, 1, 36 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 4 + waitforvisualfinish + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + call UnsetPsychicBg + end + +gBattleAnimMove_MightyCleave:: + loadspritegfx ANIM_TAG_SLASH + loadspritegfx ANIM_TAG_CROSS_IMPACT + loadspritegfx ANIM_TAG_LEER + loadspritegfx ANIM_TAG_ROCKS + fadetobg BG_ROCK_WRECKER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0xF000, 0, 0, -1 + waitbgfadein + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 38, 1 + call MightyCleaveDiggingRun + call MightyCleaveDiggingRun + call MightyCleaveDiggingRun + call MightyCleaveDiggingRun + call MightyCleaveDiggingRun + call MightyCleaveDiggingRun + call MightyCleaveDiggingRun + call MightyCleaveDiggingRun + call MightyCleaveDiggingRun + waitforvisualfinish + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 12 + createsprite gLeerSpriteTemplate, ANIM_TARGET, 2, 24, -12 + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + waitforvisualfinish + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1 + waitforvisualfinish + createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 15, 0, 40, 1 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CROSS_IMPACT, 0, 10, 10, RGB_RED + createsprite gSpriteTemplate_LargeCrossImpact, ANIM_TARGET, 2, 0, 0, 1, 36 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + delay 4 + waitforvisualfinish + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 + waitforvisualfinish + clearmonbg ANIM_TARGET + waitbgfadein + call UnsetPsychicBg + waitforvisualfinish + end +MightyCleaveDiggingRun: + createsprite gRockPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 12, 4, -16, 18 + createsprite gRockPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 16, 4, -10, 18 + createsprite gRockPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 14, 4, -18, 18 + createsprite gRockPlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 12, 4, -16, 18 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 5 + return + +gBattleAnimMove_SupercellSlam:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_SPARK_2 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, ANIM_ATTACKER, 1, 0 + delay 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, ANIM_ATTACKER, 1, 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, ANIM_ATTACKER, 1, 1 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + delay 10 + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 5, 5, RGB(31, 31, 22) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, ANIM_ATTACKER, 1, 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, ANIM_ATTACKER, 1, 1 + delay 0 + createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, ANIM_ATTACKER, 1, 1 + delay 0 + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + delay 20 + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 7, 7, RGB(31, 31, 22) + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 128, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 192, 20, 2, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 32, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 96, 20, 1, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 160, 20, 0, 0 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 + delay 4 + waitforvisualfinish + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER), -31, 1, 0, 0, RGB(31, 31, 22) + delay 4 + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, ANIM_ATTACKER + waitforvisualfinish + delay 11 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 + loopsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET, 10, 2 + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, -31, 2, 0, 6, RGB(31, 31, 22) + call ElectricityEffect + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end + +gBattleAnimMove_BlazingTorque:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_SMALL_EMBER + fadetobg BG_FIRE + waitbgfadeout + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_StartSlidingBg, 5, 0x0A00, 0, 1, -1 + waitbgfadein + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + waitforvisualfinish + delay 10 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + call FireSpreadEffect + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + @waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end + +gBattleAnimMove_WickedTorque:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_POISON_BUBBLE + loadspritegfx ANIM_TAG_THIN_RING + fadetobg BG_DARK + waitbgfadein + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + waitforvisualfinish + delay 10 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 10, 0, 0 + createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0, 0, 256, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + delay 2 + createsprite gFoulPlayRingTemplate, ANIM_ATTACKER, 3, 0, 0, 256, 0 + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end + +gBattleAnimMove_NoxiousTorque:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_POISON_BUBBLE + fadetobg BG_GUNK_SHOT + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0x0A00, 0, 1, -1 + waitbgfadein + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + waitforvisualfinish + delay 10 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(30, 0, 31) + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + delay 5 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 0, 40, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 46, 9, 20 + delay 5 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -43, -12, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 16, -46, 20 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end + +gBattleAnimMove_CombatTorque:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_METEOR + fadetobg BG_IN_AIR + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0, 0x1000, 0, -1 + waitbgfadein + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + waitforvisualfinish + delay 10 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gSuperpowerFireballSpriteTemplate, ANIM_TARGET, 3, ANIM_ATTACKER + delay 4 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + @waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + call UnsetPsychicBg + end + +gBattleAnimMove_MagicalTorque:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_PINK_HEART + loadspritegfx ANIM_TAG_DUCK + loadspritegfx ANIM_TAG_RED_HEART + fadetobg BG_TWINKLE_TACKLE + waitbgfadeout + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + waitforvisualfinish + delay 10 + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 160, -32 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -256, -40 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 128, -16 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 416, -38 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -128, -22 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 + delay 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + delay 3 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + waitforvisualfinish + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end + +gBattleAnimMove_TeraBlast:: + jumpifmovetypeequal TYPE_NORMAL, TeraBlastNormal + jumpifmovetypeequal TYPE_FIGHTING, TeraBlastFighting + jumpifmovetypeequal TYPE_FLYING, TeraBlastFlying + jumpifmovetypeequal TYPE_POISON, TeraBlastPoison + jumpifmovetypeequal TYPE_GROUND, TeraBlastGround + jumpifmovetypeequal TYPE_ROCK, TeraBlastRock + jumpifmovetypeequal TYPE_BUG, TeraBlastBug + jumpifmovetypeequal TYPE_GHOST, TeraBlastGhost + jumpifmovetypeequal TYPE_STEEL, TeraBlastSteel + jumpifmovetypeequal TYPE_FIRE, TeraBlastFire + jumpifmovetypeequal TYPE_WATER, TeraBlastWater + jumpifmovetypeequal TYPE_GRASS, TeraBlastGrass + jumpifmovetypeequal TYPE_ELECTRIC, TeraBlastElectric + jumpifmovetypeequal TYPE_PSYCHIC, TeraBlastPsychic + jumpifmovetypeequal TYPE_ICE, TeraBlastIce + jumpifmovetypeequal TYPE_DRAGON, TeraBlastDragon + jumpifmovetypeequal TYPE_DARK, TeraBlastDark + jumpifmovetypeequal TYPE_FAIRY, TeraBlastFairy + jumpifmovetypeequal TYPE_STELLAR, TeraBlastStellar + end +TeraBlastNormal: + loadspritegfx ANIM_TAG_PINKVIO_ORB + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PINKVIO_ORB, 0, 12, 12, RGB_WHITE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 12, 12, RGB_WHITE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_WHITE + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, 0 + waitforvisualfinish + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(25, 25, 25) + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(25, 25, 25) + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, 0 + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end +TeraBlastFighting: + loadspritegfx ANIM_TAG_PINKVIO_ORB + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PINKVIO_ORB, 0, 12, 12, RGB(29, 24, 2) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(29, 24, 2) + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_ROCK_WRECKER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0xF000, 0, 0, -1 + waitbgfadein + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 63, 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 24, 0, 0, 10, 1, ANIM_FOOT_1, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 2 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -6, 18, 0, 0, 10, 1, ANIM_CHOP, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -64, 16, 0, 0, 10, 1, ANIM_FIST_1, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 21, 0, 0, 10, 1, ANIM_FOOT_2, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 20, 0, 0, 10, 1, ANIM_FIST_1, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -32, 23, 0, 0, 10, 1, ANIM_CHOP, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 2 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -64, 17, 0, 0, 10, 1, ANIM_FOOT_1, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -80, 16, 0, 0, 10, 1, ANIM_FOOT_2, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -96, 21, 0, 0, 10, 1, ANIM_CHOP, 1 + delay 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 24, 0, 0, 10, 1, ANIM_FOOT_1, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -6, 18, 0, 0, 10, 1, ANIM_CHOP, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -64, 16, 0, 0, 10, 1, ANIM_FIST_1, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 21, 0, 0, 10, 1, ANIM_FOOT_2, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -48, 20, 0, 0, 10, 1, ANIM_FIST_1, 1 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 1 + createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, -32, 23, 0, 0, 10, 1, ANIM_CHOP, 1 + delay 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + clearmonbg ANIM_TARGET + waitbgfadein + call UnsetPsychicBg + waitforvisualfinish + end +TeraBlastPoison: + loadspritegfx ANIM_TAG_POISON_BUBBLE + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_PURPLE + createsprite sPoisonSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 2 + createsprite sPoisonSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 2 + createsprite sPoisonSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 2 + createsprite sPoisonSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 2 + createsprite sPoisonSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 2 + createsprite sPoisonSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + delay 2 + createsprite sPoisonSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_GUNK_SHOT + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0x0A00, 0, 1, -1 + waitbgfadein + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20 + playsewithpan SE_M_DIG, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 50, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB_PURPLE + call PoisonBubblesEffect + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20 + playsewithpan SE_M_DIG, SOUND_PAN_TARGET + call PoisonBubblesEffect + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 + createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20 + playsewithpan SE_M_DIG, SOUND_PAN_TARGET + delay 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + delay 0 + call UnsetSkyBg + end +TeraBlastFlying: + loadspritegfx ANIM_TAG_AIR_WAVE_2 + loadspritegfx ANIM_TAG_METAL_SOUND_WAVES + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_METAL_SOUND_WAVES, 0, 12, 12, RGB_WHITE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_WHITE + createsprite gAirWaveSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_ATTACKER + delay 2 + createsprite gAirWaveSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_ATTACKER + delay 2 + createsprite gAirWaveSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_ATTACKER + delay 2 + createsprite gAirWaveSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_ATTACKER + delay 2 + createsprite gAirWaveSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_ATTACKER + delay 2 + createsprite gAirWaveSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_ATTACKER + delay 2 + createsprite gAirWaveSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_ATTACKER + waitforvisualfinish + call SetSkyBg + splitbgprio ANIM_TARGET + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 + delay 6 + call TeraBlastFlyingBeam + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 50, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 2, 0, 12, RGB_WHITE + call TeraBlastFlyingBeam + call TeraBlastFlyingBeam + delay 8 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + delay 0 + call UnsetSkyBg + end +TeraBlastRock: + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_FIRE_PLUME + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FIRE_PLUME, 0, 12, 12, RGB(29, 24, 2) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(29, 24, 2) + createsprite sRockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sRockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sRockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sRockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sRockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sRockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sRockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_ROCK_WRECKER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0xF000, 0, 0, -1 + waitbgfadein + playsewithpan SE_FALL, SOUND_PAN_TARGET + call TeraBlastRock1 + delay 3 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + call TeraBlastRock2 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 16 @; For Meteor 1 + createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 + delay 3 + call TeraBlastRock3 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 16 @; For Meteor 2 + delay 3 + call TeraBlastRock4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 16 @; For Meteor 3 + delay 3 + call TeraBlastRock1 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 16 @; For Meteor 4 + createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 + delay 3 + call TeraBlastRock2 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 16 @; For Meteor 1 + delay 3 + call TeraBlastRock3 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 16 @; For Meteor 3 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end +TeraBlastBug: + loadspritegfx ANIM_TAG_HOLLOW_ORB + loadspritegfx ANIM_TAG_SPARKLE_6 + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_GREEN + createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB_GREEN, 14, 0, 3 + createsprite gDragonDanceOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 2 + createsprite gDragonDanceOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 2 + createsprite gDragonDanceOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 2 + createsprite gDragonDanceOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 2 + createsprite gDragonDanceOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 2 + createsprite gDragonDanceOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + delay 2 + createsprite gDragonDanceOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER + waitforvisualfinish + monbg ANIM_DEF_PARTNER + call SetBugBg + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 50, 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, 30 + delay 1 + createsprite gMaxFlutterbyButterflySpriteTemplate, ANIM_ATTACKER, 2, 3, 0, -20 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0, 0, 4 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + call UnsetBugBg + end +TeraBlastGround: + loadspritegfx ANIM_TAG_MUD_SAND + loadspritegfx ANIM_TAG_FIRE_PLUME + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(29, 24, 2) + createsprite sMudSandSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sMudSandSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sMudSandSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sMudSandSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sMudSandSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sMudSandSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + delay 2 + createsprite sMudSandSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_ROCK_THROW, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_FISSURE + waitbgfadeout + createvisualtask AnimTask_PositionFissureBgOnBattler, 5, ANIM_TARGET, 5, -1 + waitbgfadein + createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50 + playsewithpan SE_M_EARTHQUAKE, SOUND_PAN_TARGET + delay 40 + loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET 11, 3 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 + delay 1 + loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET 11, 3 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 + delay 1 + loopsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET 11, 3 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 5, 0 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -10, -15 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 0, 25 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 15, 5 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, -25, 0 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, 30, 30 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 2, 1, -27, 25 + delay 1 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_TARGET, 66, 1, 0, 8 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0, 0, 4 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 7, -1 + waitbgfadein + end +TeraBlastGhost: + loadspritegfx ANIM_TAG_PURPLE_FLAME + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_PURPLE + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_GHOST + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0x0A00, 0, 1, -1 + waitbgfadein + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 46, 1 + delay 6 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 40, 40, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, -40, -40, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 0, 40, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB_PURPLE + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 0, -40, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 40, -20, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 40, 20, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, -40, -20, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, -40, 20, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, -20, 30, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 20, -30, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, -20, -30, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 30, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, -40, 0, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 2 + createsprite gGhostProjectileSpriteTemplate, ANIM_TARGET, 2, 40, 0, 16 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 6 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end +TeraBlastSteel: + loadspritegfx ANIM_TAG_METAL_BALL + loadspritegfx ANIM_TAG_ROCKS + loadspritegfx ANIM_TAG_REALLY_BIG_ROCK + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROCKS, 0, 12, 12, RGB(25, 25, 25) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_REALLY_BIG_ROCK, 0, 12, 12, RGB(25, 25, 25) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(25, 25, 25) + createsprite sMetalBallSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + delay 2 + createsprite sMetalBallSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + delay 2 + createsprite sMetalBallSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + delay 2 + createsprite sMetalBallSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + delay 2 + createsprite sMetalBallSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + delay 2 + createsprite sMetalBallSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + delay 2 + createsprite sMetalBallSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + waitforvisualfinish + call SetSteelBeamBackground + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 + delay 6 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + createsprite gContinentalCrushGrowingRockSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER + call ContinentalCrushStockpileRocks + delay 30 + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + waitforvisualfinish + playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER + createsprite gReallyBigRockBlastRockSpriteTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 25, 257 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end +TeraBlastFire: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(31, 0, 0) + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + waitforvisualfinish + monbg ANIM_ATTACKER + setalpha 14, 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, 0 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 + delay 6 + createvisualtask AnimTask_GetAttackerSide, 2 + jumprettrue TeraBlastFireOnPlayer + goto TeraBlastFireOnOpponent +TeraBlastFireOnOpponent: + panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 43, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 0, 0) + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, 0 + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end +TeraBlastFireOnPlayer: + panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 43, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 0, 0) + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, 0 + waitforvisualfinish + blendoff + clearmonbg ANIM_ATTACKER + end +TeraBlastWater: + loadspritegfx ANIM_TAG_HYDRO_PUMP + loadspritegfx ANIM_TAG_FIRE_PLUME + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FIRE_PLUME, 0, 12, 12, RGB_BLUE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_BLUE + createsprite gHydroPumpSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_HYDRO_PUMP, SOUND_PAN_ATTACKER + delay 2 + createsprite gHydroPumpSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + delay 2 + createsprite gHydroPumpSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + delay 2 + createsprite gHydroPumpSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + delay 2 + createsprite gHydroPumpSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + delay 2 + createsprite gHydroPumpSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + delay 2 + createsprite gHydroPumpSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + waitforvisualfinish + fadetobg BG_WATER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0x0A00, 0, 1, -1 + waitbgfadein + playsewithpan SE_FALL, SOUND_PAN_TARGET + call TeraBlastWater1 + delay 3 + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + call TeraBlastWater2 + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 16 @; For Meteor 1 + createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 + delay 3 + call TeraBlastWater3 + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 16 @; For Meteor 2 + delay 3 + call TeraBlastWater4 + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 16 @; For Meteor 3 + delay 3 + call TeraBlastWater1 + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -8, 16 @; For Meteor 4 + createvisualtask AnimTask_HorizontalShake, 5, 5, 2, 1 + delay 3 + call TeraBlastWater2 + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 7, 4, 2 + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 40, 16 @; For Meteor 1 + delay 3 + call TeraBlastWater3 + playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET + createsprite gDragonRageFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 21, 16 @; For Meteor 3 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end +TeraBlastGrass: + loadspritegfx ANIM_TAG_LEAF + loadspritegfx ANIM_TAG_FLOWER + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_AIR_WAVE_2 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(0, 31, 0) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_AIR_WAVE_2, 0, 12, 12, RGB_GREEN + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_LEAF_STORM + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0x0A00, 0, 1, -1 + waitbgfadein + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 + delay 6 + call AeroblastBeam + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 5, 0, 50, 1 + call AeroblastBeam + call AeroblastBeam + call AeroblastBeam + call AeroblastBeam + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end +TeraBlastElectric: + loadspritegfx ANIM_TAG_SHOCK + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_SHOCK_3 + loadspritegfx ANIM_TAG_SPARK_2 + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_YELLOW + createsprite sCirclingShockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 2 + createsprite sCirclingShockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 2 + createsprite sCirclingShockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 2 + createsprite sCirclingShockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 2 + createsprite sCirclingShockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 2 + createsprite sCirclingShockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + delay 2 + createsprite sCirclingShockSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_THUNDER + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0xff00, 0, 1, -1 + waitbgfadein + loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 3, 10 + createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 44, 0, 0, 3 + createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 44, 0, 0, 3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 0, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 64, 40, 1, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 128, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 192, 40, 2, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 32, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 96, 40, 1, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 160, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 224, 40, 2, -32765 + delay 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK + createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 44, 0, 0, 3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 0, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 64, 40, 1, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 128, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 192, 40, 2, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 32, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 96, 40, 1, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 160, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 224, 40, 2, -32765 + delay 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK + createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 44, 0, 0, 3 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 0, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 64, 40, 1, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 128, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 32, 44, 192, 40, 2, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 32, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 96, 40, 1, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 160, 40, 0, -32765 + createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 224, 40, 2, -32765 + delay 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK + delay 6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end +TeraBlastPsychic: + loadspritegfx ANIM_TAG_PINKVIO_ORB + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PINKVIO_ORB, 0, 12, 12, RGB_PURPLE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_PURPLE + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + delay 2 + createsprite gPinkVioletOrbSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_PSYCHIC + waitbgfadeout + createvisualtask AnimTask_SetPsychicBackground, 5 + waitbgfadein + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 8, 8, 30, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 30, ANIM_TARGET, 1 + waitforvisualfinish + createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x2 | 0x4 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish + blendoff + call UnsetPsychicBg + end +TeraBlastIce: + loadspritegfx ANIM_TAG_ICE_CRYSTALS + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(12, 26, 31) @ light blue + createsprite sIceCrystalSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER + delay 2 + createsprite sIceCrystalSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER + delay 2 + createsprite sIceCrystalSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER + delay 2 + createsprite sIceCrystalSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER + delay 2 + createsprite sIceCrystalSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER + delay 2 + createsprite sIceCrystalSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER + delay 2 + createsprite sIceCrystalSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_ICY_WIND, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_ICE + waitbgfadein + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31) + playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 64 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 128 + createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 192 + delay 5 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 32 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 96 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 160 + createsprite gIceCrystalSpiralInwardLarge, ANIM_ATTACKER, 2, 224 + delay 17 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 3, 1 + waitforvisualfinish + delay 15 + call IceCrystalEffectShort + delay 5 + call IceCrystalEffectShort + delay 5 + call IceCrystalEffectShort + delay 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31) + waitforvisualfinish + blendoff + call UnsetPsychicBg + end +TeraBlastDragon: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SMALL_EMBER, 0, 12, 12, RGB(10, 25, 31) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(10, 25, 31) + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_FIRE_2 + waitbgfadeout + createvisualtask AnimTask_StartSlidingBg, 5, 0x1000, 0, 0, -1 + waitbgfadein + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 + delay 6 + createvisualtask AnimTask_GetAttackerSide, 2 + jumprettrue TeraBlastDragonOnPlayer + goto TeraBlastDragonOnOpponent +TeraBlastDragonOnOpponent: + panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 43, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 0, 0) + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + call FireSpreadBlast + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 + waitforvisualfinish blendoff - waitforvisualfinish + call UnsetPsychicBg end - -gBattleAnimMove_HardPress:: - loadspritegfx ANIM_TAG_EXPLOSION - loadspritegfx ANIM_TAG_ACUPRESSURE - loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE - setalpha 15, 0 - call SetSteelBeamBackground - createvisualtask AnimTask_CompressTargetHorizontallyFast, 2 - createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0, 0, 1, 1 - delay 3 - playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 24, -24, 1, 1 - delay 3 - playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, -16, 16, 1, 1 - delay 3 - playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, -24, -12, 1, 1 - delay 3 - playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 16, 16, 1, 1 +TeraBlastDragonOnPlayer: + panse SE_M_FLAMETHROWER, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 43, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB(31, 0, 0) + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + call FireSpreadBlastOpponent + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 waitforvisualfinish blendoff - call UnsetHighSpeedBg + call UnsetPsychicBg end - -gBattleAnimMove_DragonCheer:: - loadspritegfx ANIM_TAG_NOISE_LINE - loadspritegfx ANIM_TAG_CONFETTI - loadspritegfx ANIM_TAG_PINK_CLOUD - createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER - delay 12 - call RoarEffect - createvisualtask SoundTask_PlayCryHighPitch, 2, ANIM_ATTACKER, 3 +TeraBlastDark: + loadspritegfx ANIM_TAG_PURPLE_FLAME + loadspritegfx ANIM_TAG_METAL_SOUND_WAVES + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PURPLE_FLAME, 0, 12, 12, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_METAL_SOUND_WAVES, 0, 12, 12, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_BLACK + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + delay 2 + createsprite gPurpleFlameSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitforvisualfinish - monbg ANIM_ATTACKER - playsewithpan SE_BALL_OPEN, SOUND_PAN_TARGET - createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 122, 3, -14, 18, 24 - createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 121, 3, 14, 6, 24 - createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 120, 3, -12, 12, 24 - createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 119, 3, 14, 18, 24 - createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 118, 3, 0, 0, 24 - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti - call CreateFlatterConfetti + fadetobg BG_DARK + waitbgfadein + createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 46, 1 + delay 6 + call TeraBlastFlyingBeam + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 50, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 2, 0, 12, RGB_BLACK + call TeraBlastFlyingBeam + call TeraBlastFlyingBeam + delay 8 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 waitforvisualfinish - clearmonbg ANIM_ATTACKER - delay 10 + blendoff + call UnsetPsychicBg end - -gBattleAnimMove_MalignantChain:: - loadspritegfx ANIM_TAG_PURPLE_CHAIN - loadspritegfx ANIM_TAG_POISON_BUBBLE - loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2 - createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 1 - delay 7 - createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 1 - delay 3 - createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 - delay 20 - setarg 7, -1 - playsewithpan SE_M_BIND, SOUND_PAN_TARGET - waitforvisualfinish - call PoisonBubblesEffect +TeraBlastFairy: + loadspritegfx ANIM_TAG_PINK_HEART + loadspritegfx ANIM_TAG_RED_HEART + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_MAGENTA + createsprite sPinkHeartSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite sPinkHeartSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite sPinkHeartSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite sPinkHeartSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite sPinkHeartSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite sPinkHeartSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + delay 2 + createsprite sPinkHeartSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER waitforvisualfinish - end - -gBattleAnimMove_PopulationBomb:: - loadspritegfx ANIM_TAG_CUT - monbg ANIM_TARGET - setalpha 12, 8 - playsewithpan SE_M_CUT, SOUND_PAN_TARGET - createvisualtask AnimTask_RandomBool, 2 - jumpretfalse PopulationBombSliceRight - jumprettrue PopulationBombSliceLeft -PopulationBombSliceRight: - createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 - goto PopulationBombContinue -PopulationBombSliceLeft: - createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 -PopulationBombContinue: + fadetobg BG_TWINKLE_TACKLE + waitbgfadein + loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 12, RGB_MAGENTA + call TeraBlastFairyHearts + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 8, 8, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_TARGET, 1 + delay 32 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET + call TeraBlastFairyHearts + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 8, 8, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_TARGET, 1 + delay 32 + playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET + call TeraBlastFairyHearts + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 8, 8, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_TARGET, 1 + delay 32 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call TeraBlastFairyHearts + call EternabeamGeyser + delay 5 + call EternabeamGeyser delay 5 - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 waitforvisualfinish - clearmonbg ANIM_TARGET blendoff - waitforvisualfinish + call UnsetPsychicBg end - -gBattleAnimMove_RevivalBlessing:: - goto gBattleAnimMove_LunarBlessing - -gBattleAnimMove_TeraStarstorm:: - loadspritegfx ANIM_TAG_STARSTORM +TeraBlastStellar: loadspritegfx ANIM_TAG_YELLOW_STAR - loadspritegfx ANIM_TAG_IMPACT - fadetobg BG_COSMIC - waitbgfadein - playsewithpan SE_FALL, SOUND_PAN_ATTACKER - call TeraStarstormCreateBeam - delay 2 - call TeraStarstormCreateBeam - delay 2 - call TeraStarstormCreateBeam - delay 2 - call TeraStarstormCreateBeam + loadspritegfx ANIM_TAG_EXPLOSION + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB_WHITE + createsprite gYellowStarSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER delay 2 - call TeraStarstormCreateBeam + createsprite gYellowStarSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER delay 2 - call TeraStarstormCreateBeam + createsprite gYellowStarSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER delay 2 - call TeraStarstormCreateBeam + createsprite gYellowStarSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER delay 2 - call TeraStarstormCreateBeam + createsprite gYellowStarSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER delay 2 - call TeraStarstormCreateBeam + createsprite gYellowStarSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER delay 2 - jumpifmovetypeequal TYPE_STELLAR, TeraStarstormStellar - goto TeraStarstormSingle -TeraStarstormStellar: - jumpifdoublebattle TeraStarstormDouble -TeraStarstormSingle: + createsprite gYellowStarSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + waitforvisualfinish + fadetobg BG_COSMIC + waitbgfadein + playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER + delay 20 + playsewithpan SE_FALL, SOUND_PAN_ATTACKER createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 delay 3 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 delay 2 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 delay 3 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 delay 2 + playsewithpan SE_M_SWIFT, SOUND_PAN_TARGET createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 delay 3 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 delay 2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, -5, 30, 0, 1 delay 3 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 delay 2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 5, 30, 0, 1 delay 3 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 delay 2 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 delay 3 createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 delay 5 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 delay 5 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 50, 1 + call EternabeamGeyser + delay 5 + call EternabeamGeyser + delay 5 waitforvisualfinish restorebg waitbgfadeout end -TeraStarstormDouble: - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 1, 1 + +FireSpreadBlast: + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0, 0, 45 + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 10, 5, 45 + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -10, -5, 45 delay 2 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1 - delay 3 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 1, 1 + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 20, 10, 45 + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -20, -10, 45 delay 2 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1 - delay 3 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 1, 1 + return +FireSpreadBlastOpponent: + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0, 0, 45 + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5, 10, 45 + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -5, -10, 45 delay 2 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1 - delay 3 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 10, 30, 1, 1 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 10, 20, 45 + createsprite gFireSpreadBlastSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -10, -20, 45 delay 2 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 10, 0, 30, 1, 1 - delay 3 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 0, 0, 30, 1, 1 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + return + +TeraBlastFlyingBeam: + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gTeraBlastFlyingSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 delay 2 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -10, 0, 30, 1, 1 - delay 3 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, -5, 30, 1, 1 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gTeraBlastFlyingSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 delay 2 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, 5, 5, 30, 1, 1 - delay 3 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 0, 1 - createsprite gTeraStarSpriteTemplate, ANIM_BATTLER, 3, 0, 0, -5, 5, 30, 1, 1 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 - delay 5 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 - delay 5 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 - delay 5 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 5, 1, 1 - createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 5, 5, 1, 1 - waitforvisualfinish - restorebg - waitbgfadeout - end + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gTeraBlastFlyingSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gTeraBlastFlyingSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gTeraBlastFlyingSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gTeraBlastFlyingSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gTeraBlastFlyingSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + delay 2 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET + createsprite gTeraBlastFlyingSpriteTemplate, ANIM_TARGET, 2, 0, 0, 16 + return -TeraStarstormCreateBeam:: - createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -3, 1, 0, 0, 20 - createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 1, 0, 0, 0, 20 - createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 3, -1, 0, 0, 20 - createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -2, 0, 0, 0, 20 - createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 0, 1, 0, 0, 20 - createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, -1, -1, 0, 0, 20 - createsprite gTeraStarstormBeamSpriteTemplate, ANIM_BATTLER, 1, 2, 0, 0, 0, 20 +TeraBlastWater1: + createsprite gTeraBlastWaterSpriteTemplate, ANIM_ATTACKER, 3, -48, -64, 40, 32, 25 + delay 2 + createsprite gTeraBlastWaterSpriteTemplate, ANIM_ATTACKER, 3, -48, -64, 40, 32, 25 + delay 2 + return +TeraBlastWater2: + createsprite gTeraBlastWaterSpriteTemplate, ANIM_ATTACKER, 3, -112, -64, -8, 32, 25 + delay 2 + createsprite gTeraBlastWaterSpriteTemplate, ANIM_ATTACKER, 3, -112, -64, -8, 32, 25 + delay 2 + return +TeraBlastWater3: + createsprite gTeraBlastWaterSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, 24, 32, 25 + delay 2 + createsprite gTeraBlastWaterSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, 24, 32, 25 + delay 2 + return +TeraBlastWater4: + createsprite gTeraBlastWaterSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, -8, 32, 25 + delay 2 + createsprite gTeraBlastWaterSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, -8, 32, 25 + delay 2 return -gBattleAnimMove_TachyonCutter:: - loadspritegfx ANIM_TAG_CUT - loadspritegfx ANIM_TAG_BUBBLE - createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 - createsprite gTachyonCutterSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 - playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER +TeraBlastRock1: + createsprite gTeraBlastRockSpriteTemplate, ANIM_ATTACKER, 3, -48, -64, 40, 32, 25 + delay 4 + return +TeraBlastRock2: + createsprite gTeraBlastRockSpriteTemplate, ANIM_ATTACKER, 3, -112, -64, -8, 32, 25 + delay 4 + return +TeraBlastRock3: + createsprite gTeraBlastRockSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, 24, 32, 25 + delay 4 + return +TeraBlastRock4: + createsprite gTeraBlastRockSpriteTemplate, ANIM_ATTACKER, 3, -80, -64, -8, 32, 25 + delay 4 + return + +TeraBlastFairyHearts: + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 160, -32 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -256, -40 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 128, -16 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 416, -38 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -128, -22 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 + return + +gBattleAnimMove_OrderUp:: + loadspritegfx ANIM_TAG_IMPACT + playsewithpan SE_M_ENCORE, SOUND_PAN_ATTACKER + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 + createvisualtask AnimTask_GetCommanderType, 2 + delay 25 + jumpreteq ANIM_ORDER_UP_NONE, OrderUpNone + jumpreteq ANIM_ORDER_UP_CURLY, OrderUpCurly + jumpreteq ANIM_ORDER_UP_DROOPY, OrderUpDroopy + jumpreteq ANIM_ORDER_UP_STRETCHY, OrderUpStretchy +OrderUpNone: + loadspritegfx ANIM_TAG_TATSUGIRI_CURLY + loadspritegfx ANIM_TAG_TATSUGIRI_DROOPY + loadspritegfx ANIM_TAG_TATSUGIRI_STRETCHY + createsprite gOrderUpTatsugiriCurlySpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 50, 0 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 2 + createsprite gOrderUpTatsugiriDroopySpriteTemplate, ANIM_TARGET, 2, 0, 12, 64, 46, 0 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 2 + createsprite gOrderUpTatsugiriStretchySpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 42, 0 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish end - -gBattleAnimMove_SaltCure:: - loadspritegfx ANIM_TAG_SALT_PARTICLE - loadspritegfx ANIM_TAG_WATER_ORB - call SaltCureEffect - call SaltCureEffect - call SaltCureEffect - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET +OrderUpCurly: + loadspritegfx ANIM_TAG_TATSUGIRI_CURLY + createsprite gOrderUpTatsugiriCurlySpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 50, 0 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 2 + createsprite gOrderUpTatsugiriCurlySpriteTemplate, ANIM_TARGET, 2, 0, 12, 64, 46, 0 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 2 + createsprite gOrderUpTatsugiriCurlySpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 42, 0 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish - call gBattleAnimGeneral_SaltCureDamage end - -SaltCureEffect: - createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 384, 50, 8, 50, ANIM_TARGET +OrderUpDroopy: + loadspritegfx ANIM_TAG_TATSUGIRI_DROOPY + createsprite gOrderUpTatsugiriDroopySpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 50, 0 delay 2 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 32, 240, 40, 11, -46, ANIM_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 416, 40, 4, 42, ANIM_TARGET + createsprite gOrderUpTatsugiriDroopySpriteTemplate, ANIM_TARGET, 2, 0, 12, 64, 46, 0 delay 2 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 31, 288, 45, 6, -42, ANIM_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET delay 2 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 28, 448, 45, 11, 46, ANIM_TARGET + createsprite gOrderUpTatsugiriDroopySpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 42, 0 delay 2 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET - createsprite gSaltCureSwirlSpriteTemplate, ANIM_TARGET, 2, 0, 33, 464, 50, 10, -50, ANIM_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + waitforvisualfinish + end +OrderUpStretchy: + loadspritegfx ANIM_TAG_TATSUGIRI_STRETCHY + createsprite gOrderUpTatsugiriStretchySpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 50, 0 delay 2 - playsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 2 + createsprite gOrderUpTatsugiriStretchySpriteTemplate, ANIM_TARGET, 2, 0, 12, 64, 46, 0 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + delay 2 + createsprite gOrderUpTatsugiriStretchySpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 42, 0 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + waitforvisualfinish + end + +gBattleAnimMove_MatchaGotcha:: + loadspritegfx ANIM_TAG_POISON_BUBBLE + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + waitforvisualfinish + delay 10 + loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 27, 2 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, RGB_GREEN + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 2, 3 + waitforvisualfinish + loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 18, 2 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 28, 10, 2, 4 + waitforvisualfinish + loopsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER, 9, 4 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 32, 10, 4, 5 + waitforvisualfinish + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 0, 0, 4 + jumpifdoublebattle MatchaGotchaDouble + goto MatchaGotchaSingle + +MatchaGotchaSingle: + call MatchaGotchaProjectile + call MatchaGotchaProjectile + loopsewithpan SE_FALL, SOUND_PAN_ATTACKER, 8, 2 + call MatchaGotchaProjectile + call MatchaGotchaProjectile + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 + delay 28 + playsewithpan SE_M_DIVE, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 0, 0) + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 10, 15, 55, FALSE + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -20, 15, 55, FALSE + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 5, 15, 55, FALSE + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -10, 15, 55, FALSE + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 30, 15, 55, FALSE + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -30, 15, 55, FALSE + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 2, 15, 55, FALSE + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -5, 15, 55, FALSE + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 20, 15, 55, FALSE + waitforvisualfinish + end + +MatchaGotchaDouble: + playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER + call MatchaGotchaDoubleProjectile + call MatchaGotchaDoubleProjectile + loopsewithpan SE_FALL, SOUND_PAN_ATTACKER, 8, 2 + call MatchaGotchaDoubleProjectile + call MatchaGotchaDoubleProjectile + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 + waitforvisualfinish + playsewithpan SE_M_DIVE, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_DEF_PARTNER, 2, 0, 10, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 0, 0) + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 10, 15, 55, 0 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -20, 15, 55, 0 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 10, 15, 55, 2 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -20, 15, 55, 2 + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 5, 15, 55, 0 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -10, 15, 55, 0 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 5, 15, 55, 2 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -10, 15, 55, 2 + delay 3 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 30, 15, 55, 0 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -30, 15, 55, 0 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, 30, 15, 55, 2 + createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -10, -30, 15, 55, 2 + waitforvisualfinish + end + +MatchaGotchaProjectile: + createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 60, 0 + delay 3 return -gBattleAnimMove_TeraBlast:: -gBattleAnimMove_OrderUp:: -gBattleAnimMove_GlaiveRush:: -gBattleAnimMove_TripleDive:: -gBattleAnimMove_Doodle:: -gBattleAnimMove_Ruination:: -gBattleAnimMove_CollisionCourse:: -gBattleAnimMove_ElectroDrift:: -gBattleAnimMove_ArmorCannon:: -gBattleAnimMove_BlazingTorque:: -gBattleAnimMove_WickedTorque:: -gBattleAnimMove_NoxiousTorque:: -gBattleAnimMove_CombatTorque:: -gBattleAnimMove_MagicalTorque:: -gBattleAnimMove_Psyblade:: -gBattleAnimMove_MatchaGotcha:: -gBattleAnimMove_MightyCleave:: -gBattleAnimMove_SupercellSlam:: - end @to do +MatchaGotchaDoubleProjectile: + createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 60, 0, 0 + createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 60, 0, TRUE + delay 3 + return @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ gBattleAnimMove_None:: @@ -21304,19 +24170,19 @@ gBattleAnimMove_Uproar:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 29, -12, 0 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -12, -29, 1 delay 16 createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 12, -29, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -29, -12, 0 delay 16 createvisualtask AnimTask_UproarDistortion, 2, 0 - createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0, RGB_RED, 8 playsewithpan SE_M_UPROAR, SOUND_PAN_ATTACKER createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, -24, 1 createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, -24, 0 @@ -24720,7 +27586,7 @@ gBattleAnimMove_RazorLeaf:: end gBattleAnimMove_NaturePower:: - @ No actual animation, uses the animation of a move from sNaturePowerMoves instead + @ No actual animation, uses the animation of a move from gBattleEnvironmentInfo.naturePower instead gBattleAnimMove_AncientPower:: loadspritegfx ANIM_TAG_ROCKS @@ -26138,7 +29004,7 @@ gBattleAnimMove_Transform:: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 - createvisualtask AnimTask_TransformMon, 2, 0, 1 + createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_TRANSFORM waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -27015,7 +29881,7 @@ gBattleAnimMove_RockTomb:: end SetBugBg: - createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 0, 0, 4, RGB_BLACK createvisualtask AnimTask_GetAttackerSide, 2 jumprettrue SetBugBgPlayer fadetobg BG_BUG_OPPONENT @@ -27028,14 +29894,14 @@ SetBugBgPlayer: createvisualtask AnimTask_StartSlidingBg, 5, -1536, 0, 0, -1 SetBugBgFade: delay 0 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 4, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 4, 4, RGB_BLACK waitbgfadein return UnsetBugBg: restorebg waitbgfadeout - createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 1, 0, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 0, 4, 0, RGB_BLACK setarg 7, -1 waitbgfadein return @@ -28218,6 +31084,17 @@ gBattleAnimStatus_Nightmare:: clearmonbg ANIM_DEF_PARTNER end +gBattleAnimStatus_Frostbite:: + playsewithpan SE_M_ICY_WIND, 0 + loadspritegfx ANIM_TAG_ICE_CRYSTALS + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + call IceCrystalEffectShort + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + gBattleAnimGeneral_StatsChange:: createvisualtask AnimTask_StatsChange, 5 waitforvisualfinish @@ -28379,13 +31256,13 @@ Status_Infestation: loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x7320 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(0, 25, 28) createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 30, 1 loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0x0, 30 call InfestationVortex call InfestationVortex waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_TARGET, 0x2, 0x9, 0x0, 0x7320 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(0, 25, 28) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -28649,14 +31526,14 @@ gBattleAnimGeneral_SimpleHeal:: gBattleAnimGeneral_IllusionOff:: monbg ANIM_TARGET - createvisualtask AnimTask_TransformMon, 2, 1, 0 + createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_ILLUSION_OFF waitforvisualfinish clearmonbg ANIM_TARGET end gBattleAnimGeneral_FormChange:: monbg ANIM_ATTACKER - createvisualtask AnimTask_TransformMon, 2, 1, 0 + createvisualtask AnimTask_TransformMon, 2, SPECIES_GFX_CHANGE_FORM_CHANGE waitforvisualfinish clearmonbg ANIM_ATTACKER end @@ -28688,7 +31565,7 @@ gBattleAnimGeneral_MegaEvolution:: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish createvisualtask SoundTask_PlayNormalCry, 0 - createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createsprite gMegaSymbolSpriteTemplate ANIM_ATTACKER, 3, 0, 0, ANIM_ATTACKER @@ -28732,6 +31609,7 @@ MegaEvolutionSpinEffect: return gBattleAnimGeneral_TeraCharge:: + createvisualtask AnimTask_HideOpponentShadows, 2 @ Hide opponent shadows so they don't flicker between battle anims loadspritegfx ANIM_TAG_TERA_CRYSTAL loadspritegfx ANIM_TAG_TERA_SHATTER loadspritegfx ANIM_TAG_FOCUS_ENERGY @@ -28753,7 +31631,6 @@ gBattleAnimGeneral_TeraCharge:: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_TransformMon, 2, 1, 0 call TeraChargeParticles playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER clearmonbg ANIM_ATK_PARTNER @@ -28770,14 +31647,37 @@ TeraChargeParticles: return gBattleAnimGeneral_TeraActivate:: + createvisualtask AnimTask_SetOpponentShadowCallbacks, 2 @ Restore shadows hidden in the charge script + loadspritegfx ANIM_TAG_TERA_SYMBOL + loadspritegfx ANIM_TAG_SPARKLE_6 + createvisualtask AnimTask_HideSwapSprite, 2 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 - waitforvisualfinish createvisualtask SoundTask_PlayNormalCry, 0 + createsprite gTeraSymbolSpriteTemplate ANIM_ATTACKER, 41, 0, 0, ANIM_ATTACKER + delay 2 + call TeraSpinEffect + call TeraSpinEffect + waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff end +TeraSpinEffect: + createsprite gTeraSmokeSpriteTemplate ANIM_ATTACKER, 7, 0, 12, 528, 30, 13, 50, 0 + delay 2 + createsprite gTeraSmokeSpriteTemplate ANIM_ATTACKER, 7, 0, 0, 480, 20, 16, -46, 0 + delay 2 + createsprite gTeraSmokeSpriteTemplate ANIM_ATTACKER, 7, 0, 1, 576, 20, 8, 42, 0 + delay 2 + createsprite gTeraSmokeSpriteTemplate ANIM_ATTACKER, 7, 0, 15, 400, 25, 11, -42, 0 + delay 2 + createsprite gTeraSmokeSpriteTemplate ANIM_ATTACKER, 7, 0, 12, 512, 25, 16, 46, 0 + delay 2 + createsprite gTeraSmokeSpriteTemplate ANIM_ATTACKER, 7, 0, 1, 464, 30, 15, -50, 0 + delay 2 + return + gBattleAnimGeneral_RestoreBg:: restorebg waitbgfadein @@ -28809,13 +31709,13 @@ gBattleAnimGeneral_ZMoveActivate:: end ZMoveBuffEffect: createsprite gBlueZMoveEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x3 + delay 3 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 @Red Buff - delay 0x3 + delay 3 createsprite gGreenZMoveEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x3 + delay 3 createsprite gYellowZMoveEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x3 + delay 3 return gBattleAnimGeneral_TotemFlare:: @@ -28839,13 +31739,13 @@ gBattleAnimGeneral_TotemFlare:: RainbowEndureEffect: createsprite gBlueEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x3 + delay 3 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 @Red Buff - delay 0x3 + delay 3 createsprite gGreenEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x3 + delay 3 createsprite gYellowEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x3 + delay 3 return gBattleAnimGeneral_GulpMissile:: @ Tackle anim (placeholder) @@ -28890,7 +31790,7 @@ General_PrimalReversion_Alpha: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask SoundTask_PlayNormalCry, 0 @@ -28923,7 +31823,7 @@ General_PrimalReversion_Omega: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask SoundTask_PlayNormalCry, 0 @@ -28963,7 +31863,7 @@ gBattleAnimGeneral_PowerConstruct:: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask SoundTask_PlayNormalCry, 0 @@ -29013,10 +31913,10 @@ gBattleAnimGeneral_UltraBurst:: monbg ANIM_ATTACKER setalpha 12, 8 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB2GBA(250, 240, 230) - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ADJACENT), 0x2, 0x0, 0xF, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ADJACENT), 2, 0, 15, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 60, 2, 12 @ charge particles to attacker - delay 0x1e + delay 30 loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0xe, 0xa createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 3, 0x0 call LightThatBurnsTheSkyGreenSparks @@ -29033,7 +31933,7 @@ gBattleAnimGeneral_UltraBurst:: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA createsprite gUltraBurstSymbolSpriteTemplate, ANIM_ATTACKER, 0x0, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish - createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 createvisualtask SoundTask_PlayNormalCry, 0 @@ -29128,7 +32028,8 @@ gBattleAnimGeneral_Rainbow:: createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 6, 0, RGB_WHITE waitforvisualfinish delay 30 - fadetobg BG_RAINBOW + goto SetRainbowBackground +AnimGeneral_RainbowContinue: panse_adjustnone SE_M_ABSORB_2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 delay 90 blendoff @@ -29136,6 +32037,14 @@ gBattleAnimGeneral_Rainbow:: waitbgfadein clearmonbg ANIM_ATK_PARTNER end +SetRainbowBackground: + createvisualtask AnimTask_GetAttackerSide, 2 + jumprettrue SetRainbowBgOppoentSide + fadetobg BG_RAINBOW_PLAYER + goto AnimGeneral_RainbowContinue +SetRainbowBgOppoentSide: + fadetobg BG_RAINBOW_OPPONENT + goto AnimGeneral_RainbowContinue gBattleAnimGeneral_SeaOfFire:: loadspritegfx ANIM_TAG_SMALL_EMBER @@ -29225,6 +32134,16 @@ gBattleAnimGeneral_Swamp:: blendoff end +gBattleAnimGeneral_SwapToSubstitute:: + createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, FALSE + waitforvisualfinish + end + +gBattleAnimGeneral_SwapFromSubstitute:: + createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, TRUE + waitforvisualfinish + end + SnatchMoveTrySwapFromSubstitute: createvisualtask AnimTask_IsAttackerBehindSubstitute, 2 jumprettrue SnatchMoveSwapSubstituteForMon @@ -29331,15 +32250,15 @@ gBattleAnimMove_BreakneckBlitz:: playsewithpan SE_M_EARTHQUAKE, 0x0 monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER - delay 0x1 - createvisualtask AnimTask_BlendPalInAndOutByTag, 0x5, ANIM_TAG_HOLLOW_ORB, 0x4c00, 0xe, 0x0, 0x3 + delay 1 + createvisualtask AnimTask_BlendPalInAndOutByTag, 5, ANIM_TAG_HOLLOW_ORB, RGB(0, 0, 19), 14, 0, 3 createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x0 createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x2b createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x55 createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x80 createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0xaa createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0xd5 - delay 0xf + delay 15 createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x0 createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x2b createsprite gBreakneckBlitzDanceSpriteTemplate, ANIM_ATTACKER, 2, 0x55 @@ -29355,26 +32274,26 @@ gBattleAnimMove_BreakneckBlitz:: createvisualtask AnimTask_StartSlidingBg, 0x5, 0xf700, 0x300, 0x1, 0xffff waitbgfadein setalpha 12, 8 - delay 0x10 + delay 16 createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -24, 8, 23, 10, 40, 10 - delay 0x23 + delay 35 invisible ANIM_ATTACKER createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - delay 0x8 + delay 8 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x1, 0x1 @ 0, 0 - delay 0x1 + delay 1 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0xa, 0xfff6, 0x1, 0x1 @ +10, -10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - delay 0x1 + delay 1 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0xf, 0xfff1, 0x1, 0x1 @ +15, -15 - delay 0x1 + delay 1 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xffec, 0x1, 0x1 @ +20, -20 - delay 0x1 + delay 1 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gBreakneckBlitzHitSpriteTemplate, ANIM_TARGET, 3, 0x19, 0xffe7, 0x1, 0x1 @ +25, -25 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -26, 16, 1, 4 @@ -29383,15 +32302,15 @@ gBattleAnimMove_BreakneckBlitz:: createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 waitforvisualfinish - delay 0x4 + delay 4 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -512, ANIM_TARGET, 1 - delay 0xa - delay 0x19 + delay 10 + delay 25 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x6 - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish - delay 0x10 + delay 16 blendoff clearmonbg ANIM_DEF_PARTNER createvisualtask AnimTask_AllBattlersVisible, 0xA @@ -29422,66 +32341,66 @@ gBattleAnimMove_AllOutPummeling:: monbg ANIM_DEF_PARTNER createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 63, 1 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x18, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_1, 0x1 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x8 + delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xfffa, 0x12, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x8 + delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x10, 0x0, 0x0, 0xa, 0x1, ANIM_FIST_1, 0x1 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x8 + delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x15, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_2, 0x1 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x8 + delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x14, 0x0, 0x0, 0xa, 0x1, ANIM_FIST_1, 0x1 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x8 + delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x17, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x8 + delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0x11, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_1, 0x1 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x8 + delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffb0, 0x10, 0x0, 0x0, 0xa, 0x1, ANIM_FOOT_2, 0x1 - delay 0x2 + delay 2 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x8 + delay 8 createsprite gAllOutPummelingOnslaughtSpriteTemplate, ANIM_ATTACKER, 2, 0xffa0, 0x15, 0x0, 0x0, 0xa, 0x1, ANIM_CHOP, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - delay 0x10 + delay 16 createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -24, 8, 23, 10, 40, 10 - delay 0x23 + delay 35 invisible ANIM_ATTACKER createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - delay 0xc + delay 12 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -48, 0, 0, 4 waitforvisualfinish - delay 0x30 + delay 48 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x7 - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x5 waitforvisualfinish - delay 0x10 + delay 16 blendoff clearmonbg ANIM_DEF_PARTNER createvisualtask AnimTask_AllBattlersVisible, 0xA @@ -29499,32 +32418,32 @@ gBattleAnimMove_SupersonicSkystrike:: createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0x8, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 8, 0, RGB_BLACK createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATTACKER, 2, 16 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x1, 0xf, 0x0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 15, 0, RGB_WHITE clearmonbg ANIM_DEF_PARTNER call EndureEffect - delay 0x8 + delay 8 call EndureEffect - delay 0x20 - delay 0xA + delay 32 + delay 10 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 - delay 0x2 + delay 2 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 12, 4, -16, 18 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 16, 4, -10, 18 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 1, 14, 4, -18, 18 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 1, 12, 4, -16, 18 - delay 0x30 + delay 48 createvisualtask AnimTask_DoomDesireLightBeam, 0x5 - delay 0x9 + delay 9 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER - delay 0x9 + delay 9 playsewithpan SE_M_MORNING_SUN, 0x0 - delay 0x9 + delay 9 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET - delay 0x19 + delay 25 fadetobg BG_SKY waitbgfadeout createvisualtask AnimTask_IsTargetPlayerSide, 0x2 @@ -29541,7 +32460,7 @@ FinishSupersonicSkystrike: setalpha 12, 8 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER createsprite gSupersonicSkystrikeFlySpriteTemplate, ANIM_ATTACKER, 2, 0x14 - delay 0x10 + delay 16 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -256, 21, 0, 4 @@ -29553,7 +32472,7 @@ FinishSupersonicSkystrike: createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 16, -16, -10, 24 @ 16, -38, -10, 24 createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 1, 14, -52, -18, 24 @ 14, -20, -18, 24 createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 1, 12, -32, -16, 24 @ 12, -36, -16, 24 - delay 0x30 + delay 48 clearmonbg ANIM_DEF_PARTNER blendoff createvisualtask AnimTask_AllBattlersVisible, 0xA @@ -29585,12 +32504,12 @@ FinishAcidDownpour: call AcidDownpourFlareOnAttacker call AcidDownpourFlareOnAttacker call AcidDownpourFlareOnAttacker - delay 0x5 + delay 5 clearmonbg ANIM_ATTACKER createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish blendoff - delay 0x20 + delay 32 loopsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET, 0xd, 0x3 createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x0 createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x2a @@ -29598,17 +32517,17 @@ FinishAcidDownpour: createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0x7e createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0xa8 createsprite gAcidDownpourReversalSpriteTemplate, ANIM_ATTACKER, 2, 0x1a, 0xd2 - delay 0x20 + delay 32 panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createvisualtask AnimTask_CreateSurfWave, 0x2, ANIM_SURF_PAL_SLUDGE_WAVE - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x7, 0xd87c + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, (RGB(28, 3, 22) | RGB_ALPHA) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 50, 1 call AcidDownpourFlare call AcidDownpourFlare - delay 0x15 + delay 21 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -768, 21, 0, 42 - delay 0x2c - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x7, 0x0, 0xd87c + delay 44 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 7, 0, (RGB(28, 3, 22) | RGB_ALPHA) invisible ANIM_TARGET waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 @@ -29621,31 +32540,31 @@ FinishAcidDownpour: end AcidDownpourFlare: createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_TARGET - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_TARGET - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_TARGET - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_TARGET - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_TARGET - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_TARGET - delay 0x2 + delay 2 return AcidDownpourFlareOnAttacker: createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gAcidDownpourAuraSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 return @@ -29657,9 +32576,9 @@ gBattleAnimMove_TectonicRage:: createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0x0, 0x0, 0xb4 createsprite gDirtMoundSpriteTemplate, ANIM_ATTACKER, 1, 0x0, 0x1, 0xb4 monbg_static ANIM_ATTACKER - delay 0x1 + delay 1 createvisualtask AnimTask_DigDownMovement, 0x2, 0x0 - delay 0x6 + delay 6 call DigThrowDirt call DigThrowDirt call DigThrowDirt @@ -29667,22 +32586,22 @@ gBattleAnimMove_TectonicRage:: createvisualtask AnimTask_TectonicRageRollout, 0x2 call DigThrowDirt setalpha 12, 8 - delay 0x20 + delay 32 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER monbg ANIM_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 2 - delay 0x1 + delay 1 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -256, 21, 0, 4 - delay 0xa + delay 10 waitforvisualfinish clearmonbg ANIM_TARGET createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish invisible ANIM_TARGET - delay 0x5 + delay 5 invisible ANIM_ATTACKER waitforvisualfinish - delay 0xa + delay 10 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 fadetobg BG_TECTONIC_RAGE @ brown/yellow sky uppercut unloadspritegfx ANIM_TAG_DIRT_MOUND @ dig @@ -29697,18 +32616,18 @@ gBattleAnimMove_TectonicRage:: createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xf800, 0x0, 0xffff waitbgfadein playsewithpan SE_FALL, SOUND_PAN_ATTACKER @;Falling sound - delay 0x1e + delay 30 createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0xc8, 0xffe0, 0x0, 0x64, 0x0 createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x1e, 0xffe0, 0x10, 0x5a, 0x1 createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x96, 0xffe0, 0x20, 0x3c, 0x2 createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x5a, 0xffe0, 0x30, 0x50, 0x3 createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x6e, 0xffe0, 0x40, 0x32, 0x0 createsprite gEruptionFallingRockSpriteTemplate, ANIM_ATTACKER, 40, 0x3c, 0xffe0, 0x50, 0x46, 0x1 - delay 0x16 + delay 22 createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 8, 60 createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 8, 60 loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc - delay 0x30 + delay 48 call TectonicRageExplosion playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER createsprite gTectonicRageBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 @@ -29750,19 +32669,19 @@ gBattleAnimMove_TectonicRage:: TectonicRageExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gTectonicRageExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 return @@ -29777,22 +32696,22 @@ gBattleAnimMove_ContinentalCrush:: waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call ContinentalCrashBuffEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(19, 14, 11) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call ContinentalCrashBuffEffect - delay 0x8 + delay 8 call ContinentalCrashBuffEffect - delay 0x4 - delay 0xA + delay 4 + delay 10 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 - delay 0x2 + delay 2 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 12, 4, -16, 18 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 16, 4, -10, 18 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 1, 14, 4, -18, 18 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 1, 12, 4, -16, 18 - delay 0x30 + delay 48 createvisualtask AnimTask_GetTimeOfDay, 0x2 jumpargeq 0x0 0x0 ContinentalCrushDay jumpargeq 0x0 0x2 ContinentalCrushAfternoon @@ -29805,12 +32724,12 @@ ContinentalCrushDay: ContinentalCrushAfternoon: fadetobg BG_ROCK_FIELD_AFTERNOON FinishContinentalCrush: - delay 0x18 + delay 24 invisible ANIM_TARGET waitbgfadeout - delay 0x5 + delay 5 visible ANIM_ATTACKER - delay 0x4 + delay 4 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(19, 14, 11) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -29832,14 +32751,14 @@ FinishContinentalCrush: createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xf800, 0x0, 0xffff waitbgfadein loopsewithpan SE_FALL, SOUND_PAN_ATTACKER, 0x20, 0x4 @;Falling sound - delay 0x1e + delay 30 createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0xc8, 0xffe0, 0x0, 0x64, 0x0 createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x1e, 0xffe0, 0x10, 0x5a, 0x1 createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x96, 0xffe0, 0x20, 0x3c, 0x2 createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x5a, 0xffe0, 0x30, 0x50, 0x3 createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x6e, 0xffe0, 0x40, 0x32, 0x0 createsprite gContinentalCrushEruptionSpriteTemplate, ANIM_ATTACKER, 40, 0x3c, 0xffe0, 0x50, 0x46, 0x1 - delay 0x16 + delay 22 createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 8, 28 createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 8, 28 unloadspritegfx ANIM_TAG_ROUND_SHADOW @ fly @@ -29847,10 +32766,10 @@ FinishContinentalCrush: unloadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy unloadspritegfx ANIM_TAG_IMPACT @ hit loadspritegfx ANIM_TAG_REALLY_BIG_ROCK - delay 0x30 + delay 48 createsprite gContinentalCrushBigRockStompSpriteTemplate, ANIM_TARGET, 2, 0, 0x3c, 3, ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x7, 0x0000 - delay 0x5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_BLACK + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -256, 21, 0, 4 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 12, -24, -16, 24 @ 12, -48, -16, 24 @@ -29861,9 +32780,9 @@ FinishContinentalCrush: createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 16, -16, -10, 24 @ 16, -38, -10, 24 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 1, 14, -52, -18, 24 @ 14, -20, -18, 24 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 1, 12, -32, -16, 24 @ 12, -36, -16, 24 - delay 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x7, 0x0, 0x0000 @undo pal change on tgt - delay 0x10 + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 7, 0, RGB_BLACK @undo pal change on tgt + delay 16 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 waitforvisualfinish @@ -29872,45 +32791,45 @@ FinishContinentalCrush: setarg 0x7 0xffff createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein - delay 0x4 + delay 4 waitforvisualfinish end ContinentalCrashBuffEffect: createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gContinentalCrushFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return ContinentalCrushStockpileRocks: createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x0, 0xffc0, 0x20 @ 0,-32 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x2c, 0xffd4, 0x20 @ +44,-44 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x3c, 0x0, 0x20 @ +60,0 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x28, 0x28, 0x20 @ +40,+40 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x0, 0x38, 0x20 @ +0,+56 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0xffda, 0x26, 0x20 @ -38,+38 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0xffca, 0x0, 0x20 @ -54, +0 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0xffdc, 0xffdc, 0x20 @ -36, -36 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x0, 0xffce, 0x20 @ 0, -50 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x22, 0xffde, 0x20 @ +34, -34 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x2e, 0x0, 0x20 @ +46, +0 - delay 0x2 + delay 2 createsprite gContinentalCrushNeedleArmSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x20, 0x20, 0x20 @ +32, +32 - delay 0x2 + delay 2 return @@ -29924,16 +32843,16 @@ gBattleAnimMove_SavageSpinOut:: waitforvisualfinish monbg ANIM_ATTACKER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 4, RGB_BLACK createsprite gSavageSpinOutGreenChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 - delay 0x19 + delay 25 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0x14 + delay 20 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER - delay 0xf + delay 15 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x4, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 4, 0, RGB_BLACK clearmonbg ANIM_ATTACKER createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish @@ -29945,18 +32864,17 @@ gBattleAnimMove_SavageSpinOut:: call gSavageSpinOutStringBlastSpriteTemplateSHOT createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, FALSE @ spider web call gSavageSpinOutStringBlastSpriteTemplateSHOT - delay 0xe + delay 14 blendoff waitforvisualfinish unloadspritegfx ANIM_TAG_STRING - unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_COCOON loadspritegfx ANIM_TAG_IMPACT @hit - delay 0x1 + delay 1 invisible ANIM_TARGET - delay 0x0 + delay 0 createvisualtask AnimTask_IsTargetPlayerSide, 0x2 - delay 0x0 + delay 0 jumpargeq 0x7 ANIM_TARGET SavageSpinOutOnPlayer SavageSpinOutOnOpponent: createsprite gSavageSpinOutCacoonSpriteTemplate, ANIM_TARGET, 2, 0x0, ANIM_TARGET, 0x2, 0x0, 0x0, 0x80 @@ -29968,7 +32886,7 @@ FinishSavageSpinOut: waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x1000, 0x0, 0xffff @+0x1000 waitbgfadein - delay 0x10 + delay 16 call SlowSavageSpinOutBackgroundSpeed call SlowSavageSpinOutBackgroundSpeed call SlowSavageSpinOutBackgroundSpeed @@ -29981,20 +32899,20 @@ FinishSavageSpinOut: call SlowSavageSpinOutBackgroundSpeed call SlowSavageSpinOutBackgroundSpeed call SlowSavageSpinOutBackgroundSpeed @-0x1000 - delay 0x4 + delay 4 call SavageSpinOutCrash_2 @SeismicToss2 - delay 0xa + delay 10 call SavageSpinOutCrash_1 @SeismicToss1 - delay 0xa + delay 10 call SavageSpinOutCrash_2 @SeismicToss2 - delay 0xa + delay 10 call SavageSpinOutCrash_1 @SeismicToss1 - delay 0xc + delay 12 call UnsetPsychicBg setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles - no idea why though - something to do with the background scrolling createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 @ user fly on screen on enemy side playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - delay 0x1E + delay 30 unloadspritegfx ANIM_TAG_MUD_SAND unloadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_CUT @cut @@ -30005,24 +32923,24 @@ FinishSavageSpinOut: createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffe0, 0x0 createsprite gSavageSpinOutGreenCutSpriteTemplate, ANIM_TARGET, 2, 0x28, 0xffd0, 0x0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - delay 0xc + delay 12 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, FALSE @ spider web playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSavageSpinOutWhiteExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish @@ -30031,19 +32949,19 @@ gSavageSpinOutStringBlastSpriteTemplateSHOT: playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0xe, 0xfff4, 0x0, 0xfff4, 0xf, 0x0, 0x0 createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0x1a, 0x8, 0xc, 0x8, 0xf, 0x0, 0x0 - delay 0x3 + delay 3 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0xe, 0xfff4, 0x0, 0xfff4, 0xf, 0x1, 0x0 createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0x1a, 0x8, 0xc, 0x8, 0xf, 0x1, 0x0 - delay 0x3 + delay 3 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0xe, 0xfff4, 0x0, 0xfff4, 0xf, 0x2, 0x0 createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0x1a, 0x8, 0xc, 0x8, 0xf, 0x2, 0x0 - delay 0x3 + delay 3 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0xe, 0xfff4, 0x0, 0xfff4, 0xf, 0x3, 0x0 createsprite gSavageSpinOutStringBlastSpriteTemplate, ANIM_TARGET, 2, 0x1a, 0x8, 0xc, 0x8, 0xf, 0x3, 0x0 - delay 0x3 + delay 3 return SavageSpinOutCrash_1: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -10, -8, ANIM_TARGET, 1 @@ -30063,7 +32981,7 @@ SavageSpinOutCrash_2: return SlowSavageSpinOutBackgroundSpeed: createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xfd56, 0x0, 0xffff @-0x2aa - delay 0x1 + delay 1 return @@ -30078,26 +32996,26 @@ gBattleAnimMove_NeverEndingNightmare:: waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call NeverendingNightmareBuffEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(0, 6, 16) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call NeverendingNightmareBuffEffect - delay 0x8 + delay 8 call NeverendingNightmareBuffEffect playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET call NeverendingNightmareAttackerRings - delay 0x1 + delay 1 call NeverendingNightmareAttackerRings - delay 0x1 + delay 1 call NeverendingNightmareAttackerRings - delay 0xa + delay 10 playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET call NeverendingNightmareTargetRings - delay 0x1 + delay 1 call NeverendingNightmareTargetRings - delay 0x1 + delay 1 call NeverendingNightmareTargetRings - delay 0x1 + delay 1 waitforvisualfinish fadetobg BG_NEVERENDING_NIGHTMARE waitbgfadein @@ -30105,12 +33023,12 @@ gBattleAnimMove_NeverEndingNightmare:: playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET call NeverendingNightmareHands call NeverendingNightmareHands - delay 0xa - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x10, 0x40c0 @ fade to purple + delay 10 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB(0, 6, 16) @ fade to purple playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET loadspritegfx ANIM_TAG_EXPLOSION_2 unloadspritegfx ANIM_TAG_THIN_RING - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_VERTICAL_HEX, 0x2, 0xA, 0xA, 0x580A @;Purple + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_VERTICAL_HEX, 2, 10, 10, RGB(10, 0, 22) @;Purple call NeverendingNightmareGeyser playsewithpan SE_M_SACRED_FIRE, SOUND_PAN_TARGET createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 @@ -30145,7 +33063,7 @@ gBattleAnimMove_NeverEndingNightmare:: createsprite gNeverEndingNightmareBlastBurnSpriteTemplate, ANIM_ATTACKER, 2, 0xffc4, 0x1e, 0x18, 0x0, 0x0, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET call NeverendingNightmareGeyser - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x10, 0x0, 0x40c0 @ fade to normal + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB(0, 6, 16) @ fade to normal waitforvisualfinish restorebg waitbgfadeout @@ -30154,99 +33072,99 @@ gBattleAnimMove_NeverEndingNightmare:: end NeverendingNightmareBuffEffect: createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gNeverEndingNightmareFocusEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return NeverendingNightmareTargetRings: createsprite gNeverEndingNightmareRingTargetSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 - delay 0x8 + delay 8 return NeverendingNightmareAttackerRings: createsprite gNeverEndingNightmareRingAttackerSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 - delay 0xe + delay 14 return NeverendingNightmareHands: createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0, 0xffc0, 0x20 @ 0,-32 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x2c, 0xffd4, 0x20 @ +44,-44 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x3c, 0x0, 0x20 @ +60,0 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x28, 0x28, 0x20 @ +40,+40 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0, 0x38, 0x20 @ +0,+56 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xffda, 0x26, 0x20 @ -38,+38 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xffca, 0x0, 0x20 @ -54, +0 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0xffdc, 0xffdc, 0x20 @ -36, -36 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x0, 0xffce, 0x20 @ 0, -50 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x22, 0xffde, 0x20 @ +34, -34 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x2e, 0x0, 0x20 @ +46, +0 - delay 0x2 + delay 2 createsprite gNeverEndingNightmareHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0, 0x20, 0x20, 0x20 @ +32, +32 - delay 0x2 + delay 2 return NeverendingNightmareGeyser: createsprite gNeverEndingNightmareExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xfff1, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xfffb, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0x0012, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0x0005, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareExplosionSpriteTemplate ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gNeverEndingNightmareGeyserHexSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 return @@ -30261,8 +33179,8 @@ gBattleAnimMove_CorkscrewCrash:: invisible ANIM_TARGET createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xb, 0x6318 @fade atker to gray - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_SPIKES, 0x0, 0xC, 0xC, 0x6318 @;Gray + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 11, RGB(24, 24, 24) @fade atker to gray + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SPIKES, 0, 12, 12, RGB(24, 24, 24) @;Gray playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 79, 1 createsprite gCorkscrewCrashChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 @@ -30273,7 +33191,7 @@ gBattleAnimMove_CorkscrewCrash:: call CorkscrewCrashMetalFlare waitforvisualfinish clearmonbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0xb, 0x0, 0x6318 @fade atker back + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 11, 0, RGB(24, 24, 24) @fade atker back waitforvisualfinish stopsound invisible ANIM_ATTACKER @@ -30288,24 +33206,24 @@ gBattleAnimMove_CorkscrewCrash:: CorkscrewCrashOnOpponent: createsprite gCorkscrewCrashRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x88, 0x100, 0x38, 0x15 waitforvisualfinish - delay 0xa + delay 10 createsprite gCorkscrewCrashLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x38, 0xfff0, 0x38, 0x15 waitforvisualfinish visible ANIM_TARGET - delay 0x5 + delay 5 goto FinishCorkscrewCrash CorkscrewCrashOnPlayer: createsprite gCorkscrewCrashLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x08, 0xfff0, 0x0f, 0x15 waitforvisualfinish - delay 0xa + delay 10 createsprite gCorkscrewCrashRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x38, 0x100, 0x38, 0x15 waitforvisualfinish visible ANIM_TARGET - delay 0x5 + delay 5 FinishCorkscrewCrash: createsprite gCorkscrewCrashStrikeSpriteTemplate, ANIM_TARGET, 2, 0x14 loadspritegfx ANIM_TAG_IMPACT @hit - delay 0x10 + delay 16 stopsound playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 0 @@ -30314,36 +33232,36 @@ FinishCorkscrewCrash: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET createsprite gCorkscrewCrashCorkscrewFlyDownSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xffc0, 0x0f - delay 0xf + delay 15 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 2, 48 createsprite gCorkscrewCrashCorkscrewFlyDownSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfffe, 0x03 call CorkscrewCrashSpinningWind call CorkscrewCrashSprayRocks - delay 0x6 + delay 6 call CorkscrewCrashSprayRocks - delay 0x6 + delay 6 call CorkscrewCrashSprayRocks - delay 0x6 + delay 6 call CorkscrewCrashSprayRocks - delay 0x0 + delay 0 createsprite gCorkscrewCrashCorkscrewFlyDownSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfffe, 0x03 - delay 0x6 + delay 6 call CorkscrewCrashSprayRocks - delay 0x6 + delay 6 call CorkscrewCrashSprayRocks - delay 0x6 + delay 6 call CorkscrewCrashSprayRocks - delay 0x1 + delay 1 createsprite gCorkscrewCrashCorkscrewFlyDownSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xfffe, 0x03 - delay 0x4 + delay 4 call CorkscrewCrashSprayRocks - delay 0x6 + delay 6 call CorkscrewCrashSprayRocks - delay 0x6 + delay 6 call CorkscrewCrashSprayRocks - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 16, RGB_WHITE waitforvisualfinish - delay 0x10 + delay 16 call ResetFromWhiteScreen waitforvisualfinish end @@ -30357,17 +33275,17 @@ CorkscrewCrashSpinningWind: return CorkscrewCrashMetalFlare: createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gCorkscrewCrashMetalBitSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 return CorkscrewCrashSprayRocks: playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET @@ -30381,7 +33299,7 @@ CorkscrewCrashSprayRocks: gBattleAnimMove_InfernoOverdrive:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_SMALL_EMBER @fire - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 10, 10, RGB_RED createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish fadetobg BG_INFERNO_OVERDRIVE @@ -30416,16 +33334,15 @@ FinishInfernoOverdrive: clearmonbg ANIM_ATTACKER createsprite gInfernoOverdriveSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 @ super power shot playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER - delay 0x10 + delay 16 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 79, 1 call InfernoOverdriveExplosion - delay 0x6 + delay 6 call InfernoOverdriveExplosion - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x0, 0x10, 0x001b @ red bg pal - delay 0x6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 16, RGB(27, 0, 0) @ red bg pal + delay 6 call InfernoOverdriveExplosion waitforvisualfinish call ResetFromRedScreen @@ -30433,17 +33350,17 @@ FinishInfernoOverdrive: end InfernoOverdriveFireSpin: createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 return InfernoOverdriveExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER @@ -30453,7 +33370,7 @@ InfernoOverdriveExplosion: createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe @@ -30461,7 +33378,7 @@ InfernoOverdriveExplosion: createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe @@ -30469,7 +33386,7 @@ InfernoOverdriveExplosion: createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe @@ -30477,7 +33394,7 @@ InfernoOverdriveExplosion: createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 createsprite gInfernoOverdriveExplosionSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe @@ -30498,7 +33415,7 @@ gBattleAnimMove_HydroVortex:: createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish createvisualtask AnimTask_CreateSurfWave, 0x2, 0x0 - delay 0x18 + delay 24 panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 waitforvisualfinish loadspritegfx ANIM_TAG_ROUND_SHADOW @@ -30513,14 +33430,14 @@ gBattleAnimMove_HydroVortex:: call DiveSetUpWaterDroplets call DiveSetUpWaterDroplets createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -768, 21, 0, 26 - delay 0x1a + delay 26 invisible ANIM_TARGET waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x7 - delay 0x5 + delay 5 fadetobg BG_WATER_PULSE waitbgfadeout - delay 0x5 + delay 5 visible ANIM_ATTACKER visible ANIM_TARGET loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x3 @@ -30536,10 +33453,10 @@ gBattleAnimMove_HydroVortex:: createsprite gHydroVortexSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER invisible ANIM_ATTACKER - delay 0x10 + delay 16 createsprite gHydroVortexImpactSpriteTemplate, ANIM_TARGET, 3, 0xa, 0xfff8, 0x1, 0x1 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0x10, 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB(0, 13, 23) loadspritegfx ANIM_TAG_GUST createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 8, 60 call HydroVortexWhirlpoolHurricane @@ -30547,7 +33464,7 @@ gBattleAnimMove_HydroVortex:: call HydroVortexWhirlpoolHurricane call HydroVortexWhirlpoolHurricane waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x10, 0x0, 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB(0, 13, 23) waitforvisualfinish restorebg waitbgfadeout @@ -30557,25 +33474,25 @@ gBattleAnimMove_HydroVortex:: HydroVortexBubbles: createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0xa, 0xa, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x14, ANIM_TARGET - delay 0x4 + delay 4 createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xffec, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x14, ANIM_TARGET - delay 0x4 + delay 4 createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0xf, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff1, 0xf, 0x14, ANIM_TARGET - delay 0x4 + delay 4 createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x0, 0x0, 0x14, ANIM_TARGET - delay 0x4 + delay 4 createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0xfff6, 0xffec, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff6, 0xffec, 0x14, ANIM_TARGET - delay 0x4 + delay 4 createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xfff8, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x10, 0xfff8, 0x14, ANIM_TARGET - delay 0x4 + delay 4 createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0x5, 0x8, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0x5, 0x8, 0x14, ANIM_TARGET - delay 0x4 + delay 4 createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0x0, 0x14, ANIM_ATTACKER createsprite gSmallBubblePairSpriteTemplate ANIM_TARGET, 2, 0xfff0, 0x0, 0x14, ANIM_TARGET return @@ -30585,20 +33502,20 @@ HydroVortexWhirlpoolHurricane: createsprite gHydroVortexImpactSpriteTemplate, ANIM_TARGET, 3, 0xfff6, 0xfff8, 0x1, 0x1 createvisualtask AnimTask_AnimateGustTornadoPalette, 0x5, 0x1, 0x46 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, 0x1 - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, 0x1 - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, 0x1 - delay 0x2 + delay 2 createsprite gHydroVortexImpactSpriteTemplate, ANIM_TARGET, 3, 0xa, 0xfff8, 0x1, 0x1 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, 0x1 - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, 0x1 createsprite gHydroVortexHurricaneSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 createvisualtask AnimTask_AnimateGustTornadoPalette, 0x5, 0x1, 0x46 - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, 0x1 - delay 0x2 + delay 2 return @@ -30612,30 +33529,30 @@ gBattleAnimMove_BloomDoom:: createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 4, RGB_BLACK loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x9, 0x3 createsprite gBloomDoomGreenChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 - delay 0x3C + delay 60 blendoff createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 - delay 0x2 + delay 2 createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc - delay 0x2 + delay 2 createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 - delay 0x2 + delay 2 createsprite gBloomDoomPetalSpinSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x4, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 4, 0, RGB_BLACK waitforvisualfinish unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT call BloomDoomHurricane @@ -30665,11 +33582,11 @@ gBattleAnimMove_BloomDoom:: fadetobg BG_BLOOM_DOOM waitbgfadein loadspritegfx ANIM_TAG_ORBS - delay 0x5 + delay 5 createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x18, 0x10, 0x0, 0x2, 0x2, 0x0, 0x0 createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 66, 0x40, 0x18, 0x0, 0x3, 0x1, 0x1, 0x0 createsprite gAromatherapyBigFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x10, 0x18, 0x0, 0x2, 0x1, 0x0, 0x0 - delay 0x5 + delay 5 createsoundtask SoundTask_LoopSEAdjustPanning, 0xf0, 0xffc0, SOUND_PAN_TARGET, 0x1, 0xf, 0x0, 0x5 createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 @ shake attacker call BloomDoomHyperBeam @@ -30678,7 +33595,7 @@ gBattleAnimMove_BloomDoom:: call BloomDoomHyperBeam call BloomDoomHyperBeam createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 114, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0xb, 0x33ed + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(13, 31, 12) call BloomDoomHyperBeam call BloomDoomHyperBeam call BloomDoomHyperBeam @@ -30706,15 +33623,15 @@ gBattleAnimMove_BloomDoom:: createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 66, 0x50, 0x1e, 0x0, 0x4, 0x1, 0x1, 0x0 createsprite gAromatherapySmallFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x80, 0xc, 0x0, 0x3, 0x3, 0x0, 0x0 createsprite gAromatherapyBigFlowerSpriteTemplate, ANIM_ATTACKER, 0, 0x5a, 0x10, 0x0, 0x2, 0x1, 0x0, 0x0 - delay 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0xb, 0x0, 0x33ed + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(13, 31, 12) loadspritegfx ANIM_TAG_EXPLOSION @explosion call BloomDoomPetalBlast - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x0, 0x10, 0x33ed + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 16, RGB(13, 31, 12) call BloomDoomPetalBlast createvisualtask AnimTask_IsTargetPartner, 0x5 jumpargeq 0x0 0x1 BloomDoomFadeScreenTargetPartner - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x1, 0x0, 0x10, 0x33ed @ green bg pal + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 1, 0, 16, RGB(13, 31, 12) @ green bg pal BloomDoomEnding: call BloomDoomPetalBlast waitforvisualfinish @@ -30722,7 +33639,7 @@ BloomDoomEnding: call ResetFromGreenScreen end BloomDoomFadeScreenTargetPartner: - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 0x1, 0x0, 0x10, 0x33ed @ green bg pal + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 1, 0, 16, RGB(13, 31, 12) @ green bg pal goto BloomDoomEnding BloomDoomHurricane: createsprite gBloomDoomHurricaneSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 @@ -30730,68 +33647,68 @@ BloomDoomHurricane: return BloomDoomFlowerGeyser: createsprite gBloomDoomFlowerGeyserSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xfffc, 0x10 @ -4, -0x10 - delay 0x0 + delay 0 createsprite gBloomDoomFlowerGeyserSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gBloomDoomFlowerGeyserSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gBloomDoomFlowerGeyserSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0xfff0, 0x10 - delay 0x0 + delay 0 return BloomDoomHyperBeam: createsprite gBloomDoomGreenBeamSpriteTemplate, ANIM_TARGET, 2 createsprite gBloomDoomGreenBeamSpriteTemplate, ANIM_TARGET, 2 - delay 0x1 + delay 1 return BloomDoomPetalBlast: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBloomDoomExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe0, 0x10 - delay 0x2 + delay 2 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x16, 0xffea, 0x10 - delay 0x2 + delay 2 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x1e, 0x0, 0x10 - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBloomDoomExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x14, 0x14, 0x10 - delay 0x2 + delay 2 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x1c, 0x10 - delay 0x2 + delay 2 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffed, 0x13, 0x10 - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBloomDoomExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffe5, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0xffee, 0xffee, 0x10 - delay 0x2 + delay 2 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0xffe7, 0x10 - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBloomDoomExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x11, 0xffef, 0x10 - delay 0x2 + delay 2 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x17, 0x0, 0x10 - delay 0x2 + delay 2 createsprite gBloomDoomPetalStarSpriteTemplate, ANIM_TARGET, 2, 0x1, 0x0, 0x10, 0x10, 0x10 - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBloomDoomExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x2 + delay 2 return ResetFromGreenScreen: createvisualtask AnimTask_AllBattlersInvisible, 0xA waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x33ED @Everything from green + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 0, RGB(13, 31, 12) @Everything from green restorebg waitbgfadeout setarg 0x7 0xffff createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein waitforvisualfinish - delay 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x0, 0x33ED + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 0, RGB(13, 31, 12) waitforvisualfinish return @@ -30806,33 +33723,33 @@ gBattleAnimMove_GigavoltHavoc:: loadspritegfx ANIM_TAG_THIN_RING createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x6, 0x0, 0x10, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 6, 0, 16, RGB_BLACK playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gGigavoltHavocChargingSpearSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 0x18, 190, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 0x18, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 0x18, 121, 13, ANIM_ATTACKER, 1, 1 - delay 0xa + delay 10 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 - delay 0x0 - delay 0x5 + delay 0 + delay 5 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 - delay 0x5 + delay 5 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0x20, 0x14, 0x0, 0x0 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0x60, 0x14, 0x1, 0x0 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0xa0, 0x14, 0x0, 0x0 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x0, 0x10, 0xc, 0xe0, 0x14, 0x2, 0x0 - delay 0x5 + delay 5 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 0x18, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 0x18, 42, 11, ANIM_ATTACKER, 1, 1 - delay 0x0 + delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 0x18, 165, 10, ANIM_ATTACKER, 1, 1 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER monbg ANIM_ATTACKER @@ -30842,72 +33759,72 @@ gBattleAnimMove_GigavoltHavoc:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x10, 0x2c, 0x60, 0x28, 0x1, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x10, 0x2c, 0xa0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x10, 0x2c, 0xe0, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x12, 0x2c, 0x0, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x12, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x12, 0x2c, 0x80, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x12, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x2c, 0x40, 0x28, 0x1, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x14, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 waitforvisualfinish playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET createsprite gGigavoltHavocLaunchSpearSpriteTemplate, ANIM_TARGET, 3, 0x0 createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x10 - delay 0x2 + delay 2 createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0, 0xfff0 - delay 0xe + delay 14 clearmonbg ANIM_ATTACKER createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 8, 28 @shake target unloadspritegfx ANIM_TAG_HAVOC_SPEAR loadspritegfx ANIM_TAG_SHOCK_3 @thunderbolt createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 0x2c, 0x0, 0x0, 0x3 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x0, 0x0, 0xc, 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 12, RGB(31, 31, 22) @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x20, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x20, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x20, 0x2c, 0x80, 0x28, 0x0, 0x8003 @@ -30917,7 +33834,7 @@ gBattleAnimMove_GigavoltHavoc:: @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x10, 0x2c, 0xa0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x10, 0x2c, 0xe0, 0x28, 0x2, 0x8003 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET - delay 0x19 + delay 25 loadspritegfx ANIM_TAG_VERTICAL_HEX playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET @ call HavocSpearSparkTarget @@ -30941,9 +33858,9 @@ gBattleAnimMove_GigavoltHavoc:: @ call HavocSpearSparkTarget call HavocSpearGeyser playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0xc, 0x0, 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 12, 0, RGB(31, 31, 22) waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xa waitforvisualfinish @@ -30979,38 +33896,38 @@ gBattleAnimMove_ShatteredPsyche:: loadspritegfx ANIM_TAG_TORN_METAL @brick break shatter createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x5, 0x0, 0x0, 0x0, 0x10, 0x0 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, ANIM_ATTACKER, 0, 0, 16, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_SetAllNonAttackersInvisiblity, 0x5, 0x1 waitforvisualfinish createsprite gShatteredPsychePinkChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - delay 0xc + delay 12 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 - delay 0xc + delay 12 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - delay 0xc + delay 12 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 - delay 0xc + delay 12 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - delay 0xc + delay 12 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 - delay 0xc + delay 12 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - delay 0xc + delay 12 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 - delay 0xc + delay 12 createsprite gShatteredPsycheRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - delay 0x4 + delay 4 fadetobg BG_SHATTERED_PSYCHE - delay 0x4 - createvisualtask AnimTask_BlendBattleAnimPalExclude, 0x5, 0x0, 0x0, 0x10, 0x0, 0x0 - delay 0x7 + delay 4 + createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, ANIM_ATTACKER, 0, 16, 0, RGB_BLACK + delay 7 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 15, 1 createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_TARGET, 1 @@ -31028,7 +33945,7 @@ ShatteredPsycheOnPlayer: call ShatteredPsycheFlingPlayer waitforvisualfinish ShatteredPsycheFinish: - delay 0x8 + delay 8 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET restorebg createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 15, 1 @@ -31046,56 +33963,56 @@ ShatteredPsycheFlingOpponent: waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x1a, 0xfff0, 0x1, 0x1 @ 26, -16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 26, -16, 1, 4 @ -26,-16 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xffe6, 0x10, 0x1, 0x1 @ 26, 16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 32, 1, 4 @ 0,32 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xffe0, 0x1, 0x1 @ 0, -32 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, -32, 1, 4 @ 0,-32 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x20, 0x1, 0x1 @ 0, 32 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 26, 16, 1, 4 @ 26,16 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xffe6, 0xfff0, 0x1, 0x1 @ -26, -16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -26, -32, 1, 4 @ 26,-16 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x1a, 0x10, 0x1, 0x1 @ 0, 32 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x5 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -26, 16, 1, 4 @ -26, +16 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x1a, 0xfff0, 0x1, 0x1 @ 26, -16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 26, -16, 1, 4 @ -26,-16 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xffe6, 0x10, 0x1, 0x1 @ 26, 16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish return @@ -31104,28 +34021,28 @@ ShatteredPsycheFlingPlayer: waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x1a, 0xfff0, 0x1, 0x1 @ 26, 16 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 32, 0, 1, 4 @ 32,0 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xffe0, 0x0, 0x1, 0x1 @ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -32, 0, 1, 4 @ -32,0 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x0, 0x1, 0x1 @ 32, 0 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x4 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 10, 32, 1, 4 @ 10, -32 waitforvisualfinish createsprite gShatteredPsycheReflectHitSpriteTemplate, ANIM_TARGET, 3, 0xfff6, 0x5, 0x1, 0x1 @ 10, -32 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET - delay 0x2 + delay 2 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x5 waitforvisualfinish return @@ -31135,7 +34052,7 @@ gBattleAnimMove_SubzeroSlammer:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_ICE_CUBE @glacier loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x6A23 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION_2, 0, 12, 12, RGB(3, 17, 26) createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish fadetobg BG_ICE @@ -31150,30 +34067,30 @@ SubzeroSlammerOnPlayer: SubzeroSlammerFinish: waitbgfadein monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0x0, 0xb, 0x7e80 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 11, RGB(0, 20, 31) createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x0 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x4 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x8 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0xc playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x10 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x14 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSpinSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x38, 0x18 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER - delay 0x20 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0xb, 0x0, 0x7e80 - delay 0x20 + delay 32 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 11, 0, RGB(0, 20, 31) + delay 32 createvisualtask AnimTask_FrozenIceCubeAttacker, 0x2 waitplaysewithpan SE_M_HAIL, SOUND_PAN_TARGET, 0x11 waitforvisualfinish @@ -31182,16 +34099,16 @@ SubzeroSlammerFinish: createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call SubzeroSlammerIceSwirl call SubzeroSlammerIceSwirl - delay 0xa + delay 10 clearmonbg ANIM_ATK_PARTNER createsoundtask SoundTask_LoopSEAdjustPanning, 0xb0, 0xffc0, SOUND_PAN_TARGET, 0x4, 0x4, 0x0, 0xa createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xc, 0x0, 0xc, 0x14 createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 0x14, 0xfff4, 0x0, 0xfff4, 0x14 - delay 0x1 + delay 1 call IceBeamCreateCrystals call IceBeamCreateCrystals call IceBeamCreateCrystals - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0x7, 0x7e80 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 4, 0, 7, RGB(0, 20, 31) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 25, 1 call IceBeamCreateCrystals call IceBeamCreateCrystals @@ -31206,14 +34123,14 @@ SubzeroSlammerFinish: call IceBeamCreateCrystals call IceBeamCreateCrystals call IceCrystalEffectShort - delay 0x5 + delay 5 monbg ANIM_DEF_PARTNER createvisualtask AnimTask_FrozenIceCube, 0x82 playsewithpan SE_M_HAIL, SOUND_PAN_TARGET waitforvisualfinish loadspritegfx ANIM_TAG_TORN_METAL playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET - delay 0x3 + delay 3 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x0, 0x0, 0x0 @ -8, -12 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x1, 0x0, 0x0 createsprite gBrickBreakWallShardSpriteTemplate ANIM_TARGET, 2, 0x1, 0x2, 0x0, 0x0 @@ -31222,7 +34139,7 @@ SubzeroSlammerFinish: call SubzeroSlammerExplosion call SubzeroSlammerExplosion clearmonbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x5, 0x7, 0x0, 0x7e80 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) waitforvisualfinish restorebg waitbgfadeout @@ -31235,50 +34152,50 @@ SubzeroSlammerExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 - delay 0x3 + delay 3 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xa, 0x14, 0x0 - delay 0x3 + delay 3 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x0 - delay 0x3 + delay 3 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 - delay 0x3 + delay 3 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 - delay 0x3 + delay 3 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 - delay 0x3 + delay 3 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0x14, 0x2, 0x0 - delay 0x3 + delay 3 createsprite gIceCrystalHitLargeSpriteTemplate, ANIM_TARGET, 2, 0xfff6, 0xfff6, 0x0 - delay 0x3 + delay 3 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gSubzeroSlammerExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0x11, 0xfff4, 0x0 - delay 0x3 + delay 3 createsprite gIceCrystalHitSmallSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xf, 0x0 - delay 0x3 + delay 3 return SubzeroSlammerIceSwirl: playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 playsewithpan SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gSubzeroSlammerIceSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 return @@ -31289,17 +34206,17 @@ gBattleAnimMove_DevastatingDrake:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @ shock wave playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call DevastatingDrakeBuffEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(0, 6, 16) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call DevastatingDrakeBuffEffect - delay 0x8 + delay 8 call DevastatingDrakeBuffEffect waitforvisualfinish unloadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeShockwaveSpriteTemplate, ANIM_ATTACKER, 2 - delay 0x2a + delay 42 unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER @@ -31318,11 +34235,11 @@ DevastatingDrakeOnOpponent: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x88, 0x100, 0x38, 0x15 @left to right waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x38, 0xfff0, 0x38, 0x15 @right to left waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x08, 0x100, 0x0f, 0x15 @left to right goto DevastatingDrakeFinish @@ -31330,43 +34247,43 @@ DevastatingDrakeOnPlayer: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x08, 0xfff0, 0x0f, 0x15 @right to left waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x38, 0x100, 0x38, 0x15 @left to right waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x78, 0xfff0, 0x58, 0x15 @right to left DevastatingDrakeFinish: call UnsetPsychicBg waitforvisualfinish visible ANIM_TARGET - delay 0xa + delay 10 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeStrikeSpriteTemplate, ANIM_TARGET, 2, 0x14 - delay 0x10 + delay 16 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER loadspritegfx ANIM_TAG_EXPLOSION - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION, 0x0, 0xC, 0xC, 0x502B + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION, 0, 12, 12, RGB(11, 1, 20) createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 53 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x10, 0x40c0 @ fade to purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB(0, 6, 16) @ fade to purple call DevastatingDrakeExplosion - delay 0x6 + delay 6 createvisualtask AnimTask_IsTargetPartner, 0x5 jumpargeq 0x0 0x1 DevastatingDrakeFadeTargetPartner - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x6, 0x0, 0x10, 0x40c0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 6, 0, 16, RGB(0, 6, 16) call DevastatingDrakeExplosion waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0, 16, 0, RGB(0, 6, 16) @ fade all but target back DevastatingDrakeUniversalEnding: loadspritegfx ANIM_TAG_FIRE_PLUME loadspritegfx ANIM_TAG_VERTICAL_HEX loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion unloadspritegfx ANIM_TAG_PURPLE_DRAKE - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_FIRE_PLUME, 0x0, 0xC, 0xC, 0x502B - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_VERTICAL_HEX, 0x0, 0xC, 0xC, 0x502B - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_EXPLOSION_2, 0x0, 0xC, 0xC, 0x502B + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FIRE_PLUME, 0, 12, 12, RGB(11, 1, 20) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_VERTICAL_HEX, 0, 12, 12, RGB(11, 1, 20) + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_EXPLOSION_2, 0, 12, 12, RGB(11, 1, 20) createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 32 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER call DevastatingDrakeGeyser @@ -31403,100 +34320,100 @@ DevastatingDrakeUniversalEnding: createsprite gDevastatingDrakePurpleBlastSpriteTemplate, ANIM_ATTACKER, 2, 0xffc4, 0x1e, 0x18, 0x0, 0x0, 0x0 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER call DevastatingDrakeGeyser - delay 0x4 + delay 4 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x10, 0x0, 0x40c0 @ fade from purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB(0, 6, 16) @ fade from purple waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x0 @ reset all colours + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 0, 0 @ reset all colours waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end DevastatingDrakeFadeTargetPartner: - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 0x6, 0x0, 0x10, 0x40c0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 6, 0, 16, RGB(0, 6, 16) call DevastatingDrakeExplosion waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 0x0, 0x10, 0x0, 0x40c0 @ fade all but target back + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ALL_BUT_ATK_PARTNER), 0, 16, 0, RGB(0, 6, 16) @ fade all but target back goto DevastatingDrakeUniversalEnding DevastatingDrakeBuffEffect: createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gDevastatingDrakePurpleEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return DevastatingDrakeGeyser: createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, 0x1, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xfff1, 0x1, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xfffb, 0x1, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0012, 0x1, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0x0005, 0x1, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfffc, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gDevastatingDrakeHexSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0xfff0, 0x10 return DevastatingDrakeExplosion: createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gDevastatingDrakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 return @@ -31514,11 +34431,11 @@ gBattleAnimMove_BlackHoleEclipse:: waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect - delay 0x8 + delay 8 call EndureEffect waitforvisualfinish unloadspritegfx ANIM_TAG_FOCUS_ENERGY @@ -31530,118 +34447,117 @@ gBattleAnimMove_BlackHoleEclipse:: playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER createsprite gBlackHoleEclipseHoleUserSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_ATTACKER, 0x0 createsprite gBlackHoleEclipseBlueRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseBlackRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseBlueRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseBlackRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 - delay 0x8 + delay 8 waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x07, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 7, RGB_BLACK loadspritegfx ANIM_TAG_WISP_ORB @will o wisp invisible ANIM_ATTACKER loopsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET, 0x10, 0x5 createsprite gBlackHoleEclipseWispSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x0 - delay 0x3 + delay 3 createsprite gBlackHoleEclipseWispSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x10, 0x1 - delay 0x3 + delay 3 createsprite gBlackHoleEclipseWispSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x10, 0x2 - delay 0x3 + delay 3 createsprite gBlackHoleEclipseWispSpriteTemplate, ANIM_ATTACKER, 4, 0x0, 0x10, 0x3 waitforvisualfinish fadetobg BG_BLACKHOLE_ECLIPSE playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET loadspritegfx ANIM_TAG_VERTICAL_HEX @red createsprite gBlackHoleEclipseRedRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 - delay 0x4 + delay 4 createsprite gBlackHoleEclipseRedRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 - delay 0x4 + delay 4 createsprite gBlackHoleEclipseRedRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x100, 0x0 waitbgfadeout unloadspritegfx ANIM_TAG_WISP_ORB createsprite gBlackHoleEclipseHoleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_TARGET, 0x0 @ eclipse at target origin - delay 0x10 + delay 16 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 53, -19, 1, 2 @ target down and left (instantaneously (last arg)) - delay 0x2 + delay 2 visible ANIM_TARGET loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 0xa, 0x5 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 80, -1024, ANIM_TARGET, 0 @ spin target around (0x50 (time), -0x400 (rot speed)) createsprite gBlackHoleEclipseBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x30 @ target back to origin (slowly) createsprite gBlackHoleEclipseBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x15 + delay 21 invisible ANIM_TARGET - delay 0x8 + delay 8 createsprite gBlackHoleEclipseBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseRedRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gBlackHoleEclipseHoleShrinkSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_TARGET, 0x0 waitforvisualfinish unloadspritegfx ANIM_TAG_THIN_RING unloadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_SPARKLE_4 @detect createsprite gTargetTwinkleSpriteTemplate, ANIM_ATTACKER, 13, 0x0, 0x0, ANIM_TARGET @detect star - delay 0x2 + delay 2 unloadspritegfx ANIM_TAG_VERTICAL_HEX @red unloadspritegfx ANIM_TAG_SHADOW_BALL unloadspritegfx ANIM_TAG_BLACK_BALL_2 - unloadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_EXPLOSION_2 call BlackHoleEclipseExplosion - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x0, 0x10, 0x7fff @ bg to white pal + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 16, RGB_WHITE @ bg to white pal call BlackHoleEclipseExplosion waitforvisualfinish - delay 0x18 + delay 24 invisible ANIM_TARGET createvisualtask AnimTask_RotateMonSpriteToSide, 2, 1, 0, ANIM_TARGET, 1 @ fix rotation invisible ANIM_TARGET - delay 0x1 + delay 1 waitforvisualfinish call ResetFromWhiteScreen end BlackHoleEclipseExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBlackHoleEclipseRedExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 return ResetFromWhiteScreen: createvisualtask AnimTask_AllBattlersInvisible, 0xA waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x7FFF @everything from white + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 0, RGB_WHITE @everything from white restorebg waitbgfadeout setarg 0x7 0xffff createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein waitforvisualfinish - delay 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x0, 0x7fff + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 0, RGB_WHITE waitforvisualfinish return @@ -31654,12 +34570,12 @@ gBattleAnimMove_TwinkleTackle:: waitforvisualfinish playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER call TwinkleTacklePinkStars - delay 0x8 + delay 8 fadetobg BG_TWINKLE_TACKLE createsprite gTwinkleTacklePinkRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitbgfadeout invisible ANIM_TARGET - delay 0x1 + delay 1 loadspritegfx ANIM_TAG_YELLOW_STAR createsprite gTwinkleTackleStarGrowSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish @@ -31672,7 +34588,7 @@ TwinkleTackleOnPlayer: call OpponentTwinkling TwinkleTackleFinish: waitforvisualfinish - delay 0x5 + delay 5 visible ANIM_ATTACKER visible ANIM_TARGET createvisualtask AnimTask_SwayMon, 5, 0, 8, 2048, 1, ANIM_ATTACKER @@ -31684,29 +34600,29 @@ TwinkleTackleFinish: loadspritegfx ANIM_TAG_SPARKLE_4 @detect loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_PAIN_SPLIT @pain-split - delay 0x1 + delay 1 createsprite gTwinkleTackleYellowImpactSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1, 0x0 call TwinkleTackleStarsTarget playsewithpan SE_M_WATERFALL, SOUND_PAN_TARGET - delay 0x5 + delay 5 createvisualtask AnimTask_TwinkleTackleLaunch, 0x2, 89 delay 89 playsewithpan SE_M_DETECT, SOUND_PAN_TARGET createsprite gTwinkleTackleTwinkleSpriteTemplate, ANIM_TARGET, 13, 0x0, 0x0, ANIM_TARGET @detect star waitforvisualfinish - delay 0x10 + delay 16 restorebg - delay 0x18 + delay 24 createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end TwinkleTacklePinkStars: createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c createsprite gTwinkleTacklePinkRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 - delay 0x8 + delay 8 createsprite gTwinkleTacklePinkRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c - delay 0x8 + delay 8 createsprite gTwinkleTacklePinkRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 return PlayerTwinkling: @@ -31714,36 +34630,36 @@ PlayerTwinkling: setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 @ user fly on screen on enemy side createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x12, 0x0, 0x0, 0x0, 0x20, 0x1c - delay 0x3 + delay 3 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x1f, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x16 + delay 22 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x90, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x80, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x70, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x60, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x40, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffc0, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffc0, 0x0, 0x0, 0x20, 0x1c return OpponentTwinkling: @@ -31751,40 +34667,40 @@ OpponentTwinkling: setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 @ user fly on screen on enemy side createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x40, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x60, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x70, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x80, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x90, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xa0, 0xfffb, 0x0, 0x0, 0x20, 0x1c - delay 0x5 + delay 5 playsewithpan SE_M_MORNING_SUN, SOUND_PAN_TARGET createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0xa0, 0x2c, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x90, 0x2c, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x80, 0x2c, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x70, 0x2c, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x60, 0x2c, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x50, 0x2c, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x40, 0x2c, 0x0, 0x0, 0x20, 0x1c - delay 0x1 + delay 1 createsprite gTwinkleTacklePinkStarSpriteTemplate, ANIM_ATTACKER, 2, 0x30, 0x2c, 0x0, 0x0, 0x20, 0x1c return TwinkleTackleStars: @@ -31812,13 +34728,13 @@ gBattleAnimMove_Catastropika:: waitforvisualfinish playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 31, 22) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect - delay 0x8 + delay 8 call EndureEffect - delay 0x8 + delay 8 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish @@ -31847,74 +34763,74 @@ CatastropikaFinish: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0x60, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0xa0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0xe0, 0x28, 0x2, 0x3 -@ delay 0x14 +@ delay 20 @ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x12, 0x2c, 0x0, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x12, 0x2c, 0x40, 0x28, 0x1, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x12, 0x2c, 0x80, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x12, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 -@ delay 0x14 +@ delay 20 @ playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x0, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x40, 0x28, 0x1, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x80, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER @ charge createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x16, 0x2c, 0x20, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x16, 0x2c, 0x60, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x16, 0x2c, 0xa0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x16, 0x2c, 0xe0, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1a, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1a, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1a, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1a, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1e, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x15, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 restorebg waitbgfadeout playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @@ -31928,17 +34844,17 @@ CatastropikaFinish: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 - delay 0x1 + delay 1 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 - delay 0x1 + delay 1 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 - delay 0xd + delay 13 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -256, 21, 0, 4 loadspritegfx ANIM_TAG_MUD_SAND createsprite gDirtPlumeSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 12, -24, -16, 24 @ 12, -48, -16, 24 @@ -31952,10 +34868,10 @@ CatastropikaFinish: call CatastropikaThundering call CatastropikaThundering call CatastropikaThundering - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x7fff @ bg to white + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 4, 0, 16, RGB_WHITE @ bg to white call CatastropikaThundering waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x10, 0x0, 0x7fff @ bg to white + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 4, 16, 0, RGB_WHITE @ bg to white createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 @fix tgt position waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xA @@ -31963,17 +34879,17 @@ CatastropikaFinish: end CatastropikaThundering: playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 delay 2 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 delay 2 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 delay 2 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 delay 2 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0xfff0 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 delay 2 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x10 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 delay 2 return @@ -31996,12 +34912,12 @@ gBattleAnimMove_10000000VoltThunderbolt:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 - delay 0x2 + delay 2 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 - delay 0x2 + delay 2 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 @@ -32021,65 +34937,65 @@ gBattleAnimMove_10000000VoltThunderbolt:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0x60, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0xa0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x10, 0x2c, 0xe0, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER - delay 0x14 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x14, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x10 + delay 16 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 @thunder flash + createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 @thunder flash createsprite gGrowingChargeOrbSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER @ charge - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x40, 0xffdc - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x40, 0xffec - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0x40, 0xc - delay 0x14 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 64, -36 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 64, -20 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 64, 12 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x0, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x40, 0x28, 0x1, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, 0x80, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x18, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 @thunder flash - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0xffdc - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0xffec - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0xc - delay 0x14 + createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 @thunder flash + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -64, -36 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -64, -20 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -64, 12 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x1c, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x14 + delay 20 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 @thunder flash - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xff90, 0xffdc - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xff90, 0xffec - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xff90, 0xc - delay 0x14 + createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 @thunder flash + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -112, -36 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -112, -20 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -112, 12 + delay 20 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x0, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x40, 0x28, 0x1, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x80, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x3 - delay 0x10 + delay 16 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET - createvisualtask AnimTask_InvertScreenColor, 0x2, 0x101, 0x101, 0x101 @thunder flash - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0xffdc - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0xffec - delay 0x1 - createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0xc + createvisualtask AnimTask_InvertScreenColor, 2, 0x101, 0x101, 0x101 @thunder flash + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -48, -36 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -48, -20 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, -48, 12 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x2a, 0x2c, 0x0, 0x28, 0x0, 0x3 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x2a, 0x2c, 0x40, 0x28, 0x1, 0x3 @@ -32096,11 +35012,11 @@ gBattleAnimMove_10000000VoltThunderbolt:: loadspritegfx ANIM_TAG_POISON_BUBBLE @purple loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, 0x5, 0xA createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 -@ createvisualtask AnimTask_FlashAnimTagWithColor, 0x2, ANIM_TAG_ORBS, 0x1, 0xc, 0x1f, 0x10, 0x0, 0x0 +@ createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 call TenMillionVoltThunderboltBeamRed call TenMillionVoltThunderboltBeamBlue createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x9, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(30, 31, 1) call TenMillionVoltThunderboltBeamPink call TenMillionVoltThunderboltBeamYellow call TenMillionVoltThunderboltBeamGreen @@ -32129,12 +35045,12 @@ gBattleAnimMove_10000000VoltThunderbolt:: @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x25, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x25, 0x2c, 0x80, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x25, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 -@ delay 0x6 +@ delay 6 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x35, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x35, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x35, 0x2c, 0x80, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x35, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 -@ delay 0x6 +@ delay 6 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x40, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x40, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x40, 0x2c, 0x80, 0x28, 0x0, 0x8003 @@ -32159,11 +35075,11 @@ gBattleAnimMove_10000000VoltThunderbolt:: @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x80, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x00, 0x37, 0x2c, SOUND_PAN_ATTACKER, 0x28, 0x2, 0x8003 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 16, RGB_WHITE call TenMillionVoltThunderboltSparkGeyser waitforvisualfinish - delay 0x10 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x10, 0x0, 0x7fff + delay 16 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 16, 0, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish @@ -32207,11 +35123,11 @@ TenMillionVoltThunderboltSparkGeyser: @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 - delay 0x4 + delay 4 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 - delay 0x4 + delay 4 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 @@ -32220,23 +35136,23 @@ TenMillionVoltThunderboltSparkGeyser: @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 - delay 0x4 + delay 4 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 - delay 0x4 + delay 4 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x8 + delay 8 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x8 + delay 8 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 return @@ -32254,12 +35170,12 @@ gBattleAnimMove_StokedSparksurfer:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 - delay 0x2 + delay 2 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe0, 0x20, 0x2c, 0xe0, 0x28, 0x2, 0x3 - delay 0x2 + delay 2 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0x20, 0x28, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0x60, 0x28, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffd0, 0x20, 0x2c, 0xa0, 0x28, 0x0, 0x3 @@ -32286,15 +35202,15 @@ StokedSparksurferFinish: createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 28, 2, 12 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 60, 1 call EndureEffect - delay 0x8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x5, 0x0, 0x10, 0x5bff + delay 8 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 5, 0, 16, RGB(31, 31, 22) call EndureEffect - delay 0x8 + delay 8 call EndureEffect - delay 0x2 + delay 2 loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_ELECTRICITY - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0x10, 0x0, 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 16, 0, RGB(31, 31, 22) createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER waitforvisualfinish @@ -32309,7 +35225,7 @@ StokedSparksurferFinish: waitforvisualfinish createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x3 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET - delay 0x1 + delay 1 fadetobg BG_ZMOVE_ACTIVATE waitbgfadeout visible ANIM_TARGET @@ -32326,7 +35242,7 @@ StokedSparksurferFinish: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x30, 0x2c, 0x80, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x00, 0x30, 0x2c, 0xc0, 0x28, 0x2, 0x8003 call StokedSparksurferSparkGeyser - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_TARGET | F_PAL_ATTACKER), 0x2, 0x0, 0x10, 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_ATTACKER), 2, 0, 16, RGB(31, 31, 22) createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x0, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x40, 0x28, 0x1, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x37, 0x2c, 0x80, 0x28, 0x0, 0x8003 @@ -32334,15 +35250,15 @@ StokedSparksurferFinish: call StokedSparksurferSparkGeyser createvisualtask AnimTask_VoltTackleAttackerReappear, 0x5 @ attacker flicker back playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x10 - delay 0x2 + delay 2 createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0, 0xfff0 - delay 0x4 + delay 4 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_TARGET | F_PAL_ATTACKER), 0x2, 0x10, 0x0, 0x5bff + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_ATTACKER), 2, 16, 0, RGB(31, 31, 22) restorebg - delay 0x18 + delay 24 createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end @@ -32355,63 +35271,63 @@ StokedSparksurferSparkGeyser: @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 - delay 0x4 + delay 4 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffea, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 - delay 0x4 + delay 4 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffd4, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 - delay 0x4 + delay 4 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x0, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x40, 0x28, 0x1, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x5, 0x2c, 0x80, 0x28, 0x0, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x0, 0x28, 0x0, 0x8003 @ createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x8003 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0xffbe, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x8003 - delay 0x1a + delay 26 return gBattleAnimMove_ExtremeEvoboost:: loadspritegfx ANIM_TAG_LEER @leer - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x0, 0x10, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 0, 16, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_AllBattlersInvisible, 0xA - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 3, 0, 0, 0 @Remove fading on everyone + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 3, 0, 0, 0 @Remove fading on everyone waitforvisualfinish playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x18, 0xfff4 createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe8, 0xfff4 - delay 0xa + delay 10 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x28, 0xfff0 createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff8, 0xfff0 - delay 0xa + delay 10 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x8, 0xfffe createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffd8, 0xfffe - delay 0xa + delay 10 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x5 createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x5 - delay 0xa + delay 10 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x20, 0xfff0 createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xfff0, 0xfff0 - delay 0xa + delay 10 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x5, 0x0 createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffd5, 0x0 - delay 0xa + delay 10 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0x1c, 0x5 createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0x5 - delay 0xa + delay 10 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xf, 0xfff4 createsprite gLeerSpriteTemplate, ANIM_ATTACKER, 2, 0xffdf, 0xfff4 @@ -32427,25 +35343,25 @@ gBattleAnimMove_ExtremeEvoboost:: loadspritegfx ANIM_TAG_WATER_ORB @blue loadspritegfx ANIM_TAG_POISON_BUBBLE @purple loadspritegfx ANIM_TAG_LEAF @green - createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0x10, 0x10, 0x5bff + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 16, 16, RGB(31, 31, 22) waitforvisualfinish playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER createsprite gExtremeEvoboostRedChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gExtremeEvoboostPinkChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gExtremeEvoboostIceChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gExtremeEvoboostBlackChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gExtremeEvoboostBlueChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gExtremeEvoboostPurpleChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gExtremeEvoboostYellowChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gExtremeEvoboostGreenChargeUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 waitforvisualfinish visible ANIM_ATTACKER loopsewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x15, 0xd @@ -32456,62 +35372,62 @@ gBattleAnimMove_ExtremeEvoboost:: call ExtremeEvoboostColorCharge waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - delay 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ATTACKER), 0x0, 0x0, 0x10, 0x7fff - delay 0x18 + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 0, 0, 16, RGB_WHITE + delay 24 call ResetFromWhiteScreen end ExtremeEvoboostColorCircle: createsprite gExtremeEvoboostRedChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostPinkChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostIceChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostBlackChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostBlueChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostPurpleChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostYellowChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostGreenChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 return ExtremeEvoboostColorCharge: createsprite gExtremeEvoboostRedChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostRedStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0x37, 0xd - delay 0x2 + delay 2 createsprite gExtremeEvoboostPinkChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostPinkStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0xffc9, 0xffc9, 0xd - delay 0x2 + delay 2 createsprite gExtremeEvoboostIceChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostIceStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x37, 0xd - delay 0x2 + delay 2 createsprite gExtremeEvoboostBlackChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostBlackStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffc9, 0xd - delay 0x2 + delay 2 createsprite gExtremeEvoboostBlueChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostBlueStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0xffde, 0xd - delay 0x2 + delay 2 createsprite gExtremeEvoboostPurpleChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostPurpleStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0x37, 0x22, 0xd - delay 0x2 + delay 2 createsprite gExtremeEvoboostYellowChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostYellowStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0xffc9, 0xffde, 0xd - delay 0x2 + delay 2 createsprite gExtremeEvoboostGreenChargeCircleSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff0 - delay 0x2 + delay 2 createsprite gExtremeEvoboostGreenStockpileSpriteTemplate, ANIM_ATTACKER, 2, 0xffc9, 0x22, 0xd - delay 0x2 + delay 2 return @@ -32549,7 +35465,7 @@ PulverizingPancakeFinish: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 - delay 0x2 + delay 2 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 12, 4, -16, 34 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0, 16, 4, -10, 34 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 1, 14, 4, -18, 34 @@ -32562,13 +35478,13 @@ PulverizingPancakeFinish: waitbgfadein loadspritegfx ANIM_TAG_WHITE_SHADOW createvisualtask AnimTask_PulverizingPancakeWhiteShadow, 0x5, 0x33, 0x33 @first arg is duration, last arg is move speed - delay 0x10 + delay 16 call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, 0x4, 0x2, 0x0, 0xb, 0x0000 @ target darkens + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB_BLACK @ target darkens call PulverizingPancakeSlowBackground @0 call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground @@ -32576,22 +35492,22 @@ PulverizingPancakeFinish: call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground call PulverizingPancakeSlowBackground @-0x1000 - delay 0x1 + delay 1 waitbgfadein loadspritegfx ANIM_TAG_THIN_RING @ring unloadspritegfx ANIM_TAG_MUD_SAND @dig loadspritegfx ANIM_TAG_ELECTRIC_ORBS @yellow createsprite gBounceBallLandSpriteTemplate, ANIM_TARGET, 3 - delay 0x7 + delay 7 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 @big hit marker - delay 0x0 + delay 0 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 4, 44 createsprite gPulverizingPancakeYellowRingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 - delay 0x5 + delay 5 loadspritegfx ANIM_TAG_EXPLOSION @explosion call PulverizingPancakeExplosion - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x7fff @ everything goes white + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 16, RGB_WHITE @ everything goes white call PulverizingPancakeExplosion waitforvisualfinish call ResetFromWhiteScreen @@ -32602,30 +35518,30 @@ PulverizingPancakeDiggingRun: createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 1, 14, 4, -18, 18 createsprite gDirtPlumeSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 1, 12, 4, -16, 18 playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER - delay 0x5 + delay 5 return PulverizingPancakeSlowBackground: createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xfd56, 0x0, 0xffff @-0x2aa - delay 0x1 + delay 1 return PulverizingPancakeExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gPulverizingPancakeYellowRingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gPulverizingPancakeYellowRingSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x100, 0x0 createsprite gPulverizingPancakeExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 return @@ -32642,14 +35558,14 @@ gBattleAnimMove_GenesisSupernova:: jumpargeq 0x7 ANIM_TARGET GenesisSupernovaOnPlayer GenesisSupernovaOnOpponent: call GenesisSupernovaBuffEffectPlayer_1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xb, 0xd87c + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 11, (RGB(28, 3, 22) | RGB_ALPHA) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 112, 1 call GenesisSupernovaBuffEffectPlayer_2 call GenesisSupernovaBuffEffectPlayer_1 goto GenesisSupernovaFinish GenesisSupernovaOnPlayer: call GenesisSupernovaBuffOpponent_1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0xb, 0xd87c + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 11, (RGB(28, 3, 22) | RGB_ALPHA) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 112, 1 call GenesisSupernovaBuffOpponent_2 call GenesisSupernovaBuffOpponent_1 @@ -32658,7 +35574,7 @@ GenesisSupernovaFinish: call GenesisSupernovaReversalWave call GenesisSupernovaReversalWave call GenesisSupernovaReversalWave - delay 0x15 + delay 21 unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge monbg ANIM_ATTACKER @@ -32669,29 +35585,29 @@ GenesisSupernovaFinish: call GenesisSupernovaFlare call GenesisSupernovaFlare call GenesisSupernovaFlare - delay 0x4 + delay 4 unloadspritegfx ANIM_TAG_BLUE_ORB @reversal loadspritegfx ANIM_TAG_WISP_ORB @will-o-wisp loadspritegfx ANIM_TAG_METEOR @superpower loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles createsprite gGenesisSupernovaSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x0, 0xb, 0x0, 0xd87c + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 11, 0, (RGB(28, 3, 22) | RGB_ALPHA) playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendParticle, 0x2, ANIM_TAG_SPARKLE_2, 0x0, 0x0, 0xc, 0x7fff - delay 0x8 + createvisualtask AnimTask_BlendParticle, 2, ANIM_TAG_SPARKLE_2, 0, 0, 12, RGB_WHITE + delay 8 invisible ANIM_TARGET loadspritegfx ANIM_TAG_EXPLOSION @explosion unloadspritegfx ANIM_TAG_METEOR @superpower call GenesisSupernovaBubbleExplosion call GenesisSupernovaBubbleExplosion - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 0, 16, RGB_WHITE call GenesisSupernovaBubbleExplosion waitforvisualfinish - delay 0x10 - createvisualtask AnimTask_BlendParticle, 0x2, ANIM_TAG_SPARKLE_2, 0x0, 0xc, 0x0, 0x7fff + delay 16 + createvisualtask AnimTask_BlendParticle, 2, ANIM_TAG_SPARKLE_2, 0, 12, 0, RGB_WHITE clearmonbg ANIM_ATTACKER blendoff - delay 0x0 + delay 0 call ResetFromWhiteScreen waitforvisualfinish end @@ -32700,24 +35616,24 @@ GenesisSupernovaBubbleExplosion: createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x0 createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - delay 0x6 + delay 6 createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x0 createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - delay 0x6 + delay 6 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, ANIM_TARGET, 0x0, 0x20, 0x3c createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x0 createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - delay 0x6 + delay 6 createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x0 createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - delay 0x6 + delay 6 createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xffec, 0x0 createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER - delay 0x6 + delay 6 createsprite gGenesisSupernovaBubbleSpriteTemplate, ANIM_TARGET, 2, 0x10, 0xfff8, 0x0 createsprite gGenesisSupernovaExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe0, 0xffe8, ANIM_TARGET, 0x1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER @@ -32725,37 +35641,37 @@ GenesisSupernovaBubbleExplosion: GenesisSupernovaBuffEffectPlayer_1: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x24, 0x80, 0x24, 0x30, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x10, 0x80, 0x10, 0x35, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x45, 0x80, 0x45, 0x3a, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x60, 0x80, 0x60, 0x30, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x30, 0x80, 0x30, 0x3c, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x55, 0x80, 0x55, 0x33, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return GenesisSupernovaBuffEffectPlayer_2: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x29, 0x80, 0x29, 0x31, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x73, 0x80, 0x73, 0x32, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x4a, 0x80, 0x4a, 0x3c, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x64, 0x80, 0x64, 0x33, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x2c, 0x80, 0x2c, 0x3d, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaOrbRiseSpriteTemplate, ANIM_ATTACKER, 50, 0x6c, 0x80, 0x6c, 0x30, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return GenesisSupernovaReversalWave: @@ -32766,52 +35682,52 @@ GenesisSupernovaReversalWave: return GenesisSupernovaFlare: createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 return GenesisSupernovaBuffOpponent_1: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0x94, 0x40, 0x94, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0x80, 0x40, 0x80, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xb5, 0x40, 0xb5, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xd0, 0x40, 0xd0, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xa0, 0x40, 0xa0, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xc5, 0x40, 0xc5, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return GenesisSupernovaBuffOpponent_2: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0x99, 0x40, 0x99, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xe3, 0x40, 0xe3, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xba, 0x40, 0xba, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xd4, 0x40, 0xd4, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0x9c, 0x40, 0x9c, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gGenesisSupernovaSpinUpSpriteTemplate, ANIM_ATTACKER, 50, 0xdc, 0x40, 0xdc, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return @@ -32827,22 +35743,22 @@ gBattleAnimMove_SinisterArrowRaid:: createsprite gArrowRaidFlyUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish unloadspritegfx ANIM_TAG_ROUND_SHADOW - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x388C @ bg to purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 16, RGB(12, 4, 14) @ bg to purple waitforvisualfinish visible ANIM_ATTACKER playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gArrowRaidArrowUpSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 waitforvisualfinish invisible ANIM_ATTACKER loadspritegfx ANIM_TAG_BIRD @sky attack @@ -32853,48 +35769,48 @@ gBattleAnimMove_SinisterArrowRaid:: SinisterArrowRaidOnOpponent: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gArrowRaidFlyRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x88, 0x100, 0x38, 0x15 @left to right - delay 0x5 + delay 5 createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x8a, 0x100, 0x3a, 0x15 @left to right - delay 0x1 + delay 1 createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x8c, 0x100, 0x3c, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x86, 0x100, 0x36, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x84, 0x100, 0x34, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightUpSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x88, 0x100, 0x38, 0x15 waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER @[x0] [y0] [xf] [yf] createsprite gArrowRaidFlyLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x38, 0xfff0, 0x38, 0x15 @right to left - delay 0x5 + delay 5 createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x36, 0xfff0, 0x36, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x3a, 0xfff0, 0x3a, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x37, 0xfff0, 0x37, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x3c, 0xfff0, 0x3c, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidLeftUpSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x38, 0xfff0, 0x38, 0x15 waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gArrowRaidFlyRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x08, 0x100, 0x0f, 0x15 @left to right - delay 0x5 + delay 5 createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x0a, 0x100, 0x11, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x0c, 0x100, 0x13, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x06, 0x100, 0xd, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x04, 0x100, 0xb, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightDownSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x08, 0x100, 0xf, 0x15 waitforvisualfinish call SinisterArrowRaidFlyStrike createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 3, 75 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0x10, 0x40c0 @ defender to purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 4, 0, 16, RGB(0, 6, 16) @ defender to purple call SinisterArrowRaidStrikeOpponent call SinisterArrowRaidOpponentExplosion playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER @@ -32905,48 +35821,48 @@ SinisterArrowRaidOnOpponent: SinisterArrowRaidOnPlayer: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gArrowRaidFlyLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x08, 0xfff0, 0x0f, 0x15 @right to left - delay 0x5 + delay 5 createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x0a, 0xfff0, 0x11, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x0c, 0xfff0, 0x13, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x06, 0xfff0, 0xd, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x04, 0xfff0, 0xb, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidFaceUpLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x08, 0xfff0, 0xf, 0x15 waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gArrowRaidFlyRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x38, 0x100, 0x38, 0x15 @left to right - delay 0x5 + delay 5 createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x36, 0x100, 0x36, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x3a, 0x100, 0x3a, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x37, 0x100, 0x37, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x3c, 0x100, 0x3c, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidRightSpriteTemplate, ANIM_ATTACKER, 50, 0xfff0, 0x38, 0x100, 0x38, 0x15 waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_VITAL_THROW, SOUND_PAN_ATTACKER createsprite gArrowRaidFlyLeftSpriteTemplate, ANIM_ATTACKER, 50, 0x0120, 0x78, 0xfff0, 0x58, 0x15 @right to left - delay 0x5 + delay 5 createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x8a, 0xfff0, 0x3a, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x8c, 0xfff0, 0x3c, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x86, 0xfff0, 0x36, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x84, 0xfff0, 0x34, 0x15 - delay 0x1 + delay 1 createsprite gArrowRaidLeftDownSpriteTemplate, ANIM_ATTACKER, 50, 0x100, 0x88, 0xfff0, 0x38, 0x15 waitforvisualfinish call SinisterArrowRaidFlyStrike createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 3, 75 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0x10, 0x40c0 @ defender to purple + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 4, 0, 16, RGB(0, 6, 16) @ defender to purple call SinisterArrowRaidArrowsStrikePlayer call SinisterArrowRaidPlayerExplosion playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER @@ -32954,173 +35870,173 @@ SinisterArrowRaidOnPlayer: call SinisterArrowRaidFinalExplosion @ finish SinisterArrowRaidFinish: - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x10, 0x0, 0x40c0 @ return tgt to normal + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 4, 16, 0, RGB(0, 6, 16) @ return tgt to normal waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x00, 0x388C @ bg to nrml - delay 0x5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 0, RGB(12, 4, 14) @ bg to nrml + delay 5 createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end SinisterArrowRaidFlyStrike: visible ANIM_TARGET - delay 0xa + delay 10 playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER createsprite gArrowRaidFlyStrikeSpriteTemplate, ANIM_TARGET, 2, 0x14 waitforvisualfinish - delay 0x5 + delay 5 return SinisterArrowRaidStrikeOpponent: createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x95, 0xfff0, 0xb5, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x75, 0xfff0, 0x95, 0x40, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xa5, 0xfff0, 0xc5, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x6f, 0xfff0, 0x8f, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x7b, 0xfff0, 0x9b, 0x40, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xa2, 0xfff0, 0xc2, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x82, 0xfff0, 0xa2, 0x40, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x87, 0xfff0, 0xa7, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x72, 0xfff0, 0x92, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x8b, 0xfff0, 0xab, 0x40, 0x4 - delay 0x1 + delay 1 return SinisterArrowRaidOpponentExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x95, 0xfff0, 0xb5, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x75, 0xfff0, 0x95, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xa5, 0xfff0, 0xc5, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x6f, 0xfff0, 0x8f, 0x40, 0x4 createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x7b, 0xfff0, 0x9b, 0x40, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xa2, 0xfff0, 0xc2, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x82, 0xfff0, 0xa2, 0x40, 0x4 createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x87, 0xfff0, 0xa7, 0x40, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x72, 0xfff0, 0x92, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x85, 0xfff0, 0xa5, 0x40, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x8b, 0xfff0, 0xab, 0x40, 0x4 createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x1 + delay 1 return SinisterArrowRaidArrowsStrikePlayer: createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xfff0, 0x55, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffe5, 0xfff0, 0x35, 0x90, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x15, 0xfff0, 0x65, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffdf, 0xfff0, 0x2f, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffeb, 0xfff0, 0x3b, 0x90, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x12, 0xfff0, 0x62, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff2, 0xfff0, 0x42, 0x90, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff7, 0xfff0, 0x47, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffe2, 0xfff0, 0x32, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xfff0, 0x4b, 0x90, 0x4 - delay 0x1 + delay 1 return SinisterArrowRaidPlayerExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x5, 0xfff0, 0x55, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffe5, 0xfff0, 0x35, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x15, 0xfff0, 0x65, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffdf, 0xfff0, 0x2f, 0x90, 0x4 createsprite gArrowRaidExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffeb, 0xfff0, 0x3b, 0x90, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0x12, 0xfff0, 0x62, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff2, 0xfff0, 0x42, 0x90, 0x4 createsprite gArrowRaidExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff7, 0xfff0, 0x47, 0x90, 0x4 - delay 0x1 + delay 1 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xffe2, 0xfff0, 0x32, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfff5, 0xfff0, 0x45, 0x90, 0x4 - delay 0x1 + delay 1 createsprite gArrowRaidArrowOnslaughtSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xfff0, 0x4b, 0x90, 0x4 createsprite gArrowRaidExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x1 + delay 1 return SinisterArrowRaidFinalExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gArrowRaidExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 return @@ -33136,7 +36052,7 @@ gBattleAnimMove_MaliciousMoonsault:: setalpha 12, 8 playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 0x6, 0x1, 0x0 - delay 0x1 + delay 1 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0x0, 0x18, 0x0, 0x0, 0x0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 0xffec, 0xfff6, 0x18, 0x0, 0x0, 0x0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 0x0, 0xfff0, 0x18, 0x0, 0x0, 0x0 @@ -33146,7 +36062,7 @@ gBattleAnimMove_MaliciousMoonsault:: createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x18, 0x0, 0x0, 0x0 createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xa, 0x18, 0x0, 0x0, 0x0 waitforvisualfinish - delay 0x0 + delay 0 monbg ANIM_ATTACKER playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET call MaliciousMoonsaultFireSpin @@ -33157,18 +36073,18 @@ gBattleAnimMove_MaliciousMoonsault:: playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gMaliciousMoonsaultRedFlySpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x150 call MaliciousMoonsaultFireSpin - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x5, 0x0, 0xa, 0x0000 @ target darkens - delay 0x1a + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 5, 0, 10, RGB_BLACK @ target darkens + delay 26 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET createsprite gMaliciousMoonsaultRedBounceSpriteTemplate, ANIM_TARGET, 3 - delay 0x7 + delay 7 createsprite gMaliciousMoonsaultRedImpactSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -256, 21, 0, 4 call MaliciousMoonsaultExplosion - delay 0x6 + delay 6 call MaliciousMoonsaultExplosion - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x1, 0x0, 0x10, 0x001b @ fade all to red - delay 0x6 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 1, 0, 16, RGB(27, 0, 0) @ fade all to red + delay 6 call MaliciousMoonsaultExplosion createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 waitforvisualfinish @@ -33177,29 +36093,29 @@ gBattleAnimMove_MaliciousMoonsault:: end MaliciousMoonsaultFireSpin: createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x30, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x30, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x1 + delay 1 return MaliciousMoonsaultExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER @@ -33209,7 +36125,7 @@ MaliciousMoonsaultExplosion: createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe @@ -33217,7 +36133,7 @@ MaliciousMoonsaultExplosion: createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe @@ -33225,7 +36141,7 @@ MaliciousMoonsaultExplosion: createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe @@ -33233,7 +36149,7 @@ MaliciousMoonsaultExplosion: createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMaliciousMoonsaultExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 createsprite gMaliciousMoonsaultFireblastSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe @@ -33256,11 +36172,11 @@ gBattleAnimMove_OceanicOperetta:: loadspritegfx ANIM_TAG_WATER_ORB @blue playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call OceanicOperettaBuffEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call OceanicOperettaBuffEffect - delay 0x8 + delay 8 call OceanicOperettaBuffEffect waitforvisualfinish unloadspritegfx ANIM_TAG_FOCUS_ENERGY @@ -33269,164 +36185,164 @@ gBattleAnimMove_OceanicOperetta:: waitforvisualfinish createvisualtask AnimTask_RemoveSpotlight, 0x2 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x6, 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 6, RGB(0, 13, 23) loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_THIN_RING invisible ANIM_ATTACKER createsprite gOceanOperaBlueChargeSpriteTemplate, ANIM_ATTACKER, 2, 0x0 @charge - delay 0x2 + delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 80, 1 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 playsewithpan SE_M_GRASSWHISTLE, SOUND_PAN_ATTACKER createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gOceanOperaBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gWhirlpoolSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x1a + delay 26 visible ANIM_TARGET loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x5 createsprite gOceanOperaMovingOrbsSpriteTemplate, ANIM_ATTACKER, 50, 0x0, 0x0, 0x0, 0x0, 0x60, 0x0 @mist ball - delay 0x5c + delay 92 visible ANIM_ATTACKER - delay 0x0 + delay 0 loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 0x14, 0x1 createsprite gOceanOperaBlueOrbsSpriteTemplate, ANIM_ATTACKER, 50, 0x0, ANIM_TARGET, 0x0, 0x0, 0x0, 0x35 - delay 0x5 + delay 5 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 - delay 0x4 + delay 4 createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 - delay 0x4 + delay 4 createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 - delay 0x4 + delay 4 createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 - delay 0x4 + delay 4 createsprite gOceanOperaExpandingRingSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 - delay 0x10 + delay 16 loadspritegfx ANIM_TAG_EXPLOSION @explosion loadspritegfx ANIM_TAG_SPARKLE_2 @sparkle loadspritegfx ANIM_TAG_RAIN_DROPS @rain createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 8, 64 call OceanicOperettaExplosion - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_TARGET, 0x2, 0x0, 0xb, 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 2, F_PAL_TARGET, 2, 0, 11, RGB(0, 13, 23) createvisualtask AnimTask_CreateRaindrops, 0x2, 0x0, 0x3, 0x78 call OceanicOperettaExplosion call OceanicOperettaExplosion playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_CreateRaindrops, 0x2, 0x0, 0x3, 0x78 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_TARGET, 0x2, 0xb, 0x0, 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 2, F_PAL_TARGET, 2, 11, 0, RGB(0, 13, 23) waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x6, 0x0, 0x5da0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 6, 0, RGB(0, 13, 23) waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end OceanicOperettaBuffEffect: createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gOceanOperaBlueFlareSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return OceanicOperettaExplosion: createsprite gOceanOperaSparkleSpriteTemplate, ANIM_ATTACKER, 51, 0xfff1, 0x0, ANIM_TARGET, 0x0, 0x20, 0x3c playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0xfff0, 0x10, ANIM_TARGET, 0x1 createsprite gOceanOperaSparkleSpriteTemplate, ANIM_ATTACKER, 51, 0xc, 0xfffb, ANIM_TARGET, 0x0, 0x20, 0x3c - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gOceanOperaExplosionSpriteTemplate, ANIM_ATTACKER, 51, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 return @@ -33455,18 +36371,18 @@ SplinteredStormshardsFinishFade: SplinteredStormshardsByPlayer: loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 0x10, 0xc call SplinteredStormshardsPlayer_Rising1 - delay 0x2 + delay 2 loadspritegfx ANIM_TAG_ROUND_SHADOW @fly playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gSplinteredShardsFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 call SplinteredStormshardsPlayer_Rising1 call SplinteredStormshardsPlayer_Rising2 visible ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x60, 0x80, 0x60, 0x30, 0x30 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 31, 22) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 - delay 0x2 + delay 2 call SplinteredStormshardsPlayer_Rising2 call SplinteredStormshardsPlayer_Rising1 delay 16 @@ -33476,25 +36392,25 @@ SplinteredStormshardsByPlayer: loadspritegfx ANIM_TAG_EXPLOSION @explosion playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 @lunge forward - delay 0x2 + delay 2 invisible ANIM_ATTACKER createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 @superpower createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 96, 1 @shake target up and down createsprite gSplinteredShardsSplinterOpponentSteepSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x18, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gSplinteredShardsSplinterOpponentShallowSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0x1, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x4 + delay 4 call SplinteredStormshardsExplosionOpponent call SplinteredStormshardsExplosionOpponent SplinteredStormshardsEnd: - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 4, 0, 16, RGB_WHITE call SplinteredStormshardsBrownExplode waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x10, 0x0, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 4, 16, 0, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish @@ -33506,48 +36422,48 @@ SplinteredStormshardsExplosionOpponent: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterOpponentSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x20, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterOpponentShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x0, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterOpponentShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0xfff8, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterOpponentSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x20, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterOpponentShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x0, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 return SplinteredStormshardsByOpponent: loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0xc call SplinteredStormshardsOpponent_Rising1 - delay 0x2 + delay 2 loadspritegfx ANIM_TAG_ROUND_SHADOW @fly createsprite gSplinteredShardsFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 call SplinteredStormshardsOpponent_Rising1 call SplinteredStormshardsOpponent_Rising2 visible ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xd0, 0x40, 0xd0, 0x0, 0x30 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 31, 22) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 - delay 0x2 + delay 2 call SplinteredStormshardsOpponent_Rising2 call SplinteredStormshardsOpponent_Rising1 delay 16 @@ -33556,17 +36472,17 @@ SplinteredStormshardsByOpponent: loadspritegfx ANIM_TAG_EXPLOSION @explosion playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 @lunge forward - delay 0x2 + delay 2 invisible ANIM_ATTACKER createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 @superpower createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 96, 1 @shake target up and down createsprite gSplinteredShardsSplinterPlayerShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x18, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gSplinteredShardsSplinterPlayerSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x30, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 - delay 0x4 + delay 4 + delay 4 call SplinteredStormshardsExplosionOnPlayer call SplinteredStormshardsExplosionOnPlayer goto SplinteredStormshardsEnd @@ -33574,106 +36490,106 @@ SplinteredStormshardsExplosionOnPlayer: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterPlayerShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x20, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterPlayerSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x35, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterPlayerShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x1c, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterPlayerShallowSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x16, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 createsprite gSplinteredShardsSplinterPlayerSteepSpriteTemplate, ANIM_TARGET, 2, 0xffd0, 0x2d, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET - delay 0x2 + delay 2 return SplinteredStormshardsBrownExplode: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSplinteredShardsExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 return SplinteredStormshardsPlayer_Rising1: createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x24, 0x80, 0x24, 0x30, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x10, 0x80, 0x10, 0x35, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x45, 0x80, 0x45, 0x3a, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x60, 0x80, 0x60, 0x30, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x30, 0x80, 0x30, 0x3c, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x55, 0x80, 0x55, 0x33, 0x30 - delay 0x2 + delay 2 return SplinteredStormshardsPlayer_Rising2: createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x29, 0x80, 0x29, 0x31, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x73, 0x80, 0x73, 0x32, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x4a, 0x80, 0x4a, 0x3c, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x64, 0x80, 0x64, 0x33, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x2c, 0x80, 0x2c, 0x3d, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x6c, 0x80, 0x6c, 0x30, 0x30 - delay 0x2 + delay 2 return SplinteredStormshardsOpponent_Rising1: createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x94, 0x40, 0x94, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x80, 0x40, 0x80, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xb5, 0x40, 0xb5, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xd0, 0x40, 0xd0, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xa0, 0x40, 0xa0, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xc5, 0x40, 0xc5, 0x0, 0x30 - delay 0x2 + delay 2 return SplinteredStormshardsOpponent_Rising2: createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x99, 0x40, 0x99, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xe3, 0x40, 0xe3, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xba, 0x40, 0xba, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xd4, 0x40, 0xd4, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0x9c, 0x40, 0x9c, 0x0, 0x30 - delay 0x2 + delay 2 createsprite gSplinteredShardsRisingSpearSpriteTemplate, ANIM_ATTACKER, 50, 0xdc, 0x40, 0xdc, 0x0, 0x30 - delay 0x2 + delay 2 return @@ -33688,55 +36604,55 @@ gBattleAnimMove_LetsSnuggleForever:: createsprite gSnuggleForeverHeartSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x14 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x1, 0x1, 0x0 - delay 0x7 + delay 7 createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x3, 0x3, 0x80 - delay 0x8 + delay 8 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0x0, 0x80 - delay 0x7 + delay 7 createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1, 0x1, 0x0 - delay 0x8 + delay 8 playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER - delay 0x7 + delay 7 createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x0, 0x3, 0x0 - delay 0x7 + delay 7 fadetobg BG_SNUGGLE_FOREVER waitbgfadeout invisible ANIM_ATTACKER - delay 0x1 + delay 1 setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 - delay 0x10 + delay 16 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER waitforvisualfinish setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 - delay 0x10 + delay 16 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER waitforvisualfinish setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 - delay 0x10 + delay 16 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 50, 1 call LetsSnuggleForeverTears - delay 0x8 + delay 8 call LetsSnuggleForeverTears - delay 0x8 + delay 8 call LetsSnuggleForeverTears - delay 0x8 + delay 8 call LetsSnuggleForeverTears waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 16, RGB_BLACK waitforvisualfinish loadspritegfx ANIM_TAG_SPARKLE_4 @detect playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gSnuggleForeverEyesSpriteTemplate, ANIM_ATTACKER, 13, 0xa, 0xfff2 createsprite gSnuggleForeverEyesSpriteTemplate, ANIM_ATTACKER, 13, 0xfff6, 0xfff2 - delay 0x20 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0x0, 0x10, 0x579D + delay 32 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 16, RGB(29, 28, 21) createvisualtask AnimTask_GrowTarget, 0x5 - delay 0x5 + delay 5 loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_PAIN_SPLIT @painsplit loadspritegfx ANIM_TAG_DUCK @duck @@ -33754,17 +36670,17 @@ gBattleAnimMove_LetsSnuggleForever:: createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x0, 0xffee, 0x6, 0x6, 0x4 createvisualtask AnimTask_TranslateMonElliptical, 0x2, 0x1, 0x12, 0x6, 0x6, 0x4 call LetsSnuggleForeverStars_1 - delay 0x0 + delay 0 call LetsSnuggleForeverImpacts call LetsSnuggleForeverStars_2 - delay 0x0 + delay 0 call LetsSnuggleForeverImpacts call LetsSnuggleForeverStars_1 - delay 0x0 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x2, 0x0, 0x10, 0x7fff + delay 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 2, 0, 16, RGB_WHITE playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET call LetsSnuggleForeverStars_2 - delay 0x0 + delay 0 call LetsSnuggleForeverImpacts invisible ANIM_TARGET stopsound @@ -33775,17 +36691,17 @@ LetsSnuggleForeverTears: playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_TARGET createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x0 createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x1 - delay 0x8 + delay 8 createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x2 createsprite gTearDropSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0x3 return LetsSnuggleForeverImpacts: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -12, ANIM_TARGET, 0 - delay 0x8 + delay 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -12, 8, ANIM_TARGET, 0 - delay 0x8 + delay 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 12, 0, ANIM_TARGET, 0 - delay 0x8 + delay 8 return LetsSnuggleForeverStars_1: createsprite gSnuggleForeverStarSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0xfff8, 0xa0, 0xffe0 @@ -33831,20 +36747,18 @@ gBattleAnimMove_ClangorousSoulblaze:: playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish - unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST - unloadspritegfx ANIM_TAG_SPARKLE_2 @stars loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gClangoorousSoulblazeWhiteFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 - delay 0x2 + delay 2 createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xFFE0, 0x1, 0xffff createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -768, 10, 0, 42 createsprite gSlideMonToOffsetPartnerSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0xa, 0x0, 0x2a - delay 0x20 + delay 32 createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x20, 0x1, 0xffff - delay 0xC + delay 12 setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 4, RGB_BLACK loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge visible ANIM_ATTACKER monbg ANIM_ATTACKER @@ -33865,20 +36779,20 @@ gBattleAnimMove_ClangorousSoulblaze:: clearmonbg ANIM_ATTACKER invisible ANIM_ATTACKER invisible ANIM_ATK_PARTNER - delay 0x0 + delay 0 monbg ANIM_TARGET playsewithpan SE_M_GIGA_DRAIN, SOUND_PAN_ATTACKER createsprite gClangoorousSoulblazePulseSpriteTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0x1d, 0x0 createsprite gSlowFlyingMusicNotesSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x0 @music note - delay 0x5 + delay 5 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 2, 60 createvisualtask AnimTask_HorizontalShake, 5, ANIM_DEF_PARTNER, 2, 60 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 call ClangorousSoulblazePulse_2 - delay 0x5 + delay 5 call ClangorousSoulblazePulse_3 - delay 0x5 + delay 5 call ClangorousSoulblazePulse_4 loadspritegfx ANIM_TAG_EXPLOSION createvisualtask AnimTask_IsTargetPlayerSide, 0x2 @@ -33886,148 +36800,148 @@ gBattleAnimMove_ClangorousSoulblaze:: ClangorousSoulblazeOnPlayer: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0xfff0, ANIM_ATTACKER, 0x1 - delay 0x5 + delay 5 call ClangorousSoulblazePulse_5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_ATTACKER, 0x1 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x20, 0xffe0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x20, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x30, 0xffe0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x30, 0xfff0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_4 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x35, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_5 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x40, 0x10, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x40, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x45, 0xfff0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x50, 0x10, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_4 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x50, 0xffe0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_5 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x60, 0xfff0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x60, 0xffe0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 - delay 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x7fff + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 4, 0, 16, RGB_WHITE playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x65, 0xfff0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x65, 0xffe0, ANIM_ATTACKER, 0x1 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_4 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_5 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_2 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 0x10, 0x10, ANIM_TARGET, 0x1 goto FINISH_SOULBLAZE ClangorousSoulblazeOnOpponent: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x15, ANIM_ATTACKER, 0x1 - delay 0x5 + delay 5 call ClangorousSoulblazePulse_5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x0, ANIM_ATTACKER, 0x1 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x25, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x5, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x30, 0x25, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x30, 0x15, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_4 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x35, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_5 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x40, 0xa, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x40, 0x0, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x45, 0x10, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x50, 0x30, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_4 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x50, 0x25, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_5 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x60, 0x40, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x60, 0x45, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_2 - delay 0x5 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x7fff + delay 5 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 4, 0, 16, RGB_WHITE playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x65, 0x35, ANIM_ATTACKER, 0x1 call ClangorousSoulblazePulse_3 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x65, 0x40, ANIM_ATTACKER, 0x1 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_4 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_5 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_1 - delay 0x5 + delay 5 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 call ClangorousSoulblazePulse_2 - delay 0x5 + delay 5 createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 FINISH_SOULBLAZE: waitforvisualfinish clearmonbg ANIM_TARGET - delay 0x5 + delay 5 call ResetFromWhiteScreen blendoff createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 @@ -34037,32 +36951,32 @@ FINISH_SOULBLAZE: ClangorousSoulblazeEnergySwirl: createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x180, 0x32, 0x8, 0x32, ANIM_ATTACKER createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x2 + delay 2 createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x20, 0xf0, 0x28, 0xb, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1a0, 0x28, 0x4, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1f, 0x120, 0x2d, 0x6, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x1c, 0x1c0, 0x2d, 0xb, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gClangoorousSoulblazePurpleSwirlSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x21, 0x1d0, 0x32, 0xa, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 return ClangorousSoulblazeBuffEffect: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createsprite gClangorousSoulBlueBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gClangorousSoulPurpleBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c - delay 0x4 + delay 4 createsprite gClangorousSoulWhiteBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c return ClangorousSoulblazePulse_1: @@ -34105,33 +37019,33 @@ gBattleAnimMove_GuardianOfAlola:: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, -256, 15, 0, 4 call GuardianOfAlolaRocksPlayer - delay 0xa + delay 10 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x10 call GuardianOfAlolaRocksPlayer waitforvisualfinish - delay 0xa + delay 10 playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, -256, 15, 0, 4 call GuardianOfAlolaRocksPlayer - delay 0xa + delay 10 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x10 call GuardianOfAlolaRocksPlayer waitforvisualfinish - delay 0xa - delay 0x10 + delay 10 + delay 16 call GuardianOfAlolaRocksPlayer - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0xC, 0xC, 0x277f @;Yellow + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 12, 12, RGB(31, 27, 9) @;Yellow createvisualtask AnimTask_NightShadeClone, 0x5, 0x75 - delay 0x10 + delay 16 call GuardianOfAlolaRocksPlayer - delay 0x10 + delay 16 call GuardianOfAlolaRocksPlayer - delay 0x10 + delay 16 loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST call GuardianOfAlolaRocksPlayer - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x3, 0x0, 0xb, 0x0000 - delay 0x1 - createvisualtask AnimTask_BlendParticle, 0x2, ANIM_TAG_HORSESHOE_SIDE_FIST, 0x0, 0xC, 0xc, 0x277f + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 3, 0, 11, RGB_BLACK + delay 1 + createvisualtask AnimTask_BlendParticle, 2, ANIM_TAG_HORSESHOE_SIDE_FIST, 0, 12, 12, RGB(31, 27, 9) fadetobg BG_FISSURE waitbgfadeout call GuardianOfAlolaRocksPlayer @@ -34139,8 +37053,8 @@ gBattleAnimMove_GuardianOfAlola:: waitbgfadein playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET createsprite gGuardianOfAlolaFistSpriteTemplate, ANIM_TARGET, 3, 0x0, 0xffd0, 0x1f - delay 0x24 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x0, 0xb, 0x0, 0x0000 + delay 36 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 11, 0, RGB_BLACK playsewithpan SE_M_EXPLOSION, SOUND_PAN_TARGET createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 0x25 loopsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET 0x10 0x9 @@ -34157,7 +37071,7 @@ gBattleAnimMove_GuardianOfAlola:: call GuardianOfAlolaRockGeyser call GuardianOfAlolaRockGeyser call GuardianOfAlolaRocksTarget - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 2, (F_PAL_BG | F_PAL_BATTLERS_2), 3, 0, 16, RGB_WHITE call GuardianOfAlolaRockGeyser call GuardianOfAlolaRockGeyser call GuardianOfAlolaRockGeyser @@ -34180,13 +37094,13 @@ GuardianOfAlolaRocksTarget: return GuardianOfAlolaRockGeyser: createsprite gGuardianOfAlolaDirtGeyserSpriteTemplate, ANIM_TARGET, 2, 0, 0xfffc, 0x10 @ -4, -0x10 - delay 0x0 + delay 0 createsprite gGuardianOfAlolaDirtGeyserSpriteTemplate, ANIM_TARGET, 2, 0, 0x100D, 0x10 - delay 0x0 + delay 0 createsprite gGuardianOfAlolaDirtGeyserSpriteTemplate, ANIM_TARGET, 2, 0, 0x4, 0x10 - delay 0x0 + delay 0 createsprite gGuardianOfAlolaDirtGeyserSpriteTemplate, ANIM_TARGET, 2, 0, 0xfff0, 0x10 - delay 0x0 + delay 0 return @@ -34196,15 +37110,15 @@ gBattleAnimMove_SearingSunrazeSmash:: invisible ANIM_TARGET createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0xe, 0x001b + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 14, RGB(27, 0, 0) playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call SearingSunrazeSmashFlare - delay 0x8 + delay 8 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call SearingSunrazeSmashFlare - delay 0x8 + delay 8 call SearingSunrazeSmashFlare waitforvisualfinish unloadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy @@ -34215,28 +37129,28 @@ gBattleAnimMove_SearingSunrazeSmash:: loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER createsprite gSearingSunrazeSmashGrowWormholeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x10 + delay 16 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 53, -19, 1, 2 - delay 0x2 + delay 2 loadspritegfx ANIM_TAG_METEOR @superpower visible ANIM_TARGET createvisualtask AnimTask_RotateMonSpriteToSide, 2, 80, -1024, ANIM_TARGET, 0 @ spin up target call SearingSunrazeSmashRingsInward createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x30 @ target back to origin (slowly) call SearingSunrazeSmashRingsInward - delay 0xD + delay 13 invisible ANIM_TARGET createsprite gSearingSunrazeSmashBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x6 + delay 6 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 @lunge forward playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 invisible ANIM_ATTACKER createsprite gGrowingSuperpowerTemplate, ANIM_TARGET, 3, 0x0 @superpower createsprite gSearingSunrazeSmashBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER fadetobg BG_COSMIC waitbgfadeout @@ -34261,7 +37175,7 @@ gBattleAnimMove_SearingSunrazeSmash:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_TARGET createsprite gSearingSunrazeSmashRedFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ATTACKER), 0x3, 0x0, 0xF, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 3, 0, 15, RGB_BLACK waitforvisualfinish playsewithpan SE_ORB, SOUND_PAN_ATTACKER unloadspritegfx ANIM_TAG_ROUND_SHADOW @fly @@ -34285,42 +37199,40 @@ gBattleAnimMove_SearingSunrazeSmash:: loadspritegfx ANIM_TAG_CUT @cut createsprite gSunsteelStrikeSuperpowerTemplate, ANIM_TARGET, 2, 0x14 SearingSunrazeSmashImpact: - delay 0x8 - delay 0x1 + delay 8 + delay 1 unloadspritegfx ANIM_TAG_GOLD_RING @beam createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 4, 60 playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x20, 0xffe0, 0x0 - delay 0x2 + delay 2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x20, 0xffe0, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x1c, 0xffe0, 0x0 - delay 0x2 + delay 2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x1c, 0xffe0, 0x1 - delay 0x2 + delay 2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x2c, 0xffe0, 0x0 - delay 0x2 + delay 2 playsewithpan SE_M_CUT, SOUND_PAN_TARGET createsprite gSearingSunrazeSmashWhiteCutSpriteTemplate, ANIM_TARGET, 2, 0x2c, 0xffe0, 0x1 - delay 0x2 + delay 2 loadspritegfx ANIM_TAG_CROSS_IMPACT @x - delay 0x0 + delay 0 unloadspritegfx ANIM_TAG_METEOR @superpower - unloadspritegfx ANIM_TAG_DRAGON_ASCENT @dragon ascent 1 - unloadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @dragon ascent 2 createsprite gSearingSunrazeSmashCrossImpactSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x24 playsewithpan SE_M_LEER, SOUND_PAN_TARGET visible ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ATTACKER), 0x3, 0xF, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ATTACKER), 3, 15, 0, RGB_BLACK visible ANIM_ATTACKER playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x10, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_BLACK createsprite gSearingSunrazeSmashShockwaveSpriteTemplate, ANIM_TARGET, 2 @ charge out and in - delay 0x1c + delay 28 invisible ANIM_TARGET unloadspritegfx ANIM_TAG_CUT @cut unloadspritegfx ANIM_TAG_CROSS_IMPACT @x @@ -34328,35 +37240,35 @@ SearingSunrazeSmashImpact: call SearingSunrazeSmashInferno call SearingSunrazeSmashInferno call SearingSunrazeSmashInferno - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x4, 0x0, 0x10, 0x001b @full red + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 4, 0, 16, RGB(27, 0, 0) @full red call SearingSunrazeSmashInferno call SearingSunrazeSmashInferno call SearingSunrazeSmashInferno waitforvisualfinish - delay 0x10 + delay 16 call ResetFromRedScreen end SearingSunrazeSmashFlare: createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return SearingSunrazeSmashRingsInward: createsprite gSearingSunrazeSmashBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gSearingSunrazeSmashWhiteRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gSearingSunrazeSmashBlueRingInwardsSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 return SearingSunrazeSmashInferno: playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER @@ -34365,56 +37277,56 @@ SearingSunrazeSmashInferno: createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x3 + delay 3 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x3 + delay 3 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xa, 0x0, 0xfffe createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0xfffe, 0x0 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x2, 0x0 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0xfffe, 0x2 createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xf, 0x2, 0x2 - delay 0x3 + delay 3 return SearingSunrazeSmashCharge: createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x30, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2f, 0x490, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x510, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x2c, 0x500, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x30, 0x4e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x4d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x1 + delay 1 createsprite gFireSpinSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x31, 0x540, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x1 + delay 1 return ResetFromRedScreen: createvisualtask AnimTask_AllBattlersInvisible, 0xA waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x1B @Everything from red + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 0, RGB(27, 0, 0) @Everything from red restorebg waitbgfadeout setarg 0x7 0xffff createvisualtask AnimTask_AllBattlersVisible, 0xA waitbgfadein - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x0, 0x33ED + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 0, RGB(13, 31, 12) waitforvisualfinish return @@ -34428,15 +37340,15 @@ gBattleAnimMove_MenacingMoonrazeMaelstrom:: invisible ANIM_TARGET createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0xe, 0x40c0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 14, RGB(0, 6, 16) playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call MenacingMoonrazeMaelstromFlare - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 12, RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call MenacingMoonrazeMaelstromFlare playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER - delay 0x8 + delay 8 call MenacingMoonrazeMaelstromFlare waitforvisualfinish unloadspritegfx ANIM_TAG_SPARKLE_2 @sparkles @@ -34444,28 +37356,28 @@ gBattleAnimMove_MenacingMoonrazeMaelstrom:: loadspritegfx ANIM_TAG_AIR_WAVE_2 @white/grey playsewithpan SE_M_NIGHTMARE, SOUND_PAN_ATTACKER createsprite gMoonrazeMaelstromWormholeSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x10 + delay 16 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 53, -19, 1, 2 @ target down and left (instantaneously (last arg)) - delay 0x2 + delay 2 loadspritegfx ANIM_TAG_METEOR @superpower visible ANIM_TARGET createvisualtask AnimTask_RotateMonSpriteToSide, 2, 80, -1024, ANIM_TARGET, 0 @ spin up target call MenacingMoonrazeMaelstromRingsInward createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x30 @ target back to origin (slowly) call MenacingMoonrazeMaelstromRingsInward - delay 0xD + delay 13 invisible ANIM_TARGET createsprite gMoonrazeMaelstromBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gMoonrazeMaelstromWhiteRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x6 + delay 6 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x4 @lunge forward playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - delay 0x2 + delay 2 invisible ANIM_ATTACKER createsprite gMoonrazeMaelstromSuperpowerSpriteTemplate, ANIM_TARGET, 3, 0x0 @superpower createsprite gMoonrazeMaelstromBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER fadetobg BG_COSMIC waitbgfadeout @@ -34481,7 +37393,7 @@ MenacingMoonrazeMaelstromFinish: invisible ANIM_TARGET waitbgfadein visible ANIM_ATTACKER - delay 0x2 + delay 2 visible ANIM_TARGET waitforvisualfinish loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble @@ -34503,7 +37415,7 @@ MenacingMoonrazeMaelstromFinish: call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 60, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_TARGET, 0x4, 0x0, 0xc, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 2, F_PAL_TARGET, 4, 0, 12, RGB_BLACK call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam call MenacingMoonrazeMaelstromBeam @@ -34538,7 +37450,7 @@ MenacingMoonrazeMaelstromFinish: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 76, 1 call MenacingMoonrazeMaelstromExplosion call MenacingMoonrazeMaelstromExplosion - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x0, 0x10, 0x7fff + createvisualtask AnimTask_BlendBattleAnimPal, 2, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 16, RGB_WHITE call MenacingMoonrazeMaelstromExplosion waitforvisualfinish call ResetFromWhiteScreen @@ -34546,67 +37458,67 @@ MenacingMoonrazeMaelstromFinish: MenacingMoonrazeMaelstromExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gMoonrazeMaelstromExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 return MenacingMoonrazeMaelstromFlare: createsprite gMoonrazeMaelstromBlackSparklesSpriteTemplate, ANIM_ATTACKER, 2, 0xfff1, 0x0, 0x0, 0x0, 0x20, 0x3c createsprite gMoonrazeMaelstromBlueBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gMoonrazeMaelstromBlueBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gMoonrazeMaelstromBlackSparklesSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c createsprite gMoonrazeMaelstromBlackBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gMoonrazeMaelstromBlackBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gMoonrazeMaelstromBlackBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return MenacingMoonrazeMaelstromRingsInward: createsprite gMoonrazeMaelstromBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gMoonrazeMaelstromWhiteRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 createsprite gMoonrazeMaelstromBlueRingSpriteTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, ANIM_TARGET, 0x0 - delay 0x8 + delay 8 return MenacingMoonrazeMaelstromChargeUp: createsprite gMoonrazeMaelstromPurpleBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x210, 0x1e, 0xd, 0x32, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x20, 0x1e0, 0x14, 0x10, 0xffd2, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gMoonrazeMaelstromPurpleBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x200, 0x19, 0x10, 0x2e, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x1d0, 0x1e, 0xf, 0xffce, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gMoonrazeMaelstromPurpleBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x21, 0x240, 0x14, 0x8, 0x2a, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gMoonrazeMaelstromBlackOrbsSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1f, 0x190, 0x19, 0xb, 0xffd6, ANIM_ATTACKER - delay 0x2 + delay 2 createsprite gMoonrazeMaelstromPurpleBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return MenacingMoonrazeMaelstromBeam: createsprite gMoonrazeMaelstromBeamSpriteTemplate, ANIM_TARGET, 2 createsprite gMoonrazeMaelstromBeamSpriteTemplate, ANIM_TARGET, 2 - delay 0x1 + delay 1 return @@ -34620,20 +37532,20 @@ gBattleAnimMove_LightThatBurnsTheSky:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB(31, 31, 22) createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect - delay 0x8 + delay 8 call EndureEffect - delay 0x8 + delay 8 unloadspritegfx ANIM_TAG_FOCUS_ENERGY monbg ANIM_ATTACKER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ADJACENT), 0x2, 0x0, 0xF, 0x0000 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ADJACENT), 2, 0, 15, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 60, 2, 12 @ charge particles to attacker - delay 0x1e + delay 30 loopsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER, 0xe, 0xa createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 3, 0x0 call LightThatBurnsTheSkyGreenSparks @@ -34645,8 +37557,8 @@ gBattleAnimMove_LightThatBurnsTheSky:: call LightThatBurnsTheSkyGreenSparks call LightThatBurnsTheSkyGreenSparks call LightThatBurnsTheSkyGreenSparks - delay 0xe - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x2, 0x0, 0x4, 0x0000 + delay 14 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 4, RGB_BLACK clearmonbg ANIM_ATTACKER blendoff playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -34654,17 +37566,17 @@ gBattleAnimMove_LightThatBurnsTheSky:: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffe0, 0xfff0, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 - delay 0x1 + delay 1 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffd0, 0xffe4, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 - delay 0x1 + delay 1 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0x20, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0x60, 0x8, 0x1, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0xa0, 0x8, 0x0, 0x3 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 2, 0xffc0, 0xffd8, 0x25, 0x2c, 0xe0, 0x8, 0x2, 0x3 - delay 0x6 + delay 6 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 3, 60 unloadspritegfx ANIM_TAG_LEAF @green unloadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge @@ -34673,19 +37585,19 @@ gBattleAnimMove_LightThatBurnsTheSky:: loadspritegfx ANIM_TAG_STRAIGHT_BEAM panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 monbg ANIM_TARGET - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x6, 0x0, 0x10, 0x43FF @;Light yellow + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 6, 0, 16, RGB(31, 31, 16) @;Light yellow call PhotonGeyserBeam call LightThatBurnsTheSkyGeyser call LightThatBurnsTheSkyBlast_1 call LightThatBurnsTheSkyGeyser call LightThatBurnsTheSkyBlast_2 call LightThatBurnsTheSkyGeyser - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x4, 0x0, 0x10, 0x43FF + createvisualtask AnimTask_BlendBattleAnimPal, 2, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 4, 0, 16, RGB(31, 31, 16) call LightThatBurnsTheSkyBlast_3 clearmonbg ANIM_TARGET waitforvisualfinish - delay 0x10 - createvisualtask AnimTask_BlendBattleAnimPal, 0x2, (F_PAL_BG | F_PAL_BATTLERS_2), 0x0, 0x10, 0x0, 0x43FF + delay 16 + createvisualtask AnimTask_BlendBattleAnimPal, 2, (F_PAL_BG | F_PAL_BATTLERS_2), 0, 16, 0, RGB(31, 31, 16) restorebg waitbgfadeout end @@ -34722,38 +37634,38 @@ LightThatBurnsTheSkyBlast_3: LightThatBurnsTheSkyGeyser: createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0x0005, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xfff1, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xfffb, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0012, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0x0005, 0x1, 0x0 playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xfff5, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffe1, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffeb, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0x0002, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xfff5, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0003, 0xffe5, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfff5, 0xffd1, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0008, 0xffdb, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0xfffa, 0xfff2, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 createsprite gLightThatBurnsTheSkyExplosionSpriteTemplate, ANIM_TARGET, 4, 0x0000, 0xffe5, ANIM_TARGET, 0x0 - delay 0x0 + delay 0 return LightThatBurnsTheSkyGreenSparks: createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x30, 0x2c, 0x0, 0x28, 0x0, 0x3 @@ -34764,7 +37676,7 @@ LightThatBurnsTheSkyGreenSparks: createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x15, 0x2c, 0x40, 0x28, 0x1, 0x3 createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x15, 0x2c, 0x80, 0x28, 0x0, 0x3 createsprite gLightThatBurnsTheSkyGreenSparkSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, 0x15, 0x2c, 0x0, 0x28, 0x2, 0x3 - delay 0x10 + delay 16 return @@ -34786,7 +37698,7 @@ gBattleAnimMove_SoulStealing7StarStrike:: createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 66, 0x14, 0xa, 0x18, 0x0, 0x0, 0x0 createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x10, 0x18, 0x0, 0x0, 0x0 createsprite gSoulStealBlastburnSpriteTemplate, ANIM_ATTACKER, 2, 0xffec, 0xa, 0x18, 0x0, 0x0, 0x0 - delay 0x5 + delay 5 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gSoulStealBlackFlySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0xd, 0x150 waitforvisualfinish @@ -34797,58 +37709,58 @@ gBattleAnimMove_SoulStealing7StarStrike:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call SoulStealingSevenStarStrikeBuffEffect - delay 0x8 + delay 8 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_BLACK createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call SoulStealingSevenStarStrikeBuffEffect - delay 0x8 + delay 8 call SoulStealingSevenStarStrikeBuffEffect - delay 0x4 + delay 4 visible ANIM_TARGET waitforvisualfinish unloadspritegfx ANIM_TAG_FIRE_PLUME loadspritegfx ANIM_TAG_PAIN_SPLIT @pain split createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 4, 37, 1 createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x14, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x0, ANIM_TARGET, 0x2, 0x0, 0x0, 0x30 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x10, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x0, ANIM_TARGET, 0x12, 0x0, 0x0, 0x2c playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET - delay 0x4 + delay 4 createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x08, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0xffeb, 0xfff8, 0x2, 0x0, 0x0, 0x28 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x12, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0xfffb, 0xfff4, 0x2, 0x0, 0x0, 0x24 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x15, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x5, 0xfff8, 0x2, 0x0, 0x0, 0x20 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x0c, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0xfff0, 0x1, 0x2, 0x0, 0x0, 0x1c playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x13, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x1, 0x2, 0x0, 0x0, 0x18 playsewithpan SE_M_JUMP_KICK, SOUND_PAN_TARGET createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x0e, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0xfff0, 0x10, 0x2, 0x0, 0x0, 0x14 createsprite gSoulStealBlueFistSpriteTemplate, ANIM_TARGET, 2, 0xffc0, 0x12, 0x0, 0x0, 0xa, 0x1, 0x0, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealBlueStarSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x2, 0x0, 0x0, 0x10 - delay 0x4 + delay 4 playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER createsprite gSoulStealBlackFlySpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0xd, 0x150 - delay 0x20 + delay 32 unloadspritegfx ANIM_TAG_PAIN_SPLIT unloadspritegfx ANIM_TAG_ROUND_SHADOW unloadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -34857,9 +37769,9 @@ gBattleAnimMove_SoulStealing7StarStrike:: playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER setarg 0x7 0x0 @;Clear arg 7 so task works properly in Link battles createvisualtask AnimTask_SnatchOpposingMonMove, 0x2 - delay 0x1c - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x0, 0x0, 0x10, 0x0000 - delay 0x1 + delay 28 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 16, RGB_BLACK + delay 1 createsprite gSoulStealZStarSpriteTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x1, 0x24 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 createsprite gWillOWispFireSpriteTemplate, ANIM_TARGET, 2, 0x0 @@ -34873,72 +37785,71 @@ gBattleAnimMove_SoulStealing7StarStrike:: call SoulStealingSevenStarStrikeBlueParalysis waitforvisualfinish visible ANIM_ATTACKER - unloadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_SPARKLE_4 @ detect loadspritegfx ANIM_TAG_EXPLOSION @ explosion playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gTargetTwinkleSpriteTemplate, ANIM_TARGET, 13, 0x0, 0x0, ANIM_TARGET @detect star - delay 0xa + delay 10 createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 8, 32 call SoulStealingSevenStarStrikeExplosion call SoulStealingSevenStarStrikeExplosion - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 0x2, 0x0, 0x10, 0x0 @everything to black + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_ALL_BUT_DEF), 2, 0, 16, RGB_BLACK @everything to black call SoulStealingSevenStarStrikeExplosion waitforvisualfinish blendoff restorebg - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x2, 0x10, 0x0, 0x0 @everything from black + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 16, 0, RGB_BLACK @everything from black waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BATTLERS_2, 0x2, 0x0, 0x0, 0x0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 0, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_AllBattlersVisible, 0xA waitforvisualfinish end SoulStealingSevenStarStrikeBuffEffect: createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x1a, 0x2 - delay 0x4 + delay 4 createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xe, 0x1c, 0x1 - delay 0x4 + delay 4 createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfffb, 0xa, 0x2 - delay 0x4 + delay 4 createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1c, 0x1a, 0x3 - delay 0x4 + delay 4 createsprite gSoulStealIceBuffSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return SoulStealingSevenStarStrikeBlueParalysis: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0x5, 0x0, 0x5, 0x0 - delay 0x2 + delay 2 createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xfffb, 0xa, 0x5, 0x1 - delay 0x2 + delay 2 createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xf, 0x14, 0x5, 0x2 - delay 0x2 + delay 2 createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xfff1, 0xfff6, 0x5, 0x0 - delay 0x2 + delay 2 createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0x19, 0x0, 0x5, 0x1 - delay 0x2 + delay 2 createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xfff8, 0x8, 0x5, 0x2 - delay 0x2 + delay 2 createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0x2, 0xfff8, 0x5, 0x0 - delay 0x2 + delay 2 createsprite gSoulStealBlueParalyzeSpriteTemplate, ANIM_TARGET, 2, 0xffec, 0xf, 0x5, 0x1 return SoulStealingSevenStarStrikeExplosion: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0x0, 0x0, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0x18, 0xffe8, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0xfff0, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0xffe8, 0xfff4, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER createsprite gSoulStealExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, ANIM_TARGET, 0x1 - delay 0x6 + delay 6 return @@@@@@@@@@ MAX MOVES @@@@@@@@@@ @@ -35114,7 +38025,7 @@ gBattleAnimMove_GMaxGoldRush:: @@@ DYNAMAX AND MAX RAIDS gBattleAnimGeneral_DynamaxGrowth:: @ PORTED FROM CFRU - createvisualtask SoundTask_PlayCryWithEcho, 2, ANIM_ATTACKER, 2 + createvisualtask SoundTask_PlayDynamaxCry, 0 delay 8 createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x0 waitforvisualfinish diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2b9f5e36e447..6a3e29d17fc9 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -14,26 +14,15 @@ #include "constants/game_stat.h" #include "constants/trainers.h" #include "constants/species.h" +#include "constants/generational_changes.h" .include "asm/macros.inc" .include "asm/macros/battle_script.inc" .include "constants/constants.inc" .section script_data, "aw", %progbits -BattleScript_DamageToQuarterTargetHP:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - typecalc - clearmoveresultflags MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE - damagetoquartertargethp - goto BattleScript_HitFromAtkAnimation - BattleScript_EffectFickleBeam:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE ficklebeamdamagecalculation goto BattleScript_HitFromCritCalc @@ -75,17 +64,13 @@ BattleScript_LowerAtkSpAtk:: jumpifstat BS_EFFECT_BATTLER, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_LowerAtkSpAtkDoAnim jumpifstat BS_EFFECT_BATTLER, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_LowerAtkSpAtkEnd BattleScript_LowerAtkSpAtkDoAnim:: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_EFFECT_BATTLER, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_LowerAtkSpAtkTrySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerAtkSpAtkTrySpAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_LowerAtkSpAtkTrySpAtk, BIT_SPATK printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_LowerAtkSpAtkTrySpAtk:: setstatchanger STAT_SPATK, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_LowerAtkSpAtkEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerAtkSpAtkEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_LowerAtkSpAtkEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_LowerAtkSpAtkEnd: @@ -94,35 +79,24 @@ BattleScript_LowerAtkSpAtkEnd: BattleScript_EffectSpicyExtract:: attackcanceler jumpifsubstituteblocks BattleScript_ButItFailed - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE BattleScript_SpicyExtract_CheckShouldSkipAttackAnim + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_SpicyExtract_CheckShouldSkipAttackAnim jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_SpicyExtract_CheckShouldSkipAttackAnim goto BattleScript_ButItFailed BattleScript_SpicyExtract_CheckShouldSkipAttackAnim: jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_SpicyExtract_RaiseAtk - attackstring - ppreduce - bicword gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT goto BattleScript_SpicyExtract_SkipAttackAnim BattleScript_SpicyExtract_RaiseAtk: - attackstring - ppreduce attackanimation waitanimation BattleScript_SpicyExtract_SkipAttackAnim: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_BY_TWO setstatchanger STAT_ATK, 2, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectSpicyExtractDefenseDown - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectSpicyExtractDefenseDown + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectSpicyExtractDefenseDown printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectSpicyExtractDefenseDown: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO setstatchanger STAT_DEF, 2, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectSpicyExtract_End - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_EffectSpicyExtract_End + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectSpicyExtract_End printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectSpicyExtract_End: @@ -130,9 +104,7 @@ BattleScript_EffectSpicyExtract_End: BattleScript_EffectTidyUp:: attackcanceler - attackstring pause B_WAIT_TIME_MED - ppreduce waitstate saveattacker savetarget @@ -151,31 +123,27 @@ BattleScript_EffectTidyUpDoMoveAnimation:: restoretarget goto BattleScript_EffectDragonDanceFromStatUp -BattleScript_EffectUpperHand:: - attackcanceler - tryupperhand BattleScript_FailedFromAtkString - goto BattleScript_HitFromAccCheck - BattleScript_EffectShedTail:: attackcanceler - attackstring - ppreduce waitstate - jumpifstatus2 BS_ATTACKER, STATUS2_SUBSTITUTE, BattleScript_AlreadyHasSubstitute + jumpifvolatile BS_ATTACKER, VOLATILE_SUBSTITUTE, BattleScript_AlreadyHasSubstitute jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_ButItFailed setsubstitute jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SUBSTITUTE_FAILED, BattleScript_SubstituteString - orword gHitMarker, HITMARKER_PASSIVE_DAMAGE attackanimation waitanimation - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_SHEDITSTAIL waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_ATTACKER_VISIBLE moveendfrom MOVEEND_TARGET_VISIBLE - goto BattleScript_MoveSwitchOpenPartyScreen + call BattleScript_MoveSwitchOpenPartyScreenReturnWithNoAnim + switchinanim BS_ATTACKER, FALSE, TRUE + waitstate + switchineffects BS_ATTACKER + end BattleScript_EffectPsychicNoise:: printstring STRINGID_PKMNPREVENTEDFROMHEALING @@ -184,68 +152,62 @@ BattleScript_EffectPsychicNoise:: BattleScript_EffectFilletAway:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_FilletAwayTryAttack jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_FilletAwayTryAttack jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ButItFailed BattleScript_FilletAwayTryAttack:: halvehp BattleScript_ButItFailed - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK | BIT_SPEED, STAT_CHANGE_BY_TWO setstatchanger STAT_ATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayTrySpAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayTrySpAtk, BIT_SPATK | BIT_SPEED printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_FilletAwayTrySpAtk:: setstatchanger STAT_SPATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayTrySpeed, BIT_SPEED printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_FilletAwayTrySpeed:: setstatchanger STAT_SPEED, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_FilletAwayEnd:: clearmoveresultflags MOVE_RESULT_NO_EFFECT - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE goto BattleScript_MoveEnd BattleScript_EffectDoodle:: attackcanceler - attackstring - ppreduce trycopyability BS_ATTACKER, BattleScript_ButItFailed + saveattacker attackanimation waitanimation setbyte gBattleCommunication, 0 goto BattleScript_EffectDoodle_AfterCopy BattleScript_EffectDoodle_CopyAbility: - trycopyability BS_ATTACKER, BattleScript_MoveEnd + trycopyability BS_ATTACKER, BattleScript_EffectDoodleMoveEnd BattleScript_EffectDoodle_AfterCopy: -.if B_ABILITY_POP_UP == TRUE copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUpOverwriteThenNormal -.endif recordability BS_ATTACKER printstring STRINGID_PKMNCOPIEDFOE waitmessage B_WAIT_TIME_LONG switchinabilities BS_ATTACKER - jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_EffectDoodleMoveEnd addbyte gBattleCommunication, 1 - jumpifnoally BS_ATTACKER, BattleScript_MoveEnd + jumpifnoally BS_ATTACKER, BattleScript_EffectDoodleMoveEnd setallytonextattacker BattleScript_EffectDoodle_CopyAbility +BattleScript_EffectDoodleMoveEnd: + restoreattacker goto BattleScript_MoveEnd BattleScript_EffectGlaiveRush:: call BattleScript_EffectHit_Ret jumpifmoveresultflags MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TryFaintMon - setglaiverush + setvolatile BS_ATTACKER, VOLATILE_GLAIVE_RUSH, 2 goto BattleScript_TryFaintMon BattleScript_SyrupBombActivates:: @@ -257,7 +219,7 @@ BattleScript_SyrupBombEndTurn:: flushtextbox playanimation BS_ATTACKER, B_ANIM_SYRUP_BOMB_SPEED_DROP setstatchanger STAT_SPEED, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_SyrupBombTurnDmgEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_CHECK_PREVENTION | STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_SyrupBombTurnDmgEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_SyrupBombTurnDmgEnd: @@ -267,7 +229,6 @@ BattleScript_EffectChillyReception:: printstring STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE waitmessage B_WAIT_TIME_LONG attackcanceler - ppreduce jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_EffectChillyReceptionBlockedByPrimalSun jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_EffectChillyReceptionBlockedByPrimalRain jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_EffectChillyReceptionBlockedByStrongWinds @@ -280,7 +241,6 @@ BattleScript_EffectChillyReception:: call BattleScript_MoveWeatherChangeRet goto BattleScript_MoveSwitch BattleScript_EffectChillyReceptionPlayAnimation: - attackstring attackanimation waitanimation return @@ -297,8 +257,8 @@ BattleScript_EffectChillyReceptionBlockedByStrongWinds: call BattleScript_MysteriousAirCurrentBlowsOnRet goto BattleScript_MoveSwitch BattleScript_EffectChillyReceptionTrySwitchWeatherFailed: - jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_FailedFromAtkString - jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_FailedFromAtkString + jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_ButItFailed call BattleScript_EffectChillyReceptionPlayAnimation return @@ -326,11 +286,19 @@ BattleScript_MoveSwitch: printstring STRINGID_PKMNWENTBACK waitmessage B_WAIT_TIME_SHORT BattleScript_MoveSwitchOpenPartyScreen:: + call BattleScript_MoveSwitchOpenPartyScreenReturnWithNoAnim + switchinanim BS_ATTACKER, FALSE, FALSE + waitstate + switchineffects BS_ATTACKER +BattleScript_MoveSwitchEnd: + end + +BattleScript_MoveSwitchOpenPartyScreenReturnWithNoAnim: openpartyscreen BS_ATTACKER, BattleScript_MoveSwitchEnd - switchoutabilities BS_ATTACKER waitstate - switchhandleorder BS_ATTACKER, 2 returntoball BS_ATTACKER, FALSE + switchoutabilities BS_ATTACKER + switchhandleorder BS_ATTACKER, 2 getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER @@ -338,18 +306,12 @@ BattleScript_MoveSwitchOpenPartyScreen:: printstring STRINGID_EMPTYSTRING3 waitmessage 1 printstring STRINGID_SWITCHINMON - switchinanim BS_ATTACKER, FALSE, TRUE - waitstate - switchineffects BS_ATTACKER -BattleScript_MoveSwitchEnd: - end + return BattleScript_EffectPledge:: attackcanceler setpledge BattleScript_HitFromAccCheck - attackstring pause B_WAIT_TIME_MED - ppreduce printstring STRINGID_WAITINGFORPARTNERSMOVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -420,23 +382,17 @@ BattleScript_MoveEffectSaltCure:: BattleScript_SaltCureExtraDamage:: playanimation BS_ATTACKER, B_ANIM_SALT_CURE_DAMAGE, NULL waitanimation - call BattleScript_HurtTarget_NoString + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_TARGETISHURTBYSALTCURE waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER + tryactivateitem BS_ATTACKER, ACTIVATION_ON_HP_THRESHOLD end2 -BattleScript_HurtTarget_NoString: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - return - BattleScript_EffectCorrosiveGas:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifsubstituteblocks BattleScript_CorrosiveGasFail jumpifcantloseitem BS_TARGET, BattleScript_CorrosiveGasFail attackanimation @@ -457,8 +413,6 @@ BattleScript_CorrosiveGasFail: BattleScript_EffectTakeHeart:: attackcanceler - attackstring - ppreduce curestatuswithmove BattleScript_CalmMindTryToRaiseStats attackanimation waitanimation @@ -471,8 +425,6 @@ BattleScript_EffectTakeHeart:: BattleScript_EffectRevivalBlessing:: attackcanceler - attackstring - ppreduce tryrevivalblessing BattleScript_ButItFailed attackanimation waitanimation @@ -505,19 +457,13 @@ BattleScript_SpikesActivates:: BattleScript_EffectAttackUpUserAlly:: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_EffectAttackUpUserAlly_Works jumpifstat BS_ATTACKER_PARTNER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_ButItFailed BattleScript_EffectAttackUpUserAlly_Works: attackanimation waitanimation setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_TryAlly - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAllyUser_PrintString - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 -BattleScript_EffectAttackUpUserAllyUser_PrintString: + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_TryAlly printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectAttackUpUserAlly_TryAlly: @@ -527,15 +473,13 @@ BattleScript_EffectAttackUpUserAlly_End: BattleScript_EffectAttackUpUserAlly_TryAlly_: jumpifblockedbysoundproof BS_ATTACKER_PARTNER, BattleScript_EffectAttackUpUserAlly_TryAllyBlocked setstatchanger STAT_ATK, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_End - jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAlly_AllyAnim + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_End + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectAttackUpUserAlly_AllyString pause B_WAIT_TIME_SHORTEST printstring STRINGID_TARGETSTATWONTGOHIGHER waitmessage B_WAIT_TIME_LONG goto BattleScript_EffectAttackUpUserAlly_End -BattleScript_EffectAttackUpUserAlly_AllyAnim: - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_EffectAttackUpUserAlly_AllyString: printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_EffectAttackUpUserAlly_End @@ -549,8 +493,6 @@ BattleScript_EffectAttackUpUserAlly_TryAllyBlocked: BattleScript_EffectTeatime:: attackcanceler - attackstring - ppreduce jumpifteanoberry BattleScript_ButItFailed @ at least one battler is affected attackanimation @@ -561,10 +503,8 @@ BattleScript_TeatimeLoop: jumpifelectricabilityaffected BS_TARGET, ABILITY_VOLT_ABSORB, BattleScript_Teatimesorb jumpifelectricabilityaffected BS_TARGET, ABILITY_MOTOR_DRIVE, BattleScript_Teatimemotor jumpifteainvulnerable BS_TARGET, BattleScript_Teatimevul @ in semi-invulnerable state OR held item is not a Berry - orword gHitMarker, HITMARKER_DISABLE_ANIMATION | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries consumeberry BS_TARGET, TRUE @ consume the berry, then restore the item from changedItems - bicword gHitMarker, HITMARKER_DISABLE_ANIMATION | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE setbyte sBERRY_OVERRIDE, FALSE removeitem BS_TARGET moveendto MOVEEND_NEXT_TARGET @@ -578,9 +518,9 @@ BattleScript_Teatimevul: goto BattleScript_MoveEnd BattleScript_Teatimesorb: call BattleScript_AbilityPopUpTarget - tryhealquarterhealth BS_TARGET BattleScript_Teatimesorb_end - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + tryhealquarterhealth BS_TARGET, BattleScript_Teatimesorb_end + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG BattleScript_Teatimesorb_end: @@ -590,9 +530,8 @@ BattleScript_Teatimesorb_end: goto BattleScript_MoveEnd BattleScript_Teatimerod: call BattleScript_AbilityPopUpTarget - playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_BY_TWO setstatchanger STAT_SPATK, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -602,9 +541,8 @@ BattleScript_Teatimerod: goto BattleScript_MoveEnd BattleScript_Teatimemotor: call BattleScript_AbilityPopUpTarget - playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_BY_TWO setstatchanger STAT_SPEED, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -651,7 +589,7 @@ BattleScript_AffectionBasedStatus_HealFrostbiteString: printstring STRINGID_ATTACKERHEALEDITSFROSTBITE BattleScript_AffectionBasedStatusHeal_Continue: waitmessage B_WAIT_TIME_LONG - clearstatus BS_ATTACKER + clearstatus waitstate updatestatusicon BS_ATTACKER waitstate @@ -667,17 +605,13 @@ BattleScript_ShellTrapSetUp:: BattleScript_EffectShellTrap:: attackcanceler jumpifshelltrap BS_ATTACKER, BattleScript_HitFromAccCheck - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_MoveEnd - ppreduce printstring STRINGID_SHELLTRAPDIDNTWORK waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectCourtChange:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE swapsidestatuses attackanimation waitanimation @@ -686,7 +620,6 @@ BattleScript_EffectCourtChange:: goto BattleScript_MoveEnd BattleScript_BeakBlastSetUp:: - setbeakblast flushtextbox playanimation BS_ATTACKER, B_ANIM_BEAK_BLAST_SETUP, NULL printstring STRINGID_HEATUPBEAK @@ -701,13 +634,11 @@ BattleScript_BeakBlastBurn:: BattleScript_EffectSkyDrop:: attackcanceler - jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2 - ppreduce - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring + jumpifvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS, BattleScript_SkyDropTurn2 + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifsubstituteblocks BattleScript_ButItFailed jumpiftargetally BattleScript_ButItFailed - jumpifunder200 BS_TARGET, BattleScript_SkyDropWork + jumpifunder200 BattleScript_SkyDropWork pause B_WAIT_TIME_SHORT printstring STRINGID_TARGETTOOHEAVY waitmessage B_WAIT_TIME_LONG @@ -719,7 +650,6 @@ BattleScript_SkyDropWork: goto BattleScript_MoveEnd BattleScript_SkyDropTurn2: call BattleScript_TwoTurnMovesSecondTurnRet - attackstring clearskydrop BattleScript_SkyDropChangedTarget jumpiftype BS_TARGET, TYPE_FLYING, BattleScript_SkyDropFlyingType goto BattleScript_HitFromCritCalc @@ -728,8 +658,8 @@ BattleScript_SkyDropFlyingType: printstring STRINGID_ITDOESNTAFFECT waitmessage B_WAIT_TIME_LONG makevisible BS_ATTACKER - jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_SkyDropFlyingAlreadyConfused - jumpifstatus2 BS_TARGET, STATUS2_LOCK_CONFUSE, BattleScript_SkyDropFlyingConfuseLock + jumpifvolatile BS_TARGET, VOLATILE_CONFUSION, BattleScript_SkyDropFlyingAlreadyConfused + jumpifvolatile BS_TARGET, VOLATILE_LOCK_CONFUSE, BattleScript_SkyDropFlyingConfuseLock goto BattleScript_MoveEnd BattleScript_SkyDropChangedTarget: pause B_WAIT_TIME_SHORT @@ -740,23 +670,20 @@ BattleScript_SkyDropChangedTarget: goto BattleScript_MoveEnd BattleScript_SkyDropFlyingConfuseLock: - seteffectprimary MOVE_EFFECT_CONFUSION + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_CONFUSION BattleScript_SkyDropFlyingAlreadyConfused: - clearstatusfromeffect BS_TARGET, MOVE_EFFECT_THRASH - jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_MoveEnd + clearvolatile BS_TARGET, VOLATILE_LOCK_CONFUSE + jumpifvolatile BS_TARGET, VOLATILE_CONFUSION, BattleScript_MoveEnd setbyte BS_ATTACKER, BS_TARGET goto BattleScript_ThrashConfuses BattleScript_EffectFling:: attackcanceler - jumpifcantfling BS_ATTACKER, BattleScript_FailedFromAtkString setlastuseditem BS_ATTACKER accuracycheck BattleScript_FlingMissed, ACC_CURR_MOVE - attackstring pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNFLUNG waitmessage B_WAIT_TIME_SHORT - ppreduce critcalc damagecalc adjustdamage @@ -766,31 +693,25 @@ BattleScript_EffectFling:: effectivenesssound hitanimation BS_TARGET waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE + datahpupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE critmessage waitmessage B_WAIT_TIME_MED resultmessage waitmessage B_WAIT_TIME_MED jumpiflastuseditemberry BattleScript_EffectFlingConsumeBerry - jumpifability BS_TARGET, ABILITY_SHIELD_DUST, BattleScript_FlingBlockedByShieldDust - jumpiflastuseditemholdeffect HOLD_EFFECT_FLAME_ORB, 0, BattleScript_FlingFlameOrb - jumpiflastuseditemholdeffect HOLD_EFFECT_FLINCH, 0, BattleScript_FlingFlinch - jumpiflastuseditemholdeffect HOLD_EFFECT_LIGHT_BALL, 0, BattleScript_FlingLightBall - jumpiflastuseditemholdeffect HOLD_EFFECT_MENTAL_HERB, 0, BattleScript_FlingMentalHerb - jumpiflastuseditemholdeffect HOLD_EFFECT_TYPE_POWER, TYPE_POISON, BattleScript_FlingPoisonBarb - jumpiflastuseditemholdeffect HOLD_EFFECT_TOXIC_ORB, 0, BattleScript_FlingToxicOrb - jumpiflastuseditemholdeffect HOLD_EFFECT_WHITE_HERB, 0, BattleScript_FlingWhiteHerb + tryflingholdeffect goto BattleScript_FlingEnd + BattleScript_EffectFlingConsumeBerry: - savebattleritem BS_TARGET - battleritemtolastuseditem BS_TARGET + savebattleritem + battleritemtolastuseditem setbyte sBERRY_OVERRIDE, 1 @ override the requirements for eating berries orword gHitMarker, HITMARKER_DISABLE_ANIMATION - consumeberry BS_TARGET, TRUE + consumeberry BS_TARGET, FALSE bicword gHitMarker, HITMARKER_DISABLE_ANIMATION setbyte sBERRY_OVERRIDE, 0 - restorebattleritem BS_TARGET + restorebattleritem BattleScript_FlingEnd: tryfaintmon BS_TARGET trysymbiosis BS_ATTACKER @@ -798,77 +719,32 @@ BattleScript_FlingEnd: BattleScript_FlingFailConsumeItem:: removeitem BS_ATTACKER - goto BattleScript_FailedFromAtkString + goto BattleScript_ButItFailed BattleScript_FlingBlockedByShieldDust:: printstring STRINGID_ITEMWASUSEDUP waitmessage B_WAIT_TIME_LONG goto BattleScript_FlingEnd -BattleScript_FlingFlameOrb: - seteffectsecondary MOVE_EFFECT_BURN - goto BattleScript_FlingEnd -BattleScript_FlingFlinch: - seteffectsecondary MOVE_EFFECT_FLINCH - goto BattleScript_FlingEnd -BattleScript_FlingLightBall: - seteffectsecondary MOVE_EFFECT_PARALYSIS - goto BattleScript_FlingEnd -BattleScript_FlingMentalHerb: - curecertainstatuses BS_TARGET - savetarget - copybyte gBattlerAttacker, gBattlerTarget - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL - printfromtable gMentalHerbCureStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER - restoretarget - goto BattleScript_FlingEnd -BattleScript_FlingPoisonBarb: - seteffectsecondary MOVE_EFFECT_POISON - goto BattleScript_FlingEnd -BattleScript_FlingToxicOrb: - seteffectsecondary MOVE_EFFECT_TOXIC - goto BattleScript_FlingEnd -BattleScript_FlingWhiteHerb: - tryresetnegativestatstages BS_TARGET - swapattackerwithtarget - printstring STRINGID_PKMNSTATUSNORMAL - waitmessage B_WAIT_TIME_MED - swapattackerwithtarget - goto BattleScript_FlingEnd - BattleScript_FlingMissed: removeitem BS_ATTACKER - attackstring - ppreduce goto BattleScript_MoveMissedPause -BattleScript_EffectAuraWheel:: @ Aura Wheel can only be used by Morpeko - jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectHit - jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectHit - goto BattleScript_PokemonCantUseTheMove - BattleScript_EffectClangorousSoul:: attackcanceler - attackstring - ppreduce - cutonethirdhpraisestats BattleScript_ButItFailed - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_BIDE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + cutonethirdhpandraisestats BattleScript_ButItFailed attackanimation waitanimation - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE call BattleScript_AllStatsUp goto BattleScript_MoveEnd BattleScript_EffectOctolock:: attackcanceler - jumpifsubstituteblocks BattleScript_FailedFromAtkString - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - trysetoctolock BS_TARGET, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + trysetoctolock BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE @@ -876,14 +752,13 @@ BattleScript_EffectOctolock:: goto BattleScript_MoveEnd BattleScript_OctolockEndTurn:: - playstatchangeanimation BS_TARGET, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef, BIT_SPDEF printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_OctolockTryLowerSpDef: setstatchanger STAT_SPDEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctlockTurnDmgEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctlockTurnDmgEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_OctlockTurnDmgEnd: @@ -891,27 +766,21 @@ BattleScript_OctlockTurnDmgEnd: BattleScript_EffectPoltergeist:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - checkpoltergeist BS_TARGET, BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + setpoltergeistmessage BattleScript_ButItFailed printstring STRINGID_ABOUTTOUSEPOLTERGEIST waitmessage B_WAIT_TIME_LONG goto BattleScript_HitFromCritCalc BattleScript_EffectTarShot:: attackcanceler - jumpifsubstituteblocks BattleScript_FailedFromAtkString - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - cantarshotwork BattleScript_FailedFromAtkString - attackstring - ppreduce + jumpifsubstituteblocks BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + cantarshotwork BattleScript_ButItFailed setstatchanger STAT_SPEED, 1, TRUE attackanimation waitanimation - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TryTarShot - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_TryTarShot printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_TryTarShot: @@ -922,15 +791,14 @@ BattleScript_TryTarShot: BattleScript_EffectNoRetreat:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - trynoretreat BS_TARGET, BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + jumpifvolatile BS_TARGET, VOLATILE_NO_RETREAT, BattleScript_ButItFailed + setvolatile BS_TARGET, VOLATILE_NO_RETREAT attackanimation waitanimation call BattleScript_AllStatsUp - jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_MoveEnd - seteffectprimary MOVE_EFFECT_PREVENT_ESCAPE | MOVE_EFFECT_AFFECTS_USER + jumpifvolatile BS_TARGET, VOLATILE_ESCAPE_PREVENTION, BattleScript_MoveEnd + seteffectprimary BS_TARGET, BS_TARGET, MOVE_EFFECT_PREVENT_ESCAPE printstring STRINGID_CANTESCAPEDUETOUSEDMOVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -941,8 +809,8 @@ BattleScript_BothCanNoLongerEscape:: return BattleScript_EffectHyperspaceFury:: - jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHit - jumpifspecies BS_ATTACKER, SPECIES_HOOPA_CONFINED, BattleScript_ButHoopaCantUseIt + jumpifspecies SPECIES_HOOPA_UNBOUND, BattleScript_EffectHit + jumpifspecies SPECIES_HOOPA_CONFINED, BattleScript_ButHoopaCantUseIt goto BattleScript_PokemonCantUseTheMove BattleScript_ButHoopaCantUseIt: @@ -982,9 +850,6 @@ BattleScript_MoveEffectLightScreen:: BattleScript_EffectStuffCheeks:: attackcanceler - attackstring - ppreduce - jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed attackanimation waitanimation setbyte sBERRY_OVERRIDE, 1 @@ -994,10 +859,7 @@ BattleScript_EffectStuffCheeks:: setbyte sBERRY_OVERRIDE, 0 removeitem BS_ATTACKER setstatchanger STAT_DEF, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StuffCheeksEnd - setgraphicalstatchangevalues - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StuffCheeksEnd @ cant raise def - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_StuffCheeksEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_StuffCheeksEnd: @@ -1005,25 +867,21 @@ BattleScript_StuffCheeksEnd: BattleScript_EffectDecorate:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 12, BattleScript_DecorateBoost - jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, 12, BattleScript_DecorateBoost + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_DecorateBoost + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_DecorateBoost goto BattleScript_ButItFailed BattleScript_DecorateBoost: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0x0 setstatchanger STAT_ATK, 2, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_DecorateBoostSpAtk + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_DecorateBoostSpAtk, BIT_SPATK jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DecorateBoostSpAtk printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_DecorateBoostSpAtk: setstatchanger STAT_SPATK, 2, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -1031,8 +889,6 @@ BattleScript_DecorateBoostSpAtk: BattleScript_EffectCoaching:: attackcanceler - attackstring - ppreduce jumpifnoally BS_ATTACKER, BattleScript_ButItFailed copybyte gBattlerTarget, gBattlerAttacker setallytonexttarget EffectCoaching_CheckAllyStats @@ -1045,16 +901,14 @@ EffectCoaching_CheckAllyStats: BattleScript_CoachingWorks: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, 0x0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CoachingBoostDef + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CoachingBoostDef, BIT_DEF jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CoachingBoostDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CoachingBoostDef: setstatchanger STAT_DEF, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -1062,9 +916,7 @@ BattleScript_CoachingBoostDef: BattleScript_EffectJungleHealing:: attackcanceler - attackstring - ppreduce - jumpifteamhealthy BS_ATTACKER, BattleScript_ButItFailed + jumpifteamhealthy BattleScript_ButItFailed attackanimation waitanimation copybyte gBattlerTarget, gBattlerAttacker @@ -1072,13 +924,11 @@ BattleScript_EffectJungleHealing:: JungleHealing_RestoreTargetHealth: copybyte gBattlerAttacker, gBattlerTarget tryhealquarterhealth BS_TARGET, BattleScript_JungleHealing_TryCureStatus - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG BattleScript_JungleHealing_TryCureStatus: - jumpifmove MOVE_LIFE_DEW, BattleScript_JungleHealingTryRestoreAlly @ life dew only heals jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_JungleHealingCureStatus goto BattleScript_JungleHealingTryRestoreAlly BattleScript_JungleHealingCureStatus: @@ -1093,18 +943,39 @@ BattleScript_JungleHealingTryRestoreAlly: setallytonexttarget JungleHealing_RestoreTargetHealth goto BattleScript_MoveEnd -BattleScript_EffectRelicSong:: - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - moveendall - tryrelicsong - end +BattleScript_EffectLifeDew:: + attackcanceler + jumpiffullhp BS_ATTACKER, BattleScript_EffectLifeDewCheckPartner + copybyte gBattlerTarget, gBattlerAttacker + attackanimation + waitanimation + call BattleScript_EffectLifeDewHealing + jumpifabsent BS_ATTACKER_PARTNER, BattleScript_EffectLifeDewEnd + jumpiffullhp BS_ATTACKER_PARTNER, BattleScript_EffectLifeDewEnd + setallytonexttarget BattleScript_EffectLifeDewNextTarget +BattleScript_EffectLifeDewNextTarget: + call BattleScript_EffectLifeDewHealing +BattleScript_EffectLifeDewEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectLifeDewCheckPartner: + jumpifabsent BS_ATTACKER_PARTNER, BattleScript_ButItFailed + jumpiffullhp BS_ATTACKER_PARTNER, BattleScript_ButItFailed + attackanimation + waitanimation + setallytonexttarget BattleScript_EffectLifeDewNextTarget + +BattleScript_EffectLifeDewHealing: + tryhealquarterhealth BS_TARGET, BattleScript_EffectLifeDewEnd + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG + return BattleScript_EffectAllySwitch:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE tryallyswitch BattleScript_ButItFailed attackanimation waitanimation @@ -1116,9 +987,7 @@ BattleScript_EffectAllySwitch:: BattleScript_EffectFairyLock:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE trysetfairylock BattleScript_ButItFailed attackanimation waitanimation @@ -1126,14 +995,6 @@ BattleScript_EffectFairyLock:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_FailIfNotArgType:: - attackcanceler - attackstring - ppreduce - jumpifnotcurrentmoveargtype BS_ATTACKER, BattleScript_ButItFailed - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - goto BattleScript_HitFromCritCalc - BattleScript_RemoveFireType:: printstring STRINGID_ATTACKERLOSTFIRETYPE waitmessage B_WAIT_TIME_LONG @@ -1156,8 +1017,6 @@ BattleScript_DefDown_Ret: BattleScript_EffectPurify:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_PurifyWorks goto BattleScript_ButItFailed @@ -1168,45 +1027,41 @@ BattleScript_PurifyWorks: updatestatusicon BS_TARGET printstring STRINGID_ATTACKERCUREDTARGETSTATUS waitmessage B_WAIT_TIME_LONG - tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER + tryhealhalfhealth BS_ATTACKER, BattleScript_AlreadyAtFullHp goto BattleScript_RestoreHp BattleScript_EffectStrengthSap:: setstatchanger STAT_ATK, 1, TRUE attackcanceler - jumpifsubstituteblocks BattleScript_FailedFromAtkString - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + jumpifsubstituteblocks BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MIN_STAT_STAGE, BattleScript_StrengthSapTryLower pause B_WAIT_TIME_SHORT - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG + setmoveresultflags MOVE_RESULT_MISSED @ TODO: Is this even necessary? goto BattleScript_MoveEnd BattleScript_StrengthSapTryLower: - getstatvalue BS_TARGET, STAT_ATK + getstatvalue STAT_ATK jumpiffullhp BS_ATTACKER, BattleScript_StrengthSapMustLower +BattleScript_StrengthSapAnimation: attackanimation waitanimation - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StrengthSapHp - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StrengthSapHp -BattleScript_StrengthSapLower: - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_StrengthSapHp + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_StrengthSapHp printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG @ Drain HP without lowering a stat BattleScript_StrengthSapHp: jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapManipulateDmg - jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd + jumpifvolatile BS_ATTACKER, VOLATILE_HEAL_BLOCK, BattleScript_MoveEnd jumpiffullhp BS_ATTACKER, BattleScript_MoveEnd BattleScript_StrengthSapManipulateDmg: manipulatedamage DMG_BIG_ROOT - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapLiquidOoze - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_PKMNENERGYDRAINED waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -1214,18 +1069,16 @@ BattleScript_StrengthSapLiquidOoze: call BattleScript_AbilityPopUpTarget manipulatedamage DMG_CHANGE_SIGN setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB_OOZE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printfromtable gAbsorbDrainStringIds waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd BattleScript_StrengthSapMustLower: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_MoveEnd - attackanimation - waitanimation - goto BattleScript_StrengthSapLower + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_MoveEnd + goto BattleScript_StrengthSapAnimation BattleScript_MoveEffectIncinerate:: printstring STRINGID_INCINERATEBURN @@ -1257,9 +1110,7 @@ BattleScript_CoreEnforcerRet: BattleScript_EffectLaserFocus:: attackcanceler - attackstring - ppreduce - setuserstatus3 STATUS3_LASER_FOCUS, BattleScript_ButItFailed + trysetvolatile BS_ATTACKER, VOLATILE_LASER_FOCUS, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_LASERFOCUS @@ -1271,23 +1122,21 @@ BattleScript_VCreateStatLoss:: jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_VCreateStatLossRet BattleScript_VCreateStatAnim: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_CERTAIN, BattleScript_VCreateTrySpDef, BIT_SPDEF | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VCreateTrySpDef printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VCreateTrySpDef: setstatchanger STAT_SPDEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_CERTAIN, BattleScript_VCreateTrySpeed, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VCreateTrySpeed printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VCreateTrySpeed: setstatchanger STAT_SPEED, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateStatLossRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateStatLossRet + statbuffchange BS_ATTACKER, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_CERTAIN, BattleScript_VCreateStatLossRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VCreateStatLossRet printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VCreateStatLossRet: @@ -1295,22 +1144,19 @@ BattleScript_VCreateStatLossRet: BattleScript_SpectralThiefSteal:: setbyte sB_ANIM_TURN, 1 - playmoveanimation BS_ATTACKER, MOVE_SPECTRAL_THIEF + playmoveanimation MOVE_SPECTRAL_THIEF waitanimation setbyte sB_ANIM_TURN, 0 printstring STRINGID_SPECTRALTHIEFSTEAL waitmessage B_WAIT_TIME_LONG setbyte sB_ANIM_ARG2, 0 - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 spectralthiefprintstats flushtextbox goto BattleScript_EffectSpectralThiefFromDamage BattleScript_EffectSpectralThief:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc tryspectralthiefsteal BattleScript_SpectralThiefSteal BattleScript_EffectSpectralThiefFromDamage: @@ -1324,25 +1170,19 @@ BattleScript_EffectSpectralThiefFromDamage: BattleScript_EffectPartingShot:: attackcanceler - attackstring - ppreduce jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_EffectPartingShotTryAtk jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats BattleScript_EffectPartingShotTryAtk: - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS - playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotTrySpAtk + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotTrySpAtk, BIT_SPATK printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectPartingShotTrySpAtk: - playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_SPATK, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotSwitch + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotSwitch printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectPartingShotSwitch: @@ -1351,11 +1191,9 @@ BattleScript_EffectPartingShotSwitch: BattleScript_EffectPowder:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON - attackstring - ppreduce - jumpifstatus2 BS_TARGET, STATUS2_POWDER, BattleScript_ButItFailed - setpowder BS_TARGET + accuracycheck BattleScript_MoveMissedPause, NO_ACC_CALC_CHECK_LOCK_ON + jumpifvolatile BS_TARGET, VOLATILE_POWDER, BattleScript_ButItFailed + setvolatile BS_TARGET, VOLATILE_POWDER attackanimation waitanimation printstring STRINGID_COVEREDINPOWDER @@ -1364,33 +1202,28 @@ BattleScript_EffectPowder:: BattleScript_EffectAromaticMist:: attackcanceler - attackstring - ppreduce jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_ButItFailed jumpiftargetally BattleScript_EffectAromaticMistWorks goto BattleScript_ButItFailed BattleScript_EffectAromaticMistWorks: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAromaticMistEnd - jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AromaticMistAnim - pause B_WAIT_TIME_SHORTEST - printstring STRINGID_TARGETSTATWONTGOHIGHER - waitmessage B_WAIT_TIME_LONG - goto BattleScript_EffectAromaticMistEnd -BattleScript_AromaticMistAnim: + statbuffchange BS_TARGET, STAT_CHANGE_ONLY_CHECKING, BattleScript_EffectAromaticMistWontGoHigher attackanimation waitanimation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAromaticMistEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectAromaticMistEnd: goto BattleScript_MoveEnd +BattleScript_EffectAromaticMistWontGoHigher: + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_TARGETSTATWONTGOHIGHER + waitmessage B_WAIT_TIME_LONG + setmoveresultflags MOVE_RESULT_MISSED @ TODO: Is this even necessary? + goto BattleScript_EffectAromaticMistEnd BattleScript_EffectMagneticFlux:: attackcanceler - attackstring - ppreduce setbyte gBattleCommunication, 0 BattleScript_EffectMagneticFluxStart: jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectMagneticFluxCheckStats @@ -1404,18 +1237,16 @@ BattleScript_EffectMagneticFluxTryDef: attackanimation waitanimation BattleScript_EffectMagneticFluxSkipAnim: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_DEF | BIT_SPDEF, 0 setstatchanger STAT_DEF, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectMagneticFluxTrySpDef + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxTrySpDef, BIT_SPDEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectMagneticFluxTrySpDef addbyte gBattleCommunication, 1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectMagneticFluxTrySpDef: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxLoop - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectMagneticFluxLoop + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxLoop + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectMagneticFluxLoop addbyte gBattleCommunication, 1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -1428,8 +1259,6 @@ BattleScript_EffectMagneticFluxEnd: BattleScript_EffectGearUp:: attackcanceler - attackstring - ppreduce setbyte gBattleCommunication, 0 BattleScript_EffectGearUpStart: jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectGearUpCheckStats @@ -1443,18 +1272,16 @@ BattleScript_EffectGearUpTryAtk: attackanimation waitanimation BattleScript_EffectGearUpSkipAnim: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpTrySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectGearUpTrySpAtk + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpTrySpAtk, BIT_SPATK + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectGearUpTrySpAtk addbyte gBattleCommunication, 1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectGearUpTrySpAtk: setstatchanger STAT_SPATK, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpLoop - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectGearUpLoop + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpLoop + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectGearUpLoop addbyte gBattleCommunication, 1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -1468,16 +1295,12 @@ BattleScript_EffectGearUpEnd: BattleScript_EffectAcupressure:: attackcanceler jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectAcupressureTry - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_PrintMoveMissed + jumpifvolatile BS_TARGET, VOLATILE_SUBSTITUTE, BattleScript_MoveMissedPause BattleScript_EffectAcupressureTry: - attackstring - ppreduce - tryaccupressure BS_TARGET, BattleScript_ButItFailed + tryacupressure BattleScript_ButItFailed attackanimation waitanimation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - statbuffchange MOVE_EFFECT_CERTAIN, BattleScript_MoveEnd + statbuffchange BS_TARGET, STAT_CHANGE_CERTAIN, BattleScript_MoveEnd printstring STRINGID_DEFENDERSSTATROSE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -1489,10 +1312,8 @@ BattleScript_MoveEffectFeint:: BattleScript_EffectThirdType:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - trysetthirdtype BS_TARGET, BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + trythirdtype BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_THIRDTYPEADDED @@ -1501,32 +1322,32 @@ BattleScript_EffectThirdType:: BattleScript_EffectFlowerShield:: attackcanceler - attackstring - ppreduce savetarget selectfirstvalidtarget -BattleScript_FlowerShieldIsAnyGrass: +BattleScript_FlowerShieldIsAnyValidTarget: + jumpifvolatile BS_TARGET, VOLATILE_SEMI_INVULNERABLE, BattleScript_FlowerShieldCheckNextTarget jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoopStart - jumpifnexttargetvalid BattleScript_FlowerShieldIsAnyGrass +BattleScript_FlowerShieldCheckNextTarget: + jumpifnexttargetvalid BattleScript_FlowerShieldIsAnyValidTarget goto BattleScript_RestoreTargetButItFailed BattleScript_FlowerShieldLoopStart: selectfirstvalidtarget BattleScript_FlowerShieldLoop: movevaluescleanup + jumpifvolatile BS_TARGET, VOLATILE_SEMI_INVULNERABLE, BattleScript_FlowerShieldMoveTargetEnd jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoop2 goto BattleScript_FlowerShieldMoveTargetEnd BattleScript_FlowerShieldLoop2: setstatchanger STAT_DEF, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_FlowerShieldMoveTargetEnd - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_FlowerShieldDoAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_FlowerShieldMoveTargetEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_FlowerShieldMoveTargetEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_FlowerShieldDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_FlowerShieldMoveTargetEnd pause 21 goto BattleScript_FlowerShieldString BattleScript_FlowerShieldDoAnim: attackanimation waitanimation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_FlowerShieldMoveTargetEnd BattleScript_FlowerShieldString: printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -1534,12 +1355,11 @@ BattleScript_FlowerShieldMoveTargetEnd: moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_FlowerShieldLoop restoretarget + moveendfrom MOVEEND_ITEM_EFFECTS_ATTACKER_1 end BattleScript_EffectRototiller:: attackcanceler - attackstring - ppreduce getrototillertargets BattleScript_ButItFailed @ at least one battler is affected attackanimation @@ -1551,18 +1371,16 @@ BattleScript_RototillerLoop: jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_RototillerCheckAffected jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_RototillerCantRaiseMultipleStats BattleScript_RototillerCheckAffected: - jumpifnotrototilleraffected BS_TARGET, BattleScript_RototillerNoEffect - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0 + jumpifnotrototilleraffected BattleScript_RototillerNoEffect setstatchanger STAT_ATK, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerTrySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RototillerTrySpAtk + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerTrySpAtk, BIT_SPATK + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_RototillerTrySpAtk printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_RototillerTrySpAtk:: setstatchanger STAT_SPATK, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerMoveTargetEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RototillerMoveTargetEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerMoveTargetEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_RototillerMoveTargetEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_RototillerMoveTargetEnd: @@ -1586,23 +1404,20 @@ BattleScript_RototillerNoEffect: BattleScript_EffectBestow:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, NO_ACC_CALC_CHECK_LOCK_ON jumpifsubstituteblocks BattleScript_ButItFailed trybestow BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_BESTOWITEMGIVING waitmessage B_WAIT_TIME_LONG + tryactivateitem BS_TARGET, ACTIVATION_ON_USABLE_AGAIN trysymbiosis BS_ATTACKER goto BattleScript_MoveEnd BattleScript_EffectAfterYou:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE tryafteryou BattleScript_ButItFailed attackanimation waitanimation @@ -1611,25 +1426,17 @@ BattleScript_EffectAfterYou:: goto BattleScript_MoveEnd BattleScript_MoveEffectFlameBurst:: - tryfaintmon BS_TARGET - copybyte sBATTLER, sSAVED_BATTLER printstring STRINGID_BURSTINGFLAMESHIT waitmessage B_WAIT_TIME_LONG - savetarget - copybyte gBattlerTarget, sSAVED_BATTLER - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - tryfaintmon BS_TARGET - restoretarget - goto BattleScript_MoveEnd + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + tryfaintmon BS_SCRIPTING + return BattleScript_EffectPowerTrick:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - powertrick BS_ATTACKER + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + powertrick attackanimation waitanimation printstring STRINGID_PKMNSWITCHEDATKANDDEF @@ -1638,9 +1445,7 @@ BattleScript_EffectPowerTrick:: BattleScript_EffectPsychoShift:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifstatus BS_ATTACKER, STATUS1_ANY, BattleScript_EffectPsychoShiftCanWork goto BattleScript_ButItFailed BattleScript_EffectPsychoShiftCanWork: @@ -1662,43 +1467,19 @@ BattleScript_EffectPsychoShiftCanWork: BattleScript_EffectSynchronoise:: attackcanceler - attackstring - ppreduce - selectfirstvalidtarget -BattleScript_SynchronoiseLoop: - movevaluescleanup - jumpifcantusesynchronoise BattleScript_SynchronoiseNoEffect - accuracycheck BattleScript_SynchronoiseMissed, ACC_CURR_MOVE - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG + pause B_WAIT_TIME_MED + trysynchronoise BattleScript_MoveEnd + accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + goto BattleScript_HitFromCritCalc + +BattleScript_ItDoesntAffectFoe:: + savetarget + copybyte gBattlerTarget, sBATTLER + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_SHORT flushtextbox - tryfaintmon BS_TARGET -BattleScript_SynchronoiseMoveTargetEnd: - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_SynchronoiseLoop - end -BattleScript_SynchronoiseMissed: - pause B_WAIT_TIME_SHORT - resultmessage - waitmessage B_WAIT_TIME_LONG - goto BattleScript_SynchronoiseMoveTargetEnd -BattleScript_SynchronoiseNoEffect: - pause B_WAIT_TIME_SHORT - printstring STRINGID_NOEFFECTONTARGET - waitmessage B_WAIT_TIME_LONG - goto BattleScript_SynchronoiseMoveTargetEnd + restoretarget + return BattleScript_MoveEffectSmackDown:: printstring STRINGID_FELLSTRAIGHTDOWN @@ -1712,28 +1493,33 @@ BattleScript_EffectHitEnemyHealAlly:: BattleScript_EffectDefog:: setstatchanger STAT_EVASION, 1, TRUE attackcanceler + jumpifgenconfiglowerthan CONFIG_DEFOG_EFFECT_CLEARING, GEN_5, BattleScript_DefogAfterSubstituteCheck jumpifsubstituteblocks BattleScript_DefogIfCanClearHazards +BattleScript_DefogAfterSubstituteCheck: jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_EVASION, MIN_STAT_STAGE, BattleScript_DefogWorks BattleScript_DefogIfCanClearHazards: - trydefog FALSE, BattleScript_FailedFromAtkString + trydefog FALSE, BattleScript_ButItFailed BattleScript_DefogWorks: - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_DefogTryHazardsWithAnim - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefogDoAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_DefogTryHazardsWithAnim - pause B_WAIT_TIME_SHORT + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + jumpifgenconfiglowerthan CONFIG_DEFOG_EFFECT_CLEARING, GEN_5, BattleScript_DefogWorksAfterSubstituteCheck + jumpifsubstituteblocks BattleScript_DefogTryHazardsWithAnim +BattleScript_DefogWorksAfterSubstituteCheck: + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_DefogTryHazardsWithAnim + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_DefogDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_DefogTryHazardsWithAnim + pause B_WAIT_TIME_SHORT + setmoveresultflags MOVE_RESULT_MISSED @ TODO: Is this even necessary? goto BattleScript_DefogPrintString BattleScript_DefogDoAnim:: attackanimation waitanimation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + call BattleScript_SwapFromSubstitute + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_DefogTryHazards + call BattleScript_SwapToSubstitute BattleScript_DefogPrintString:: printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_DefogTryHazards:: +BattleScript_DefogTryHazards: copybyte gEffectBattler, gBattlerAttacker trydefog TRUE, NULL copybyte gBattlerAttacker, gEffectBattler @@ -1743,23 +1529,15 @@ BattleScript_DefogTryHazardsWithAnim: waitanimation goto BattleScript_DefogTryHazards -BattleScript_EffectCopycat:: - attackcanceler - attackstring - pause 5 - trycopycat BattleScript_CopycatFail - attackanimation - waitanimation - jumptocalledmove TRUE -BattleScript_CopycatFail: - ppreduce - goto BattleScript_ButItFailed +BattleScript_MoveEffectDefog:: + saveattacker + trydefog TRUE, NULL + restoreattacker + return BattleScript_EffectInstruct:: attackcanceler - attackstring - ppreduce - pause 5 + pause B_WAIT_TIME_SHORT tryinstruct BattleScript_ButItFailed attackanimation waitanimation @@ -1772,54 +1550,30 @@ BattleScript_EffectInstruct:: BattleScript_EffectAutotomize:: setstatchanger STAT_SPEED, 2, FALSE attackcanceler - attackstring - ppreduce - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AutotomizeWeightLoss - jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AutotomizeAttackAnim + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_AutotomizeWeightLoss + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_AutotomizeAttackAnim pause B_WAIT_TIME_SHORT goto BattleScript_AutotomizePrintString BattleScript_AutotomizeAttackAnim:: attackanimation waitanimation - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AutotomizeWeightLoss BattleScript_AutotomizePrintString:: printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AutotomizeWeightLoss:: jumpifmovehadnoeffect BattleScript_MoveEnd - tryautotomize BS_ATTACKER, BattleScript_MoveEnd + tryautotomize BattleScript_MoveEnd printstring STRINGID_BECAMENIMBLE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectFinalGambit:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - typecalc - clearmoveresultflags MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE - dmgtocurrattackerhp - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - resultmessage - waitmessage B_WAIT_TIME_LONG - setadditionaleffects - tryfaintmon BS_TARGET - jumpifmovehadnoeffect BattleScript_MoveEnd +BattleScript_FinalGambit:: setatkhptozero - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER - goto BattleScript_MoveEnd + return BattleScript_TryHitSwitchTarget:: forcerandomswitch BattleScript_HitSwitchTargetForceRandomSwitchFailed @@ -1835,34 +1589,28 @@ BattleScript_HitSwitchTargetForceRandomSwitchFailed: BattleScript_EffectToxicThread:: setstatchanger STAT_SPEED, 1, TRUE attackcanceler - jumpifsubstituteblocks BattleScript_FailedFromAtkString - jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_ToxicThreadWorks - jumpifstatus BS_TARGET, STATUS1_PSN_ANY, BattleScript_FailedFromAtkString -BattleScript_ToxicThreadWorks: - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_ToxicThreadTryPsn - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_ToxicThreadDoAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_ToxicThreadTryPsn + jumpifsubstituteblocks BattleScript_ButItFailed + checknonvolatiletrigger MOVE_EFFECT_POISON, BattleScript_EffectStatDownFromAccCheck + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + attackanimation + waitanimation + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_ToxicThreadTryPsn + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_ToxicThreadDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_ToxicThreadTryPsn pause B_WAIT_TIME_SHORT goto BattleScript_ToxicThreadPrintString BattleScript_ToxicThreadDoAnim:: - attackanimation - waitanimation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_ToxicThreadTryPsn BattleScript_ToxicThreadPrintString:: printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ToxicThreadTryPsn:: - seteffectprimary MOVE_EFFECT_POISON + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_POISON goto BattleScript_MoveEnd BattleScript_EffectVenomDrench:: attackcanceler - attackstring - ppreduce jumpifstatus BS_TARGET, STATUS1_PSN_ANY, BattleScript_EffectVenomDrenchCanBeUsed goto BattleScript_ButItFailed BattleScript_EffectVenomDrenchCanBeUsed: @@ -1873,26 +1621,21 @@ BattleScript_VenomDrenchDoMoveAnim:: accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS - playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchTryLowerSpAtk + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpAtk, BIT_SPATK | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VenomDrenchTryLowerSpAtk printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VenomDrenchTryLowerSpAtk:: - playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_SPATK, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchTryLowerSpeed + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpeed, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VenomDrenchTryLowerSpeed printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VenomDrenchTryLowerSpeed:: - playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_NEGATIVE setstatchanger STAT_SPEED, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VenomDrenchEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VenomDrenchEnd:: @@ -1900,27 +1643,21 @@ BattleScript_VenomDrenchEnd:: BattleScript_EffectNobleRoar:: attackcanceler - attackstring - ppreduce jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_NobleRoarDoMoveAnim jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats BattleScript_NobleRoarDoMoveAnim:: accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS - playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarTryLowerSpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_NobleRoarTryLowerSpAtk + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarTryLowerSpAtk, BIT_SPATK + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_NobleRoarTryLowerSpAtk printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_NobleRoarTryLowerSpAtk:: - playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_SPATK, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_NobleRoarEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_NobleRoarEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_NobleRoarEnd:: @@ -1928,8 +1665,6 @@ BattleScript_NobleRoarEnd:: BattleScript_EffectShellSmash:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef @@ -1938,80 +1673,64 @@ BattleScript_EffectShellSmash:: BattleScript_ShellSmashTryDef:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_ShellSmashTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_CERTAIN, BattleScript_ShellSmashTrySpDef, BIT_SPDEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_ShellSmashTrySpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ShellSmashTrySpDef: setstatchanger STAT_SPDEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_ShellSmashTryAttack - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTryAttack + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_CERTAIN, BattleScript_ShellSmashTryAttack + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_ShellSmashTryAttack printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ShellSmashTryAttack: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_ATK | BIT_SPEED, STAT_CHANGE_BY_TWO setstatchanger STAT_ATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpAtk, BIT_SPATK | BIT_SPEED, + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_ShellSmashTrySpAtk printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ShellSmashTrySpAtk: setstatchanger STAT_SPATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpeed, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_ShellSmashTrySpeed printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ShellSmashTrySpeed: setstatchanger STAT_SPEED, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_ShellSmashEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ShellSmashEnd: goto BattleScript_MoveEnd -BattleScript_EffectLastResort:: - attackcanceler - attackstring - ppreduce - jumpifcantuselastresort BS_ATTACKER, BattleScript_ButItFailed - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - goto BattleScript_HitFromCritCalc - BattleScript_EffectGrowth:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_GrowthDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_GrowthDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK, 0 - jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_GrowthAtk2 + jumpifweatheraffected B_WEATHER_SUN, BattleScript_GrowthAtk2 setstatchanger STAT_ATK, 1, FALSE goto BattleScript_GrowthAtk BattleScript_GrowthAtk2: setstatchanger STAT_ATK, 2, FALSE BattleScript_GrowthAtk: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthTrySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GrowthTrySpAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthTrySpAtk, BIT_SPATK + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_GrowthTrySpAtk printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_GrowthTrySpAtk:: - jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_GrowthSpAtk2 + jumpifweatheraffected B_WEATHER_SUN, BattleScript_GrowthSpAtk2 setstatchanger STAT_SPATK, 1, FALSE goto BattleScript_GrowthSpAtk BattleScript_GrowthSpAtk2: setstatchanger STAT_SPATK, 2, FALSE BattleScript_GrowthSpAtk: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GrowthEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_GrowthEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_GrowthEnd: @@ -2019,9 +1738,7 @@ BattleScript_GrowthEnd: BattleScript_EffectSoak:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifability BS_TARGET, ABILITY_MULTITYPE, BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_RKS_SYSTEM, BattleScript_ButItFailed jumpifsubstituteblocks BattleScript_ButItFailed @@ -2034,9 +1751,7 @@ BattleScript_EffectSoak:: BattleScript_EffectReflectType:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE tryreflecttype BattleScript_ButItFailed attackanimation waitanimation @@ -2046,9 +1761,7 @@ BattleScript_EffectReflectType:: BattleScript_EffectElectrify:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE tryelectrify BattleScript_ButItFailed attackanimation waitanimation @@ -2058,30 +1771,25 @@ BattleScript_EffectElectrify:: BattleScript_EffectShiftGear:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ShiftGearDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_ShiftGearDoMoveAnim: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPEED, 10, BattleScript_ShiftGearSpeedBy1 - playstatchangeanimation BS_ATTACKER, BIT_SPEED | BIT_ATK, STAT_CHANGE_BY_TWO setstatchanger STAT_SPEED, 2, FALSE goto BattleScript_ShiftGearDoSpeed BattleScript_ShiftGearSpeedBy1: - playstatchangeanimation BS_ATTACKER, BIT_SPEED | BIT_ATK, 0 setstatchanger STAT_SPEED, 1, FALSE BattleScript_ShiftGearDoSpeed: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearTryAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShiftGearTryAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearTryAtk, BIT_ATK + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_ShiftGearTryAtk printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ShiftGearTryAtk: setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShiftGearEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_ShiftGearEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ShiftGearEnd: @@ -2089,31 +1797,27 @@ BattleScript_ShiftGearEnd: BattleScript_EffectCoil:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoilDoMoveAnim jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoilDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_CoilDoMoveAnim: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_ACC, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilTryDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryDef, BIT_DEF | BIT_ACC + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CoilTryDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CoilTryDef: setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryAcc - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilTryAcc + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryAcc, BIT_ACC + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CoilTryAcc printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CoilTryAcc: setstatchanger STAT_ACC, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CoilEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CoilEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CoilEnd: @@ -2121,31 +1825,27 @@ BattleScript_CoilEnd: BattleScript_EffectQuiverDance:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_QuiverDanceDoMoveAnim jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_QuiverDanceDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_QuiverDanceDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0 setstatchanger STAT_SPATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceTrySpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpDef, BIT_SPDEF | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_QuiverDanceTrySpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_QuiverDanceTrySpDef:: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpeed, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_QuiverDanceTrySpeed printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_QuiverDanceTrySpeed:: setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_QuiverDanceEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_QuiverDanceEnd:: @@ -2153,64 +1853,48 @@ BattleScript_QuiverDanceEnd:: BattleScript_EffectVictoryDance:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_VictoryDanceDoMoveAnim jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_VictoryDanceDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_VictoryDanceDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceTryDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceTryDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceTryDef, BIT_DEF | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VictoryDanceTryDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VictoryDanceTryDef:: setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceTrySpeed, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VictoryDanceTrySpeed printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VictoryDanceTrySpeed:: setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_VictoryDanceEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_VictoryDanceEnd:: goto BattleScript_MoveEnd -BattleScript_EffectMeFirst:: - attackcanceler - attackstring - trymefirst BattleScript_FailedFromPpReduce - attackanimation - waitanimation - jumptocalledmove TRUE - BattleScript_EffectAttackSpAttackUp:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AttackSpAttackUpDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_AttackSpAttackUpDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpTrySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackSpAttackUpTrySpAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpTrySpAtk, BIT_SPATK + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_AttackSpAttackUpTrySpAtk printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AttackSpAttackUpTrySpAtk:: setstatchanger STAT_SPATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackSpAttackUpEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_AttackSpAttackUpEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AttackSpAttackUpEnd: @@ -2218,24 +1902,20 @@ BattleScript_AttackSpAttackUpEnd: BattleScript_EffectAttackAccUp:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AttackAccUpDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_AttackAccUpDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_ACC, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpTryAcc - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackAccUpTryAcc + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpTryAcc, BIT_ACC + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_AttackAccUpTryAcc printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AttackAccUpTryAcc:: setstatchanger STAT_ACC, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackAccUpEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_AttackAccUpEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AttackAccUpEnd: @@ -2246,9 +1926,7 @@ BattleScript_EffectGrassyTerrain:: BattleScript_EffectElectricTerrain:: BattleScript_EffectPsychicTerrain:: attackcanceler - attackstring - ppreduce - setremoveterrain BattleScript_ButItFailed + setterrain BattleScript_ButItFailed attackanimation waitanimation printfromtable gTerrainStringIds @@ -2259,8 +1937,6 @@ BattleScript_EffectPsychicTerrain:: BattleScript_EffectTopsyTurvy:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 6, BattleScript_EffectTopsyTurvyWorks jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, 6, BattleScript_EffectTopsyTurvyWorks @@ -2272,16 +1948,14 @@ BattleScript_EffectTopsyTurvy:: BattleScript_EffectTopsyTurvyWorks: attackanimation waitanimation - invertstatstages BS_TARGET + invertstatstages printstring STRINGID_TOPSYTURVYSWITCHEDSTATS waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectIonDeluge:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE orword gFieldStatuses, STATUS_FIELD_ION_DELUGE attackanimation waitanimation @@ -2291,9 +1965,7 @@ BattleScript_EffectIonDeluge:: BattleScript_EffectQuash:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE tryquash BattleScript_ButItFailed attackanimation waitanimation @@ -2303,66 +1975,37 @@ BattleScript_EffectQuash:: BattleScript_EffectHealPulse:: attackcanceler - attackstring - ppreduce - jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents @ stops pollen puff - jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents + jumpifvolatile BS_ATTACKER, VOLATILE_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents @ stops pollen puff + jumpifvolatile BS_TARGET, VOLATILE_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifsubstituteblocks BattleScript_ButItFailed tryhealpulse BattleScript_AlreadyAtFullHp attackanimation waitanimation - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectEntrainment:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE tryentrainment BattleScript_ButItFailed attackanimation waitanimation - setlastusedability BS_TARGET + switchinabilities BS_TARGET printstring STRINGID_PKMNACQUIREDABILITY waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_EffectSimpleBeam:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - setabilitysimple BS_TARGET, BattleScript_ButItFailed - attackanimation - waitanimation -.if B_ABILITY_POP_UP == TRUE - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUpOverwriteThenNormal -.endif - recordability BS_TARGET - printstring STRINGID_PKMNACQUIREDSIMPLE - waitmessage B_WAIT_TIME_LONG trytoclearprimalweather tryrevertweatherform flushtextbox - tryendneutralizinggas BS_TARGET + tryendneutralizinggas goto BattleScript_MoveEnd -BattleScript_EffectSuckerPunch:: - attackcanceler - suckerpunchcheck BattleScript_FailedFromAtkString - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - goto BattleScript_HitFromAtkString - BattleScript_EffectLuckyChant:: attackcanceler - attackstring - ppreduce - setluckychant BS_ATTACKER, BattleScript_ButItFailed + setluckychant BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_SHIELDEDFROMCRITICALHITS @@ -2371,10 +2014,8 @@ BattleScript_EffectLuckyChant:: BattleScript_EffectMetalBurst:: attackcanceler - metalburstdamagecalculator BattleScript_FailedFromAtkString - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + metalburstdamagecalculator BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc clearmoveresultflags MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE adjustdamage @@ -2382,16 +2023,18 @@ BattleScript_EffectMetalBurst:: BattleScript_EffectHealingWish:: attackcanceler - jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_FailedFromAtkString - attackstring - ppreduce + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_ButItFailed attackanimation waitanimation - instanthpdrop BS_ATTACKER + instanthpdrop setatkhptozero tryfaintmon BS_ATTACKER storehealingwish BS_ATTACKER -.if B_HEALING_WISH_SWITCH <= GEN_4 + jumpifgenconfiglowerthan CONFIG_HEALING_WISH_SWITCH, GEN_5, BattleScript_EffectHealingWishGen4 +BattleScript_EffectHealingWishEnd: + moveendall + end +BattleScript_EffectHealingWishGen4: openpartyscreen BS_ATTACKER, BattleScript_EffectHealingWishEnd waitstate switchhandleorder BS_ATTACKER, 2 @@ -2400,22 +2043,22 @@ BattleScript_EffectHealingWish:: switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER trytoclearprimalweather + tryrevertweatherform + flushtextbox + tryendneutralizinggas flushtextbox printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, FALSE, TRUE waitstate switchineffects BS_ATTACKER -.endif -BattleScript_EffectHealingWishEnd: - moveendall - end + goto BattleScript_EffectHealingWishEnd BattleScript_HealingWishActivates:: setbyte cMULTISTRING_CHOOSER, 0 goto BattleScript_EffectHealingWishRestore BattleScript_LunarDanceActivates:: setbyte cMULTISTRING_CHOOSER, 1 - restorepp BS_ATTACKER + restoremovepp BattleScript_EffectHealingWishRestore: printfromtable gHealingWishStringIds waitmessage B_WAIT_TIME_LONG @@ -2423,9 +2066,9 @@ BattleScript_EffectHealingWishRestore: waitanimation dmgtomaxattackerhp manipulatedamage DMG_CHANGE_SIGN - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - clearstatus BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE + clearstatus waitstate updatestatusicon BS_ATTACKER waitstate @@ -2433,31 +2076,25 @@ BattleScript_EffectHealingWishRestore: waitmessage B_WAIT_TIME_LONG return -BattleScript_EffectWorrySeed:: +BattleScript_EffectOverwriteAbility:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - tryworryseed BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + tryoverwriteability BattleScript_ButItFailed attackanimation waitanimation -.if B_ABILITY_POP_UP == TRUE copybyte gBattlerAbility, gBattlerTarget call BattleScript_AbilityPopUpOverwriteThenNormal -.endif recordability BS_TARGET printstring STRINGID_PKMNACQUIREDABILITY waitmessage B_WAIT_TIME_LONG trytoclearprimalweather tryrevertweatherform flushtextbox - tryendneutralizinggas BS_TARGET + tryendneutralizinggas goto BattleScript_MoveEnd BattleScript_EffectPowerSplit:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON averagestats STAT_ATK averagestats STAT_SPATK @@ -2469,8 +2106,6 @@ BattleScript_EffectPowerSplit:: BattleScript_EffectGuardSplit:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON averagestats STAT_DEF averagestats STAT_SPDEF @@ -2482,8 +2117,6 @@ BattleScript_EffectGuardSplit:: BattleScript_EffectHeartSwap:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON swapstatstages STAT_ATK swapstatstages STAT_DEF @@ -2500,8 +2133,6 @@ BattleScript_EffectHeartSwap:: BattleScript_EffectPowerSwap:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON swapstatstages STAT_ATK swapstatstages STAT_SPATK @@ -2513,8 +2144,6 @@ BattleScript_EffectPowerSwap:: BattleScript_EffectGuardSwap:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON swapstatstages STAT_DEF swapstatstages STAT_SPDEF @@ -2526,8 +2155,6 @@ BattleScript_EffectGuardSwap:: BattleScript_EffectSpeedSwap:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON swapstats STAT_SPEED attackanimation @@ -2538,9 +2165,7 @@ BattleScript_EffectSpeedSwap:: BattleScript_EffectTelekinesis:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, NO_ACC_CALC_CHECK_LOCK_ON settelekinesis BattleScript_ButItFailed attackanimation waitanimation @@ -2550,8 +2175,6 @@ BattleScript_EffectTelekinesis:: BattleScript_EffectStealthRock:: attackcanceler - attackstring - ppreduce setstealthrock BattleScript_ButItFailed attackanimation waitanimation @@ -2561,8 +2184,6 @@ BattleScript_EffectStealthRock:: BattleScript_EffectStickyWeb:: attackcanceler - attackstring - ppreduce setstickyweb BattleScript_ButItFailed attackanimation waitanimation @@ -2572,9 +2193,8 @@ BattleScript_EffectStickyWeb:: BattleScript_EffectGastroAcid:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + jumpifvolatile BS_TARGET, VOLATILE_GASTRO_ACID, BattleScript_ButItFailed setgastroacid BattleScript_ButItFailed attackanimation waitanimation @@ -2583,13 +2203,11 @@ BattleScript_EffectGastroAcid:: trytoclearprimalweather tryrevertweatherform flushtextbox - tryendneutralizinggas BS_TARGET + tryendneutralizinggas goto BattleScript_MoveEnd BattleScript_EffectToxicSpikes:: attackcanceler - attackstring - ppreduce settoxicspikes BattleScript_ButItFailed attackanimation waitanimation @@ -2599,9 +2217,9 @@ BattleScript_EffectToxicSpikes:: BattleScript_EffectMagnetRise:: attackcanceler - attackstring - ppreduce - setuserstatus3 STATUS3_MAGNET_RISE, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_ROOT, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_SMACK_DOWN, BattleScript_ButItFailed + trysetvolatile BS_ATTACKER, VOLATILE_MAGNET_RISE, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNLEVITATEDONELECTROMAGNETISM @@ -2610,8 +2228,6 @@ BattleScript_EffectMagnetRise:: BattleScript_EffectTrickRoom:: attackcanceler - attackstring - ppreduce setroom attackanimation waitanimation @@ -2636,8 +2252,6 @@ BattleScript_RoomServiceLoop_NextBattler: BattleScript_EffectWonderRoom:: BattleScript_EffectMagicRoom:: attackcanceler - attackstring - ppreduce setroom attackanimation waitanimation @@ -2647,9 +2261,7 @@ BattleScript_EffectMagicRoom:: BattleScript_EffectAquaRing:: attackcanceler - attackstring - ppreduce - setuserstatus3 STATUS3_AQUA_RING, BattleScript_ButItFailed + setvolatile BS_ATTACKER, VOLATILE_AQUA_RING attackanimation waitanimation printstring STRINGID_PKMNSURROUNDEDWITHVEILOFWATER @@ -2658,9 +2270,7 @@ BattleScript_EffectAquaRing:: BattleScript_EffectEmbargo:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE setembargo BattleScript_ButItFailed attackanimation waitanimation @@ -2670,8 +2280,6 @@ BattleScript_EffectEmbargo:: BattleScript_EffectTailwind:: attackcanceler - attackstring - ppreduce settailwind BattleScript_ButItFailed attackanimation waitanimation @@ -2700,23 +2308,23 @@ BattleScript_TryTailwindAbilitiesLoop_WindRider: BattleScript_TryTailwindAbilitiesLoop_WindPower: call BattleScript_AbilityPopUp - setcharge BS_TARGET + setvolatile BS_TARGET, VOLATILE_CHARGE_TIMER, 2 printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER waitmessage B_WAIT_TIME_LONG goto BattleScript_TryTailwindAbilitiesLoop_Increment BattleScript_EffectMiracleEye:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - setmiracleeye BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + setvolatile BS_TARGET, VOLATILE_MIRACLE_EYE goto BattleScript_IdentifiedFoe BattleScript_EffectGravity:: + call BattleScript_EffectGravityInternal + goto BattleScript_MoveEnd + +BattleScript_EffectGravityInternal: attackcanceler - attackstring - ppreduce setgravity BattleScript_ButItFailed attackanimation waitanimation @@ -2727,43 +2335,39 @@ BattleScript_EffectGravitySuccess:: selectfirstvalidtarget BattleScript_GravityLoop: movevaluescleanup - jumpifstatus3 BS_TARGET, STATUS3_ON_AIR | STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS, BattleScript_GravityLoopDrop + jumpfifsemiinvulnerable BS_TARGET, STATE_ON_AIR, BattleScript_GravityLoopDrop + jumpifvolatile BS_TARGET, VOLATILE_MAGNET_RISE, BattleScript_GravityLoopDrop + jumpifvolatile BS_TARGET, VOLATILE_TELEKINESIS, BattleScript_GravityLoopDrop goto BattleScript_GravityLoopEnd BattleScript_GravityLoopDrop: - bringdownairbornebattler BS_TARGET + gravityonairbornemons printstring STRINGID_GRAVITYGROUNDING waitmessage B_WAIT_TIME_LONG BattleScript_GravityLoopEnd: moveendcase MOVEEND_TARGET_VISIBLE jumpifnexttargetvalid BattleScript_GravityLoop restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectRoost:: attackcanceler - attackstring - ppreduce - tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_TARGET + tryhealhalfhealth BS_TARGET, BattleScript_AlreadyAtFullHp setroost goto BattleScript_PresentHealTarget BattleScript_EffectCaptivate:: setstatchanger STAT_SPATK, 2, TRUE attackcanceler - attackstring - ppreduce jumpifsubstituteblocks BattleScript_ButItFailed jumpifcaptivateaffected BattleScript_CaptivateCheckAcc goto BattleScript_ButItFailed BattleScript_CaptivateCheckAcc: accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE - goto BattleScript_StatDownFromAttackString + goto BattleScript_EffectStatDownFromStatBuffChange BattleScript_EffectHealBlock:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects sethealblock BattleScript_ButItFailed attackanimation @@ -2782,8 +2386,6 @@ BattleScript_HitEscapeSwitch: BattleScript_EffectPlaceholder:: attackcanceler - attackstring - ppreduce pause 5 printstring STRINGID_NOTDONEYET goto BattleScript_MoveEnd @@ -2791,10 +2393,7 @@ BattleScript_EffectPlaceholder:: BattleScript_EffectHit:: attackcanceler BattleScript_HitFromAccCheck:: - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE -BattleScript_HitFromAtkString:: - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE BattleScript_HitFromCritCalc:: critcalc damagecalc @@ -2810,9 +2409,7 @@ BattleScript_MoveEnd:: BattleScript_EffectHit_Ret:: attackcanceler BattleScript_EffectHit_RetFromAccCheck:: - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE BattleScript_EffectHit_RetFromCritCalc:: critcalc damagecalc @@ -2823,8 +2420,8 @@ BattleScript_Hit_RetFromAtkAnimation:: effectivenesssound hitanimation BS_TARGET waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE + datahpupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE critmessage waitmessage B_WAIT_TIME_LONG resultmessage @@ -2834,26 +2431,15 @@ BattleScript_Hit_RetFromAtkAnimation:: BattleScript_EffectNaturalGift:: attackcanceler - attackstring - ppreduce jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_MAGIC_ROOM, BattleScript_ButItFailed jumpifability BS_ATTACKER, ABILITY_KLUTZ, BattleScript_ButItFailed - jumpifstatus3 BS_ATTACKER, STATUS3_EMBARGO, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_EMBARGO, BattleScript_ButItFailed accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE - call BattleScript_EffectHit_RetFromCritCalc - jumpifmovehadnoeffect BattleScript_EffectNaturalGiftEnd - checkparentalbondcounter 2, BattleScript_EffectNaturalGiftEnd - removeitem BS_ATTACKER -BattleScript_EffectNaturalGiftEnd: - tryfaintmon BS_TARGET - goto BattleScript_MoveEnd + call BattleScript_HitFromCritCalc BattleScript_MakeMoveMissed:: setmoveresultflags MOVE_RESULT_MISSED -BattleScript_PrintMoveMissed:: - attackstring - ppreduce BattleScript_MoveMissedPause:: pause B_WAIT_TIME_SHORT BattleScript_MoveMissed:: @@ -2862,18 +2448,19 @@ BattleScript_MoveMissed:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectDarkVoid:: -.if B_DARK_VOID_FAIL >= GEN_7 - jumpifspecies BS_ATTACKER, SPECIES_DARKRAI, BattleScript_EffectNonVolatileStatus - goto BattleScript_PokemonCantUseTheMove -.endif - BattleScript_TerrainPreventsEnd2:: pause B_WAIT_TIME_SHORT printfromtable gTerrainPreventsStringIds waitmessage B_WAIT_TIME_LONG end2 +BattleScript_ImmunityProtectedEnd2:: + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_SHORT + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + end2 + BattleScript_ElectricTerrainPrevents:: pause B_WAIT_TIME_SHORT printstring STRINGID_ELECTRICTERRAINPREVENTS @@ -2924,14 +2511,6 @@ BattleScript_AromaVeilProtects: setmoveresultflags MOVE_RESULT_FAILED goto BattleScript_MoveEnd -BattleScript_PastelVeilProtects: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_PASTELVEILPROTECTED - waitmessage B_WAIT_TIME_LONG - setmoveresultflags MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - BattleScript_AbilityProtectsDoesntAffectRet:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -2944,7 +2523,7 @@ BattleScript_AbilityProtectsDoesntAffect:: setmoveresultflags MOVE_RESULT_FAILED goto BattleScript_MoveEnd -BattleScript_InsomniaProtects: +BattleScript_InsomniaProtects:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_PKMNSTAYEDAWAKEUSING @@ -2953,20 +2532,13 @@ BattleScript_InsomniaProtects: goto BattleScript_MoveEnd BattleScript_AlreadyAsleep:: - setalreadystatusedmoveattempt BS_ATTACKER + setalreadystatusedmoveattempt pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYASLEEP waitmessage B_WAIT_TIME_LONG setmoveresultflags MOVE_RESULT_FAILED goto BattleScript_MoveEnd -BattleScript_WasntAffected:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNWASNTAFFECTED - waitmessage B_WAIT_TIME_LONG - setmoveresultflags MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - BattleScript_CantMakeAsleep:: pause B_WAIT_TIME_SHORT printfromtable gUproarAwakeStringIds @@ -2976,26 +2548,25 @@ BattleScript_CantMakeAsleep:: BattleScript_EffectAbsorbLiquidOoze:: call BattleScript_AbilityPopUpTarget + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_EffectAbsorbRet goto BattleScript_EffectAbsorb BattleScript_EffectAbsorb:: - absorbhealthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printfromtable gAbsorbDrainStringIds waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER - bicword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_PASSIVE_DAMAGE +BattleScript_EffectAbsorbRet: return BattleScript_EffectExplosion:: attackcanceler - attackstring - ppreduce tryexplosion setatkhptozero waitstate jumpiffainted BS_TARGET, TRUE, BattleScript_MoveEnd - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE goto BattleScript_HitFromCritCalc BattleScript_FaintAttackerForExplosion:: @@ -3003,63 +2574,19 @@ BattleScript_FaintAttackerForExplosion:: return BattleScript_MaxHp50Recoil:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER return BattleScript_EffectDreamEater:: attackcanceler - jumpifsubstituteblocks BattleScript_DreamEaterNoEffect - jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_DreamEaterWorked - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_DreamEaterWorked -BattleScript_DreamEaterNoEffect: - attackstring - ppreduce - waitmessage B_WAIT_TIME_LONG - goto BattleScript_WasntAffected -BattleScript_DreamEaterWorked: - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_DreamEaterTryFaintEnd - setdrainedhp - manipulatedamage DMG_BIG_ROOT - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - jumpifmovehadnoeffect BattleScript_DreamEaterTryFaintEnd - printstring STRINGID_PKMNENERGYDRAINED - waitmessage B_WAIT_TIME_LONG -BattleScript_DreamEaterTryFaintEnd: - tryfaintmon BS_TARGET - goto BattleScript_MoveEnd - -BattleScript_EffectMirrorMove:: - attackcanceler - attackstring - pause B_WAIT_TIME_LONG - trymirrormove - ppreduce - setmoveresultflags MOVE_RESULT_FAILED - printstring STRINGID_MIRRORMOVEFAILED - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd +.if B_DREAM_EATER_SUBSTITUTE < GEN_5 + jumpifsubstituteblocks BattleScript_DoesntAffectTargetAtkString +.endif + jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_HitFromAccCheck + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_HitFromAccCheck + goto BattleScript_DoesntAffectTargetAtkString BattleScript_EffectAttackUp:: setstatchanger STAT_ATK, 1, FALSE @@ -3090,18 +2617,16 @@ BattleScript_EffectEvasionUp:: BattleScript_EffectStatUp:: attackcanceler BattleScript_EffectStatUpAfterAtkCanceler:: - attackstring - ppreduce - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpEnd - jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpAttackAnim + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_StatUpEnd + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_StatUpAttackAnim pause B_WAIT_TIME_SHORT + setmoveresultflags MOVE_RESULT_MISSED @ TODO: Is this even necessary? goto BattleScript_StatUpPrintString BattleScript_StatUpAttackAnim:: attackanimation waitanimation BattleScript_StatUpDoAnim:: - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpEnd BattleScript_StatUpPrintString:: printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -3109,8 +2634,6 @@ BattleScript_StatUpEnd:: goto BattleScript_MoveEnd BattleScript_StatUp:: - playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 -BattleScript_StatUpMsg:: printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG return @@ -3143,22 +2666,20 @@ BattleScript_EffectEvasionDown:: setstatchanger STAT_EVASION, 1, TRUE BattleScript_EffectStatDown: attackcanceler - jumpifsubstituteblocks BattleScript_FailedFromAtkString - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE -BattleScript_StatDownFromAttackString: - attackstring - ppreduce + jumpifsubstituteblocks BattleScript_ButItFailed +BattleScript_EffectStatDownFromAccCheck: + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE BattleScript_EffectStatDownFromStatBuffChange: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StatDownEnd - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StatDownDoAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StatDownEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_StatDownEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_StatDownDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_StatDownEnd pause B_WAIT_TIME_SHORT + setmoveresultflags MOVE_RESULT_MISSED @ TODO: Is this even necessary? goto BattleScript_StatDownPrintString BattleScript_StatDownDoAnim:: attackanimation waitanimation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_StatDownEnd bicword gHitMarker, HITMARKER_DISABLE_ANIMATION BattleScript_StatDownPrintString:: printfromtable gStatDownStringIds @@ -3169,14 +2690,11 @@ BattleScript_StatDownEnd:: BattleScript_MirrorArmorReflect:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp - jumpifstatus2 BS_ATTACKER, STATUS2_SUBSTITUTE, BattleScript_MirrorArmorDoesntAffect + jumpifvolatile BS_ATTACKER, VOLATILE_SUBSTITUTE, BattleScript_MirrorArmorDoesntAffect BattleScript_MirrorArmorReflectStatLoss: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_MIRROR_ARMOR | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_MirrorArmorReflectAnim + statbuffchange BS_ATTACKER, STAT_CHANGE_MIRROR_ARMOR | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_MirrorArmorReflectPrintString goto BattleScript_MirrorArmorReflectWontFall -BattleScript_MirrorArmorReflectAnim: - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 BattleScript_MirrorArmorReflectPrintString: printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG @@ -3203,15 +2721,12 @@ BattleScript_MirrorArmorReflectStickyWeb: goto BattleScript_StickyWebOnSwitchInEnd BattleScript_StatDown:: - playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG return BattleScript_EffectHaze:: attackcanceler - attackstring - ppreduce attackanimation waitanimation normalisebuffs @@ -3221,23 +2736,18 @@ BattleScript_EffectHaze:: BattleScript_EffectBide:: attackcanceler - attackstring - ppreduce attackanimation waitanimation - orword gHitMarker, HITMARKER_CHARGING setbide goto BattleScript_MoveEnd BattleScript_EffectRoar:: attackcanceler - attackstring - ppreduce jumpifroarfails BattleScript_ButItFailed jumpifcommanderactive BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut - jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted + jumpifvolatile BS_TARGET, VOLATILE_ROOT, BattleScript_PrintMonIsRooted jumpiftargetdynamaxed BattleScript_RoarBlockedByDynamax accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE @@ -3263,8 +2773,6 @@ BattleScript_ScaleShot:: BattleScript_EffectConversion:: attackcanceler - attackstring - ppreduce tryconversiontypechange BattleScript_ButItFailed attackanimation waitanimation @@ -3274,21 +2782,18 @@ BattleScript_EffectConversion:: BattleScript_EffectRestoreHp:: attackcanceler - attackstring - ppreduce - tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER + tryhealhalfhealth BS_ATTACKER, BattleScript_AlreadyAtFullHp attackanimation waitanimation BattleScript_RestoreHp: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AlreadyPoisoned:: - setalreadystatusedmoveattempt BS_ATTACKER + setalreadystatusedmoveattempt pause B_WAIT_TIME_LONG printstring STRINGID_PKMNALREADYPOISONED waitmessage B_WAIT_TIME_LONG @@ -3296,39 +2801,28 @@ BattleScript_AlreadyPoisoned:: BattleScript_ImmunityProtected:: call BattleScript_AbilityPopUp - pause B_WAIT_TIME_SHORT - printfromtable gStatusPreventionStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + goto BattleScript_DoesntAffectTargetAtkString BattleScript_EffectAuroraVeil:: attackcanceler - attackstring - ppreduce - setauroraveil BS_ATTACKER + setauroraveil goto BattleScript_PrintReflectLightScreenSafeguardString BattleScript_EffectLightScreen:: attackcanceler - attackstring - ppreduce setlightscreen goto BattleScript_PrintReflectLightScreenSafeguardString BattleScript_EffectRest:: attackcanceler - attackstring - ppreduce jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_RestIsAlreadyAsleep jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_RestIsAlreadyAsleep jumpifuproarwakes BattleScript_RestCantSleep jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_InsomniaProtects jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_InsomniaProtects jumpifability BS_ATTACKER, ABILITY_PURIFYING_SALT, BattleScript_InsomniaProtects -.if B_LEAF_GUARD_PREVENTS_REST >= GEN_5 - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardPreventsRest -.endif - trysetrest BattleScript_AlreadyAtFullHp + jumpifabilitypreventsrest BS_TARGET, BattleScript_AbilityPreventsRest + trysetrest pause B_WAIT_TIME_SHORT printfromtable gRestUsedStringIds waitmessage B_WAIT_TIME_LONG @@ -3343,13 +2837,13 @@ BattleScript_RestCantSleep:: goto BattleScript_MoveEnd BattleScript_RestIsAlreadyAsleep:: - setalreadystatusedmoveattempt BS_ATTACKER + setalreadystatusedmoveattempt pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYASLEEP2 waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_LeafGuardPreventsRest:: +BattleScript_AbilityPreventsRest:: pause B_WAIT_TIME_SHORT printstring STRINGID_BUTITFAILED waitmessage B_WAIT_TIME_LONG @@ -3357,13 +2851,9 @@ BattleScript_LeafGuardPreventsRest:: BattleScript_EffectOHKO:: attackcanceler - attackstring - ppreduce - accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE typecalc jumpifmovehadnoeffect BattleScript_HitFromAtkAnimation tryKO BattleScript_KOFail - trysetdestinybondtohappen goto BattleScript_HitFromAtkAnimation BattleScript_KOFail:: pause B_WAIT_TIME_LONG @@ -3375,16 +2865,14 @@ BattleScript_RecoilIfMiss:: printstring STRINGID_PKMNCRASHED waitmessage B_WAIT_TIME_LONG jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_RecoilEnd - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER +BattleScript_RecoilEnd: return BattleScript_EffectMist:: attackcanceler - attackstring - ppreduce setmist attackanimation waitanimation @@ -3394,9 +2882,8 @@ BattleScript_EffectMist:: BattleScript_EffectFocusEnergy:: attackcanceler - attackstring - ppreduce - jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY_ANY, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_DRAGON_CHEER, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_FOCUS_ENERGY, BattleScript_ButItFailed setfocusenergy BS_TARGET attackanimation waitanimation @@ -3406,23 +2893,21 @@ BattleScript_EffectFocusEnergy:: BattleScript_EffectConfuse:: attackcanceler - attackstring - ppreduce jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents jumpifsubstituteblocks BattleScript_ButItFailed - jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_AlreadyConfused + jumpifvolatile BS_TARGET, VOLATILE_CONFUSION, BattleScript_AlreadyConfused jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation - seteffectprimary MOVE_EFFECT_CONFUSION + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_CONFUSION resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AlreadyConfused:: - setalreadystatusedmoveattempt BS_ATTACKER + setalreadystatusedmoveattempt pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYCONFUSED waitmessage B_WAIT_TIME_LONG @@ -3466,9 +2951,10 @@ BattleScript_EffectEvasionUp2:: BattleScript_EffectTransform:: attackcanceler - attackstring - ppreduce trytoclearprimalweather + tryrevertweatherform + flushtextbox + tryendneutralizinggas flushtextbox transformdataexecution attackanimation @@ -3507,24 +2993,26 @@ BattleScript_EffectEvasionDown2:: BattleScript_EffectReflect:: attackcanceler - attackstring - ppreduce setreflect BattleScript_PrintReflectLightScreenSafeguardString:: attackanimation waitanimation -BattleScript_EffectAuroraVeilSuccess:: printfromtable gReflectLightScreenSafeguardStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_MoveEffectAuroraVeil:: + printfromtable gReflectLightScreenSafeguardStringIds + waitmessage B_WAIT_TIME_LONG + return + BattleScript_VoltAbsorbHeal: copybyte gBattlerAbility, gBattlerTarget - tryhealquarterhealth BS_TARGET BattleScript_MonMadeMoveUseless @ Check if max hp + tryhealquarterhealth BS_TARGET, BattleScript_MonMadeMoveUseless @ Check if max hp goto BattleScript_MoveHPDrain BattleScript_AlreadyParalyzed:: - setalreadystatusedmoveattempt BS_ATTACKER + setalreadystatusedmoveattempt pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNISALREADYPARALYZED waitmessage B_WAIT_TIME_LONG @@ -3538,49 +3026,43 @@ BattleScript_PowerHerbActivation: return BattleScript_EffectTwoTurnsAttack:: - jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn + jumpifvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn tryfiretwoturnmovewithoutcharging BS_ATTACKER, BattleScript_EffectHit @ e.g. Solar Beam call BattleScript_FirstChargingTurn tryfiretwoturnmoveaftercharging BS_ATTACKER, BattleScript_TwoTurnMovesSecondTurn @ e.g. Electro Shot - jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_TwoTurnMovesSecondPowerHerbActivates + jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_TwoTurnMovesSecondPowerHerbActivates, TRUE goto BattleScript_MoveEnd BattleScript_EffectGeomancy:: - jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_GeomancySecondTurn - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_GeomancySecondTurn + jumpifvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS, BattleScript_GeomancySecondTurn call BattleScript_FirstChargingTurn jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd call BattleScript_PowerHerbActivation BattleScript_GeomancySecondTurn: attackcanceler setbyte sB_ANIM_TURN, 1 - clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING - orword gHitMarker, HITMARKER_NO_PPDEDUCT - attackstring + clearvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_GeomancyDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0 setstatchanger STAT_SPATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyTrySpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpDef, BIT_SPDEF | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_GeomancyTrySpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_GeomancyTrySpDef:: setstatchanger STAT_SPDEF, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpeed, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_GeomancyTrySpeed printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_GeomancyTrySpeed:: setstatchanger STAT_SPEED, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_GeomancyEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_GeomancyEnd:: @@ -3588,17 +3070,10 @@ BattleScript_GeomancyEnd:: BattleScript_FirstChargingTurn:: attackcanceler -@ before Gen 5, charge moves did not print an attack string on the charge turn -.if B_UPDATED_MOVE_DATA >= GEN_5 - flushtextbox - attackstring waitmessage B_WAIT_TIME_LONG -.endif - ppreduce BattleScript_FirstChargingTurnAfterAttackString: setsemiinvulnerablebit @ only for moves with EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP - orword gHitMarker, HITMARKER_CHARGING - seteffectprimary MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER + setchargingturn twoturnmoveschargestringandanimation setadditionaleffects @ only onChargeTurnOnly effects will work here return @@ -3608,46 +3083,38 @@ BattleScript_TwoTurnMovesSecondPowerHerbActivates: trygulpmissile @ Edge case for Cramorant ability Gulp Missile BattleScript_FromTwoTurnMovesSecondTurnRet: call BattleScript_TwoTurnMovesSecondTurnRet - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE -@ before Gen 5, charge moves did not print an attack string on the charge turn -.if B_UPDATED_MOVE_DATA < GEN_5 - attackstring -.endif + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE goto BattleScript_HitFromCritCalc BattleScript_TwoTurnMovesSecondTurn:: attackcanceler call BattleScript_TwoTurnMovesSecondTurnRet - orword gHitMarker, HITMARKER_NO_PPDEDUCT goto BattleScript_HitFromAccCheck BattleScript_TwoTurnMovesSecondTurnRet: setbyte sB_ANIM_TURN, 1 setbyte sB_ANIM_TARGETS_HIT, 0 - clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING + clearvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS clearsemiinvulnerablebit @ only for moves with EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP return BattleScript_EffectSubstitute:: attackcanceler - ppreduce - attackstring waitstate - jumpifstatus2 BS_ATTACKER, STATUS2_SUBSTITUTE, BattleScript_AlreadyHasSubstitute + jumpifvolatile BS_ATTACKER, VOLATILE_SUBSTITUTE, BattleScript_AlreadyHasSubstitute setsubstitute jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SUBSTITUTE_FAILED, BattleScript_SubstituteString - orword gHitMarker, HITMARKER_PASSIVE_DAMAGE attackanimation waitanimation - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE BattleScript_SubstituteString:: pause B_WAIT_TIME_SHORT printfromtable gSubstituteUsedStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AlreadyHasSubstitute:: - setalreadystatusedmoveattempt BS_ATTACKER + setalreadystatusedmoveattempt pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNHASSUBSTITUTE waitmessage B_WAIT_TIME_LONG @@ -3661,16 +3128,14 @@ BattleScript_MoveUsedMustRecharge:: BattleScript_EffectRage:: attackcanceler accuracycheck BattleScript_RageMiss, ACC_CURR_MOVE - seteffectprimary MOVE_EFFECT_RAGE - goto BattleScript_HitFromAtkString + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_RAGE + goto BattleScript_HitFromCritCalc BattleScript_RageMiss:: - clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_RAGE - goto BattleScript_PrintMoveMissed + clearvolatile BS_ATTACKER, VOLATILE_RAGE + goto BattleScript_MoveMissedPause BattleScript_EffectMimic:: attackcanceler - attackstring - ppreduce jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON mimicattackcopy BattleScript_ButItFailed @@ -3680,19 +3145,9 @@ BattleScript_EffectMimic:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectMetronome:: - attackcanceler - attackstring - pause B_WAIT_TIME_SHORT - attackanimation - waitanimation - metronome - BattleScript_EffectLeechSeed:: attackcanceler - attackstring pause B_WAIT_TIME_SHORT - ppreduce jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_DoLeechSeed, ACC_CURR_MOVE BattleScript_DoLeechSeed:: @@ -3705,8 +3160,6 @@ BattleScript_DoLeechSeed:: BattleScript_EffectDoNothing:: attackcanceler - attackstring - ppreduce attackanimation waitanimation incrementgamestat GAME_STAT_USED_SPLASH @@ -3716,8 +3169,6 @@ BattleScript_EffectDoNothing:: BattleScript_EffectHoldHands:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_ButItFailed attackanimation @@ -3726,8 +3177,6 @@ BattleScript_EffectHoldHands:: BattleScript_EffectCelebrate:: attackcanceler - attackstring - ppreduce attackanimation waitanimation printstring STRINGID_CELEBRATEMESSAGE @@ -3736,17 +3185,13 @@ BattleScript_EffectCelebrate:: BattleScript_EffectHappyHour:: attackcanceler - attackstring - ppreduce attackanimation waitanimation - seteffectprimary MOVE_EFFECT_HAPPY_HOUR + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_HAPPY_HOUR goto BattleScript_MoveEnd BattleScript_EffectDisable:: attackcanceler - attackstring - ppreduce jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE disablelastusedattack BattleScript_ButItFailed @@ -3758,10 +3203,8 @@ BattleScript_EffectDisable:: BattleScript_EffectCounter:: attackcanceler - counterdamagecalculator BattleScript_FailedFromAtkString - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + counterdamagecalculator BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc clearmoveresultflags MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE adjustdamage @@ -3769,9 +3212,7 @@ BattleScript_EffectCounter:: BattleScript_EffectEncore:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects trysetencore BattleScript_ButItFailed attackanimation @@ -3782,43 +3223,30 @@ BattleScript_EffectEncore:: BattleScript_EffectPainSplit:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON painsplitdmgcalc BattleScript_ButItFailed attackanimation waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_SHAREDPAIN waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectSnore:: attackcanceler - jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_SnoreIsAsleep - jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SnoreIsAsleep - attackstring - ppreduce - goto BattleScript_ButItFailed -BattleScript_SnoreIsAsleep:: jumpifhalfword CMP_EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoSnore printstring STRINGID_PKMNFASTASLEEP waitmessage B_WAIT_TIME_LONG statusanimation BS_ATTACKER BattleScript_DoSnore:: - attackstring - ppreduce accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE goto BattleScript_HitFromCritCalc BattleScript_EffectConversion2:: attackcanceler - attackstring - ppreduce settypetorandomresistance BattleScript_ButItFailed attackanimation waitanimation @@ -3828,8 +3256,6 @@ BattleScript_EffectConversion2:: BattleScript_EffectLockOn:: attackcanceler - attackstring - ppreduce jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE setalwayshitflag @@ -3841,8 +3267,6 @@ BattleScript_EffectLockOn:: BattleScript_EffectSketch:: attackcanceler - attackstring - ppreduce copymovepermanently BattleScript_ButItFailed attackanimation waitanimation @@ -3850,33 +3274,9 @@ BattleScript_EffectSketch:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectSleepTalk:: - attackcanceler - jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_SleepTalkIsAsleep - jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SleepTalkIsAsleep - attackstring - ppreduce - goto BattleScript_ButItFailed -BattleScript_SleepTalkIsAsleep:: - printstring STRINGID_PKMNFASTASLEEP - waitmessage B_WAIT_TIME_LONG - statusanimation BS_ATTACKER - attackstring - ppreduce - orword gHitMarker, HITMARKER_NO_PPDEDUCT - trychoosesleeptalkmove BattleScript_SleepTalkUsingMove - pause B_WAIT_TIME_LONG - goto BattleScript_ButItFailed -BattleScript_SleepTalkUsingMove:: - attackanimation - waitanimation - jumptocalledmove TRUE - BattleScript_EffectDestinyBond:: attackcanceler - attackstring - ppreduce - trysetdestinybond BattleScript_ButItFailed + setvolatile BS_ATTACKER, VOLATILE_DESTINY_BOND, 2 attackanimation waitanimation printstring STRINGID_PKMNTRYINGTOTAKEFOE @@ -3890,8 +3290,6 @@ BattleScript_MoveEffectEerieSpell:: BattleScript_EffectSpite:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE tryspiteppreduce BattleScript_ButItFailed attackanimation @@ -3900,13 +3298,11 @@ BattleScript_EffectSpite:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +@ TODO: Simplfy script BattleScript_EffectHealBell:: attackcanceler - attackstring - ppreduce attackanimation waitanimation -BattleScript_EffectHealBell_FromHeal:: healpartystatus waitstate printfromtable gPartyStatusHealStringIds @@ -3926,56 +3322,59 @@ BattleScript_PartyHealEnd:: waitstate goto BattleScript_MoveEnd +BattleScript_MoveEffectAromatherapy:: + healpartystatus + waitstate + printfromtable gPartyStatusHealStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER_WITH_PARTNER + waitstate + return + BattleScript_EffectMeanLook:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON - jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed + jumpifvolatile BS_TARGET, VOLATILE_ESCAPE_PREVENTION, BattleScript_ButItFailed jumpifsubstituteblocks BattleScript_ButItFailed .if B_GHOSTS_ESCAPE >= GEN_6 jumpiftype BS_TARGET, TYPE_GHOST, BattleScript_ButItFailed .endif attackanimation waitanimation - seteffectprimary MOVE_EFFECT_PREVENT_ESCAPE + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_PREVENT_ESCAPE printstring STRINGID_TARGETCANTESCAPENOW waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectNightmare:: attackcanceler - attackstring - ppreduce jumpifsubstituteblocks BattleScript_ButItFailed - jumpifstatus2 BS_TARGET, STATUS2_NIGHTMARE, BattleScript_ButItFailed + jumpifvolatile BS_TARGET, VOLATILE_NIGHTMARE, BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_NightmareWorked jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_NightmareWorked goto BattleScript_ButItFailed BattleScript_NightmareWorked:: attackanimation waitanimation - seteffectprimary MOVE_EFFECT_NIGHTMARE + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_NIGHTMARE printstring STRINGID_PKMNFELLINTONIGHTMARE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectMinimize:: attackcanceler - setminimize -.if B_MINIMIZE_EVASION >= GEN_5 + setvolatile BS_ATTACKER, VOLATILE_MINIMIZE + jumpifgenconfiglowerthan CONFIG_MINIMIZE_EVASION, GEN_5, BattleScript_EffectMinimizeGen4 setstatchanger STAT_EVASION, 2, FALSE -.else + goto BattleScript_EffectStatUpAfterAtkCanceler +BattleScript_EffectMinimizeGen4: setstatchanger STAT_EVASION, 1, FALSE -.endif goto BattleScript_EffectStatUpAfterAtkCanceler BattleScript_EffectCurse:: jumpiftype BS_ATTACKER, TYPE_GHOST, BattleScript_GhostCurse attackcanceler jumpiftype BS_ATTACKER, TYPE_GHOST, BattleScript_DoGhostCurse - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPEED, MIN_STAT_STAGE, BattleScript_CurseTrySpeed jumpifstat BS_ATTACKER, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CurseTrySpeed jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_ButItFailed @@ -3984,57 +3383,42 @@ BattleScript_CurseTrySpeed:: setbyte sB_ANIM_TURN, 1 attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_SPEED, STAT_CHANGE_NEGATIVE setstatchanger STAT_SPEED, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryAttack + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryAttack printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CurseTryAttack:: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryDefense + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryDefense, BIT_DEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CurseTryDefense:: setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CurseEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CurseEnd:: goto BattleScript_MoveEnd BattleScript_GhostCurse:: jumpifbytenotequal gBattlerAttacker, gBattlerTarget, BattleScript_DoGhostCurse - getmovetarget BS_ATTACKER + getmovetarget BattleScript_DoGhostCurse:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON cursetarget BattleScript_ButItFailed - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE setbyte sB_ANIM_TURN, 0 attackanimation waitanimation - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_PKMNLAIDCURSE waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd -BattleScript_EffectMatBlock:: - attackcanceler - jumpifnotfirstturn BattleScript_FailedFromAtkString - goto BattleScript_ProtectLikeAtkString - BattleScript_EffectProtect:: BattleScript_EffectEndure:: attackcanceler -BattleScript_ProtectLikeAtkString: - attackstring - ppreduce setprotectlike attackanimation waitanimation @@ -4044,9 +3428,7 @@ BattleScript_ProtectLikeAtkString: BattleScript_EffectSpikes:: attackcanceler - trysetspikes BattleScript_FailedFromAtkString - attackstring - ppreduce + trysetspikes BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_SPIKESSCATTERED @@ -4055,11 +3437,9 @@ BattleScript_EffectSpikes:: BattleScript_EffectForesight:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON - jumpifstatus2 BS_TARGET, STATUS2_FORESIGHT, BattleScript_ButItFailed - setforesight + jumpifvolatile BS_TARGET, VOLATILE_FORESIGHT, BattleScript_ButItFailed + setvolatile BS_TARGET, VOLATILE_FORESIGHT BattleScript_IdentifiedFoe: attackanimation waitanimation @@ -4069,8 +3449,6 @@ BattleScript_IdentifiedFoe: BattleScript_EffectPerishSong:: attackcanceler - attackstring - ppreduce trysetperishsong BattleScript_ButItFailed savetarget attackanimation @@ -4080,7 +3458,7 @@ BattleScript_EffectPerishSong:: setbyte gBattlerTarget, 0 BattleScript_PerishSongLoop:: jumpifblockedbysoundproof BS_TARGET, BattleScript_PerishSongBlocked - jumpifpranksterblocked BS_TARGET, BattleScript_PerishSongNotAffected + jumpifpranksterblocked BattleScript_PerishSongNotAffected BattleScript_PerishSongLoopIncrement:: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_PerishSongLoop @@ -4100,17 +3478,13 @@ BattleScript_PerishSongNotAffected: BattleScript_EffectSandstorm:: attackcanceler - attackstring - ppreduce call BattleScript_CheckPrimalWeather setfieldweather BATTLE_WEATHER_SANDSTORM goto BattleScript_MoveWeatherChange BattleScript_EffectRollout:: attackcanceler - attackstring - jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_RolloutCheckAccuracy - ppreduce + jumpifvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS, BattleScript_RolloutCheckAccuracy BattleScript_RolloutCheckAccuracy:: accuracycheck BattleScript_RolloutHit, ACC_CURR_MOVE BattleScript_RolloutHit:: @@ -4121,29 +3495,23 @@ BattleScript_RolloutHit:: BattleScript_EffectSwagger:: attackcanceler jumpifsubstituteblocks BattleScript_MakeMoveMissed - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifconfusedandstatmaxed STAT_ATK, BattleScript_ButItFailed attackanimation waitanimation setstatchanger STAT_ATK, 2, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_SwaggerTryConfuse - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_SwaggerTryConfuse - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_SwaggerTryConfuse + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_SwaggerTryConfuse printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_SwaggerTryConfuse: jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents jumpifsafeguard BattleScript_SafeguardProtected - seteffectprimary MOVE_EFFECT_CONFUSION + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_CONFUSION goto BattleScript_MoveEnd BattleScript_EffectFuryCutter:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_FuryCutterHit, ACC_CURR_MOVE BattleScript_FuryCutterHit: handlefurycutter @@ -4155,32 +3523,36 @@ BattleScript_FuryCutterHit: BattleScript_TryDestinyKnotTarget: jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet - infatuatewithbattler BS_TARGET, BS_ATTACKER playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT waitanimation - status2animation BS_TARGET, STATUS2_INFATUATION - waitanimation printstring STRINGID_DESTINYKNOTACTIVATES + tryinfatuating BattleScript_TryDestinyKnotTargetFailed + volatileanimation BS_TARGET, VOLATILE_INFATUATION + waitanimation + waitmessage B_WAIT_TIME_LONG + goto BattleScript_TryDestinyKnotTargetRet +BattleScript_TryDestinyKnotTargetFailed: + pause B_WAIT_TIME_SHORT + printstring STRINGID_BUTITFAILED waitmessage B_WAIT_TIME_LONG BattleScript_TryDestinyKnotTargetRet: return BattleScript_TryDestinyKnotAttacker: - jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotAttackerRet - infatuatewithbattler BS_ATTACKER, BS_TARGET + jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT waitanimation - status2animation BS_ATTACKER, STATUS2_INFATUATION - waitanimation + swapattackerwithtarget printstring STRINGID_DESTINYKNOTACTIVATES + tryinfatuating BattleScript_SwapTargetAttackerButItFailed + swapattackerwithtarget + volatileanimation BS_ATTACKER, VOLATILE_INFATUATION + waitanimation waitmessage B_WAIT_TIME_LONG -BattleScript_TryDestinyKnotAttackerRet: return BattleScript_EffectAttract:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects tryinfatuating BattleScript_ButItFailed @@ -4193,45 +3565,35 @@ BattleScript_EffectAttract:: BattleScript_EffectPresent:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc presentdamagecalculation BattleScript_EffectSafeguard:: attackcanceler - attackstring - ppreduce setsafeguard goto BattleScript_PrintReflectLightScreenSafeguardString BattleScript_EffectMagnitude:: - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_EffectMagnitudeTarget attackcanceler - attackstring - ppreduce magnitudedamagecalculation pause B_WAIT_TIME_SHORT printstring STRINGID_MAGNITUDESTRENGTH waitmessage B_WAIT_TIME_LONG -BattleScript_EffectMagnitudeTarget: accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE goto BattleScript_HitFromCritCalc BattleScript_EffectBatonPass:: attackcanceler - attackstring - ppreduce jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_ButItFailed attackanimation waitanimation openpartyscreen BS_ATTACKER, BattleScript_ButItFailed - switchoutabilities BS_ATTACKER waitstate - switchhandleorder BS_ATTACKER, 2 returntoball BS_ATTACKER, FALSE + switchoutabilities BS_ATTACKER + switchhandleorder BS_ATTACKER, 2 getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER @@ -4248,15 +3610,11 @@ BattleScript_EffectSynthesis:: BattleScript_EffectMoonlight:: BattleScript_EffectShoreUp:: attackcanceler - attackstring - ppreduce recoverbasedonsunlight BattleScript_AlreadyAtFullHp goto BattleScript_PresentHealTarget BattleScript_EffectRainDance:: attackcanceler - attackstring - ppreduce call BattleScript_CheckPrimalWeather setfieldweather BATTLE_WEATHER_RAIN BattleScript_MoveWeatherChange:: @@ -4273,8 +3631,6 @@ BattleScript_MoveWeatherChangeRet:: BattleScript_EffectSunnyDay:: attackcanceler - attackstring - ppreduce call BattleScript_CheckPrimalWeather setfieldweather BATTLE_WEATHER_SUN goto BattleScript_MoveWeatherChange @@ -4349,27 +3705,21 @@ BattleScript_BlockedByPrimalWeatherRet:: BattleScript_EffectBellyDrum:: attackcanceler - attackstring - ppreduce - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_ButItFailed + jumpifstatignorecontrary BS_ATTACKER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_ButItFailed halvehp BattleScript_ButItFailed - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE attackanimation waitanimation - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - playstatchangeanimation BS_ATTACKER, BIT_ATK, STAT_CHANGE_BY_TWO + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE setstatchanger STAT_ATK, MAX_STAT_STAGE, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd printstring STRINGID_PKMNCUTHPMAXEDATTACK waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectPsychUp:: attackcanceler - attackstring - ppreduce - copyfoestats BattleScript_ButItFailed + copyfoestats attackanimation waitanimation printstring STRINGID_PKMNCOPIEDSTATCHANGES @@ -4378,10 +3728,8 @@ BattleScript_EffectPsychUp:: BattleScript_EffectMirrorCoat:: attackcanceler - mirrorcoatdamagecalculator BattleScript_FailedFromAtkString - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + mirrorcoatdamagecalculator BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc clearmoveresultflags MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE adjustdamage @@ -4389,9 +3737,7 @@ BattleScript_EffectMirrorCoat:: BattleScript_EffectFutureSight:: attackcanceler - attackstring - ppreduce - trysetfutureattack BattleScript_ButItFailed + setfutureattack attackanimation waitanimation printfromtable gFutureMoveUsedStringIds @@ -4399,76 +3745,42 @@ BattleScript_EffectFutureSight:: goto BattleScript_MoveEnd BattleScript_EffectTeleport:: -.if B_TELEPORT_BEHAVIOR >= GEN_8 + jumpifgenconfiglowerthan CONFIG_TELEPORT_BEHAVIOR, GEN_8, BattleScript_EffectTeleportGen7 jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_EffectBatonPass jumpifside BS_ATTACKER, B_SIDE_PLAYER, BattleScript_EffectBatonPass -.else + goto BattleScript_DoEffectTeleport +BattleScript_EffectTeleportGen7:: jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_FailedFromAtkCanceler -.endif +BattleScript_DoEffectTeleport:: attackcanceler - attackstring - ppreduce - getifcantrunfrombattle BS_ATTACKER + isrunningimpossible jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FORBIDDEN, BattleScript_ButItFailed jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FAILURE, BattleScript_PrintAbilityMadeIneffective attackanimation waitanimation printstring STRINGID_PKMNFLEDFROMBATTLE waitmessage B_WAIT_TIME_LONG - setoutcomeonteleport BS_ATTACKER + setteleportoutcome BS_ATTACKER goto BattleScript_MoveEnd BattleScript_EffectBeatUp:: + jumpifgenconfiglowerthan CONFIG_BEAT_UP, GEN_5, BattleScript_EffectBeatUpGen3 + goto BattleScript_EffectHit + +BattleScript_EffectBeatUpGen3: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE -.if B_BEAT_UP >= GEN_5 - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - trydobeatup - goto BattleScript_HitFromAtkAnimation -.else - attackstring + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE pause B_WAIT_TIME_SHORT - ppreduce - setbyte gBattleCommunication, 0 -BattleScript_BeatUpLoop:: - movevaluescleanup - trydobeatup BattleScript_BeatUpEnd, BattleScript_ButItFailed + trydobeatup BattleScript_MoveEnd, BattleScript_ButItFailed printstring STRINGID_PKMNATTACK - critcalc - jumpifcriticalhit BattleScript_BeatUpAttack - manipulatedamage DMG_DOUBLED -BattleScript_BeatUpAttack:: - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET - moveendto MOVEEND_NEXT_TARGET - goto BattleScript_BeatUpLoop -BattleScript_BeatUpEnd:: - end -.endif + goto BattleScript_HitFromCritCalc BattleScript_EffectDefenseCurl:: attackcanceler - attackstring - ppreduce - setdefensecurlbit + setvolatile BS_TARGET, VOLATILE_DEFENSE_CURL setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DefenseCurlDoStatUpAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpPrintString + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_DefenseCurlDoStatUpAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_StatUpPrintString attackanimation waitanimation BattleScript_DefenseCurlDoStatUpAnim:: @@ -4476,15 +3788,12 @@ BattleScript_DefenseCurlDoStatUpAnim:: BattleScript_EffectSoftboiled:: attackcanceler - attackstring - ppreduce - tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_TARGET + tryhealhalfhealth BS_TARGET, BattleScript_AlreadyAtFullHp BattleScript_PresentHealTarget:: attackanimation waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -4495,17 +3804,8 @@ BattleScript_AlreadyAtFullHp:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectFirstTurnOnly:: - attackcanceler - jumpifnotfirstturn BattleScript_FailedFromAtkString - goto BattleScript_EffectHit - BattleScript_FailedFromAtkCanceler:: attackcanceler -BattleScript_FailedFromAtkString:: - attackstring -BattleScript_FailedFromPpReduce:: - ppreduce BattleScript_ButItFailed:: pause B_WAIT_TIME_SHORT setmoveresultflags MOVE_RESULT_FAILED @@ -4518,6 +3818,9 @@ BattleScript_RestoreAttackerButItFailed: BattleScript_RestoreTargetButItFailed: restoretarget goto BattleScript_ButItFailed +BattleScript_SwapTargetAttackerButItFailed: + swapattackerwithtarget + goto BattleScript_ButItFailed BattleScript_NotAffected:: pause B_WAIT_TIME_SHORT @@ -4534,23 +3837,12 @@ BattleScript_NotAffectedAbilityPopUp:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectUproar:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_UproarHit - ppreduce -BattleScript_UproarHit:: - goto BattleScript_HitFromCritCalc - BattleScript_EffectStockpile:: attackcanceler - attackstring - ppreduce stockpile 0 attackanimation waitanimation - printfromtable gStockpileUsedStringIds + printstring STRINGID_PKMNSTOCKPILED waitmessage B_WAIT_TIME_LONG .if B_STOCKPILE_RAISES_DEFS < GEN_4 goto BattleScript_EffectStockpileEnd @@ -4559,17 +3851,15 @@ BattleScript_EffectStockpile:: jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_EffectStockpileDef jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_EffectStockpileEnd BattleScript_EffectStockpileDef: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, 0 setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectStockpileSpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectStockpileSpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectStockpileSpDef, BIT_SPDEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectStockpileSpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectStockpileSpDef:: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectStockpileEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectStockpileEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectStockpileEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectStockpileEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectStockpileEnd: @@ -4585,9 +3875,7 @@ BattleScript_MoveEffectStockpileWoreOff:: return BattleScript_StockpileStatChangeDown: - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN, BattleScript_StockpileStatChangeDown_Ret - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_CERTAIN, BattleScript_StockpileStatChangeDown_Ret printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_StockpileStatChangeDown_Ret: @@ -4596,67 +3884,42 @@ BattleScript_StockpileStatChangeDown_Ret: BattleScript_EffectSpitUp:: attackcanceler jumpifbyte CMP_EQUAL, cMISS_TYPE, B_MSG_PROTECTED, BattleScript_SpitUpFailProtect - attackstring - ppreduce - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE damagecalc adjustdamage - stockpiletobasedamage BattleScript_SpitUpFail + stockpiletobasedamage call BattleScript_Hit_RetFromAtkAnimation tryfaintmon BS_TARGET removestockpilecounters - goto BattleScript_SpitUpEnd -BattleScript_SpitUpFail:: - checkparentalbondcounter 2, BattleScript_SpitUpEnd - pause B_WAIT_TIME_SHORT - printstring STRINGID_FAILEDTOSPITUP - waitmessage B_WAIT_TIME_LONG -BattleScript_SpitUpEnd: goto BattleScript_MoveEnd BattleScript_SpitUpFailProtect:: - attackstring - ppreduce pause B_WAIT_TIME_LONG - stockpiletobasedamage BattleScript_SpitUpFail + stockpiletobasedamage resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectSwallow:: attackcanceler - attackstring - ppreduce - stockpiletohpheal BattleScript_SwallowFail + stockpiletohpheal BattleScript_ButItFailed attackanimation waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG removestockpilecounters goto BattleScript_MoveEnd - -BattleScript_SwallowFail:: - pause B_WAIT_TIME_SHORT - printfromtable gSwallowFailStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - BattleScript_EffectHail:: attackcanceler - attackstring - ppreduce call BattleScript_CheckPrimalWeather setfieldweather BATTLE_WEATHER_HAIL goto BattleScript_MoveWeatherChange BattleScript_EffectTorment:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects settorment BattleScript_ButItFailed @@ -4669,40 +3932,40 @@ BattleScript_EffectTorment:: BattleScript_EffectFlatter:: attackcanceler jumpifsubstituteblocks BattleScript_MakeMoveMissed - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifconfusedandstatmaxed STAT_SPATK, BattleScript_ButItFailed attackanimation waitanimation setstatchanger STAT_SPATK, 1, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_FlatterTryConfuse - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_FlatterTryConfuse - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_FlatterTryConfuse + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_FlatterTryConfuse printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_FlatterTryConfuse:: jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents jumpifsafeguard BattleScript_SafeguardProtected - seteffectprimary MOVE_EFFECT_CONFUSION + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_CONFUSION goto BattleScript_MoveEnd +BattleScript_EffectDarkVoid:: +.if B_DARK_VOID_FAIL >= GEN_7 + jumpifspecies SPECIES_DARKRAI, BattleScript_EffectNonVolatileStatus + goto BattleScript_PokemonCantUseTheMove +.endif BattleScript_EffectNonVolatileStatus:: attackcanceler - attackstring - ppreduce trynonvolatilestatus accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE attackanimation waitanimation - setnonvolatilestatus + setnonvolatilestatus TRIGGER_ON_MOVE + clearmoveresultflags MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AlreadyBurned:: - setalreadystatusedmoveattempt BS_ATTACKER + setalreadystatusedmoveattempt pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYHASBURN waitmessage B_WAIT_TIME_LONG @@ -4711,28 +3974,22 @@ BattleScript_AlreadyBurned:: BattleScript_EffectMemento:: attackcanceler jumpifbyte CMP_EQUAL, cMISS_TYPE, B_MSG_PROTECTED, BattleScript_MementoTargetProtect - attackstring - ppreduce trymemento BattleScript_ButItFailed setatkhptozero attackanimation waitanimation jumpifsubstituteblocks BattleScript_EffectMementoPrintNoEffect - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO | STAT_CHANGE_MULTIPLE_STATS - playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO setstatchanger STAT_ATK, 2, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMementoTrySpAtk -@ Greater than B_MSG_DEFENDER_STAT_FELL is checking if the stat cannot decrease - jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_EffectMementoTrySpAtk + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMementoTrySpAtk, BIT_SPATK +@ Greater than B_MSG_DEFENDER_STAT_CHANGED is checking if the stat cannot decrease + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_CHANGED, BattleScript_EffectMementoTrySpAtk printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectMementoTrySpAtk: - playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO setstatchanger STAT_SPATK, 2, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMementoTryFaint -@ Greater than B_MSG_DEFENDER_STAT_FELL is checking if the stat cannot decrease - jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_EffectMementoTryFaint + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMementoTryFaint +@ Greater than B_MSG_DEFENDER_STAT_CHANGED is checking if the stat cannot decrease + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_CHANGED, BattleScript_EffectMementoTryFaint printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectMementoTryFaint: @@ -4744,8 +4001,6 @@ BattleScript_EffectMementoPrintNoEffect: goto BattleScript_EffectMementoTryFaint @ If the target is protected there's no need to check the target's stats or animate, the user will just faint BattleScript_MementoTargetProtect: - attackstring - ppreduce trymemento BattleScript_MementoTargetProtectEnd BattleScript_MementoTargetProtectEnd: setatkhptozero @@ -4759,18 +4014,12 @@ BattleScript_MementoTargetProtectEnd: BattleScript_EffectFocusPunch:: attackcanceler jumpifnodamage BattleScript_HitFromAccCheck - ppreduce printstring STRINGID_PKMNLOSTFOCUS waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_EffectFollowMe:: attackcanceler - attackstring - ppreduce - .if B_UPDATED_MOVE_DATA >= GEN_8 - jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_ButItFailed - .endif setforcedtarget attackanimation waitanimation @@ -4778,28 +4027,15 @@ BattleScript_EffectFollowMe:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectNaturePower:: - attackcanceler - attackstring - pause B_WAIT_TIME_SHORT - callenvironmentattack - printstring STRINGID_NATUREPOWERTURNEDINTO - waitmessage B_WAIT_TIME_LONG - return - BattleScript_EffectCharge:: attackcanceler - attackstring - ppreduce - setcharge BS_ATTACKER + setvolatile BS_ATTACKER, VOLATILE_CHARGE_TIMER, 2 attackanimation waitanimation .if B_CHARGE_SPDEF_RAISE >= GEN_5 setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectChargeString - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectChargeString - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectChargeString + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectChargeString printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectChargeString: @@ -4810,8 +4046,6 @@ BattleScript_EffectChargeString: BattleScript_EffectTaunt:: attackcanceler - attackstring - ppreduce jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE settaunt BattleScript_ButItFailed @@ -4823,8 +4057,6 @@ BattleScript_EffectTaunt:: BattleScript_EffectHelpingHand:: attackcanceler - attackstring - ppreduce trysethelpinghand BattleScript_ButItFailed attackanimation waitanimation @@ -4834,8 +4066,6 @@ BattleScript_EffectHelpingHand:: BattleScript_EffectTrick:: attackcanceler - attackstring - ppreduce jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE tryswapitems BattleScript_ButItFailed @@ -4849,16 +4079,12 @@ BattleScript_EffectTrick:: BattleScript_EffectRolePlay:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON trycopyability BS_ATTACKER, BattleScript_ButItFailed attackanimation waitanimation -.if B_ABILITY_POP_UP == TRUE copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUpOverwriteThenNormal -.endif recordability BS_ATTACKER printstring STRINGID_PKMNCOPIEDFOE waitmessage B_WAIT_TIME_LONG @@ -4867,26 +4093,14 @@ BattleScript_EffectRolePlay:: BattleScript_EffectWish:: attackcanceler - attackstring - ppreduce trywish BattleScript_ButItFailed attackanimation waitanimation goto BattleScript_MoveEnd -BattleScript_EffectAssist:: - attackcanceler - attackstring - assistattackselect BattleScript_FailedFromPpReduce - attackanimation - waitanimation - jumptocalledmove TRUE - BattleScript_EffectIngrain:: attackcanceler - attackstring - ppreduce - setuserstatus3 STATUS3_ROOTED, BattleScript_ButItFailed + trysetvolatile BS_ATTACKER, VOLATILE_ROOT, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNPLANTEDROOTS @@ -4895,9 +4109,7 @@ BattleScript_EffectIngrain:: BattleScript_EffectMagicCoat:: attackcanceler - trysetmagiccoat BattleScript_FailedFromAtkString - attackstring - ppreduce + trysetmagiccoat BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNSHROUDEDITSELF @@ -4906,8 +4118,6 @@ BattleScript_EffectMagicCoat:: BattleScript_EffectRecycle:: attackcanceler - attackstring - ppreduce tryrecycleitem BattleScript_ButItFailed attackanimation waitanimation @@ -4917,9 +4127,7 @@ BattleScript_EffectRecycle:: BattleScript_EffectBrickBreak:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc removescreens critcalc @@ -4938,30 +4146,32 @@ BattleScript_BrickBreakDoHit:: effectivenesssound hitanimation BS_TARGET waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE + datahpupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE critmessage waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - setadditionaleffects tryfaintmon BS_TARGET + setadditionaleffects goto BattleScript_MoveEnd BattleScript_EffectYawn:: attackcanceler - attackstring - ppreduce trynonvolatilestatus accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON setyawn BattleScript_ButItFailed attackanimation waitanimation -BattleScript_EffectYawnSuccess:: printstring STRINGID_PKMNWASMADEDROWSY waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_MoveEffectYawnSide:: + printstring STRINGID_PKMNWASMADEDROWSY + waitmessage B_WAIT_TIME_LONG + return + BattleScript_PrintAbilityMadeIneffective:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -4971,8 +4181,6 @@ BattleScript_PrintAbilityMadeIneffective:: BattleScript_EffectEndeavor:: attackcanceler - attackstring - ppreduce setdamagetohealthdifference BattleScript_ButItFailed accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc @@ -4983,20 +4191,16 @@ BattleScript_EffectEndeavor:: BattleScript_EffectSkillSwap:: attackcanceler - attackstring - ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON tryswapabilities BattleScript_ButItFailed attackanimation waitanimation jumpiftargetally BattleScript_EffectSkillSwap_AfterAbilityPopUp -.if B_ABILITY_POP_UP == TRUE copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUpOverwriteThenNormal copybyte gBattlerAbility, gBattlerTarget copyhword sABILITY_OVERWRITE, gLastUsedAbility call BattleScript_AbilityPopUpOverwriteThenNormal -.endif BattleScript_EffectSkillSwap_AfterAbilityPopUp: recordability BS_ATTACKER recordability BS_TARGET @@ -5010,8 +4214,6 @@ BattleScript_EffectSkillSwap_AfterAbilityPopUp: BattleScript_EffectImprison:: attackcanceler - attackstring - ppreduce tryimprison BattleScript_ButItFailed attackanimation waitanimation @@ -5021,8 +4223,6 @@ BattleScript_EffectImprison:: BattleScript_EffectRefresh:: attackcanceler - attackstring - ppreduce curestatuswithmove BattleScript_ButItFailed attackanimation waitanimation @@ -5033,9 +4233,8 @@ BattleScript_EffectRefresh:: BattleScript_EffectGrudge:: attackcanceler - attackstring - ppreduce - setuserstatus3 STATUS3_GRUDGE, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_GRUDGE, BattleScript_ButItFailed + setvolatile BS_ATTACKER, VOLATILE_GRUDGE, 2 attackanimation waitanimation printstring STRINGID_PKMNWANTSGRUDGE @@ -5044,9 +4243,7 @@ BattleScript_EffectGrudge:: BattleScript_EffectSnatch:: attackcanceler - trysetsnatch BattleScript_FailedFromAtkString - attackstring - ppreduce + trysetsnatch BattleScript_ButItFailed attackanimation waitanimation pause B_WAIT_TIME_SHORT @@ -5062,8 +4259,6 @@ BattleScript_EffectStruggle:: BattleScript_EffectMudSport:: BattleScript_EffectWaterSport:: attackcanceler - attackstring - ppreduce settypebasedhalvers BattleScript_ButItFailed attackanimation waitanimation @@ -5073,27 +4268,21 @@ BattleScript_EffectWaterSport:: BattleScript_EffectTickle:: attackcanceler - attackstring - ppreduce jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_TickleDoMoveAnim jumpifstat BS_TARGET, CMP_EQUAL, STAT_DEF, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats BattleScript_TickleDoMoveAnim:: accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS - playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TickleTryLowerDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_TickleTryLowerDef + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_TickleTryLowerDef, BIT_DEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_TickleTryLowerDef printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_TickleTryLowerDef:: - playstatchangeanimation BS_TARGET, BIT_DEF, STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TickleEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_TickleEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_TickleEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_TickleEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_TickleEnd:: @@ -5108,24 +4297,20 @@ BattleScript_CantLowerMultipleStats:: BattleScript_EffectCosmicPower:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_CosmicPowerDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_CosmicPowerDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, 0 setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CosmicPowerTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CosmicPowerTrySpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CosmicPowerTrySpDef, BIT_SPDEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CosmicPowerTrySpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CosmicPowerTrySpDef:: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CosmicPowerEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CosmicPowerEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CosmicPowerEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CosmicPowerEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CosmicPowerEnd:: @@ -5133,24 +4318,20 @@ BattleScript_CosmicPowerEnd:: BattleScript_EffectBulkUp:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_BulkUpDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_BulkUpDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_BulkUpTryDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_BulkUpTryDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_BulkUpTryDef, BIT_DEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_BulkUpTryDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_BulkUpTryDef:: setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_BulkUpEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_BulkUpEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_BulkUpEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_BulkUpEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_BulkUpEnd:: @@ -5158,8 +4339,6 @@ BattleScript_BulkUpEnd:: BattleScript_EffectCalmMind:: attackcanceler - attackstring - ppreduce BattleScript_CalmMindTryToRaiseStats:: jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CalmMindDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats @@ -5167,17 +4346,15 @@ BattleScript_CalmMindDoMoveAnim:: attackanimation waitanimation BattleScript_CalmMindStatRaise:: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0 setstatchanger STAT_SPATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CalmMindTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CalmMindTrySpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CalmMindTrySpDef, BIT_SPDEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CalmMindTrySpDef printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CalmMindTrySpDef:: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CalmMindEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CalmMindEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CalmMindEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CalmMindEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CalmMindEnd:: @@ -5192,25 +4369,21 @@ BattleScript_CantRaiseMultipleStats:: BattleScript_EffectDragonDance:: attackcanceler - attackstring - ppreduce BattleScript_EffectDragonDanceFromStatUp:: jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_DragonDanceDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_DragonDanceDoMoveAnim:: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPEED, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DragonDanceTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DragonDanceTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_DragonDanceTrySpeed, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_DragonDanceTrySpeed printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_DragonDanceTrySpeed:: setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_DragonDanceEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DragonDanceEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_DragonDanceEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_DragonDanceEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_DragonDanceEnd:: @@ -5218,8 +4391,6 @@ BattleScript_DragonDanceEnd:: BattleScript_EffectCamouflage:: attackcanceler - attackstring - ppreduce settypetoenvironment BattleScript_ButItFailed attackanimation waitanimation @@ -5227,31 +4398,22 @@ BattleScript_EffectCamouflage:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_FaintAttacker:: - tryillusionoff BS_ATTACKER - tryactivategulpmissile - playfaintcry BS_ATTACKER - pause B_WAIT_TIME_LONG - dofaintanimation BS_ATTACKER - printstring STRINGID_ATTACKERFAINTED - cleareffectsonfaint BS_ATTACKER - tryactivatesoulheart - tryactivatereceiver BS_ATTACKER - trytrainerslidefirstdownmsg BS_ATTACKER - return - -BattleScript_FaintTarget:: - tryillusionoff BS_TARGET +BattleScript_FaintBattler:: + tryillusionoff BS_FAINTED tryactivategulpmissile - tryupdateleaderscresttracker - playfaintcry BS_TARGET + playfaintcry BS_FAINTED pause B_WAIT_TIME_LONG - dofaintanimation BS_TARGET - printstring STRINGID_TARGETFAINTED - cleareffectsonfaint BS_TARGET + dofaintanimation BS_FAINTED + copybyte sBATTLER, gBattlerFainted @ for message + printstring STRINGID_BATTLERFAINTED + cleareffectsonfaint BS_FAINTED + trytoclearprimalweather + tryrevertweatherform + flushtextbox + waitanimation + tryactivatereceiver BS_FAINTED tryactivatesoulheart - tryactivatereceiver BS_TARGET - trytrainerslidefirstdownmsg BS_TARGET + trytrainerslidemsgfirstoff BS_FAINTED return BattleScript_GiveExp:: @@ -5297,7 +4459,7 @@ BattleScript_FaintedMonTryChoose: jumpifbyte CMP_EQUAL, gBattleCommunication, PARTY_SIZE, BattleScript_FaintedMonSendOutNew @ Switch PokΓ©mon before opponent atknameinbuff1 - resetswitchinabilitybits BS_ATTACKER + resetswitchinabilitybits hpthresholds2 BS_ATTACKER printstring STRINGID_RETURNMON switchoutabilities BS_ATTACKER @@ -5327,7 +4489,7 @@ BattleScript_FaintedMonSendOutNew: switchinanim BS_FAINTED, FALSE, FALSE waitstate resetplayerfainted - trytrainerslidelastonmsg BS_FAINTED + trytrainerslidemsglaston BS_FAINTED jumpifbytenotequal sSHIFT_SWITCHED, sZero, BattleScript_FaintedMonShiftSwitched BattleScript_FaintedMonSendOutNewEnd: switchineffects BS_FAINTED @@ -5392,32 +4554,32 @@ BattleScript_PayDayMoneyAndPickUpItems:: end2 BattleScript_LocalBattleLost:: - jumpifbattletype BATTLE_TYPE_INGAME_PARTNER, BattleScript_LocalBattleLostPrintWhiteOut jumpifbattletype BATTLE_TYPE_DOME, BattleScript_CheckDomeDrew jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_LocalBattleLostPrintTrainersWinText jumpifbattletype BATTLE_TYPE_TRAINER_HILL, BattleScript_LocalBattleLostPrintTrainersWinText jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_LocalBattleLostEnd jumpifhalfword CMP_EQUAL, gTrainerBattleParameter + 2, TRAINER_SECRET_BASE, BattleScript_LocalBattleLostEnd jumpifnowhiteout BattleScript_LocalBattleLostEnd_ + jumpifbattletype BATTLE_TYPE_INGAME_PARTNER, BattleScript_LocalBattleLostPrintWhiteOut BattleScript_LocalBattleLostPrintWhiteOut:: getmoneyreward + printstring STRINGID_PLAYERWHITEOUT + waitmessage B_WAIT_TIME_LONG .if B_WHITEOUT_MONEY >= GEN_4 jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostEnd - printstring STRINGID_PLAYERWHITEOUT + printstring STRINGID_PLAYERWHITEOUT2_WILD waitmessage B_WAIT_TIME_LONG - printstring STRINGID_PLAYERWHITEOUT2 + printstring STRINGID_PLAYERWHITEOUT3 waitmessage B_WAIT_TIME_LONG end2 BattleScript_LocalBattleLostEnd:: - printstring STRINGID_PLAYERLOSTTOENEMYTRAINER + printstring STRINGID_PLAYERWHITEOUT2_TRAINER waitmessage B_WAIT_TIME_LONG - printstring STRINGID_PLAYERPAIDPRIZEMONEY + printstring STRINGID_PLAYERWHITEOUT3 waitmessage B_WAIT_TIME_LONG end2 .else - printstring STRINGID_PLAYERWHITEOUT - waitmessage B_WAIT_TIME_LONG - printstring STRINGID_PLAYERWHITEOUT2 + printstring STRINGID_PLAYERWHITEOUT3 waitmessage B_WAIT_TIME_LONG BattleScript_LocalBattleLostEnd:: end2 @@ -5427,9 +4589,9 @@ BattleScript_CheckDomeDrew:: jumpifbyte CMP_EQUAL, gBattleOutcome, B_OUTCOME_DREW, BattleScript_LocalBattleLostEnd_ BattleScript_LocalBattleLostPrintTrainersWinText:: jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostPrintWhiteOut - returnopponentmon1toball BS_ATTACKER + returnopponentmon1toball waitstate - returnopponentmon2toball BS_ATTACKER + returnopponentmon2toball waitstate trainerslidein BS_OPPONENT1 waitstate @@ -5446,9 +4608,9 @@ BattleScript_LocalBattleLostEnd_:: end2 BattleScript_FrontierLinkBattleLost:: - returnopponentmon1toball BS_ATTACKER + returnopponentmon1toball waitstate - returnopponentmon2toball BS_ATTACKER + returnopponentmon2toball waitstate trainerslidein BS_OPPONENT1 waitstate @@ -5475,7 +4637,7 @@ BattleScript_LinkBattleWonOrLostWaitEnd:: end2 BattleScript_TowerLinkBattleWon:: - playtrainerdefeatbgm BS_ATTACKER + playtrainerdefeatedmusic printstring STRINGID_BATTLEEND waitmessage B_WAIT_TIME_LONG trainerslidein BS_OPPONENT1 @@ -5560,11 +4722,11 @@ BattleScript_ActionSwitch:: end2 BattleScript_DoSwitchOut:: - switchoutabilities BS_ATTACKER undodynamax BS_ATTACKER waitstate returnatktoball waitstate + switchoutabilities BS_ATTACKER drawpartystatussummary BS_ATTACKER switchhandleorder BS_ATTACKER, 1 getswitchedmondata BS_ATTACKER @@ -5602,10 +4764,12 @@ BattleScript_AskToLearnMove:: waitstate setbyte sLEARNMOVE_STATE, 0 yesnoboxlearnmove BattleScript_ForgotAndLearnedNewMove +.if P_ASK_MOVE_CONFIRMATION == TRUE printstring STRINGID_STOPLEARNINGMOVE waitstate setbyte sLEARNMOVE_STATE, 0 yesnoboxstoplearningmove BattleScript_AskToLearnMove +.endif printstring STRINGID_DIDNOTLEARNMOVE goto BattleScript_TryLearnMoveLoop BattleScript_ForgotAndLearnedNewMove:: @@ -5617,7 +4781,7 @@ BattleScript_LearnedNewMove:: fanfare MUS_LEVEL_UP printstring STRINGID_PKMNLEARNEDMOVE waitmessage B_WAIT_TIME_LONG - updatechoicemoveonlvlup BS_ATTACKER + updatechoicemoveonlvlup goto BattleScript_TryLearnMoveLoop BattleScript_LearnMoveReturn:: return @@ -5652,11 +4816,11 @@ BattleScript_FogEnded_Ret:: BattleScript_IceBodyHeal:: call BattleScript_AbilityPopUp playanimation BS_ATTACKER, B_ANIM_SIMPLE_HEAL - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_ICEBODYHPGAIN waitmessage B_WAIT_TIME_LONG - end3 + end2 BattleScript_OverworldStatusStarts:: printfromtable gStartingStatusStringIds @@ -5720,7 +4884,7 @@ BattleScript_MagicRoomEnds:: setbyte gBattlerTarget, 0 BattleScript_MagicRoomHealingItemsLoop: copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattlerTarget, 1 - tryrestorehpberry + tryactivateitem BS_ATTACKER, ACTIVATION_ON_USABLE_AGAIN addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_MagicRoomHealingItemsLoop end2 @@ -5729,6 +4893,7 @@ BattleScript_TerrainEnds_Ret:: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + tryboosterenergy ON_TERRAIN return BattleScript_TerrainEnds:: @@ -5770,17 +4935,19 @@ BattleScript_LeechSeedTurnDrainLiquidOoze:: copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp copybyte gBattlerAttacker, gBattlerTarget @ needed to get liquid ooze message correct + jumpifability BS_TARGET, ABILITY_MAGIC_GUARD, BattleScript_LeechSeedTurnDrainHealBlockEnd2 goto BattleScript_LeechSeedTurnDrainGainHp BattleScript_LeechSeedTurnDrainHealBlock:: call BattleScript_LeechSeedTurnDrain +BattleScript_LeechSeedTurnDrainHealBlockEnd2: end2 BattleScript_LeechSeedTurnDrainRecovery:: call BattleScript_LeechSeedTurnDrain BattleScript_LeechSeedTurnDrainGainHp: - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printfromtable gLeechSeedStringIds waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET @@ -5788,8 +4955,8 @@ BattleScript_LeechSeedTurnDrainGainHp: BattleScript_LeechSeedTurnDrain: playanimation BS_ATTACKER, B_ANIM_LEECH_SEED_DRAIN, sB_ANIM_ARG1 - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER return @@ -5800,7 +4967,7 @@ BattleScript_BideStoringEnergy:: BattleScript_BideAttack:: attackcanceler - clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING + clearvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS printstring STRINGID_PKMNUNLEASHEDENERGY waitmessage B_WAIT_TIME_LONG accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE @@ -5814,8 +4981,8 @@ BattleScript_BideAttack:: effectivenesssound hitanimation BS_TARGET waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE + datahpupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET @@ -5823,7 +4990,7 @@ BattleScript_BideAttack:: BattleScript_BideNoEnergyToAttack:: attackcanceler - clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING + clearvolatile BS_ATTACKER, VOLATILE_MULTIPLETURNS printstring STRINGID_PKMNUNLEASHEDENERGY waitmessage B_WAIT_TIME_LONG goto BattleScript_ButItFailed @@ -5851,7 +5018,7 @@ BattleScript_RoarSuccessSwitch_Ret: BattleScript_RoarSuccessEndBattle:: call BattleScript_RoarSuccessRet setbyte sSWITCH_CASE, B_SWITCH_NORMAL - setoutcomeonteleport BS_ATTACKER + setteleportoutcome BS_ATTACKER finishaction BattleScript_RoarSuccessRet: @@ -5860,9 +5027,9 @@ BattleScript_RoarSuccessRet: attackanimation waitanimation BattleScript_RoarSuccessRet_Ret: - switchoutabilities BS_TARGET returntoball BS_TARGET, FALSE waitstate + switchoutabilities BS_TARGET return BattleScript_WeaknessPolicy:: @@ -5872,17 +5039,15 @@ BattleScript_WeaknessPolicy:: BattleScript_WeaknessPolicyAtk: playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_BY_TWO setstatchanger STAT_ATK, 2, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicySpAtk + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicySpAtk, BIT_SPATK + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_WeaknessPolicySpAtk printstring STRINGID_USINGITEMSTATOFPKMNROSE waitmessage B_WAIT_TIME_LONG BattleScript_WeaknessPolicySpAtk: setstatchanger STAT_SPATK, 2, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicyRemoveItem - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicyRemoveItem + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicyRemoveItem + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_WeaknessPolicyRemoveItem printstring STRINGID_USINGITEMSTATOFPKMNROSE waitmessage B_WAIT_TIME_LONG BattleScript_WeaknessPolicyRemoveItem: @@ -5892,13 +5057,11 @@ BattleScript_WeaknessPolicyEnd: BattleScript_TargetItemStatRaise:: copybyte sBATTLER, gBattlerTarget - statbuffchange 0, BattleScript_TargetItemStatRaiseRemoveItemRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_TargetItemStatRaiseRemoveItemRet + statbuffchange BS_TARGET, STAT_CHANGE_ONLY_CHECKING, BattleScript_TargetItemStatRaiseRemoveItemRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_TargetItemStatRaiseRemoveItemRet playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT waitanimation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation + statbuffchange BS_TARGET, 0, BattleScript_TargetItemStatRaiseRemoveItemRet printstring STRINGID_USINGITEMSTATOFPKMNROSE waitmessage B_WAIT_TIME_LONG removeitem BS_TARGET @@ -5907,13 +5070,11 @@ BattleScript_TargetItemStatRaiseRemoveItemRet: BattleScript_AttackerItemStatRaise:: copybyte sBATTLER, gBattlerAttacker - statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_AttackerItemStatRaiseRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackerItemStatRaiseRet + statbuffchange BS_ATTACKER, STAT_CHANGE_ONLY_CHECKING, BattleScript_AttackerItemStatRaiseRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_AttackerItemStatRaiseRet playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT waitanimation - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation + statbuffchange BS_ATTACKER, 0, BattleScript_AttackerItemStatRaiseRet printstring STRINGID_USINGITEMSTATOFPKMNROSE waitmessage B_WAIT_TIME_LONG removeitem BS_ATTACKER @@ -5927,7 +5088,7 @@ BattleScript_MistProtected:: return BattleScript_RageIsBuilding:: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RageIsBuildingEnd + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_RageIsBuildingEnd printstring STRINGID_PKMNRAGEBUILDING waitmessage B_WAIT_TIME_LONG BattleScript_RageIsBuildingEnd: @@ -5949,6 +5110,14 @@ BattleScript_DisabledNoMore:: BattleScript_SelectingDisabledMoveInPalace:: printstring STRINGID_PKMNMOVEISDISABLED + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_EncoredMove:: + printselectionstring STRINGID_PKMNGOTENCOREDMOVE + endselectionscript + +BattleScript_EncoredMoveInPalace:: + printselectionstring STRINGID_PKMNGOTENCOREDMOVE BattleScript_SelectingUnusableMoveInPalace:: moveendto MOVEEND_NEXT_TARGET end @@ -5961,16 +5130,14 @@ BattleScript_EncoredNoMore:: BattleScript_DestinyBondTakesLife:: printstring STRINGID_PKMNTOOKFOE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER return BattleScript_DmgHazardsOnAttacker:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE call BattleScript_PrintHurtByDmgHazards tryfaintmon BS_ATTACKER tryfaintmon_spikes BS_ATTACKER, BattleScript_DmgHazardsOnAttackerFainted @@ -5983,9 +5150,8 @@ BattleScript_DmgHazardsOnAttackerFainted:: goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnTarget:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE call BattleScript_PrintHurtByDmgHazards tryfaintmon BS_TARGET tryfaintmon_spikes BS_TARGET, BattleScript_DmgHazardsOnTargetFainted @@ -5998,9 +5164,8 @@ BattleScript_DmgHazardsOnTargetFainted:: goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnBattlerScripting:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE call BattleScript_PrintHurtByDmgHazards tryfaintmon BS_SCRIPTING tryfaintmon_spikes BS_SCRIPTING, BattleScript_DmgHazardsOnBattlerScriptingFainted @@ -6013,9 +5178,8 @@ BattleScript_DmgHazardsOnBattlerScriptingFainted:: goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnFaintedBattler:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_FAINTED - datahpupdate BS_FAINTED + healthbarupdate BS_FAINTED, PASSIVE_HP_UPDATE + datahpupdate BS_FAINTED, PASSIVE_HP_UPDATE call BattleScript_PrintHurtByDmgHazards tryfaintmon BS_FAINTED tryfaintmon_spikes BS_FAINTED, BattleScript_DmgHazardsOnFaintedBattlerFainted @@ -6061,15 +5225,8 @@ BattleScript_StickyWebOnSwitchIn:: printstring STRINGID_STICKYWEBSWITCHIN waitmessage B_WAIT_TIME_LONG jumpifability BS_TARGET, ABILITY_MIRROR_ARMOR, BattleScript_MirrorArmorReflectStickyWeb - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StickyWebOnSwitchInEnd - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StickyWebOnSwitchInStatAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StickyWebOnSwitchInEnd - pause B_WAIT_TIME_SHORT - goto BattleScript_StickyWebOnSwitchInPrintStatMsg -BattleScript_StickyWebOnSwitchInStatAnim: - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 -BattleScript_StickyWebOnSwitchInPrintStatMsg: + statbuffchange BS_TARGET, STAT_CHANGE_CHECK_PREVENTION | STAT_CHANGE_ALLOW_PTR, BattleScript_StickyWebOnSwitchInEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_StickyWebOnSwitchInEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_StickyWebOnSwitchInEnd: @@ -6081,9 +5238,8 @@ BattleScript_StickyWebOnSwitchInEnd: BattleScript_PerishSongTakesLife:: printstring STRINGID_PKMNPERISHCOUNTFELL waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER end2 @@ -6091,20 +5247,18 @@ BattleScript_PerishBodyActivates:: call BattleScript_AbilityPopUp printstring STRINGID_PKMNSWILLPERISHIN3TURNS waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE return BattleScript_GulpMissileGorging:: call BattleScript_AbilityPopUp playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE effectivenesssound hitanimation BS_ATTACKER waitstate jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGorging - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER jumpiffainted BS_ATTACKER, TRUE, BattleScript_GulpMissileNoSecondEffectGorging BattleScript_GulpMissileNoDmgGorging: @@ -6112,7 +5266,7 @@ BattleScript_GulpMissileNoDmgGorging: playanimation BS_TARGET, B_ANIM_FORM_CHANGE waitanimation swapattackerwithtarget - seteffectprimary MOVE_EFFECT_PARALYSIS + seteffectprimary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_PARALYSIS swapattackerwithtarget return BattleScript_GulpMissileNoSecondEffectGorging: @@ -6125,13 +5279,12 @@ BattleScript_GulpMissileGulping:: call BattleScript_AbilityPopUp playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE effectivenesssound hitanimation BS_ATTACKER waitstate jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGulping - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER jumpiffainted BS_ATTACKER, TRUE, BattleScript_GulpMissileNoSecondEffectGulping BattleScript_GulpMissileNoDmgGulping: @@ -6140,12 +5293,10 @@ BattleScript_GulpMissileNoDmgGulping: waitanimation swapattackerwithtarget @ to make gStatDownStringIds down below print the right battler setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_GulpMissileGulpingEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_GulpMissileGulpingTargetDefenseCantGoLower - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_GulpMissileGulpingEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG +BattleScript_GulpMissileGulpingEnd: swapattackerwithtarget @ restore the battlers, just in case return BattleScript_GulpMissileNoSecondEffectGulping: @@ -6153,12 +5304,6 @@ BattleScript_GulpMissileNoSecondEffectGulping: playanimation BS_TARGET, B_ANIM_FORM_CHANGE waitanimation return -BattleScript_GulpMissileGulpingTargetDefenseCantGoLower: - printstring STRINGID_STATSWONTDECREASE - waitmessage B_WAIT_TIME_LONG -BattleScript_GulpMissileGulpingEnd: - swapattackerwithtarget @ restore the battlers, just in case - return BattleScript_SeedSowerActivates:: pause B_WAIT_TIME_SHORT @@ -6169,34 +5314,39 @@ BattleScript_SeedSowerActivates:: call BattleScript_ActivateTerrainEffects return -BattleScript_AngerShellActivates:: +BattleScript_BerserkActivates:: saveattacker - copybyte gBattlerAttacker, gBattlerTarget + copybyte gBattlerAttacker, gEffectBattler + call BattleScript_AbilityPopUp + statbuffchange BS_EFFECT_BATTLER, STAT_CHANGE_CERTAIN, BattleScript_BerserkActivatesTryBerry + call BattleScript_StatUp +BattleScript_BerserkActivatesTryBerry: + restoreattacker + return + +BattleScript_AngerShellActivates:: call BattleScript_AbilityPopUp - jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_RestoreAttackerButItFailed + jumpifstat BS_EFFECT_BATTLER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_EFFECT_BATTLER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_EFFECT_BATTLER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_EFFECT_BATTLER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_EFFECT_BATTLER, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_RestoreAttackerButItFailed BattleScript_AngerShellTryDef:: - setbyte sSTAT_ANIM_PLAYED, FALSE - modifybattlerstatstage BS_ATTACKER, STAT_DEF, DECREASE, 1, BattleScript_AngerShellTrySpDef, ANIM_ON + modifybattlerstatstage BS_EFFECT_BATTLER, STAT_DEF, DECREASE, 1, BattleScript_AngerShellTrySpDef, ANIM_ON BattleScript_AngerShellTrySpDef: - modifybattlerstatstage BS_ATTACKER, STAT_SPDEF, DECREASE, 1, BattleScript_AngerShellTryAttack, ANIM_ON + modifybattlerstatstage BS_EFFECT_BATTLER, STAT_SPDEF, DECREASE, 1, BattleScript_AngerShellTryAttack, ANIM_ON BattleScript_AngerShellTryAttack: - setbyte sSTAT_ANIM_PLAYED, FALSE - modifybattlerstatstage BS_ATTACKER, STAT_ATK, INCREASE, 1, BattleScript_AngerShellTrySpAtk, ANIM_ON + modifybattlerstatstage BS_EFFECT_BATTLER, STAT_ATK, INCREASE, 1, BattleScript_AngerShellTrySpAtk, ANIM_ON BattleScript_AngerShellTrySpAtk: - modifybattlerstatstage BS_ATTACKER, STAT_SPATK, INCREASE, 1, BattleScript_AngerShellTrySpeed, ANIM_ON + modifybattlerstatstage BS_EFFECT_BATTLER, STAT_SPATK, INCREASE, 1, BattleScript_AngerShellTrySpeed, ANIM_ON BattleScript_AngerShellTrySpeed: - modifybattlerstatstage BS_ATTACKER, STAT_SPEED, INCREASE, 1, BattleScript_AngerShellRet, ANIM_ON + modifybattlerstatstage BS_EFFECT_BATTLER, STAT_SPEED, INCREASE, 1, BattleScript_AngerShellRet, ANIM_ON BattleScript_AngerShellRet: - restoreattacker return BattleScript_WindPowerActivates:: call BattleScript_AbilityPopUp - setcharge BS_TARGET + setvolatile BS_TARGET, VOLATILE_CHARGE_TIMER, 1 printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER waitmessage B_WAIT_TIME_LONG return @@ -6208,18 +5358,16 @@ BattleScript_ToxicDebrisActivates:: printstring STRINGID_POISONSPIKESSCATTERED waitmessage B_WAIT_TIME_LONG BattleScript_ToxicDebrisRet: - copybyte sBATTLER, gBattlerTarget - copybyte gBattlerTarget, gBattlerAttacker - copybyte gBattlerAttacker, sBATTLER + restoretarget + restoreattacker return BattleScript_EarthEaterActivates:: call BattleScript_AbilityPopUp pause B_WAIT_TIME_LONG tryhealquarterhealth BS_TARGET, BattleScript_EarthEaterRet - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG BattleScript_EarthEaterRet: @@ -6240,30 +5388,28 @@ BattleScript_AllStatsUp:: jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_AllStatsUpRet BattleScript_AllStatsUpAtk:: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpDef, BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpDef:: setstatchanger STAT_DEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpeed, BIT_SPEED | BIT_SPATK | BIT_SPDEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpSpeed:: setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpAtk, BIT_SPATK | BIT_SPDEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpSpAtk:: setstatchanger STAT_SPATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpSpDef, BIT_SPDEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpSpDef:: setstatchanger STAT_SPDEF, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpRet + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_AllStatsUpRet printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AllStatsUpRet:: @@ -6284,58 +5430,18 @@ BattleScript_LeechSeedFree:: waitmessage B_WAIT_TIME_LONG return -BattleScript_SpikesFree:: - printstring STRINGID_PKMNBLEWAWAYSPIKES - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_ToxicSpikesFree:: - printstring STRINGID_PKMNBLEWAWAYTOXICSPIKES +BattleScript_SpinHazardsAway:: + printfromtable gSpinHazardsStringIds waitmessage B_WAIT_TIME_LONG return -BattleScript_StickyWebFree:: - printstring STRINGID_PKMNBLEWAWAYSTICKYWEB +BattleScript_DefogClearHazards:: + printfromtable gDefogHazardsStringIds waitmessage B_WAIT_TIME_LONG return -BattleScript_StealthRockFree:: - printstring STRINGID_PKMNBLEWAWAYSTEALTHROCK - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SteelsurgeFree:: - printstring STRINGID_PKMNBLEWAWAYSHARPSTEEL - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SpikesDefog:: - printstring STRINGID_SPIKESDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_ToxicSpikesDefog:: - printstring STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_StickyWebDefog:: - printstring STRINGID_STICKYWEBDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_StealthRockDefog:: - printstring STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SteelsurgeDefog:: - printstring STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_MonTookFutureAttack:: - printstring STRINGID_PKMNTOOKATTACK +BattleScript_MonTookFutureAttack:: + printstring STRINGID_PKMNTOOKATTACK waitmessage B_WAIT_TIME_LONG jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_FUTURE_SIGHT, BattleScript_CheckDoomDesireMiss accuracycheck BattleScript_FutureAttackMiss, MOVE_FUTURE_SIGHT @@ -6356,8 +5462,8 @@ BattleScript_DoFutureAttackHit:: effectivenesssound hitanimation BS_TARGET waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE + datahpupdate BS_TARGET, MOVE_DAMAGE_HP_UPDATE critmessage waitmessage B_WAIT_TIME_LONG BattleScript_DoFutureAttackResult: @@ -6366,17 +5472,21 @@ BattleScript_DoFutureAttackResult: tryfaintmon BS_TARGET checkteamslost BattleScript_FutureAttackEnd BattleScript_FutureAttackEnd:: + moveendcase MOVEEND_SET_VALUES moveendcase MOVEEND_RAGE moveendcase MOVEEND_ABILITIES - moveendfromto MOVEEND_ITEM_EFFECTS_ALL, MOVEEND_UPDATE_LAST_MOVES - setmoveresultflags 0 - end2 + moveendcase MOVEEND_COLOR_CHANGE + moveendcase MOVEEND_ITEM_EFFECTS_TARGET + moveendfromto MOVEEND_SYMBIOSIS, MOVEEND_UPDATE_LAST_MOVES + goto BattleScript_FutureAttackClearResults BattleScript_FutureAttackMiss:: pause B_WAIT_TIME_SHORT setmoveresultflags MOVE_RESULT_FAILED resultmessage waitmessage B_WAIT_TIME_LONG +BattleScript_FutureAttackClearResults: setmoveresultflags 0 + clearspecialstatuses end2 BattleScript_NoMovesLeft:: @@ -6388,7 +5498,7 @@ BattleScript_SelectingMoveWithNoPP:: endselectionscript BattleScript_NoPPForMove:: - attackstring + printattackstring pause B_WAIT_TIME_SHORT printstring STRINGID_BUTNOPPLEFT waitmessage B_WAIT_TIME_LONG @@ -6500,9 +5610,8 @@ BattleScript_WishComesTrue:: playanimation BS_TARGET, B_ANIM_WISH_HEAL printstring STRINGID_PKMNWISHCAMETRUE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG end2 @@ -6528,9 +5637,8 @@ BattleScript_IngrainTurnHeal:: printstring STRINGID_PKMNABSORBEDNUTRIENTS BattleScript_TurnHeal: waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE end2 BattleScript_AquaRingHeal:: @@ -6551,38 +5659,29 @@ BattleScript_PrintMonIsRootedRet:: return BattleScript_AtkDefDown:: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS - playstatchangeanimation BS_ATTACKER, BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownTryDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDownTryDef + statbuffchange BS_ATTACKER, STAT_CHANGE_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownTryDef, BIT_DEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_AtkDefDownTryDef printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AtkDefDownTryDef: - playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDownRet + statbuffchange BS_ATTACKER, STAT_CHANGE_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownRet printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_AtkDefDownRet: return BattleScript_DefSpDefDown:: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS - playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_DefSpDefDownTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefSpDefDownTrySpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_DefSpDefDownTrySpDef, BIT_SPDEF + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_DefSpDefDownTrySpDef printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_DefSpDefDownTrySpDef:: - playstatchangeanimation BS_ATTACKER, BIT_SPDEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_SPDEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_DefSpDefDownRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefSpDefDownRet + statbuffchange BS_ATTACKER, STAT_CHANGE_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_DefSpDefDownRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_DefSpDefDownRet printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_DefSpDefDownRet:: @@ -6592,17 +5691,15 @@ BattleScript_DefDownSpeedUp:: jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_DefDownSpeedUpTryDef jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_DefDownSpeedUpRet BattleScript_DefDownSpeedUpTryDef:: - playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_CERTAIN, BattleScript_DefDownSpeedUpTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_DefDownSpeedUpTrySpeed printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_DefDownSpeedUpTrySpeed: - playstatchangeanimation BS_ATTACKER, BIT_SPEED, 0 setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpRet + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_CERTAIN, BattleScript_DefDownSpeedUpRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_DefDownSpeedUpRet printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_DefDownSpeedUpRet:: @@ -6633,31 +5730,21 @@ BattleScript_GrudgeTakesPp:: return BattleScript_MagicBounce:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_PKMNMOVEBOUNCEDABILITY waitmessage B_WAIT_TIME_LONG setmagiccoattarget - orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_ALLOW_NO_PP - bicword gHitMarker, HITMARKER_NO_ATTACKSTRING return BattleScript_MagicCoat:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT setmagiccoattarget printstring STRINGID_PKMNMOVEBOUNCED waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_ALLOW_NO_PP - bicword gHitMarker, HITMARKER_NO_ATTACKSTRING return BattleScript_MagicCoatPrankster:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNMOVEBOUNCED waitmessage B_WAIT_TIME_LONG @@ -6667,13 +5754,10 @@ BattleScript_MagicCoatPrankster:: goto BattleScript_MoveEnd BattleScript_SnatchedMove:: - attackstring - ppreduce snatchsetbattlers playanimation BS_TARGET, B_ANIM_SNATCH_MOVE printstring STRINGID_PKMNSNATCHEDMOVE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_ALLOW_NO_PP swapattackerwithtarget return @@ -6743,16 +5827,15 @@ BattleScript_PowerConstruct:: flushtextbox printstring STRINGID_POWERCONSTRUCTPRESENCEOFMANY waitmessage B_WAIT_TIME_SHORT - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - handleformchange BS_ATTACKER, 0 - handleformchange BS_ATTACKER, 1 - playanimation BS_ATTACKER, B_ANIM_POWER_CONSTRUCT + call BattleScript_AbilityPopUpScripting + handleformchange BS_SCRIPTING, 0 + handleformchange BS_SCRIPTING, 1 + playanimation BS_SCRIPTING, B_ANIM_POWER_CONSTRUCT waitanimation - handleformchange BS_ATTACKER, 2 + handleformchange BS_SCRIPTING, 2 printstring STRINGID_POWERCONSTRUCTTRANSFORM waitmessage B_WAIT_TIME_SHORT - end3 + end2 BattleScript_UltraBurst:: flushtextbox @@ -6769,51 +5852,44 @@ BattleScript_UltraBurst:: end3 BattleScript_GulpMissileFormChange:: - call BattleScript_AttackerFormChange + call BattleScript_BattlerFormChange goto BattleScript_FromTwoTurnMovesSecondTurnRet -BattleScript_AttackerFormChange:: +BattleScript_BattlerFormChange:: pause 5 - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting flushtextbox -BattleScript_AttackerFormChangeNoPopup:: - handleformchange BS_ATTACKER, 0 - handleformchange BS_ATTACKER, 1 - playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE +BattleScript_BattlerFormChangeNoPopup: + handleformchange BS_SCRIPTING, 0 + handleformchange BS_SCRIPTING, 1 + playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE waitanimation - handleformchange BS_ATTACKER, 2 + handleformchange BS_SCRIPTING, 2 return -BattleScript_AttackerFormChangeEnd3:: - call BattleScript_AttackerFormChange +BattleScript_BattlerFormChangeEnd3:: + call BattleScript_BattlerFormChange end3 -BattleScript_AttackerFormChangeEnd3NoPopup:: - call BattleScript_AttackerFormChangeNoPopup - end3 +BattleScript_BattlerFormChangeEnd3NoPopup:: + call BattleScript_BattlerFormChangeNoPopup + end2 + +BattleScript_BattlerFormChangeEnd2:: + call BattleScript_BattlerFormChange + end2 -BattleScript_AttackerFormChangeWithString:: +BattleScript_BattlerFormChangeWithStringEnd3:: pause 5 - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting flushtextbox -BattleScript_AttackerFormChangeWithStringNoPopup:: - handleformchange BS_ATTACKER, 0 - handleformchange BS_ATTACKER, 1 - playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE + handleformchange BS_SCRIPTING, 0 + handleformchange BS_SCRIPTING, 1 + playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE waitanimation - handleformchange BS_ATTACKER, 2 + handleformchange BS_SCRIPTING, 2 printstring STRINGID_PKMNTRANSFORMED waitmessage B_WAIT_TIME_LONG - return - -BattleScript_AttackerFormChangeWithStringEnd3:: - call BattleScript_AttackerFormChangeWithString - end3 - -BattleScript_AttackerFormChangeWithStringEnd3NoPopup:: - call BattleScript_AttackerFormChangeWithStringNoPopup end3 BattleScript_AttackerFormChangeMoveEffect:: @@ -6832,7 +5908,7 @@ BattleScript_BallFetch:: call BattleScript_AbilityPopUp printstring STRINGID_FETCHEDPOKEBALL waitmessage B_WAIT_TIME_LONG - end3 + end2 BattleScript_CudChewActivates:: pause B_WAIT_TIME_SHORTEST @@ -6840,13 +5916,13 @@ BattleScript_CudChewActivates:: setbyte sBERRY_OVERRIDE, 1 @ override the requirements for eating berries consumeberry BS_ATTACKER, FALSE setbyte sBERRY_OVERRIDE, 0 - end3 + end2 BattleScript_ApplyDisguiseFormChangeHPLoss:: -.if B_DISGUISE_HP_LOSS >= GEN_8 - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING -.endif + jumpifgenconfiglowerthan CONFIG_DISGUISE_HP_LOSS, GEN_8, BattleScript_ApplyDisguiseFormChangeHPLossReturn + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE +BattleScript_ApplyDisguiseFormChangeHPLossReturn: return BattleScript_TargetFormChangeNoPopup: @@ -6879,19 +5955,6 @@ BattleScript_TargetFormChangeWithStringNoPopup:: waitmessage B_WAIT_TIME_LONG return -BattleScript_BattlerFormChangeWithStringEnd3:: - pause 5 - call BattleScript_AbilityPopUpScripting - flushtextbox - handleformchange BS_SCRIPTING, 0 - handleformchange BS_SCRIPTING, 1 - playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE, NULL - waitanimation - handleformchange BS_SCRIPTING, 2 - printstring STRINGID_PKMNTRANSFORMED - waitmessage B_WAIT_TIME_LONG - end3 - BattleScript_IllusionOffAndTerastallization:: call BattleScript_IllusionOff goto BattleScript_Terastallization @@ -6901,12 +5964,14 @@ BattleScript_IllusionOffEnd3:: end3 BattleScript_IllusionOff:: - spriteignore0hp TRUE + setspriteignore0hp TRUE + call BattleScript_SwapFromSubstitute playanimation BS_SCRIPTING, B_ANIM_ILLUSION_OFF waitanimation - updatenick BS_SCRIPTING + call BattleScript_SwapToSubstitute + updatenick waitstate - spriteignore0hp FALSE + setspriteignore0hp FALSE printstring STRINGID_ILLUSIONWOREOFF waitmessage B_WAIT_TIME_LONG return @@ -6918,13 +5983,11 @@ BattleScript_CottonDownActivates:: swapattackerwithtarget setbyte gBattlerTarget, 0 BattleScript_CottonDownLoop: - jumpiffainted BS_TARGET, TRUE, BattleScript_CottonDownLoopIncrement + jumpifabsent BS_TARGET, BattleScript_CottonDownLoopIncrement setstatchanger STAT_SPEED, 1, TRUE jumpifbyteequal gBattlerTarget, gEffectBattler, BattleScript_CottonDownLoopIncrement - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_CottonDownLoopIncrement - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_CottonDownTargetSpeedCantGoLower - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_CottonDownLoopIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CottonDownTargetSpeedCantGoLower printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_CottonDownLoopIncrement @@ -6949,9 +6012,8 @@ BattleScript_AftermathDmg:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUpScripting jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_AftermathDmgRet - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_AFTERMATHDMG waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER @@ -6983,7 +6045,7 @@ BattleScript_MoveUsedWokeUp:: BattleScript_MonWokeUpInUproar:: printstring STRINGID_PKMNWOKEUPINUPROAR waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER + updatestatusicon BS_EFFECT_BATTLER end2 BattleScript_PoisonTurnDmg:: @@ -6992,12 +6054,11 @@ BattleScript_PoisonTurnDmg:: BattleScript_DoStatusTurnDmg:: statusanimation BS_ATTACKER BattleScript_DoTurnDmg: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER checkteamslost BattleScript_DoTurnDmgEnd - tryrestorehpberry + tryactivateitem BS_ATTACKER, ACTIVATION_ON_HP_THRESHOLD BattleScript_DoTurnDmgEnd: end2 @@ -7007,9 +6068,8 @@ BattleScript_PoisonHealActivates:: printstring STRINGID_POISONHEALHPUP waitmessage B_WAIT_TIME_LONG statusanimation BS_ATTACKER - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE end2 BattleScript_BurnTurnDmg:: @@ -7056,43 +6116,41 @@ BattleScript_MoveUsedIsParalyzed:: printstring STRINGID_PKMNISPARALYZED waitmessage B_WAIT_TIME_LONG statusanimation BS_ATTACKER - cancelmultiturnmoves BS_ATTACKER + cancelmultiturnmoves goto BattleScript_MoveEnd BattleScript_PowderMoveNoEffect:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_PowderMoveNoEffectPrint jumpifability BS_TARGET, ABILITY_OVERCOAT, BattleScript_PowderMoveNoEffectOvercoat + setlastuseditem BS_TARGET printstring STRINGID_SAFETYGOGGLESPROTECTED goto BattleScript_PowderMoveNoEffectWaitMsg BattleScript_PowderMoveNoEffectOvercoat: - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget BattleScript_PowderMoveNoEffectPrint: printstring STRINGID_ITDOESNTAFFECT BattleScript_PowderMoveNoEffectWaitMsg: waitmessage B_WAIT_TIME_LONG - cancelmultiturnmoves BS_ATTACKER + cancelmultiturnmoves setmoveresultflags MOVE_RESULT_FAILED goto BattleScript_MoveEnd BattleScript_MoveUsedFlinched:: printstring STRINGID_PKMNFLINCHED waitmessage B_WAIT_TIME_LONG - jumpifability BS_ATTACKER ABILITY_STEADFAST BattleScript_TryActivateSteadFast + jumpifability BS_ATTACKER, ABILITY_STEADFAST, BattleScript_TryActivateSteadFast BattleScript_MoveUsedFlinchedEnd: goto BattleScript_MoveEnd BattleScript_TryActivateSteadFast: setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_MoveUsedFlinchedEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_MoveUsedFlinchedEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_MoveUsedFlinchedEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_MoveUsedFlinchedEnd copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - setbyte gBattleCommunication STAT_SPEED - stattextbuffer BS_ATTACKER + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_MoveUsedFlinchedEnd + setbyte gBattleCommunication, STAT_SPEED + stattextbuffer printstring STRINGID_ATTACKERABILITYSTATRAISE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveUsedFlinchedEnd @@ -7103,7 +6161,7 @@ BattleScript_PrintUproarOverTurns:: end2 BattleScript_ThrashConfuses:: - chosenstatus2animation BS_ATTACKER, STATUS2_CONFUSION + volatileanimation BS_ATTACKER, VOLATILE_CONFUSION printstring STRINGID_PKMNFATIGUECONFUSION waitmessage B_WAIT_TIME_LONG end2 @@ -7111,19 +6169,19 @@ BattleScript_ThrashConfuses:: BattleScript_MoveUsedIsConfused:: printstring STRINGID_PKMNISCONFUSED waitmessage B_WAIT_TIME_LONG - status2animation BS_ATTACKER, STATUS2_CONFUSION + volatileanimation BS_ATTACKER, VOLATILE_CONFUSION jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, FALSE, BattleScript_MoveUsedIsConfusedRet BattleScript_DoSelfConfusionDmg:: - cancelmultiturnmoves BS_ATTACKER + cancelmultiturnmoves adjustdamage printstring STRINGID_ITHURTCONFUSION waitmessage B_WAIT_TIME_LONG effectivenesssound hitanimation BS_ATTACKER waitstate - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + isdmgblockedbydisguise + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER @@ -7132,19 +6190,15 @@ BattleScript_MoveUsedIsConfusedRet:: return BattleScript_MoveUsedPowder:: - bicword gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED - attackstring - ppreduce pause B_WAIT_TIME_SHORT - cancelmultiturnmoves BS_ATTACKER - status2animation BS_ATTACKER, STATUS2_POWDER + cancelmultiturnmoves + volatileanimation BS_ATTACKER, VOLATILE_POWDER waitanimation effectivenesssound hitanimation BS_ATTACKER waitstate - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_POWDEREXPLODES waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER @@ -7175,7 +6229,7 @@ BattleScript_WrapEnds:: BattleScript_MoveUsedIsInLove:: printstring STRINGID_PKMNINLOVE waitmessage B_WAIT_TIME_LONG - status2animation BS_ATTACKER, STATUS2_INFATUATION + volatileanimation BS_ATTACKER, VOLATILE_INFATUATION return BattleScript_MoveUsedIsInLoveCantAttack:: @@ -7186,13 +6240,13 @@ BattleScript_MoveUsedIsInLoveCantAttack:: BattleScript_NightmareTurnDmg:: printstring STRINGID_PKMNLOCKEDINNIGHTMARE waitmessage B_WAIT_TIME_LONG - status2animation BS_ATTACKER, STATUS2_NIGHTMARE + volatileanimation BS_ATTACKER, VOLATILE_NIGHTMARE goto BattleScript_DoTurnDmg BattleScript_CurseTurnDmg:: printstring STRINGID_PKMNAFFLICTEDBYCURSE waitmessage B_WAIT_TIME_LONG - status2animation BS_ATTACKER, STATUS2_CURSED + volatileanimation BS_ATTACKER, VOLATILE_CURSED goto BattleScript_DoTurnDmg BattleScript_TargetPRLZHeal:: @@ -7230,13 +6284,13 @@ BattleScript_UpdateEffectStatusIconRet:: flushtextbox return -BattleScript_YawnMakesAsleep:: +BattleScript_YawnMakesAsleepEnd2:: statusanimation BS_EFFECT_BATTLER printstring STRINGID_PKMNFELLASLEEP waitmessage B_WAIT_TIME_LONG updatestatusicon BS_EFFECT_BATTLER waitstate - jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_SKY_DROPPED, BattleScript_YawnEnd + jumpfifsemiinvulnerable BS_EFFECT_BATTLER, STATE_SKY_DROP, BattleScript_YawnEnd makevisible BS_EFFECT_BATTLER skydropyawn BattleScript_YawnEnd: @@ -7245,7 +6299,7 @@ BattleScript_YawnEnd: BattleScript_EmbargoEndTurn:: printstring STRINGID_EMBARGOENDS waitmessage B_WAIT_TIME_LONG - tryrestorehpberry + tryactivateitem BS_ATTACKER, ACTIVATION_ON_USABLE_AGAIN end2 BattleScript_TelekinesisEndTurn:: @@ -7322,28 +6376,21 @@ BattleScript_MoveEffectWrap:: return BattleScript_MoveEffectConfusion:: - chosenstatus2animation BS_EFFECT_BATTLER, STATUS2_CONFUSION + volatileanimation BS_EFFECT_BATTLER, VOLATILE_CONFUSION printstring STRINGID_PKMNWASCONFUSED waitmessage B_WAIT_TIME_LONG return BattleScript_MoveEffectRecoil:: - jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil - jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd - jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_RecoilEnd -BattleScript_DoRecoil:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_PKMNHITWITHRECOIL waitmessage B_WAIT_TIME_LONG - tryupdaterecoiltracker tryfaintmon BS_ATTACKER -BattleScript_RecoilEnd:: return BattleScript_ItemSteal:: - playanimation BS_TARGET, B_ANIM_ITEM_STEAL + playanimation BS_EFFECT_BATTLER, B_ANIM_ITEM_STEAL printstring STRINGID_PKMNSTOLEITEM waitmessage B_WAIT_TIME_LONG return @@ -7359,21 +6406,37 @@ BattleScript_DrizzleActivates:: BattleScript_AbilityRaisesDefenderStat:: pause B_WAIT_TIME_SHORT + statbuffchange BS_TARGET, STAT_CHANGE_ONLY_CHECKING, BattleScript_AbilityCantRaiseDefenderStat call BattleScript_AbilityPopUp - statbuffchange 0, NULL - setgraphicalstatchangevalues - playanimation BS_ABILITY_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, 0, BattleScript_AbilityCantRaiseDefenderStat printstring STRINGID_DEFENDERSSTATROSE waitmessage B_WAIT_TIME_LONG return +BattleScript_AbilityCantRaiseDefenderStat:: + saveattacker + copybyte gBattlerAttacker, gBattlerTarget + printstring STRINGID_STATSWONTINCREASE + waitmessage B_WAIT_TIME_LONG + restoreattacker + return + +BattleScript_AbilityShieldProtects:: + saveattacker + copybyte gBattlerAttacker, gBattlerAbility + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + printstring STRINGID_ABILITYSHIELDPROTECTS + waitmessage B_WAIT_TIME_LONG + restoreattacker + return + BattleScript_AbilityPopUpTarget:: copybyte gBattlerAbility, gBattlerTarget BattleScript_AbilityPopUp:: - .if B_ABILITY_POP_UP == TRUE - showabilitypopup BS_ABILITY_BATTLER - pause 40 - .endif + tryactivateabilityshield BS_ABILITY_BATTLER + showabilitypopup + pause B_WAIT_TIME_SHORT recordability BS_ABILITY_BATTLER sethword sABILITY_OVERWRITE, 0 return @@ -7384,26 +6447,16 @@ BattleScript_AbilityPopUpScripting: BattleScript_AbilityPopUpOverwriteThenNormal: setbyte sFIXED_ABILITY_POPUP, TRUE - showabilitypopup BS_ABILITY_BATTLER - pause 60 + showabilitypopup + pause B_WAIT_TIME_SHORT sethword sABILITY_OVERWRITE, 0 - updateabilitypopup BS_ABILITY_BATTLER - pause 20 + updateabilitypopup + pause B_WAIT_TIME_SHORT recordability BS_ABILITY_BATTLER destroyabilitypopup - pause 40 + setbyte sFIXED_ABILITY_POPUP, FALSE return -BattleScript_SpeedBoostActivates:: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_SpeedBoostActivatesEnd - call BattleScript_AbilityPopUp - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printstring STRINGID_PKMNRAISEDSPEED - waitmessage B_WAIT_TIME_LONG -BattleScript_SpeedBoostActivatesEnd: - end3 - @ Can't compare directly to a value, have to compare to value at pointer sZero: .byte 0 @@ -7411,37 +6464,31 @@ sZero: BattleScript_MoodyActivates:: call BattleScript_AbilityPopUp jumpifbyteequal sSTATCHANGER, sZero, BattleScript_MoodyLower - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyLower - jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_MoodyLower - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyLower + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_CHANGED, BattleScript_MoodyLower printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_MoodyLower: jumpifbyteequal sSAVED_STAT_CHANGER, sZero, BattleScript_MoodyEnd copybyte sSTATCHANGER, sSAVED_STAT_CHANGER - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyEnd - jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_MoodyEnd - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyEnd + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_CHANGED, BattleScript_MoodyEnd printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_MoodyEnd: - end3 + end2 BattleScript_EmergencyExit:: - .if B_ABILITY_POP_UP == TRUE pause 5 call BattleScript_AbilityPopUpScripting pause B_WAIT_TIME_LONG - .endif playanimation BS_SCRIPTING, B_ANIM_SLIDE_OFFSCREEN waitanimation openpartyscreen BS_SCRIPTING, BattleScript_EmergencyExitRet - switchoutabilities BS_SCRIPTING waitstate + returntoball BS_SCRIPTING, FALSE + switchoutabilities BS_SCRIPTING switchhandleorder BS_SCRIPTING, 2 - returntoball BS_TARGET, FALSE getswitchedmondata BS_SCRIPTING switchindataupdate BS_SCRIPTING hpthresholds BS_SCRIPTING @@ -7453,14 +6500,12 @@ BattleScript_EmergencyExitRet: return BattleScript_EmergencyExitWild:: - .if B_ABILITY_POP_UP == TRUE pause 5 call BattleScript_AbilityPopUpScripting pause B_WAIT_TIME_LONG - .endif playanimation BS_SCRIPTING, B_ANIM_SLIDE_OFFSCREEN waitanimation - setoutcomeonteleport BS_SCRIPTING + setteleportoutcome BS_SCRIPTING finishaction return @@ -7471,10 +6516,10 @@ BattleScript_EmergencyExitEnd2:: playanimation BS_ATTACKER, B_ANIM_SLIDE_OFFSCREEN waitanimation openpartyscreen BS_ATTACKER, BattleScript_EmergencyExitRetEnd2 - switchoutabilities BS_ATTACKER waitstate + returntoball BS_ATTACKER, FALSE + switchoutabilities BS_ATTACKER switchhandleorder BS_ATTACKER, 2 - returntoball BS_TARGET, FALSE getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER @@ -7491,7 +6536,7 @@ BattleScript_EmergencyExitWildEnd2:: pause B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_SLIDE_OFFSCREEN waitanimation - setoutcomeonteleport BS_ATTACKER + setteleportoutcome BS_ATTACKER finishaction end2 @@ -7509,20 +6554,20 @@ BattleScript_ReceiverActivates:: printstring STRINGID_RECEIVERABILITYTAKEOVER waitmessage B_WAIT_TIME_LONG settracedability BS_ABILITY_BATTLER + switchinabilities BS_ABILITY_BATTLER return BattleScript_AbilityHpHeal: call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXRESTOREDHPALITTLE2 waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE return BattleScript_RainDishActivates:: call BattleScript_AbilityHpHeal - end3 + end2 BattleScript_CheekPouchActivates:: copybyte sSAVED_BATTLER, gBattlerAttacker @@ -7537,9 +6582,9 @@ BattleScript_PickupActivates:: call BattleScript_AbilityPopUp printstring STRINGID_XFOUNDONEY waitmessage B_WAIT_TIME_LONG - tryrestorehpberry + tryactivateitem BS_ATTACKER, ACTIVATION_ON_PICK_UP BattleScript_PickupActivatesEnd: - end3 + end2 BattleScript_HarvestActivates:: pause 5 @@ -7547,19 +6592,18 @@ BattleScript_HarvestActivates:: call BattleScript_AbilityPopUp printstring STRINGID_HARVESTBERRY waitmessage B_WAIT_TIME_LONG - tryrestorehpberry + tryactivateitem BS_ATTACKER, ACTIVATION_ON_HARVEST BattleScript_HarvestActivatesEnd: - end3 + end2 BattleScript_SolarPowerActivates:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE call BattleScript_AbilityPopUp - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_SOLARPOWERHPDROP waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER - end3 + end2 BattleScript_HealerActivates:: call BattleScript_AbilityPopUp @@ -7567,7 +6611,7 @@ BattleScript_HealerActivates:: updatestatusicon BS_SCRIPTING printstring STRINGID_HEALERCURE waitmessage B_WAIT_TIME_LONG - end3 + end2 BattleScript_SandstreamActivates:: pause B_WAIT_TIME_SHORT @@ -7592,11 +6636,12 @@ BattleScript_ShedSkinActivates:: printstring STRINGID_PKMNSXCUREDYPROBLEM waitmessage B_WAIT_TIME_LONG updatestatusicon BS_ATTACKER - end3 + end2 BattleScript_ActivateWeatherAbilities: saveattacker savetarget + tryboosterenergy ON_WEATHER setbyte gBattlerAttacker, 0 BattleScript_ActivateWeatherAbilities_Loop: copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1 @@ -7608,14 +6653,11 @@ BattleScript_ActivateWeatherAbilities_Loop: return BattleScript_TryIntimidateHoldEffects: - itemstatchangeeffects BS_TARGET jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_ADRENALINE_ORB, BattleScript_TryIntimidateHoldEffectsRet - jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, 12, BattleScript_TryIntimidateHoldEffectsRet + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_TryIntimidateHoldEffectsRet setstatchanger STAT_SPEED, 1, FALSE - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_TryIntimidateHoldEffectsRet playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_TryIntimidateHoldEffectsRet copybyte sBATTLER, gBattlerTarget setlastuseditem BS_TARGET printstring STRINGID_USINGITEMSTATOFPKMNROSE @@ -7626,26 +6668,18 @@ BattleScript_TryIntimidateHoldEffectsRet: BattleScript_IntimidateActivates:: savetarget -.if B_ABILITY_POP_UP == TRUE - showabilitypopup BS_ATTACKER - pause B_WAIT_TIME_LONG - destroyabilitypopup -.endif + call BattleScript_AbilityPopUp setbyte gBattlerTarget, 0 BattleScript_IntimidateLoop: - jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_IntimidateLoopIncrement jumpiftargetally BattleScript_IntimidateLoopIncrement jumpifabsent BS_TARGET, BattleScript_IntimidateLoopIncrement - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateLoopIncrement + jumpifvolatile BS_TARGET, VOLATILE_SUBSTITUTE, BattleScript_IntimidateLoopIncrement jumpifintimidateabilityprevented BattleScript_IntimidateEffect: copybyte sBATTLER, gBattlerAttacker setstatchanger STAT_ATK, 1, TRUE - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateLoopIncrement - setgraphicalstatchangevalues - jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_IntimidateContrary - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_IntimidateWontDecrease - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateLoopIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_IntimidateWontDecrease printstring STRINGID_PKMNCUTSATTACKWITH BattleScript_IntimidateEffect_WaitString: waitmessage B_WAIT_TIME_LONG @@ -7661,8 +6695,8 @@ BattleScript_IntimidateLoopIncrement: copybyte sBATTLER, gBattlerAttacker destroyabilitypopup restoretarget + restoreattacker pause B_WAIT_TIME_MED - tryintimidateejectpack end3 BattleScript_IntimidatePrevented:: @@ -7675,16 +6709,6 @@ BattleScript_IntimidateWontDecrease: printstring STRINGID_STATSWONTDECREASE goto BattleScript_IntimidateEffect_WaitString -BattleScript_IntimidateContrary: - call BattleScript_AbilityPopUpTarget - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_IntimidateContrary_WontIncrease - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatUpStringIds - goto BattleScript_IntimidateEffect_WaitString -BattleScript_IntimidateContrary_WontIncrease: - printstring STRINGID_TARGETSTATWONTGOHIGHER - goto BattleScript_IntimidateEffect_WaitString - BattleScript_IntimidateInReverse:: copybyte sBATTLER, gBattlerTarget call BattleScript_AbilityPopUpTarget @@ -7695,56 +6719,42 @@ BattleScript_IntimidateInReverse:: BattleScript_SupersweetSyrupActivates:: savetarget -.if B_ABILITY_POP_UP == TRUE - showabilitypopup BS_ATTACKER - pause B_WAIT_TIME_LONG - destroyabilitypopup -.endif + call BattleScript_AbilityPopUp printstring STRINGID_SUPERSWEETAROMAWAFTS waitmessage B_WAIT_TIME_LONG setbyte gBattlerTarget, 0 BattleScript_SupersweetSyrupLoop: - jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_SupersweetSyrupLoopIncrement jumpiftargetally BattleScript_SupersweetSyrupLoopIncrement jumpifabsent BS_TARGET, BattleScript_SupersweetSyrupLoopIncrement - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_SupersweetSyrupLoopIncrement + jumpifvolatile BS_TARGET, VOLATILE_SUBSTITUTE, BattleScript_SupersweetSyrupLoopIncrement BattleScript_SupersweetSyrupEffect: copybyte sBATTLER, gBattlerAttacker setstatchanger STAT_EVASION, 1, TRUE - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_SupersweetSyrupLoopIncrement - setgraphicalstatchangevalues - jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_SupersweetSyrupContrary - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_SupersweetSyrupWontDecrease - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_SupersweetSyrupLoopIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_SupersweetSyrupWontDecrease printfromtable gStatDownStringIds BattleScript_SupersweetSyrupEffect_WaitString: waitmessage B_WAIT_TIME_LONG + saveattacker + savetarget copybyte sBATTLER, gBattlerTarget call BattleScript_TryIntimidateHoldEffects + restoreattacker + restoretarget BattleScript_SupersweetSyrupLoopIncrement: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_SupersweetSyrupLoop copybyte sBATTLER, gBattlerAttacker destroyabilitypopup restoretarget + restoreattacker pause B_WAIT_TIME_MED - tryintimidateejectpack end3 BattleScript_SupersweetSyrupWontDecrease: printstring STRINGID_STATSWONTDECREASE goto BattleScript_SupersweetSyrupEffect_WaitString -BattleScript_SupersweetSyrupContrary: - call BattleScript_AbilityPopUpTarget - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_SupersweetSyrupContrary_WontIncrease - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatUpStringIds - goto BattleScript_SupersweetSyrupEffect_WaitString -BattleScript_SupersweetSyrupContrary_WontIncrease: - printstring STRINGID_TARGETSTATWONTGOHIGHER - goto BattleScript_SupersweetSyrupEffect_WaitString - BattleScript_DroughtActivates:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -7764,11 +6774,7 @@ BattleScript_DesolateLandActivates:: end3 BattleScript_PrimalWeatherBlocksMove:: - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_ATTACKSTRING_PRINTED, BattleScript_MoveEnd @in case of multi-target moves, if move fails once, no point in printing the message twice - accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON - attackstring pause B_WAIT_TIME_SHORT - ppreduce printfromtable gPrimalWeatherBlocksStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -7788,6 +6794,7 @@ BattleScript_DeltaStreamActivates:: printstring STRINGID_MYSTERIOUSAIRCURRENT waitstate playanimation BS_ATTACKER, B_ANIM_STRONG_WINDS + call BattleScript_ActivateWeatherAbilities end3 BattleScript_ProtosynthesisActivates:: @@ -7821,12 +6828,9 @@ BattleScript_SupremeOverlordActivates:: BattleScript_CostarActivates:: pause B_WAIT_TIME_SHORT - savetarget - copybyte gBattlerTarget, sBATTLER call BattleScript_AbilityPopUp printstring STRINGID_PKMNCOPIEDSTATCHANGES waitmessage B_WAIT_TIME_LONG - restoretarget end3 BattleScript_ZeroToHeroActivates:: @@ -7842,35 +6846,33 @@ BattleScript_CommanderActivates:: printstring STRINGID_COMMANDERACTIVATES waitmessage B_WAIT_TIME_LONG BattleScript_CommanderAtkIncrease: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPATK | BIT_SPDEF | BIT_SPEED, STAT_CHANGE_BY_TWO setstatchanger STAT_ATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderDefIncrease - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderDefIncrease + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderDefIncrease, BIT_DEF | BIT_SPATK | BIT_SPDEF | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CommanderDefIncrease printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CommanderDefIncrease: setstatchanger STAT_DEF, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpAtkIncrease - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderSpAtkIncrease + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpAtkIncrease, BIT_SPATK | BIT_SPDEF | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CommanderSpAtkIncrease printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CommanderSpAtkIncrease: setstatchanger STAT_SPATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpDefIncrease - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderSpDefIncrease + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpDefIncrease, BIT_SPDEF | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CommanderSpDefIncrease printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CommanderSpDefIncrease: setstatchanger STAT_SPDEF, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpeedIncrease - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderSpeedIncrease + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpeedIncrease, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CommanderSpeedIncrease printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CommanderSpeedIncrease: setstatchanger STAT_SPEED, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_CommanderEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_CommanderEnd: @@ -7882,9 +6884,9 @@ BattleScript_HospitalityActivates:: call BattleScript_AbilityPopUp printstring STRINGID_HOSPITALITYRESTORATION waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + playanimation BS_EFFECT_BATTLER, B_ANIM_SIMPLE_HEAL + healthbarupdate BS_EFFECT_BATTLER, PASSIVE_HP_UPDATE + datahpupdate BS_EFFECT_BATTLER, PASSIVE_HP_UPDATE end3 BattleScript_AttackWeakenedByStrongWinds:: @@ -7921,10 +6923,12 @@ BattleScript_SnowWarningActivatesSnow:: BattleScript_ActivateTerrainEffects: saveattacker savetarget + tryboosterenergy ON_TERRAIN + resetterrainabilityflags setbyte gBattlerAttacker, 0 BattleScript_ActivateTerrainSeed: copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1 - doterrainseed BS_TARGET, BattleScript_ActivateTerrainAbility + tryterrainseed BS_TARGET, BattleScript_ActivateTerrainAbility removeitem BS_TARGET BattleScript_ActivateTerrainAbility: activateterrainchangeabilities BS_TARGET @@ -7984,9 +6988,8 @@ BattleScript_BadDreams_DmgAfterPopUp: printstring STRINGID_BADDREAMSDMG waitmessage B_WAIT_TIME_LONG dmg_1_8_targethp - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE jumpifhasnohp BS_TARGET, BattleScript_BadDreams_HidePopUp BattleScript_BadDreamsIncrement: addbyte gBattlerTarget, 1 @@ -7995,7 +6998,7 @@ BattleScript_BadDreamsIncrement: destroyabilitypopup pause 15 BattleScript_BadDreamsEnd: - end3 + end2 BattleScript_BadDreams_ShowPopUp: copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp @@ -8007,11 +7010,9 @@ BattleScript_BadDreams_HidePopUp: goto BattleScript_BadDreamsIncrement BattleScript_TookAttack:: - attackstring pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNSXTOOKATTACK waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED return BattleScript_SturdyPreventsOHKO:: @@ -8030,30 +7031,20 @@ BattleScript_DampStopsExplosion:: moveendcase MOVEEND_CLEAR_BITS end -BattleScript_MoveHPDrain_PPLoss:: - ppreduce BattleScript_MoveHPDrain:: - attackstring pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNRESTOREDHPUSING waitmessage B_WAIT_TIME_LONG setmoveresultflags MOVE_RESULT_DOESNT_AFFECT_FOE goto BattleScript_MoveEnd -BattleScript_MoveStatDrain_PPLoss:: - ppreduce BattleScript_MoveStatDrain:: - attackstring pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveStatDrain_Cont + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_MoveStatDrain_Cont .if B_ABSORBING_ABILITY_STRING >= GEN_5 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG @@ -8065,10 +7056,7 @@ BattleScript_MoveStatDrain_Cont: clearsemiinvulnerablebit goto BattleScript_MoveEnd -BattleScript_MonMadeMoveUseless_PPLoss:: - ppreduce BattleScript_MonMadeMoveUseless:: - attackstring pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXMADEYUSELESS @@ -8076,10 +7064,7 @@ BattleScript_MonMadeMoveUseless:: setmoveresultflags MOVE_RESULT_DOESNT_AFFECT_FOE goto BattleScript_MoveEnd -BattleScript_FlashFireBoost_PPLoss:: - ppreduce BattleScript_FlashFireBoost:: - attackstring pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printfromtable gFlashFireStringIds @@ -8122,18 +7107,17 @@ BattleScript_FlinchPrevention:: call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXPREVENTSFLINCHING waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_OwnTempoPrevents:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp + copybyte sBATTLER, gBattlerTarget printstring STRINGID_PKMNPREVENTSCONFUSIONWITH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_SoundproofProtected:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXBLOCKSY @@ -8146,8 +7130,6 @@ BattleScript_IceFaceNullsDamage:: return BattleScript_DazzlingProtected:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUpScripting printstring STRINGID_POKEMONCANNOTUSEMOVE @@ -8155,17 +7137,17 @@ BattleScript_DazzlingProtected:: goto BattleScript_MoveEnd BattleScript_MoveUsedPsychicTerrainPrevents:: - printstring STRINGID_POKEMONCANNOTUSEMOVE + pause B_WAIT_TIME_SHORT + printstring STRINGID_PSYCHICTERRAINPREVENTS waitmessage B_WAIT_TIME_LONG + setmoveresultflags MOVE_RESULT_NO_EFFECT goto BattleScript_MoveEnd BattleScript_GrassyTerrainHeals:: printstring STRINGID_GRASSYTERRAINHEALS waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE end2 BattleScript_AbilityNoSpecificStatLoss:: @@ -8173,16 +7155,20 @@ BattleScript_AbilityNoSpecificStatLoss:: call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXPREVENTSYLOSS waitmessage B_WAIT_TIME_LONG - setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY setmoveresultflags MOVE_RESULT_NO_EFFECT return BattleScript_StickyHoldActivates:: + call BattleScript_StickyHoldActivatesRet + goto BattleScript_MoveEnd + +BattleScript_StickyHoldActivatesRet:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXMADEYINEFFECTIVE waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_ColorChangeActivates:: call BattleScript_AbilityPopUp @@ -8197,6 +7183,11 @@ BattleScript_ProteanActivates:: waitmessage B_WAIT_TIME_LONG return +BattleScript_AbilityAvoidsDamage:: + call BattleScript_AbilityPopUp + printfromtable gMissStringIds @ waitmessage is executed next so no waitmessage here + return + BattleScript_TeraShellDistortingTypeMatchups:: pause B_WAIT_TIME_SHORTEST call BattleScript_AbilityPopUpScripting @@ -8206,33 +7197,35 @@ BattleScript_TeraShellDistortingTypeMatchups:: BattleScript_CursedBodyActivates:: call BattleScript_AbilityPopUp - printstring STRINGID_CUSEDBODYDISABLED + printstring STRINGID_CURSEDBODYDISABLED waitmessage B_WAIT_TIME_LONG return BattleScript_MummyActivates:: -.if B_ABILITY_POP_UP == TRUE - call BattleScript_AbilityPopUpTarget setbyte sFIXED_ABILITY_POPUP, TRUE + call BattleScript_AbilityPopUpTarget copybyte gBattlerAbility, gBattlerAttacker copyhword sABILITY_OVERWRITE, gLastUsedAbility call BattleScript_AbilityPopUpOverwriteThenNormal -.endif recordability BS_TARGET recordability BS_ATTACKER printstring STRINGID_ATTACKERACQUIREDABILITY waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + tryrevertweatherform + flushtextbox + tryendneutralizinggas return BattleScript_WanderingSpiritActivates:: -.if B_ABILITY_POP_UP == TRUE + saveattacker + savetarget copybyte gBattlerAbility, gBattlerTarget sethword sABILITY_OVERWRITE, ABILITY_WANDERING_SPIRIT call BattleScript_AbilityPopUpOverwriteThenNormal copybyte gBattlerAbility, gBattlerAttacker copyhword sABILITY_OVERWRITE, gLastUsedAbility call BattleScript_AbilityPopUpOverwriteThenNormal -.endif recordability BS_TARGET recordability BS_ATTACKER printstring STRINGID_SWAPPEDABILITIES @@ -8241,27 +7234,25 @@ BattleScript_WanderingSpiritActivates:: jumpiffainted BS_TARGET, TRUE, BattleScript_WanderingSpiritActivatesRet switchinabilities BS_TARGET BattleScript_WanderingSpiritActivatesRet: + restoreattacker + restoretarget return BattleScript_TargetsStatWasMaxedOut:: call BattleScript_AbilityPopUp - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_CERTAIN, BattleScript_TargetsStatWasMaxedOutRet printstring STRINGID_TARGETSSTATWASMAXEDOUT waitmessage B_WAIT_TIME_LONG +BattleScript_TargetsStatWasMaxedOutRet: return BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + call BattleScript_AbilityPopUpScripting + statbuffchange BS_SCRIPTING, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_CERTAIN, BattleScript_BattlerAbilityStatRaiseOnSwitchInRet waitanimation - printstring STRINGID_BATTLERABILITYRAISEDSTAT + printstring STRINGID_SCRIPTINGABILITYSTATRAISE waitmessage B_WAIT_TIME_LONG - copybyte gBattlerAttacker, sSAVED_BATTLER +BattleScript_BattlerAbilityStatRaiseOnSwitchInRet: end3 BattleScript_ScriptingAbilityStatRaise:: @@ -8269,81 +7260,70 @@ BattleScript_ScriptingAbilityStatRaise:: call BattleScript_AbilityPopUp saveattacker copybyte gBattlerAttacker, sBATTLER - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL - setgraphicalstatchangevalues - playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation + statbuffchange BS_ATTACKER, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_CERTAIN, BattleScript_ScriptingAbilityStatRaiseRet printstring STRINGID_ATTACKERABILITYSTATRAISE waitmessage B_WAIT_TIME_LONG +BattleScript_ScriptingAbilityStatRaiseRet: restoreattacker return BattleScript_WeakArmorActivates:: call BattleScript_AbilityPopUp setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesSpeed - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_WeakArmorDefAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_WeakArmorActivatesSpeed + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesSpeed + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_WeakArmorDefPrintString + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_WeakArmorActivatesSpeed pause B_WAIT_TIME_SHORTEST printfromtable gStatDownStringIds clearmoveresultflags MOVE_RESULT_MISSED @ Set by statbuffchange when stat can't be decreased waitmessage B_WAIT_TIME_LONG goto BattleScript_WeakArmorActivatesSpeed -BattleScript_WeakArmorDefAnim: - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_WeakArmorDefPrintString: printstring STRINGID_TARGETABILITYSTATLOWER waitmessage B_WAIT_TIME_LONG BattleScript_WeakArmorActivatesSpeed: -.if B_WEAK_ARMOR_SPEED >= GEN_7 + jumpifgenconfiglowerthan CONFIG_WEAK_ARMOR_SPEED, GEN_7, BattleScript_WeakArmorSetSpeedGen6 setstatchanger STAT_SPEED, 2, FALSE -.else + goto BattleScript_WeakArmorDoSpeed +BattleScript_WeakArmorSetSpeedGen6: setstatchanger STAT_SPEED, 1, FALSE -.endif - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd +BattleScript_WeakArmorDoSpeed: + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_WeakArmorSpeedPrintString + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGE_EMPTY, BattleScript_WeakArmorActivatesEnd pause B_WAIT_TIME_SHORTEST printstring STRINGID_TARGETSTATWONTGOHIGHER clearmoveresultflags MOVE_RESULT_MISSED waitmessage B_WAIT_TIME_LONG goto BattleScript_WeakArmorActivatesEnd -BattleScript_WeakArmorSpeedAnim: - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_WeakArmorSpeedPrintString: printstring STRINGID_TARGETABILITYSTATRAISE waitmessage B_WAIT_TIME_LONG BattleScript_WeakArmorActivatesEnd: return BattleScript_RaiseStatOnFaintingTarget:: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseStatOnFaintingTarget_End + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_RaiseStatOnFaintingTarget_End copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseStatOnFaintingTarget_End printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_RaiseStatOnFaintingTarget_End: return BattleScript_AttackerAbilityStatRaise:: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackerAbilityStatRaise_End - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation + statbuffchange BS_SCRIPTING, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_AttackerAbilityStatRaise_End + call BattleScript_AbilityPopUpScripting + statbuffchange BS_SCRIPTING, STAT_CHANGE_ALLOW_PTR, BattleScript_AttackerAbilityStatRaise_End printstring STRINGID_ATTACKERABILITYSTATRAISE waitmessage B_WAIT_TIME_LONG BattleScript_AttackerAbilityStatRaise_End: return BattleScript_FellStingerRaisesStat:: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FellStingerRaisesAtkEnd - jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_FellStingerRaisesAtkEnd - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_FellStingerRaisesAtkEnd + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_CHANGED, BattleScript_FellStingerRaisesAtkEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_FellStingerRaisesAtkEnd: @@ -8351,8 +7331,14 @@ BattleScript_FellStingerRaisesAtkEnd: BattleScript_AttackerAbilityStatRaiseEnd3:: call BattleScript_AttackerAbilityStatRaise + restoreattacker end3 +BattleScript_AttackerAbilityStatRaiseEnd2:: + call BattleScript_AttackerAbilityStatRaise + restoreattacker + end2 + BattleScript_SwitchInAbilityMsg:: call BattleScript_AbilityPopUp printfromtable gSwitchInAbilityStringIds @@ -8387,26 +7373,27 @@ BattleScript_FriskMsg:: BattleScript_FriskActivates:: saveattacker - savetarget + savetarget copybyte gBattlerAttacker, sBATTLER - tryfriskmsg BS_SCRIPTING + tryfriskmessage restoreattacker - restoretarget + restoretarget end3 BattleScript_ImposterActivates:: call BattleScript_AbilityPopUp transformdataexecution - playmoveanimation BS_ATTACKER, MOVE_TRANSFORM + playmoveanimation MOVE_TRANSFORM waitanimation printstring STRINGID_IMPOSTERTRANSFORM waitmessage B_WAIT_TIME_LONG + restoreattacker + restoretarget end3 BattleScript_HurtAttacker: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_PKMNHURTSWITH waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER @@ -8428,10 +7415,9 @@ BattleScript_RockyHelmetActivatesDmg: BattleScript_SpikyShieldEffect:: jumpifabsent BS_ATTACKER, BattleScript_SpikyShieldRet - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE clearmoveresultflags MOVE_RESULT_NO_EFFECT - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_PKMNHURTSWITH waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER @@ -8440,9 +7426,8 @@ BattleScript_SpikyShieldRet:: return BattleScript_KingsShieldEffect:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE clearmoveresultflags MOVE_RESULT_NO_EFFECT - seteffectsecondary + seteffectsecondary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_NONE copybyte sBATTLER, gBattlerTarget copybyte gBattlerTarget, gBattlerAttacker copybyte gBattlerAttacker, sBATTLER @@ -8450,32 +7435,33 @@ BattleScript_KingsShieldEffect:: return BattleScript_BanefulBunkerEffect:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_PASSIVE_DAMAGE clearmoveresultflags MOVE_RESULT_NO_EFFECT - seteffectsecondary + setnonvolatilestatus TRIGGER_ON_PROTECT setmoveresultflags MOVE_RESULT_MISSED return BattleScript_CuteCharmActivates:: call BattleScript_AbilityPopUp - status2animation BS_ATTACKER, STATUS2_INFATUATION + volatileanimation BS_ATTACKER, VOLATILE_INFATUATION printstring STRINGID_PKMNSXINFATUATEDY waitmessage B_WAIT_TIME_LONG call BattleScript_TryDestinyKnotTarget return BattleScript_GooeyActivates:: + statbuffchange BS_ATTACKER, STAT_CHANGE_ONLY_CHECKING, BattleScript_GooeyActivatesRet waitstate call BattleScript_AbilityPopUp swapattackerwithtarget @ for defiant, mirror armor - seteffectsecondary MOVE_EFFECT_SPD_MINUS_1 + seteffectsecondary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_SPD_MINUS_1 swapattackerwithtarget +BattleScript_GooeyActivatesRet: return BattleScript_AbilityStatusEffect:: waitstate call BattleScript_AbilityPopUp - seteffectsecondary + setnonvolatilestatus TRIGGER_ON_ABILITY return BattleScript_BattleBondActivatesOnMoveEndAttacker:: @@ -8493,22 +7479,21 @@ BattleScript_BattleBondActivatesOnMoveEndAttacker:: BattleScript_EffectBattleBondStatIncrease:: call BattleScript_AbilityPopUp - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 setstatchanger STAT_ATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseTrySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectBattleBondStatIncreaseTrySpAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseTrySpAtk, BIT_SPATK | BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectBattleBondStatIncreaseTrySpAtk printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectBattleBondStatIncreaseTrySpAtk: setstatchanger STAT_SPATK, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectBattleBondStatIncreaseTrySpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseTrySpeed, BIT_SPEED + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectBattleBondStatIncreaseTrySpeed printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectBattleBondStatIncreaseTrySpeed: setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectBattleBondStatIncreaseRet + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_EffectBattleBondStatIncreaseRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_EffectBattleBondStatIncreaseRet printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_EffectBattleBondStatIncreaseRet: @@ -8517,13 +7502,12 @@ BattleScript_EffectBattleBondStatIncreaseRet: BattleScript_DancerActivates:: call BattleScript_AbilityPopUp waitmessage B_WAIT_TIME_SHORT - orword gHitMarker, HITMARKER_ALLOW_NO_PP jumptocalledmove TRUE BattleScript_SynchronizeActivates:: waitstate call BattleScript_AbilityPopUp - seteffectprimary + setnonvolatilestatus TRIGGER_ON_ABILITY return BattleScript_NoItemSteal:: @@ -8539,6 +7523,13 @@ BattleScript_AbilityCuredStatus:: updatestatusicon BS_SCRIPTING return +BattleScript_AbilityCuredStatusEnd3:: + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSXCUREDITSYPROBLEM + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_SCRIPTING + end3 + BattleScript_BattlerShookOffTaunt:: call BattleScript_AbilityPopUp printstring STRINGID_PKMNSHOOKOFFTHETAUNT @@ -8560,15 +7551,14 @@ BattleScript_IgnoresWhileAsleep:: BattleScript_IgnoresAndUsesRandomMove:: printstring STRINGID_PKMNIGNOREDORDERS waitmessage B_WAIT_TIME_LONG - setbyte sMOVE_EFFECT, 0 - jumptocalledmove FALSE + return BattleScript_MoveUsedLoafingAround:: jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_LOAFING, BattleScript_MoveUsedLoafingAroundMsg @ Skip ahead if not the Battle Palace message jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_INCAPABLE_OF_POWER, BattleScript_MoveUsedLoafingAroundMsg setbyte gBattleCommunication, 0 - palacetryescapestatus BS_ATTACKER + palacetryescapestatus setbyte cMULTISTRING_CHOOSER, B_MSG_INCAPABLE_OF_POWER BattleScript_MoveUsedLoafingAroundMsg:: printfromtable gInobedientStringIds @@ -8576,13 +7566,14 @@ BattleScript_MoveUsedLoafingAroundMsg:: moveendto MOVEEND_NEXT_TARGET end BattleScript_TruantLoafingAround:: + flushtextbox call BattleScript_AbilityPopUp goto BattleScript_MoveUsedLoafingAroundMsg BattleScript_IgnoresAndFallsAsleep:: printstring STRINGID_PKMNBEGANTONAP waitmessage B_WAIT_TIME_LONG - seteffectprimary MOVE_EFFECT_SLEEP | MOVE_EFFECT_AFFECTS_USER + seteffectprimary BS_ATTACKER, BS_ATTACKER, MOVE_EFFECT_SLEEP moveendto MOVEEND_NEXT_TARGET end @@ -8596,73 +7587,13 @@ BattleScript_SubstituteFade:: printstring STRINGID_PKMNSUBSTITUTEFADED return -BattleScript_BerryCurePrlzEnd2:: - call BattleScript_BerryCureParRet - end2 - -BattleScript_BerryCureParRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMCUREDPARALYSIS - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_SCRIPTING - removeitem BS_SCRIPTING - return - -BattleScript_BerryCurePsnEnd2:: - call BattleScript_BerryCurePsnRet +BattleScript_BerryCureStatusEnd2:: + call BattleScript_BerryCureStatusRet end2 -BattleScript_BerryCurePsnRet:: +BattleScript_BerryCureStatusRet:: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMCUREDPOISON - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_SCRIPTING - removeitem BS_SCRIPTING - return - -BattleScript_BerryCureBrnEnd2:: - call BattleScript_BerryCureBrnRet - end2 - -BattleScript_BerryCureBrnRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMHEALEDBURN - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_SCRIPTING - removeitem BS_SCRIPTING - return - -BattleScript_BerryCureFrzEnd2:: - call BattleScript_BerryCureFrzRet - end2 - -BattleScript_BerryCureFrzRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMDEFROSTEDIT - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_SCRIPTING - removeitem BS_SCRIPTING - return - -BattleScript_BerryCureFrbEnd2:: - call BattleScript_BerryCureFrzRet - end2 - -BattleScript_BerryCureFrbRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMHEALEDFROSTBITE - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_SCRIPTING - removeitem BS_SCRIPTING - return - -BattleScript_BerryCureSlpEnd2:: - call BattleScript_BerryCureSlpRet - end2 - -BattleScript_BerryCureSlpRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMWOKEIT + printfromtable CureStatusBerryEffectStringID waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING removeitem BS_SCRIPTING @@ -8697,25 +7628,12 @@ BattleScript_BerryCureConfusionRet:: removeitem BS_SCRIPTING return -BattleScript_BerryCureChosenStatusEnd2:: - call BattleScript_BerryCureChosenStatusRet - end2 - -BattleScript_BerryCureChosenStatusRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printfromtable gBerryEffectStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_SCRIPTING - removeitem BS_SCRIPTING - return - BattleScript_MentalHerbCureRet:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printfromtable gMentalHerbCureStringIds waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING removeitem BS_SCRIPTING - copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe return BattleScript_MentalHerbCureEnd2:: @@ -8737,14 +7655,13 @@ BattleScript_ItemHealHP_RemoveItemRet:: jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp goto BattleScript_ItemHealHP_RemoveItemRet_Anim BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp: - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting BattleScript_ItemHealHP_RemoveItemRet_Anim: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE removeitem BS_SCRIPTING return @@ -8752,27 +7669,26 @@ BattleScript_ItemHealHP_RemoveItemEnd2:: jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemEnd2_AbilityPopUp goto BattleScript_ItemHealHP_RemoveItemEnd2_Anim BattleScript_ItemHealHP_RemoveItemEnd2_AbilityPopUp: - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting BattleScript_ItemHealHP_RemoveItemEnd2_Anim: playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE removeitem BS_ATTACKER end2 BattleScript_BerryPPHealRet:: - jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryPPHeal_AbilityPopup + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryPPHeal_AbilityPopup goto BattleScript_BerryPPHeal_Anim BattleScript_BerryPPHeal_AbilityPopup: - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting BattleScript_BerryPPHeal_Anim: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDPP waitmessage B_WAIT_TIME_LONG - removeitem BS_ATTACKER + removeitem BS_SCRIPTING return BattleScript_BerryPPHealEnd2:: @@ -8783,21 +7699,25 @@ BattleScript_ItemHealHP_End2:: call BattleScript_ItemHealHP_Ret end2 -BattleScript_AirBaloonMsgIn:: +BattleScript_AirBalloonMsgIn:: printstring STRINGID_AIRBALLOONFLOAT waitmessage B_WAIT_TIME_LONG end3 -BattleScript_AirBaloonMsgPop:: +BattleScript_AirBalloonMsgInRet:: + printstring STRINGID_AIRBALLOONFLOAT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AirBalloonMsgPop:: printstring STRINGID_AIRBALLOONPOP waitmessage B_WAIT_TIME_LONG removeitem BS_TARGET return BattleScript_ItemHurtRet:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE printstring STRINGID_HURTBYITEM waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER @@ -8813,9 +7733,8 @@ BattleScript_ItemHealHP_Ret:: playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHPALITTLE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER + healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE + datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE return BattleScript_SelectingNotAllowedMoveChoiceItem:: @@ -8868,10 +7787,9 @@ BattleScript_BerryConfuseHealEnd2_Anim: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING - seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + seteffectprimary BS_SCRIPTING, BS_SCRIPTING, MOVE_EFFECT_CONFUSION removeitem BS_SCRIPTING end2 @@ -8884,11 +7802,10 @@ BattleScript_BerryConfuseHealRet_Anim: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING - seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN - removeitem BS_TARGET + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + seteffectprimary BS_SCRIPTING, BS_SCRIPTING, MOVE_EFFECT_CONFUSION + removeitem BS_SCRIPTING return BattleScript_ConsumableStatRaiseEnd2:: @@ -8896,24 +7813,22 @@ BattleScript_ConsumableStatRaiseEnd2:: end2 BattleScript_ConsumableStatRaiseRet:: - @ to ensure `statbuffchange` has correct battler id, backup and use target - savetarget - copybyte gBattlerTarget, sBATTLER jumpifnotberry BS_SCRIPTING, BattleScript_ConsumableStatRaiseRet_Anim - @ check ripen popup if consuming berry jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_ConsumableStatRaiseRet_AbilityPopup goto BattleScript_ConsumableStatRaiseRet_Anim BattleScript_ConsumableStatRaiseRet_AbilityPopup: call BattleScript_AbilityPopUp BattleScript_ConsumableStatRaiseRet_Anim: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_ConsumableStatRaiseRet_End - setgraphicalstatchangevalues + statbuffchange BS_SCRIPTING, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_ConsumableStatRaiseRet_End playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 - setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM + statbuffchange BS_SCRIPTING, STAT_CHANGE_ALLOW_PTR, BattleScript_ConsumableStatRaiseRet_End + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGED_ITEM + savetarget + copybyte gBattlerTarget, sBATTLER @ BattleScript_StatUp uses target as a message arg call BattleScript_StatUp + restoretarget removeitem BS_SCRIPTING BattleScript_ConsumableStatRaiseRet_End: - restoretarget return BattleScript_BerryFocusEnergyRet:: @@ -8938,7 +7853,7 @@ BattleScript_FlushMessageBox:: BattleScript_PalacePrintFlavorText:: setbyte gBattleCommunication + 1, 0 BattleScript_PalaceTryBattlerFlavorText:: - palaceflavortext BS_ATTACKER @ BS_ATTACKER here overwritten by gBattleCommunication + 1 + palaceflavortext jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, TRUE, BattleScript_PalaceEndFlavorText printfromtable gBattlePalaceFlavorTextTable waitmessage B_WAIT_TIME_LONG @@ -8950,16 +7865,16 @@ BattleScript_PalaceEndFlavorText:: end2 BattleScript_ArenaTurnBeginning:: - waitcry BS_ATTACKER + waitcry volumedown playse SE_ARENA_TIMEUP1 pause 8 playse SE_ARENA_TIMEUP1 - arenadrawreftextbox + drawarenareftextbox arenajudgmentstring B_MSG_REF_COMMENCE_BATTLE - arenawaitmessage B_MSG_REF_COMMENCE_BATTLE + arenawaitmessage pause B_WAIT_TIME_LONG - arenaerasereftextbox + erasearenareftextbox volumeup end2 @@ -8973,74 +7888,78 @@ BattleScript_ArenaDoJudgment:: pause 8 playse SE_ARENA_TIMEUP1 pause B_WAIT_TIME_LONG - arenadrawreftextbox + drawarenareftextbox arenajudgmentstring B_MSG_REF_THATS_IT - arenawaitmessage B_MSG_REF_THATS_IT + arenawaitmessage pause B_WAIT_TIME_LONG setbyte gBattleCommunication, 0 @ Reset state for arenajudgmentwindow arenajudgmentwindow pause B_WAIT_TIME_LONG arenajudgmentwindow arenajudgmentstring B_MSG_REF_JUDGE_MIND - arenawaitmessage B_MSG_REF_JUDGE_MIND + arenawaitmessage arenajudgmentwindow arenajudgmentstring B_MSG_REF_JUDGE_SKILL - arenawaitmessage B_MSG_REF_JUDGE_SKILL + arenawaitmessage arenajudgmentwindow arenajudgmentstring B_MSG_REF_JUDGE_BODY - arenawaitmessage B_MSG_REF_JUDGE_BODY + arenawaitmessage arenajudgmentwindow jumpifbyte CMP_EQUAL, gBattleCommunication + 1, ARENA_RESULT_PLAYER_LOST, BattleScript_ArenaJudgmentPlayerLoses jumpifbyte CMP_EQUAL, gBattleCommunication + 1, ARENA_RESULT_TIE, BattleScript_ArenaJudgmentDraw @ ARENA_RESULT_PLAYER_WON arenajudgmentstring B_MSG_REF_PLAYER_WON - arenawaitmessage B_MSG_REF_PLAYER_WON + arenawaitmessage arenajudgmentwindow - arenaerasereftextbox + erasearenareftextbox printstring STRINGID_DEFEATEDOPPONENTBYREFEREE waitmessage B_WAIT_TIME_LONG playfaintcry BS_OPPONENT1 - waitcry BS_ATTACKER + waitcry dofaintanimation BS_OPPONENT1 cleareffectsonfaint BS_OPPONENT1 + waitanimation arenaopponentmonlost end2 BattleScript_ArenaJudgmentPlayerLoses: arenajudgmentstring B_MSG_REF_OPPONENT_WON - arenawaitmessage B_MSG_REF_OPPONENT_WON + arenawaitmessage arenajudgmentwindow - arenaerasereftextbox + erasearenareftextbox printstring STRINGID_LOSTTOOPPONENTBYREFEREE waitmessage B_WAIT_TIME_LONG playfaintcry BS_PLAYER1 - waitcry BS_ATTACKER + waitcry dofaintanimation BS_PLAYER1 cleareffectsonfaint BS_PLAYER1 + waitanimation arenaplayermonlost end2 BattleScript_ArenaJudgmentDraw: arenajudgmentstring B_MSG_REF_DRAW - arenawaitmessage B_MSG_REF_DRAW + arenawaitmessage arenajudgmentwindow - arenaerasereftextbox + erasearenareftextbox printstring STRINGID_TIEDOPPONENTBYREFEREE waitmessage B_WAIT_TIME_LONG + arenabothmonslost playfaintcry BS_PLAYER1 - waitcry BS_ATTACKER + waitcry dofaintanimation BS_PLAYER1 cleareffectsonfaint BS_PLAYER1 + waitanimation playfaintcry BS_OPPONENT1 - waitcry BS_ATTACKER + waitcry dofaintanimation BS_OPPONENT1 cleareffectsonfaint BS_OPPONENT1 - arenabothmonlost + waitanimation end2 BattleScript_AskIfWantsToForfeitMatch:: printselectionstring STRINGID_QUESTIONFORFEITMATCH - forfeityesnobox BS_ATTACKER + forfeityesnobox endselectionscript BattleScript_PrintPlayerForfeited:: @@ -9071,24 +7990,30 @@ BattleScript_MirrorHerbCopyStatChange:: printstring STRINGID_MIRRORHERBCOPIED waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING - playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 BattleScript_MirrorHerbStartCopyStats: copyfoesstatincrease BS_SCRIPTING, BattleScript_MirrorHerbStartReturn - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorHerbStartReturn + statbuffchange BS_SCRIPTING, STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorHerbStartReturn + setbyte sSTAT_ANIM_PLAYED, TRUE @ play stat change animation only once goto BattleScript_MirrorHerbStartCopyStats BattleScript_MirrorHerbStartReturn: + setbyte sSTAT_ANIM_PLAYED, FALSE return BattleScript_OpportunistCopyStatChange:: call BattleScript_AbilityPopUpScripting - playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 BattleScript_OpportunistStartCopyStats: copyfoesstatincrease BS_SCRIPTING, BattleScript_OpportunistCopyStatChangeEnd - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OpportunistCopyStatChangeEnd + statbuffchange BS_SCRIPTING, STAT_CHANGE_ALLOW_PTR, BattleScript_OpportunistCopyStatChangeEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG + setbyte sSTAT_ANIM_PLAYED, TRUE @ play stat change animation only once goto BattleScript_OpportunistStartCopyStats BattleScript_OpportunistCopyStatChangeEnd: + setbyte sSTAT_ANIM_PLAYED, FALSE + return + +BattleScript_OpportunistCopyStatChangeEnd3:: + call BattleScript_OpportunistCopyStatChange end3 BattleScript_TotemVar:: @@ -9100,9 +8025,7 @@ BattleScript_TotemVar_Ret:: BattleScript_TotemVarEnd: return BattleScript_ApplyTotemVarBoost: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TotemVarEnd - setgraphicalstatchangevalues - playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_TotemVarEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_TotemVar_Ret @loop until stats bitfield is empty @@ -9125,12 +8048,27 @@ BattleScript_ActivateTeraformZero_RemoveWeather: removeweather printfromtable gWeatherEndsStringIds waitmessage B_WAIT_TIME_LONG - jumpifhalfword CMP_NO_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ActivateTeraformZero_End + call BattleScript_ActivateWeatherAbilities + jumpifhalfword CMP_NO_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ActivateTeraformZeroEffects BattleScript_ActivateTeraformZero_RemoveTerrain: removeterrain playanimation BS_ATTACKER, B_ANIM_RESTORE_BG printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG +BattleScript_ActivateTeraformZeroEffects: + saveattacker + savetarget + tryboosterenergy ON_ANY + resetterrainabilityflags + setbyte gBattlerAttacker, 0 +BattleScript_ActivateTeraformZeroLoop: + copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1 + activateterrainchangeabilities BS_TARGET + activateweatherchangeabilities BS_TARGET + addbyte gBattlerAttacker, 1 + jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateTeraformZeroLoop + restoreattacker + restoretarget BattleScript_ActivateTeraformZero_End: end3 @@ -9174,7 +8112,7 @@ BattleScript_MicleBerryActivateRet:: jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_MicleBerryActivateRet_Ripen goto BattleScript_MicleBerryActivateRet_Anim BattleScript_MicleBerryActivateRet_Ripen: - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting BattleScript_MicleBerryActivateRet_Anim: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_MICLEBERRYACTIVATES @@ -9217,33 +8155,21 @@ BattleScript_ZMoveActivateStatus:: copybyte sSTATCHANGER, sSAVED_STAT_CHANGER return -BattleScript_ZMoveActivatePowder:: - flushtextbox - trytrainerslidezmovemsg - savetarget - printstring STRINGID_ZPOWERSURROUNDS - playanimation BS_ATTACKER, B_ANIM_ZMOVE_ACTIVATE, NULL - setzeffect - restoretarget - goto BattleScript_MoveUsedPowder - BattleScript_ZEffectPrintString:: printfromtable gZEffectStringIds waitmessage B_WAIT_TIME_LONG return BattleScript_RecoverHPZMove:: - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE printfromtable gZEffectStringIds waitmessage B_WAIT_TIME_LONG return BattleScript_StatUpZMove:: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpZMoveEnd - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpZMoveEnd - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpZMoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_StatUpZMoveEnd printstring STRINGID_ZMOVESTATUP waitmessage B_WAIT_TIME_LONG printfromtable gStatUpStringIds @@ -9252,17 +8178,15 @@ BattleScript_StatUpZMoveEnd: return BattleScript_HealReplacementZMove:: - playanimation BS_SCRIPTING B_ANIM_WISH_HEAL 0x0 + playanimation BS_SCRIPTING, B_ANIM_WISH_HEAL, 0x0 printfromtable gZEffectStringIds waitmessage B_WAIT_TIME_LONG - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE return BattleScript_EffectExtremeEvoboost:: attackcanceler - attackstring - ppreduce jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim @@ -9272,95 +8196,48 @@ BattleScript_EffectExtremeEvoboost:: BattleScript_ExtremeEvoboostAnim: attackanimation waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0x0 setstatchanger STAT_ATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostDef, BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ExtremeEvoboostDef:: setstatchanger STAT_DEF, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpeed + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpeed, BIT_SPEED | BIT_SPATK | BIT_SPDEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ExtremeEvoboostSpeed:: setstatchanger STAT_SPEED, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpAtk + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpAtk, BIT_SPATK | BIT_SPDEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ExtremeEvoboostSpAtk:: setstatchanger STAT_SPATK, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpDef + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpDef, BIT_SPDEF printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ExtremeEvoboostSpDef:: setstatchanger STAT_SPDEF, 2, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostEnd + statbuffchange BS_ATTACKER, STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_ExtremeEvoboostEnd:: goto BattleScript_MoveEnd -BattleScript_EffectHitSetRemoveTerrain:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - jumpifmovepropertyargument ARG_TRY_REMOVE_TERRAIN_FAIL, BattleScript_RemoveTerrain - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - setremoveterrain BattleScript_TryFaint - playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - printfromtable gTerrainStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_TryFaint: - tryfaintmon BS_TARGET - goto BattleScript_MoveEnd - -BattleScript_RemoveTerrain: - jumpifterrainaffected BS_TARGET, STATUS_FIELD_TERRAIN_ANY, BattleScript_RemoveTerrain_Cont - goto BattleScript_ButItFailed -BattleScript_RemoveTerrain_Cont: - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG +BattleScript_RemoveTerrain:: removeterrain playanimation BS_ATTACKER, B_ANIM_RESTORE_BG printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET - goto BattleScript_MoveEnd + return BattleScript_Pickpocket:: call BattleScript_AbilityPopUp jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented swapattackerwithtarget + copybyte gEffectBattler, gBattlerTarget call BattleScript_ItemSteal swapattackerwithtarget - activateitemeffects BS_TARGET + activateitemeffects return BattleScript_PickpocketPrevented: @@ -9392,7 +8269,7 @@ BattleScript_RedCardActivates:: printstring STRINGID_REDCARDACTIVATE waitmessage B_WAIT_TIME_LONG swapattackerwithtarget - jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_ROOTED, BattleScript_RedCardIngrain + jumpifvolatile BS_EFFECT_BATTLER, VOLATILE_ROOT, BattleScript_RedCardIngrain jumpifability BS_EFFECT_BATTLER, ABILITY_SUCTION_CUPS, BattleScript_RedCardSuctionCups jumpiftargetdynamaxed BattleScript_RedCardDynamaxed removeitem BS_SCRIPTING @@ -9425,12 +8302,12 @@ BattleScript_EjectButtonActivates:: undodynamax BS_SCRIPTING makeinvisible BS_SCRIPTING openpartyscreen BS_SCRIPTING, BattleScript_EjectButtonEnd + waitstate + returntoball BS_SCRIPTING, FALSE copybyte sSAVED_BATTLER, sBATTLER switchoutabilities BS_SCRIPTING copybyte sBATTLER, sSAVED_BATTLER - waitstate - switchhandleorder BS_SCRIPTING 0x2 - returntoball BS_SCRIPTING, FALSE + switchhandleorder BS_SCRIPTING, 0x2 getswitchedmondata BS_SCRIPTING switchindataupdate BS_SCRIPTING hpthresholds BS_SCRIPTING @@ -9450,13 +8327,15 @@ BattleScript_EjectPackActivate_End2:: call BattleScript_EjectPackActivate_Ret end2 +BattleScript_EjectPackActivate_End3:: + call BattleScript_EjectPackActivate_Ret + end3 + BattleScript_EjectPackActivates:: jumpifcantswitch BS_SCRIPTING, BattleScript_EjectButtonEnd goto BattleScript_EjectPackActivate_Ret -BattleScript_DarkTypePreventsPrankster:: - attackstring - ppreduce +BattleScript_DoesntAffectTargetAtkString:: pause B_WAIT_TIME_SHORT printstring STRINGID_ITDOESNTAFFECT waitmessage B_WAIT_TIME_LONG @@ -9464,8 +8343,6 @@ BattleScript_DarkTypePreventsPrankster:: goto BattleScript_MoveEnd BattleScript_WellBakedBodyActivates:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUpTarget setmoveresultflags MOVE_RESULT_NO_EFFECT @@ -9474,8 +8351,6 @@ BattleScript_WellBakedBodyEnd: goto BattleScript_MoveEnd BattleScript_WindRiderActivatesMoveEnd:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUpTarget setmoveresultflags MOVE_RESULT_NO_EFFECT @@ -9484,8 +8359,6 @@ BattleScript_WindRiderActivatesMoveEnd_End: goto BattleScript_MoveEnd BattleScript_GoodAsGoldActivates:: - attackstring - ppreduce call BattleScript_AbilityPopUpTarget pause B_WAIT_TIME_SHORT printstring STRINGID_ITDOESNTAFFECT @@ -9514,6 +8387,7 @@ BattleScript_PastelVeilLoopIncrement: setallytonexttarget BattleScript_PastelVeil_TryCurePoison goto BattleScript_PastelVeilEnd BattleScript_PastelVeilEnd: + restoretarget end3 BattleScript_NeutralizingGasExits:: @@ -9525,8 +8399,7 @@ BattleScript_NeutralizingGasExits:: setbyte gBattlerAttacker, 0 BattleScript_NeutralizingGasExitsLoop: copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1 - jumpifabilitycantbesuppressed BS_TARGET, BattleScript_NeutralizingGasExitsLoopIncrement - jumpifability BS_TARGET, ABILITY_IMPOSTER, BattleScript_NeutralizingGasExitsLoopIncrement @ Imposter only activates when first entering the field + jumpifabilitycantbereactivated BS_TARGET, BattleScript_NeutralizingGasExitsLoopIncrement saveattacker switchinabilities BS_TARGET restoreattacker @@ -9549,98 +8422,75 @@ BattleScript_SymbiosisActivates:: return BattleScript_TargetAbilityStatRaiseRet:: - copybyte sSAVED_BATTLER, gBattlerAttacker - copybyte gBattlerAbility, gEffectBattler - copybyte gBattlerAttacker, gBattlerTarget + saveattacker + copybyte gBattlerAttacker, gEffectBattler call BattleScript_AbilityPopUp - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN, BattleScript_TargetAbilityStatRaiseRet_End - setgraphicalstatchangevalues + statbuffchange BS_ATTACKER, STAT_CHANGE_CERTAIN, BattleScript_TargetAbilityStatRaiseRet_End call BattleScript_StatUp BattleScript_TargetAbilityStatRaiseRet_End: - copybyte gBattlerAttacker, sSAVED_BATTLER + restoreattacker return @@@ MAX MOVES @@@ BattleScript_EffectMaxMove:: attackcanceler accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET - setadditionaleffects - moveendall - end + goto BattleScript_HitFromCritCalc BattleScript_EffectRaiseStatAllies:: savetarget copybyte gBattlerTarget, gBattlerAttacker + copybyte sSAVED_STAT_CHANGER, sSTATCHANGER BattleScript_RaiseSideStatsLoop: jumpifabsent BS_TARGET, BattleScript_RaiseSideStatsIncrement - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseSideStatsIncrement - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RaiseSideStatsIncrement - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + copybyte sSTATCHANGER, sSAVED_STAT_CHANGER + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseSideStatsIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_RaiseSideStatsIncrement printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG BattleScript_RaiseSideStatsIncrement: - setbyte sSTAT_ANIM_PLAYED, FALSE jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_RaiseSideStatsEnd setallytonexttarget BattleScript_RaiseSideStatsLoop BattleScript_RaiseSideStatsEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectLowerStatFoes:: savetarget copybyte sBATTLER, gBattlerTarget + copybyte sSAVED_STAT_CHANGER, sSTATCHANGER BattleScript_LowerSideStatsLoop: jumpifabsent BS_TARGET, BattleScript_LowerSideStatsIncrement - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_LowerSideStatsIncrement - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerSideStatsIncrement - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + copybyte sSTATCHANGER, sSAVED_STAT_CHANGER + statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_LowerSideStatsIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_CHANGE, BattleScript_LowerSideStatsIncrement printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_LowerSideStatsIncrement: - setbyte sSTAT_ANIM_PLAYED, FALSE jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_LowerSideStatsEnd setallytonexttarget BattleScript_LowerSideStatsLoop BattleScript_LowerSideStatsEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectSetWeather:: playanimation 0, B_ANIM_MAX_SET_WEATHER printfromtable gMoveWeatherChangeStringIds waitmessage B_WAIT_TIME_LONG call BattleScript_ActivateWeatherAbilities - goto BattleScript_MoveEnd + return BattleScript_EffectSetTerrain:: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG call BattleScript_ActivateTerrainEffects - goto BattleScript_MoveEnd + return BattleScript_DamageNonTypesStarts:: printfromtable gDamageNonTypesStartStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_DamageNonTypesContinues:: printfromtable gDamageNonTypesDmgStringIds @@ -9653,7 +8503,7 @@ BattleScript_EffectTryReducePP:: tryspiteppreduce BattleScript_MoveEnd printstring STRINGID_PKMNREDUCEDPP waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_EffectParalyzeSide:: savetarget @@ -9661,18 +8511,12 @@ BattleScript_EffectParalyzeSide:: BattleScript_ParalyzeSideLoop: jumpifabsent BS_TARGET, BattleScript_ParalyzeSideIncrement trysetparalysis BattleScript_ParalyzeSideIncrement - statusanimation BS_TARGET - updatestatusicon BS_TARGET - printfromtable gStatusConditionsStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_EFFECT_BATTLER - waitstate BattleScript_ParalyzeSideIncrement: jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_ParalyzeSideEnd setallytonexttarget BattleScript_ParalyzeSideLoop BattleScript_ParalyzeSideEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectPoisonSide:: savetarget @@ -9680,18 +8524,12 @@ BattleScript_EffectPoisonSide:: BattleScript_PoisonSideLoop: jumpifabsent BS_TARGET, BattleScript_PoisonSideIncrement trysetpoison BattleScript_PoisonSideIncrement - statusanimation BS_TARGET - updatestatusicon BS_TARGET - printfromtable gStatusConditionsStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_EFFECT_BATTLER - waitstate BattleScript_PoisonSideIncrement: jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_PoisonSideEnd setallytonexttarget BattleScript_PoisonSideLoop BattleScript_PoisonSideEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectPoisonParalyzeSide:: savetarget @@ -9699,18 +8537,12 @@ BattleScript_EffectPoisonParalyzeSide:: BattleScript_PoisonParalyzeSideLoop: jumpifabsent BS_TARGET, BattleScript_PoisonParalyzeSideIncrement trysetpoisonparalysis BattleScript_PoisonParalyzeSideIncrement - statusanimation BS_TARGET - updatestatusicon BS_TARGET - printfromtable gStatusConditionsStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_EFFECT_BATTLER - waitstate BattleScript_PoisonParalyzeSideIncrement: jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_PoisonParalyzeSideEnd setallytonexttarget BattleScript_PoisonParalyzeSideLoop BattleScript_PoisonParalyzeSideEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectEffectSporeSide:: savetarget @@ -9718,18 +8550,12 @@ BattleScript_EffectEffectSporeSide:: BattleScript_EffectSporeSideLoop: jumpifabsent BS_TARGET, BattleScript_EffectSporeSideIncrement tryseteffectspore BattleScript_EffectSporeSideIncrement - statusanimation BS_TARGET - updatestatusicon BS_TARGET - printfromtable gStatusConditionsStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_EFFECT_BATTLER - waitstate BattleScript_EffectSporeSideIncrement: jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_EffectSporeSideEnd setallytonexttarget BattleScript_EffectSporeSideLoop BattleScript_EffectSporeSideEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectConfuseSide:: savetarget @@ -9737,9 +8563,9 @@ BattleScript_EffectConfuseSide:: BattleScript_ConfuseSideLoop: jumpifabsent BS_TARGET, BattleScript_ConfuseSideIncrement trysetconfusion BattleScript_ConfuseSideIncrement - status2animation BS_EFFECT_BATTLER, STATUS2_CONFUSION + volatileanimation BS_EFFECT_BATTLER, VOLATILE_CONFUSION BattleScript_ConfuseSidePrintMessage: - printfromtable gStatus2StringIds + printstring STRINGID_PKMNWASCONFUSED waitmessage B_WAIT_TIME_LONG BattleScript_ConfuseSideIncrement: jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_ConfuseSideEnd @@ -9747,11 +8573,11 @@ BattleScript_ConfuseSideIncrement: BattleScript_ConfuseSideEnd: restoretarget jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 1, BattleScript_PrintCoinsScattered @ Gold Rush - goto BattleScript_MoveEnd + return BattleScript_PrintCoinsScattered: printstring STRINGID_COINSSCATTERED - goto BattleScript_MoveEnd + return BattleScript_EffectInfatuateSide:: savetarget @@ -9759,16 +8585,16 @@ BattleScript_EffectInfatuateSide:: BattleScript_InfatuateSideLoop: jumpifabsent BS_TARGET, BattleScript_InfatuateSideIncrement trysetinfatuation BattleScript_InfatuateSideIncrement - status2animation BS_EFFECT_BATTLER, STATUS2_INFATUATION + volatileanimation BS_EFFECT_BATTLER, VOLATILE_INFATUATION BattleScript_InfatuateSidePrintMessage: - printfromtable gStatus2StringIds + printstring STRINGID_PKMNFELLINLOVE waitmessage B_WAIT_TIME_LONG BattleScript_InfatuateSideIncrement: jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_InfatuateSideEnd setallytonexttarget BattleScript_InfatuateSideLoop BattleScript_InfatuateSideEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectTormentSide:: savetarget @@ -9777,14 +8603,14 @@ BattleScript_TormentSideLoop: jumpifabsent BS_TARGET, BattleScript_TormentSideIncrement trysettorment BattleScript_TormentSideIncrement BattleScript_TormentSidePrintMessage: - printfromtable gStatus2StringIds + printstring STRINGID_PKMNSUBJECTEDTOTORMENT waitmessage B_WAIT_TIME_LONG BattleScript_TormentSideIncrement: jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_TormentSideEnd setallytonexttarget BattleScript_TormentSideLoop BattleScript_TormentSideEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_TormentEnds:: printstring STRINGID_TORMENTEDNOMORE @@ -9798,14 +8624,14 @@ BattleScript_MeanLookSideLoop: jumpifabsent BS_TARGET, BattleScript_MeanLookSideIncrement trysetescapeprevention BattleScript_MeanLookSideIncrement BattleScript_MeanLookSidePrintMessage: - printfromtable gStatus2StringIds + printstring STRINGID_TARGETCANTESCAPENOW waitmessage B_WAIT_TIME_LONG BattleScript_MeanLookSideIncrement: jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_MeanLookSideEnd setallytonexttarget BattleScript_MeanLookSideLoop BattleScript_MeanLookSideEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectRaiseCritAlliesAnim:: savetarget @@ -9813,28 +8639,25 @@ BattleScript_EffectRaiseCritAlliesAnim:: BattleScript_RaiseCritAlliesLoop: jumpifabsent BS_TARGET, BattleScript_RaiseCritAlliesIncrement setstatchanger STAT_ATK, 0, FALSE @ for animation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_TARGET, 0, BattleScript_RaiseCritAlliesIncrement @ for animation printstring STRINGID_PKMNGETTINGPUMPED waitmessage B_WAIT_TIME_LONG BattleScript_RaiseCritAlliesIncrement: - setbyte sSTAT_ANIM_PLAYED, FALSE jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_RaiseCritAlliesEnd setallytonexttarget BattleScript_RaiseCritAlliesLoop BattleScript_RaiseCritAlliesEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectHealOneSixthAllies:: - jumpifteamhealthy BS_ATTACKER, BattleScript_MoveEnd + jumpifteamhealthy BattleScript_MoveEnd savetarget copybyte gBattlerTarget, gBattlerAttacker BattleScript_HealOneSixthAlliesLoop: jumpifabsent BS_TARGET, BattleScript_HealOneSixthAlliesIncrement tryhealsixthhealth BattleScript_HealOneSixthAlliesIncrement - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET + healthbarupdate BS_TARGET, PASSIVE_HP_UPDATE + datahpupdate BS_TARGET, PASSIVE_HP_UPDATE printstring STRINGID_PKMNREGAINEDHEALTH waitmessage B_WAIT_TIME_LONG BattleScript_HealOneSixthAlliesIncrement: @@ -9842,7 +8665,7 @@ BattleScript_HealOneSixthAlliesIncrement: setallytonexttarget BattleScript_HealOneSixthAlliesLoop BattleScript_HealOneSixthAlliesEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectRecycleBerriesAllies:: savetarget @@ -9859,13 +8682,13 @@ BattleScript_RecycleBerriesAlliesIncrement: setallytonexttarget BattleScript_RecycleBerriesAlliesLoop BattleScript_RecycleBerriesAlliesEnd: restoretarget - goto BattleScript_MoveEnd + return BattleScript_EffectSteelsurge:: setsteelsurge BattleScript_MoveEnd printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return @@@ END MAX MOVES @@@ @@ -9907,28 +8730,22 @@ BattleScript_DynamaxEnds:: BattleScript_DynamaxEnds_Ret:: flushtextbox - spriteignore0hp TRUE + setspriteignore0hp TRUE updatedynamax playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE waitanimation - spriteignore0hp FALSE + setspriteignore0hp FALSE pause B_WAIT_TIME_SHORT return BattleScript_MoveBlockedByDynamax:: - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE pause B_WAIT_TIME_SHORT - ppreduce - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_STRING_PRINTED, BattleScript_MoveEnd printstring STRINGID_MOVEBLOCKEDBYDYNAMAX waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_STRING_PRINTED goto BattleScript_MoveEnd BattleScript_PokemonCantUseTheMove:: - attackstring - ppreduce pause B_WAIT_TIME_SHORT printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE waitmessage B_WAIT_TIME_LONG @@ -9940,18 +8757,15 @@ BattleScript_CouldntFullyProtect:: return BattleScript_BerserkGeneRet:: - saveattacker - savetarget - copybyte gBattlerTarget, sBATTLER - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerserkGeneRet_TryConfuse - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 - setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM + statbuffchange BS_SCRIPTING, STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_ONLY_CHECKING, BattleScript_BerserkGeneRet_TryConfuse + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 + statbuffchange BS_SCRIPTING, STAT_CHANGE_ALLOW_PTR, BattleScript_BerserkGeneRet_TryConfuse + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_CHANGED_ITEM call BattleScript_StatUp BattleScript_BerserkGeneRet_TryConfuse: - jumpifability BS_ATTACKER, ABILITY_OWN_TEMPO, BattleScript_BerserkGeneRet_OwnTempoPrevents + jumpifability BS_SCRIPTING, ABILITY_OWN_TEMPO, BattleScript_BerserkGeneRet_OwnTempoPrevents jumpifsafeguard BattleScript_BerserkGeneRet_SafeguardProtected - seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER + seteffectprimary BS_SCRIPTING, BS_SCRIPTING, MOVE_EFFECT_CONFUSION goto BattleScript_BerserkGeneRet_End BattleScript_BerserkGeneRet_SafeguardProtected:: pause B_WAIT_TIME_SHORT @@ -9960,13 +8774,11 @@ BattleScript_BerserkGeneRet_SafeguardProtected:: goto BattleScript_BerserkGeneRet_End BattleScript_BerserkGeneRet_OwnTempoPrevents: pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting printstring STRINGID_PKMNPREVENTSCONFUSIONWITH waitmessage B_WAIT_TIME_LONG BattleScript_BerserkGeneRet_End: - restoreattacker - restoretarget - removeitem BS_ATTACKER + removeitem BS_SCRIPTING return BattleScript_BerserkGeneRetEnd2:: @@ -9989,8 +8801,6 @@ BattleScript_BoosterEnergyRet:: BattleScript_EffectSnow:: attackcanceler - attackstring - ppreduce call BattleScript_CheckPrimalWeather setfieldweather BATTLE_WEATHER_SNOW goto BattleScript_MoveWeatherChange @@ -10002,7 +8812,7 @@ BattleScript_SleepClauseBlocked:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_SleepClausePreventsEnd:: +BattleScript_SleepClausePreventsEnd2:: pause B_WAIT_TIME_SHORT printstring STRINGID_BLOCKEDBYSLEEPCLAUSE waitmessage B_WAIT_TIME_LONG @@ -10010,16 +8820,74 @@ BattleScript_SleepClausePreventsEnd:: BattleScript_QuestionForfeitBattle:: printselectionstring STRINGID_QUESTIONFORFEITBATTLE - forfeityesnobox BS_ATTACKER + forfeityesnobox endselectionscript BattleScript_ForfeitBattleGaveMoney:: getmoneyreward .if B_WHITEOUT_MONEY >= GEN_4 - printstring STRINGID_FORFEITBATTLEGAVEMONEY + printstring STRINGID_PLAYERWHITEOUT2_TRAINER .else - printstring STRINGID_PLAYERWHITEOUT2 + printstring STRINGID_PLAYERWHITEOUT3 .endif waitmessage B_WAIT_TIME_LONG end2 +BattleScript_Attackstring:: + printattackstring + return + +BattleScript_SubmoveAttackstring:: + printattackstring + pause B_WAIT_TIME_LONG + attackanimation + waitanimation + setcalledmove + return + +BattleScript_SleepTalkAttackstring:: + printattackstring + pause B_WAIT_TIME_LONG + printstring STRINGID_PKMNFASTASLEEP + waitmessage B_WAIT_TIME_LONG + statusanimation BS_ATTACKER + attackanimation + waitanimation + setcalledmove + return + +BattleScript_MetronomeAttackstring:: + printattackstring + pause B_WAIT_TIME_LONG + attackanimation + waitanimation + setcalledmove + printstring STRINGID_WAGGLINGAFINGER + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_NaturePowerAttackstring:: + printattackstring + pause B_WAIT_TIME_SHORT + setcalledmove + printstring STRINGID_NATUREPOWERTURNEDINTO + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SwapFromSubstitute:: + jumpifvolatile BS_SCRIPTING, VOLATILE_SUBSTITUTE, BattleScript_SwapFromSubstituteContinue + goto BattleScript_SwapFromSubstituteReturn +BattleScript_SwapFromSubstituteContinue: + playanimation BS_SCRIPTING, B_ANIM_SWAP_FROM_SUBSTITUTE + waitanimation +BattleScript_SwapFromSubstituteReturn: + return + +BattleScript_SwapToSubstitute:: + jumpifvolatile BS_SCRIPTING, VOLATILE_SUBSTITUTE, BattleScript_SwapToSubstituteContinue + goto BattleScript_SwapToSubstituteReturn +BattleScript_SwapToSubstituteContinue: + playanimation BS_SCRIPTING, B_ANIM_SWAP_TO_SUBSTITUTE + waitanimation +BattleScript_SwapToSubstituteReturn: + return diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s old mode 100644 new mode 100755 index 27e3706e3f75..5f7cc23a8cba --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -49,9 +49,8 @@ BattleScript_UseItemMessage: BattleScript_ItemRestoreHPRet: clearmoveresultflags MOVE_RESULT_NO_EFFECT - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING + healthbarupdate BS_SCRIPTING, PASSIVE_HP_UPDATE + datahpupdate BS_SCRIPTING, PASSIVE_HP_UPDATE printstring STRINGID_ITEMRESTOREDSPECIESHEALTH waitmessage B_WAIT_TIME_LONG return @@ -75,6 +74,10 @@ BattleScript_ItemRestoreHP_Party:: return BattleScript_ItemRestoreHP_SendOutRevivedBattler: + switchhandleorder BS_SCRIPTING, 0 + getswitchedmondata BS_SCRIPTING + switchindataupdate BS_SCRIPTING + trytoclearprimalweather switchinanim BS_SCRIPTING, FALSE, FALSE waitstate switchineffects BS_SCRIPTING @@ -83,13 +86,18 @@ BattleScript_ItemRestoreHP_SendOutRevivedBattler: BattleScript_ItemCureStatus:: call BattleScript_UseItemMessage BattleScript_ItemCureStatusAfterItemMsg: - itemcurestatus BattleScript_ItemCureStatusEnd - updatestatusicon BS_SCRIPTING + itemcurestatus BattleScript_ItemCureStatusEnd, BattleScript_CureStatus_Battler printstring STRINGID_ITEMCUREDSPECIESSTATUS waitmessage B_WAIT_TIME_LONG BattleScript_ItemCureStatusEnd: end +BattleScript_CureStatus_Battler:: + updatestatusicon BS_SCRIPTING + printstring STRINGID_ITEMCUREDSPECIESSTATUS + waitmessage B_WAIT_TIME_LONG + end + BattleScript_ItemHealAndCureStatus:: call BattleScript_UseItemMessage itemrestorehp BattleScript_ItemCureStatusAfterItemMsg, BattleScript_ItemHealAndCureStatus_Battler @@ -104,9 +112,7 @@ BattleScript_ItemHealAndCureStatusEnd:: BattleScript_ItemIncreaseStat:: call BattleScript_UseItemMessage itemincreasestat - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_ItemEnd - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange BS_ATTACKER, STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_ItemEnd printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG end @@ -133,7 +139,7 @@ BattleScript_PokeFluteEnd:: BattleScript_ItemSetMist:: call BattleScript_UseItemMessage setmist - playmoveanimation BS_ATTACKER, MOVE_MIST + playmoveanimation MOVE_MIST waitanimation printfromtable gMistUsedStringIds waitmessage B_WAIT_TIME_LONG @@ -141,9 +147,10 @@ BattleScript_ItemSetMist:: BattleScript_ItemSetFocusEnergy:: call BattleScript_UseItemMessage - jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY_ANY, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_DRAGON_CHEER, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_FOCUS_ENERGY, BattleScript_ButItFailed setfocusenergy BS_ATTACKER - playmoveanimation BS_ATTACKER, MOVE_FOCUS_ENERGY + playmoveanimation MOVE_FOCUS_ENERGY waitanimation copybyte sBATTLER, gBattlerAttacker printstring STRINGID_PKMNUSEDXTOGETPUMPED @@ -212,7 +219,10 @@ BattleScript_WallyBallThrow:: finishturn BattleScript_ShakeBallThrow:: + animatewildpokemonafterfailedpokeball BS_TARGET + waitmessage B_WAIT_TIME_LONG printfromtable gBallEscapeStringIds + waitanimation waitmessage B_WAIT_TIME_LONG jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, BATTLE_TYPE_SAFARI, BattleScript_ShakeBallThrowEnd jumpifbyte CMP_NOT_EQUAL, gNumSafariBalls, 0, BattleScript_ShakeBallThrowEnd diff --git a/data/event_scripts.s b/data/event_scripts.s index db5d329b677d..73b171c206ea 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -3,6 +3,7 @@ #include "config/item.h" #include "constants/global.h" #include "constants/apprentice.h" +#include "constants/apricorn_tree.h" #include "constants/battle.h" #include "constants/battle_arena.h" #include "constants/battle_dome.h" @@ -25,6 +26,7 @@ #include "constants/event_objects.h" #include "constants/event_object_movement.h" #include "constants/field_effects.h" +#include "constants/field_move.h" #include "constants/field_poison.h" #include "constants/field_specials.h" #include "constants/field_tasks.h" @@ -42,6 +44,7 @@ #include "constants/maps.h" #include "constants/mauville_old_man.h" #include "constants/metatile_labels.h" +#include "constants/move_relearner.h" #include "constants/moves.h" #include "constants/party_menu.h" #include "constants/pokedex.h" @@ -61,6 +64,7 @@ #include "constants/union_room.h" #include "constants/vars.h" #include "constants/weather.h" +#include "constants/speaker_names.h" .include "asm/macros.inc" .include "asm/macros/event.inc" .include "constants/constants.inc" @@ -70,6 +74,7 @@ .set ALLOCATE_SCRIPT_CMD_TABLE, 1 .include "data/script_cmd_table.inc" +.align 2 gSpecialVars:: .4byte gSpecialVar_0x8000 .4byte gSpecialVar_0x8001 @@ -694,6 +699,7 @@ EventScript_SetBrineyLocation_Route109:: .include "data/scripts/obtain_item.inc" .include "data/scripts/record_mix.inc" .include "data/scripts/pc.inc" + .include "data/scripts/move_relearner.inc" @ scripts/notices.inc? signs.inc? See comment about text/notices.inc Common_EventScript_ShowPokemartSign:: @@ -834,7 +840,7 @@ EventScript_UnusedBoardFerry:: delay 30 applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp waitmovement 0 - showobjectat LOCALID_PLAYER, 0 + showplayer delay 30 applymovement LOCALID_PLAYER, Movement_UnusedBoardFerry waitmovement 0 @@ -849,7 +855,7 @@ Common_EventScript_FerryDepartIsland:: call_if_eq VAR_FACING, DIR_SOUTH, Ferry_EventScript_DepartIslandSouth call_if_eq VAR_FACING, DIR_WEST, Ferry_EventScript_DepartIslandWest delay 30 - hideobjectat LOCALID_PLAYER, 0 + hideplayer call Common_EventScript_FerryDepart return @@ -879,6 +885,7 @@ Common_EventScript_PlayerHandedOverTheItem:: .include "data/text/pkmn_center_nurse.inc" .include "data/text/mart_clerk.inc" .include "data/text/obtain_item.inc" + .include "data/text/move_relearner.inc" @ The below and surf.inc could be split into some text/notices.inc gText_PokemartSign:: @@ -1111,9 +1118,6 @@ EventScript_VsSeekerChargingDone:: .include "data/scripts/cable_club.inc" .include "data/text/cable_club.inc" .include "data/scripts/contest_hall.inc" - .include "data/text/contest_strings.inc" - .include "data/text/contest_link.inc" - .include "data/text/contest_painting.inc" .include "data/scripts/tv.inc" .include "data/text/tv.inc" .include "data/scripts/interview.inc" @@ -1157,3 +1161,5 @@ EventScript_VsSeekerChargingDone:: .include "data/text/save.inc" .include "data/text/birch_speech.inc" .include "data/scripts/dexnav.inc" + .include "data/scripts/battle_frontier.inc" + .include "data/scripts/apricorn_tree.inc" diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 98ed66a13d39..ce71a102fdb9 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -81,6 +81,9 @@ gFieldEffectScriptPointers:: .4byte gFieldEffectScript_TracksSpot @ FLDEFF_TRACKS_SPOT .4byte gFieldEffectScript_CaveDust @ FLDEFF_CAVE_DUST .4byte gFieldEffectScript_Defog @ FLDEFF_DEFOG + .4byte gFieldEffectScript_UseRockClimb @ FLDEFF_USE_ROCK_CLIMB + .4byte gFieldEffectScript_RockClimbDust @ FLDEFF_ROCK_CLIMB_DUST + .4byte gFieldEffectScript_ORASDowse @ FLDEFF_ORAS_DOWSE gFieldEffectScript_ExclamationMarkIcon1:: field_eff_callnative FldEff_ExclamationMarkIcon @@ -384,3 +387,16 @@ gFieldEffectScript_CaveDust:: gFieldEffectScript_Defog:: field_eff_callnative FldEff_Defog field_eff_end + +gFieldEffectScript_UseRockClimb:: @ 82DBC3F + field_eff_callnative FldEff_UseRockClimb + field_eff_end + +gFieldEffectScript_RockClimbDust:: @ 82DBB28 + field_eff_loadfadedpal_callnative gSpritePalette_BigDust, FldEff_RockClimbDust + field_eff_end + +gFieldEffectScript_ORASDowse:: + field_eff_callnative FldEff_ORASDowsing + field_eff_end + diff --git a/data/map_events.s b/data/map_events.s index 729f9725dfef..13064da0255f 100644 --- a/data/map_events.s +++ b/data/map_events.s @@ -13,6 +13,7 @@ #include "constants/trainer_types.h" #include "constants/berry.h" #include "constants/species.h" +#include "constants/apricorn_tree.h" .include "asm/macros.inc" .include "constants/constants.inc" diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc index 7969ca9eb779..fdcd609bc8dd 100644 --- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc @@ -182,10 +182,14 @@ BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMons:: BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMonsLv50:: msgbox BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleArenaLobby_EventScript_EndCancelChallenge BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMonsLvOpen:: msgbox BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleArenaLobby_EventScript_EndCancelChallenge BattleFrontier_BattleArenaLobby_EventScript_CancelChallengeSaveFailed:: @@ -409,7 +413,9 @@ BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsLvOpen: .string "different kinds of POKΓ©MON.\p" .string "They also must not hold the same\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" + .string "EGGS{STR_VAR_1}.$" + +BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsEnd: .string "When you have made your preparations,\n" .string "please do return.$" @@ -423,9 +429,7 @@ BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsLv50: .string "must all be Level 50 or lower.\p" .string "They also must not hold the same\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "When you have made your preparations,\n" - .string "please do return.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleArenaLobby_Text_GuideYouToArena: .string "I shall now guide you to\n" diff --git a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc index cf6510189c4d..f3522ccfb684 100644 --- a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc @@ -210,10 +210,14 @@ BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMons:: BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMonsLv50:: msgbox BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleDomeLobby_EventScript_EndCancelChallenge BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMonsLvOpen:: msgbox BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleDomeLobby_EventScript_EndCancelChallenge BattleFrontier_BattleDomeLobby_EventScript_CancelChallengeSaveFailed:: @@ -486,7 +490,9 @@ BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLvOpen: .string "You don't have three eligible POKΓ©MON.\p" .string "Also, the POKΓ©MON must be holding\n" .string "different kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" + .string "EGGS{STR_VAR_1}.$" + +BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsEnd: .string "Please come see me when you are ready.$" BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLv50: @@ -496,8 +502,7 @@ BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLv50: .string "of Level 50 or less to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when you are ready.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleDomeLobby_Text_ShowYouToBattleDome: .string "I will now show you to\n" diff --git a/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc index e06284c2caaf..3406d4121c30 100644 --- a/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomePreBattleRoom/scripts.inc @@ -18,6 +18,7 @@ BattleFrontier_BattleDomePreBattleRoom_OnFrame: BattleFrontier_BattleDomePreBattleRoom_EventScript_EnterRoom:: goto_if_eq VAR_0x8006, 1, BattleFrontier_BattleDomePreBattleRoom_EventScript_ReturnFromBattle + delay 1 frontier_set FRONTIER_DATA_RECORD_DISABLED, TRUE setvar VAR_TEMP_0, 1 applymovement LOCALID_PLAYER, BattleFrontier_BattleDomePreBattleRoom_Movement_PlayerEnter diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc index d80eaa49c296..9ef4479f2ef4 100644 --- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc @@ -202,10 +202,14 @@ BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMons:: BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMonsLv50:: msgbox BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattlePalaceLobby_EventScript_EndCancelChallenge BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMonsLvOpen:: msgbox BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattlePalaceLobby_EventScript_EndCancelChallenge BattleFrontier_BattlePalaceLobby_EventScript_CancelChallengeSaveFailed:: @@ -427,7 +431,9 @@ BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsLv50: .string "Level 50 or lower.\p" .string "They also must not be holding\n" .string "the same kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" + .string "EGGS{STR_VAR_1}.$" + +BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsEnd: .string "Come back when you have made\n" .string "your preparations.$" @@ -439,9 +445,7 @@ BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsLvOpen: .string "different kinds of POKΓ©MON.\p" .string "They also must not be holding\n" .string "the same kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Come back when you have made\n" - .string "your preparations.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattlePalaceLobby_Text_NowSelectThreeMons: .string "Good. Now, you must select your\n" diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc index 6e72a30ec0cd..db0067355017 100644 --- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc @@ -172,10 +172,14 @@ BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMons:: BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMonsLv50:: msgbox BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattlePikeLobby_EventScript_EndCancelChallenge BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMonsLvOpen:: msgbox BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattlePikeLobby_EventScript_EndCancelChallenge BattleFrontier_BattlePikeLobby_EventScript_CancelChallengeSaveFailed:: @@ -315,7 +319,9 @@ BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsLv50: .string "of Level 50 or less to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" + .string "EGGS{STR_VAR_1}.$" + +BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsEnd: .string "Please come see me when\n" .string "you are ready…$" @@ -327,9 +333,7 @@ BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsLvOpen: .string "POKΓ©MON to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when\n" - .string "you are ready…$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattlePikeLobby_Text_PleaseChooseThreeMons: .string "Please choose the three POKΓ©MON\n" diff --git a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc index a8f949ca58fe..75f3c37cd823 100644 --- a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc @@ -184,10 +184,14 @@ BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMons:: BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMonsLv50:: msgbox BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattlePyramidLobby_EventScript_EndCancelChallenge BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMonsLvOpen:: msgbox BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattlePyramidLobby_EventScript_EndCancelChallenge BattleFrontier_BattlePyramidLobby_EventScript_CancelChallengeSaveFailed:: @@ -573,9 +577,7 @@ BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLvOpen: .string "POKΓ©MON qualified for the challenge.\p" .string "Please also remember to take all\n" .string "items from your POKΓ©MON.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "When you are ready, please have\n" - .string "a word with me.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLv50: .string "A slight problem, adventurer!\p" @@ -585,7 +587,9 @@ BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLv50: .string "and each no higher than Level 50.\p" .string "Please also remember to take all\n" .string "items from your POKΓ©MON.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" + .string "EGGS{STR_VAR_1}.$" + +BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsEnd: .string "When you are ready, please have\n" .string "a word with me.$" diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 945335f7b73c..3240683f954e 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -543,16 +543,22 @@ BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50:: case FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50Singles case FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50Doubles msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Multis, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge end BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50Singles:: msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Singles, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge end BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50Doubles:: msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Doubles, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge end @@ -561,16 +567,22 @@ BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpen:: case FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpenSingles case FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpenDoubles msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenMultis, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge end BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpenSingles:: msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenSingles, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge end BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpenDoubles:: msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenDoubles, MSGBOX_DEFAULT + call BattleFrontier_ShowCaughtBannedSpecies + msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsEnd, MSGBOX_DEFAULT goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge end @@ -1083,7 +1095,9 @@ BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50: .string "of Level 50 or less to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" + .string "EGGS{STR_VAR_1}.$" + +BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsEnd: .string "Please come see me when you are ready.$" @ Unused @@ -1094,8 +1108,7 @@ BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpen: .string "to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when you are ready.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Singles: .string "Excuse me!\p" @@ -1104,8 +1117,7 @@ BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Singles: .string "of Level 50 or less to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when you are ready.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenSingles: .string "Excuse me!\p" @@ -1114,8 +1126,7 @@ BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenSingles: .string "to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when you are ready.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Doubles: .string "Excuse me!\p" @@ -1124,8 +1135,7 @@ BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Doubles: .string "of Level 50 or less to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when you are ready.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenDoubles: .string "Excuse me!\p" @@ -1134,8 +1144,7 @@ BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenDoubles: .string "to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when you are ready.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Multis: .string "Excuse me!\p" @@ -1144,8 +1153,7 @@ BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Multis: .string "of Level 50 or less to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when you are ready.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenMultis: .string "Excuse me!\p" @@ -1154,8 +1162,7 @@ BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenMultis: .string "to enter.\p" .string "They also must be holding different\n" .string "kinds of items.\p" - .string "EGGS{STR_VAR_1} ineligible.\p" - .string "Please come see me when you are ready.$" + .string "EGGS{STR_VAR_1}.$" BattleFrontier_BattleTowerLobby_Text_WelcomSingleBattle: .string "Where the talents of TRAINERS\n" diff --git a/data/maps/FallarborTown_MoveRelearnersHouse/scripts.inc b/data/maps/FallarborTown_MoveRelearnersHouse/scripts.inc index 8dd70b9b0490..ea58d275dfe4 100644 --- a/data/maps/FallarborTown_MoveRelearnersHouse/scripts.inc +++ b/data/maps/FallarborTown_MoveRelearnersHouse/scripts.inc @@ -22,6 +22,7 @@ FallarborTown_MoveRelearnersHouse_EventScript_AskTeachMove:: FallarborTown_MoveRelearnersHouse_EventScript_ChooseMon:: msgbox FallarborTown_MoveRelearnersHouse_Text_TutorWhichMon, MSGBOX_DEFAULT + setmoverelearnerstate MOVE_RELEARNER_LEVEL_UP_MOVES @ Specifically supposed to teach level up moves special ChooseMonForMoveRelearner waitstate goto_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, FallarborTown_MoveRelearnersHouse_EventScript_ComeBackWithHeartScale diff --git a/data/maps/LilycoveCity_ContestLobby/scripts.inc b/data/maps/LilycoveCity_ContestLobby/scripts.inc index 862a5ef37d7b..41db53c954c5 100644 --- a/data/maps/LilycoveCity_ContestLobby/scripts.inc +++ b/data/maps/LilycoveCity_ContestLobby/scripts.inc @@ -349,7 +349,11 @@ LilycoveCity_ContestLobby_EventScript_SetMasterContestType:: @ Functionally unused LilycoveCity_ContestLobby_EventScript_SetDebug:: setflag FLAG_HIDE_LILYCOVE_MUSEUM_CURATOR - copyvar VAR_LILYCOVE_MUSEUM_2F_STATE, 1 +#ifdef UBFIX + setvar VAR_LILYCOVE_MUSEUM_2F_STATE, 1 +#else + copyvar VAR_LILYCOVE_MUSEUM_2F_STATE, 1, warn=FALSE +#endif additem ITEM_CONTEST_PASS setvar VAR_0x800B, 8 setvar VAR_CONTEST_RANK, CONTEST_RANK_MASTER diff --git a/data/maps/LilycoveCity_Harbor/scripts.inc b/data/maps/LilycoveCity_Harbor/scripts.inc index 9388609ab5b1..89bbb0714ce3 100644 --- a/data/maps/LilycoveCity_Harbor/scripts.inc +++ b/data/maps/LilycoveCity_Harbor/scripts.inc @@ -333,7 +333,7 @@ LilycoveCity_Harbor_EventScript_BoardFerryWithSailor:: call_if_eq VAR_FACING, DIR_NORTH, LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth call_if_eq VAR_FACING, DIR_EAST, LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast delay 30 - hideobjectat LOCALID_PLAYER, 0 + hideplayer setvar VAR_0x8004, LOCALID_LILYCOVE_HARBOR_SS_TIDAL call Common_EventScript_FerryDepart return @@ -393,7 +393,7 @@ LilycoveCity_Harbor_EventScript_BoardFerry:: call_if_eq VAR_FACING, DIR_NORTH, LilycoveCity_Harbor_EventScript_PlayerBoardFerryNorth call_if_eq VAR_FACING, DIR_EAST, LilycoveCity_Harbor_EventScript_PlayerBoardFerryEast delay 30 - hideobjectat LOCALID_PLAYER, 0 + hideplayer setvar VAR_0x8004, LOCALID_LILYCOVE_HARBOR_SS_TIDAL call Common_EventScript_FerryDepart return diff --git a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc index e00c7bcb3c2c..1ac10a401698 100644 --- a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc +++ b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc @@ -76,7 +76,11 @@ LilycoveCity_LilycoveMuseum_2F_EventScript_ShowExhibitHall:: applymovement LOCALID_PLAYER, LilycoveCity_LilycoveMuseum_2F_Movement_PlayerWalkInPlaceLeft waitmovement 0 msgbox LilycoveCity_LilycoveMuseum_2F_Text_PleaseObtainPaintingsForExhibit, MSGBOX_SIGN - copyvar VAR_LILYCOVE_MUSEUM_2F_STATE, 1 +#ifdef UBFIX + setvar VAR_LILYCOVE_MUSEUM_2F_STATE, 1 +#else + copyvar VAR_LILYCOVE_MUSEUM_2F_STATE, 1, warn=FALSE +#endif releaseall end diff --git a/data/maps/LittlerootTown/scripts.inc b/data/maps/LittlerootTown/scripts.inc index fd1d970b1349..6a2c6af41bb1 100644 --- a/data/maps/LittlerootTown/scripts.inc +++ b/data/maps/LittlerootTown/scripts.inc @@ -156,7 +156,7 @@ LittlerootTown_EventScript_GoInsideWithMom:: waitmovement 0 setflag FLAG_HIDE_LITTLEROOT_TOWN_MOM_OUTSIDE setvar VAR_LITTLEROOT_INTRO_STATE, 3 - hideobjectat LOCALID_PLAYER, 0 + hideplayer closedoor VAR_0x8004, VAR_0x8005 waitdooranim clearflag FLAG_HIDE_LITTLEROOT_TOWN_FAT_MAN diff --git a/data/maps/MtChimney/scripts.inc b/data/maps/MtChimney/scripts.inc index 37fd2ccde7e1..cdff230d770c 100644 --- a/data/maps/MtChimney/scripts.inc +++ b/data/maps/MtChimney/scripts.inc @@ -851,4 +851,3 @@ MtChimney_Text_SawyerRematchDefeat: MtChimney_Text_SawyerPostRematch: .string "Actually, it really is hot here.\n" .string "I'm overdressed for these parts.$" - diff --git a/data/maps/SkyPillar_2F/scripts.inc b/data/maps/SkyPillar_2F/scripts.inc index bad2488f0b49..a530e01113ff 100644 --- a/data/maps/SkyPillar_2F/scripts.inc +++ b/data/maps/SkyPillar_2F/scripts.inc @@ -6,7 +6,11 @@ SkyPillar_2F_MapScripts:: SkyPillar_2F_OnTransition: call_if_lt VAR_SKY_PILLAR_STATE, 2, SkyPillar_2F_EventScript_CleanFloor - copyvar VAR_ICE_STEP_COUNT, 1 +#ifdef UBFIX + setvar VAR_ICE_STEP_COUNT, 1 +#else + copyvar VAR_ICE_STEP_COUNT, 1, warn=FALSE +#endif end SkyPillar_2F_EventScript_CleanFloor:: diff --git a/data/maps/SkyPillar_4F/scripts.inc b/data/maps/SkyPillar_4F/scripts.inc index 9e8f1e80ea49..603144f04bd1 100644 --- a/data/maps/SkyPillar_4F/scripts.inc +++ b/data/maps/SkyPillar_4F/scripts.inc @@ -6,7 +6,11 @@ SkyPillar_4F_MapScripts:: SkyPillar_4F_OnTransition: call_if_lt VAR_SKY_PILLAR_STATE, 2, SkyPillar_4F_EventScript_CleanFloor - copyvar VAR_ICE_STEP_COUNT, 1 +#ifdef UBFIX + setvar VAR_ICE_STEP_COUNT, 1 +#else + copyvar VAR_ICE_STEP_COUNT, 1, warn=FALSE +#endif end SkyPillar_4F_EventScript_CleanFloor:: diff --git a/data/maps/SlateportCity_Harbor/scripts.inc b/data/maps/SlateportCity_Harbor/scripts.inc index ebcd40ab0caa..52fd04ec65fd 100644 --- a/data/maps/SlateportCity_Harbor/scripts.inc +++ b/data/maps/SlateportCity_Harbor/scripts.inc @@ -228,7 +228,7 @@ SlateportCity_Harbor_EventScript_BoardFerry:: call_if_eq VAR_FACING, DIR_NORTH, SlateportCity_Harbor_EventScript_BoardFerryNorth call_if_eq VAR_FACING, DIR_EAST, SlateportCity_Harbor_EventScript_BoardFerryEast delay 30 - hideobjectat LOCALID_PLAYER, 0 + hideplayer setvar VAR_0x8004, LOCALID_SLATEPORT_HARBOR_SS_TIDAL call Common_EventScript_FerryDepart return diff --git a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc index 70463728f34e..c46099e39ac2 100644 --- a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc @@ -433,4 +433,3 @@ SlateportCity_OceanicMuseum_2F_Text_SSAnneReplica: .string "β€œS.S. ANNE\p" .string "β€œA replica of the luxury liner that\n" .string "circles the globe.”$" - diff --git a/data/maps/map_groups.json b/data/maps/map_groups.json index 8a90679c8ddb..78e82055f6f2 100644 --- a/data/maps/map_groups.json +++ b/data/maps/map_groups.json @@ -620,72 +620,5 @@ ], "gMapGroup_IndoorRoute124": [ "Route124_DivingTreasureHuntersHouse" - ], - "connections_include_order": [ - "LittlerootTown", - "OldaleTown", - "DewfordTown", - "LavaridgeTown", - "FallarborTown", - "VerdanturfTown", - "PacifidlogTown", - "PetalburgCity", - "SlateportCity", - "MauvilleCity", - "RustboroCity", - "FortreeCity", - "LilycoveCity", - "MossdeepCity", - "SootopolisCity", - "EverGrandeCity", - "Route101", - "Route102", - "Route103", - "Route104", - "Route105", - "Route106", - "Route107", - "Route108", - "Route109", - "Route110", - "Route111", - "Route112", - "Route113", - "Route114", - "Route115", - "Route116", - "Route117", - "Route118", - "Route119", - "Route120", - "Route121", - "Route122", - "Route123", - "Route124", - "Route125", - "Route126", - "Route127", - "Route128", - "Route129", - "Route130", - "Route131", - "Route132", - "Route133", - "Route134", - "Underwater_Route105", - "Underwater_Route124", - "Underwater_Route125", - "Underwater_Route126", - "Underwater_Route127", - "Underwater_Route128", - "Underwater_Route129", - "SafariZone_Northwest", - "SafariZone_North", - "SafariZone_Southwest", - "SafariZone_South", - "SafariZone_Northeast", - "SafariZone_Southeast", - "BattleFrontier_OutsideWest", - "BattleFrontier_OutsideEast" ] } diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 457ff8f67016..a3defef83ef1 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -146,7 +146,7 @@ gScriptCmdTable:: script_cmd_table_entry SCR_OP_GIVEMON ScrCmd_nop1, requests_effects=1 @ 0x79 script_cmd_table_entry SCR_OP_GIVEEGG ScrCmd_giveegg, requests_effects=1 @ 0x7a script_cmd_table_entry SCR_OP_SETMONMOVE ScrCmd_setmonmove, requests_effects=1 @ 0x7b - script_cmd_table_entry SCR_OP_CHECKPARTYMOVE ScrCmd_checkpartymove, requests_effects=1 @ 0x7c + script_cmd_table_entry SCR_OP_CHECKFIELDMOVE ScrCmd_checkfieldmove, requests_effects=1 @ 0x7c script_cmd_table_entry SCR_OP_BUFFERSPECIESNAME ScrCmd_bufferspeciesname, requests_effects=1 @ 0x7d script_cmd_table_entry SCR_OP_BUFFERLEADMONSPECIESNAME ScrCmd_bufferleadmonspeciesname, requests_effects=1 @ 0x7e script_cmd_table_entry SCR_OP_BUFFERPARTYMONNICK ScrCmd_bufferpartymonnick, requests_effects=1 @ 0x7f @@ -251,6 +251,7 @@ gScriptCmdTable:: script_cmd_table_entry SCR_OP_BUFFERITEMNAMEPLURAL ScrCmd_bufferitemnameplural, requests_effects=1 @ 0xe2 script_cmd_table_entry SCR_OP_DYNMULTICHOICE ScrCmd_dynmultichoice, requests_effects=1 @ 0xe3 script_cmd_table_entry SCR_OP_DYNMULTIPUSH ScrCmd_dynmultipush, requests_effects=1 @ 0xe4 + script_cmd_table_entry SCR_OP_HIDEFOLLOWER ScrCmd_hidefollower, requests_effects=1 @ 0xe5 .if ALLOCATE_SCRIPT_CMD_TABLE gScriptCmdTableEnd:: diff --git a/data/scripts/apricorn_tree.inc b/data/scripts/apricorn_tree.inc new file mode 100644 index 000000000000..019b2b76b0fb --- /dev/null +++ b/data/scripts/apricorn_tree.inc @@ -0,0 +1,89 @@ +ApricornTreeScript:: + lock + faceplayer + message ApricornTree_Text_Intro + waitmessage + special ObjectEventInteractionGetApricornTreeData + goto_if_gt VAR_0x8005, 0, ApricornTree_EventScript_WantToPick + message ApricornTree_Text_Empty + waitmessage + waitbuttonpress + release + end + +ApricornTree_EventScript_WantToPick:: + buffernumberstring STR_VAR_2, VAR_0x8005 + msgbox ApricornTree_Text_WantToPick, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, ApricornTree_EventScript_PickApricorn + goto_if_eq VAR_RESULT, NO, ApricornTree_EventScript_CancelPickingApricorn + +.set APRICORN_NORMAL_BAG_FULL, 0 +.set APRICORN_NORMAL_SPACE_IN_BAG, 1 + +ApricornTree_EventScript_PickApricorn:: + special ObjectEventInteractionPickApricornTree + call EventScript_BufferPocketNameAndTryFanfare + goto_if_eq VAR_0x8006, APRICORN_NORMAL_BAG_FULL, ApricornTree_EventScript_PocketFull + message ApricornTree_Text_PickedTheApricorn +.if OW_SHOW_ITEM_DESCRIPTIONS != OW_ITEM_DESCRIPTIONS_OFF + copyvar VAR_0x8006 VAR_0x8004 +.endif + delay 10 +.if OW_SHOW_ITEM_DESCRIPTIONS != OW_ITEM_DESCRIPTIONS_OFF + showberrydescription +.endif + playfanfare MUS_OBTAIN_BERRY + waitmessage + waitfanfare + waitbuttonpress + message ApricornTree_Text_PutAwayApricorn + waitmessage + waitbuttonpress +.if OW_SHOW_ITEM_DESCRIPTIONS != OW_ITEM_DESCRIPTIONS_OFF + hideitemdescription +.endif + release + end + +ApricornTree_EventScript_PocketFull:: + message ApricornTree_Text_PocketFull + waitmessage + waitbuttonpress + release + end + +ApricornTree_EventScript_CancelPickingApricorn:: + message ApricornTree_Text_ApricornLeftUnpicked + waitmessage + waitbuttonpress + release + end + +ApricornTree_Text_Intro: + .string "It's an Apricorn Tree!$" + +ApricornTree_Text_Empty: + .string "There are no Apricorns…$" + +ApricornTree_Text_WantToPick: + .string "…It's {STR_VAR_2} {STR_VAR_1}!\p" + .string "Do you want to pick the\n" + .string "{STR_VAR_1}?$" + +ApricornTree_Text_PickedTheApricorn: + .string "{PLAYER} obtained\n" + .string "{STR_VAR_2} {STR_VAR_1}.$" + +ApricornTree_Text_PutAwayApricorn: + .string "{PLAYER} put away the\n" + .string "{STR_VAR_1} in\l" + .string "the BAG's {STR_VAR_3} POCKET.$" + +ApricornTree_Text_PocketFull: + .string "The BAG's {STR_VAR_3} POCKET is full.\p" + .string "{PLAYER} gave up on the\p" + .string "{STR_VAR_1}…$" + +ApricornTree_Text_ApricornLeftUnpicked: + .string "{PLAYER} gave up on the\p" + .string "{STR_VAR_1}…$" diff --git a/data/scripts/battle_frontier.inc b/data/scripts/battle_frontier.inc new file mode 100644 index 000000000000..cbfd1ac5eeee --- /dev/null +++ b/data/scripts/battle_frontier.inc @@ -0,0 +1,13 @@ +BattleFrontier_ShowCaughtBannedSpecies:: + goto_if_eq VAR_0x8005, 0, BattleFrontier_ShowCaughtBannedSpeciesEnd + msgbox BattleFrontier_DoYouWantToSeeTheListOfCaughtBannedSpecies, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, BattleFrontier_ShowCaughtBannedSpeciesEnd + callnative ShowBattleFrontierCaughtBannedSpecies + waitstate +BattleFrontier_ShowCaughtBannedSpeciesEnd: + return + + +BattleFrontier_DoYouWantToSeeTheListOfCaughtBannedSpecies: + .string "Do you want to see the list of\n" + .string "POKΓ©MON species you can't bring?$" diff --git a/data/scripts/battle_pike.inc b/data/scripts/battle_pike.inc index 2108becd06e6..c4612609b07c 100644 --- a/data/scripts/battle_pike.inc +++ b/data/scripts/battle_pike.inc @@ -85,6 +85,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_RightRoomWarp:: end BattleFrontier_BattlePikeThreePathRoom_EventScript_RoomWarp:: + clearflag FLAG_SAFE_FOLLOWER_MOVEMENT pike_get PIKE_DATA_WIN_STREAK addvar VAR_RESULT, 1 pike_set PIKE_DATA_WIN_STREAK, VAR_RESULT diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index 227981578f5b..1c547f89804c 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -356,7 +356,7 @@ CableClub_EventScript_EnterColosseum:: waitdooranim applymovement LOCALID_PLAYER, Movement_PlayerEnterLinkRoom waitmovement 0 - hideobjectat LOCALID_PLAYER, 0 + hideplayer closedoor 9, 1 waitdooranim release @@ -450,7 +450,7 @@ CableClub_EventScript_EnterTradeCenter:: waitdooranim applymovement LOCALID_PLAYER, Movement_PlayerEnterLinkRoom waitmovement 0 - hideobjectat LOCALID_PLAYER, 0 + hideplayer closedoor 9, 1 waitdooranim release @@ -515,7 +515,7 @@ CableClub_EventScript_EnterRecordCorner:: waitdooranim applymovement LOCALID_PLAYER, Movement_PlayerEnterLinkRoom waitmovement 0 - hideobjectat LOCALID_PLAYER, 0 + hideplayer closedoor 9, 1 waitdooranim release @@ -902,7 +902,7 @@ CableClub_EventScript_EnterUnionRoom:: waitdooranim applymovement LOCALID_PLAYER, Movement_PlayerEnterLinkRoom waitmovement 0 - hideobjectat LOCALID_PLAYER, 0 + hideplayer closedoor 5, 1 waitdooranim special Script_ResetUnionRoomTrade @@ -1202,7 +1202,7 @@ CableClub_EventScript_EnterWirelessLinkRoom:: waitdooranim applymovement LOCALID_PLAYER, Movement_PlayerEnterLinkRoom waitmovement 0 - hideobjectat LOCALID_PLAYER, 0 + hideplayer closedoor 9, 1 waitdooranim release @@ -1384,7 +1384,7 @@ MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom:: closemessage applymovement LOCALID_PLAYER, Movement_PlayerEnterMinigameRoom waitmovement 0 - hideobjectat LOCALID_PLAYER, 0 + hideplayer release waitstate end diff --git a/data/scripts/cave_hole.inc b/data/scripts/cave_hole.inc index fc4962912af3..e6f9084705a5 100644 --- a/data/scripts/cave_hole.inc +++ b/data/scripts/cave_hole.inc @@ -3,7 +3,11 @@ CaveHole_CheckFallDownHole: .2byte 0 CaveHole_FixCrackedGround: - copyvar VAR_ICE_STEP_COUNT, 1 +#ifdef UBFIX + setvar VAR_ICE_STEP_COUNT, 1 +#else + copyvar VAR_ICE_STEP_COUNT, 1, warn=FALSE +#endif end EventScript_FallDownHole:: diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index d82ce2f358b6..921a3247e4e4 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -87,6 +87,15 @@ Debug_FlagsNotSetBattleConfigMessage_Text: .string "Please define a usable flag in:\l" .string "'include/config/battle.h'!$" +Debug_VarsNotSetBattleConfigMessage:: + message Debug_VarsNotSetBattleConfigMessage_Text + goto Debug_MessageEnd + +Debug_VarsNotSetBattleConfigMessage_Text: + .string "Feature unavailable!\n" + .string "Please define a usable var in:\l" + .string "'include/config/battle.h'!$" + Debug_BoxFilledMessage:: message Debug_BoxFilledMessage_Text goto Debug_MessageEnd @@ -270,6 +279,24 @@ Debug_ShowExpansionVersion:: Debug_ExpansionVersion: .string "pokeemerald-expansion {STR_VAR_1}$" +Debug_Follower_NPC_Not_Enabled:: + msgbox Debug_Enable_To_Use_Follower_NPCs, MSGBOX_DEFAULT + release + end + +Debug_Enable_To_Use_Follower_NPCs: + .string "Feature unavailable.\nSet FNPC_ENABLE_NPC_FOLLOWERS to\lTRUE in 'include/config/follower_npc.h'.$" + +Debug_Follower_NPC_Event_Script:: + lock + facefollowernpc + msgbox Debug_Follower_NPC_Test_Message, MSGBOX_DEFAULT + releaseall + end + +Debug_Follower_NPC_Test_Message: + .string "This is a Follower NPC test.$" + Debug_EventScript_Steven_Multi:: call MossdeepCity_SpaceCenter_2F_EventScript_ChoosePartyForMultiBattle release @@ -335,6 +362,66 @@ Debug_EventScript_InflictStatus1_Single: releaseall end +Debug_EventScript_SetHiddenNature:: + special ChoosePartyMon + waitstate + goto_if_ge VAR_0x8004, PARTY_SIZE, Debug_EventScript_InflictStatus1_Close + specialvar VAR_RESULT, ScriptGetPartyMonSpecies + goto_if_eq VAR_RESULT, SPECIES_EGG, Debug_EventScript_InflictStatus1_Close + dynmultipush Debug_EventScript_ChangeNature_Text_Hardy, 0 + dynmultipush Debug_EventScript_ChangeNature_Text_Lonely, 1 + dynmultipush Debug_EventScript_ChangeNature_Text_Brave, 2 + dynmultipush Debug_EventScript_ChangeNature_Text_Adamant, 3 + dynmultipush Debug_EventScript_ChangeNature_Text_Naughty, 4 + dynmultipush Debug_EventScript_ChangeNature_Text_Bold, 5 + dynmultipush Debug_EventScript_ChangeNature_Text_Docile, 6 + dynmultipush Debug_EventScript_ChangeNature_Text_Relaxed, 7 + dynmultipush Debug_EventScript_ChangeNature_Text_Impish, 8 + dynmultipush Debug_EventScript_ChangeNature_Text_Lax, 9 + dynmultipush Debug_EventScript_ChangeNature_Text_Timid, 10 + dynmultipush Debug_EventScript_ChangeNature_Text_Hasty, 11 + dynmultipush Debug_EventScript_ChangeNature_Text_Serious, 12 + dynmultipush Debug_EventScript_ChangeNature_Text_Jolly, 13 + dynmultipush Debug_EventScript_ChangeNature_Text_Naive, 14 + dynmultipush Debug_EventScript_ChangeNature_Text_Modest, 15 + dynmultipush Debug_EventScript_ChangeNature_Text_Mild, 16 + dynmultipush Debug_EventScript_ChangeNature_Text_Quiet, 17 + dynmultipush Debug_EventScript_ChangeNature_Text_Bashful, 18 + dynmultipush Debug_EventScript_ChangeNature_Text_Rash, 19 + dynmultipush Debug_EventScript_ChangeNature_Text_Calm, 20 + dynmultipush Debug_EventScript_ChangeNature_Text_Gentle, 21 + dynmultipush Debug_EventScript_ChangeNature_Text_Sassy, 22 + dynmultipush Debug_EventScript_ChangeNature_Text_Careful, 23 + dynmultipush Debug_EventScript_ChangeNature_Text_Quirky, 24 + dynmultistack 0, 0, TRUE, 7, FALSE, 0, NULL + switch VAR_RESULT + case MULTI_B_PRESSED, Debug_EventScript_InflictStatus1_Close + special SetHiddenNature + releaseall + end + +Debug_EventScript_SetAbility:: + special ChoosePartyMon + waitstate + callnative DebugNative_GetAbilityNames + dynmultipush gStringVar1, 0 + dynmultipush gStringVar2, 1 + dynmultipush gStringVar3, 2 + dynmultistack 0, 0, FALSE, 3 FALSE, 0, NULL + switch VAR_RESULT + case MULTI_B_PRESSED, Debug_EventScript_SetAbilityClose + special SetAbility +Debug_EventScript_SetAbilityClose: + releaseall + end + +Debug_EventScript_SetFriendship:: + special ChoosePartyMon + waitstate + callnative DebugNative_Party_SetFriendship + releaseall + end + Debug_EventScript_InflictStatus1_Single_Poison: setstatus1 STATUS1_POISON, VAR_0x8004 releaseall @@ -443,6 +530,57 @@ Debug_EventScript_InflictStatus1_Text_Freeze: Debug_EventScript_InflictStatus1_Text_Frostbite: .string "Frostbite$" +Debug_EventScript_ChangeNature_Text_Hardy: + .string "Hardy$" +Debug_EventScript_ChangeNature_Text_Lonely: + .string "Lonely$" +Debug_EventScript_ChangeNature_Text_Brave: + .string "Brave$" +Debug_EventScript_ChangeNature_Text_Adamant: + .string "Adamant$" +Debug_EventScript_ChangeNature_Text_Naughty: + .string "Naughty$" +Debug_EventScript_ChangeNature_Text_Bold: + .string "Bold$" +Debug_EventScript_ChangeNature_Text_Docile: + .string "Docile$" +Debug_EventScript_ChangeNature_Text_Relaxed: + .string "Relaxed$" +Debug_EventScript_ChangeNature_Text_Impish: + .string "Impish$" +Debug_EventScript_ChangeNature_Text_Lax: + .string "Lax$" +Debug_EventScript_ChangeNature_Text_Timid: + .string "Timid$" +Debug_EventScript_ChangeNature_Text_Hasty: + .string "Hasty$" +Debug_EventScript_ChangeNature_Text_Serious: + .string "Serious$" +Debug_EventScript_ChangeNature_Text_Jolly: + .string "Jolly$" +Debug_EventScript_ChangeNature_Text_Naive: + .string "Naive$" +Debug_EventScript_ChangeNature_Text_Modest: + .string "Modest$" +Debug_EventScript_ChangeNature_Text_Mild: + .string "Mild$" +Debug_EventScript_ChangeNature_Text_Quiet: + .string "Quiet$" +Debug_EventScript_ChangeNature_Text_Bashful: + .string "Bashful$" +Debug_EventScript_ChangeNature_Text_Rash: + .string "Rash$" +Debug_EventScript_ChangeNature_Text_Calm: + .string "Calm$" +Debug_EventScript_ChangeNature_Text_Gentle: + .string "Gentle$" +Debug_EventScript_ChangeNature_Text_Sassy: + .string "Sassy$" +Debug_EventScript_ChangeNature_Text_Careful: + .string "Careful$" +Debug_EventScript_ChangeNature_Text_Quirky: + .string "Quirky$" + Debug_EventScript_EWRAMCounters:: callnative CheckEWRAMCounters msgbox Debug_EventScript_EWRAMCounters_Text, MSGBOX_DEFAULT diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index 1845e1029787..84d45c962ac1 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -1,8 +1,7 @@ @ Interact with cuttable tree EventScript_CutTree:: lockall - goto_if_unset FLAG_BADGE01_GET, EventScript_CheckTreeCantCut - checkpartymove MOVE_CUT + checkfieldmove FIELD_MOVE_CUT, TRUE goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CheckTreeCantCut setfieldeffectargument 0, VAR_RESULT bufferpartymonnick STR_VAR_1, VAR_RESULT @@ -64,8 +63,7 @@ EventScript_UseRockSmash:: @ Interact with smashable rock EventScript_RockSmash:: lockall - goto_if_unset FLAG_BADGE03_GET, EventScript_CantSmashRock - checkpartymove MOVE_ROCK_SMASH + checkfieldmove FIELD_MOVE_ROCK_SMASH, TRUE goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantSmashRock setfieldeffectargument 0, VAR_RESULT bufferpartymonnick STR_VAR_1, VAR_RESULT @@ -225,9 +223,8 @@ Text_CantSmash: EventScript_StrengthBoulder:: lockall - goto_if_unset FLAG_BADGE04_GET, EventScript_CantStrength goto_if_set FLAG_SYS_USE_STRENGTH, EventScript_CheckActivatedBoulder - checkpartymove MOVE_STRENGTH + checkfieldmove FIELD_MOVE_STRENGTH, TRUE goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantStrength setfieldeffectargument 0, VAR_RESULT msgbox Text_WantToStrength, MSGBOX_YESNO @@ -286,7 +283,7 @@ Text_StrengthActivated: EventScript_UseWaterfall:: lockall - checkpartymove MOVE_WATERFALL + checkfieldmove FIELD_MOVE_WATERFALL goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantWaterfall bufferpartymonnick STR_VAR_1, VAR_RESULT setfieldeffectargument 0, VAR_RESULT @@ -321,7 +318,7 @@ Text_MonUsedWaterfall: EventScript_UseDive:: lockall - checkpartymove MOVE_DIVE + checkfieldmove FIELD_MOVE_DIVE goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantDive copyvar 0x8004 VAR_RESULT bufferpartymonnick STR_VAR_1, VAR_RESULT @@ -348,7 +345,7 @@ EventScript_EndDive:: EventScript_UseDiveUnderwater:: lockall - checkpartymove MOVE_DIVE + checkfieldmove FIELD_MOVE_DIVE goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantSurface bufferpartymonnick STR_VAR_1, VAR_RESULT setfieldeffectargument 0, VAR_RESULT @@ -444,3 +441,36 @@ EventScript_UseDefog:: waitstate releaseall end + +EventScript_UseRockClimb:: + lockall + checkfieldmove FIELD_MOVE_ROCK_CLIMB + goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_CantRockClimb + bufferpartymonnick STR_VAR_1, VAR_RESULT + setfieldeffectargument 0, VAR_RESULT + msgbox Text_WantToRockClimb, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, EventScript_EndRockClimb + msgbox Text_MonUsedRockClimb, MSGBOX_DEFAULT + closemessage + dofieldeffect FLDEFF_USE_ROCK_CLIMB + waitstate + goto EventScript_EndRockClimb + end + +EventScript_CantRockClimb:: + msgbox Text_CantRockClimb, MSGBOX_DEFAULT + +EventScript_EndRockClimb:: + releaseall + end + +Text_WantToRockClimb: + .string "The cliff is steep.\n" + .string "Would you like to use Rock Climb?$" + +Text_MonUsedRockClimb: + .string "{STR_VAR_1} used Rock Climb!$" + +Text_CantRockClimb: + .string "The cliff is steep.\n" + .string "A PokΓ©mon may be able to climb it.$" diff --git a/data/scripts/field_poison.inc b/data/scripts/field_poison.inc index ddda34ebaae6..1d89bcfdfded 100644 --- a/data/scripts/field_poison.inc +++ b/data/scripts/field_poison.inc @@ -29,9 +29,9 @@ EventScript_FrontierFieldWhiteOut:: waitbuttonpress pike_inchallenge goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePike_EventScript_Retire - pyramid_inchallenge - goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost @ On Pyramid floor - goto_if_eq VAR_RESULT, 2, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost @ On Pyramid peak + pyramid_getlocation + goto_if_eq VAR_RESULT, PYRAMID_LOCATION_FLOOR, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, PYRAMID_LOCATION_TOP, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost trainerhill_inchallenge goto_if_eq VAR_RESULT, TRUE, TrainerHill_1F_EventScript_Lost special Script_FadeOutMapMusic diff --git a/data/scripts/move_relearner.inc b/data/scripts/move_relearner.inc new file mode 100644 index 000000000000..15c80733df06 --- /dev/null +++ b/data/scripts/move_relearner.inc @@ -0,0 +1,105 @@ +Common_EventScript_MoveRelearner:: + lockall + faceplayer + message MoveRelearner_Text_WouldLearnNewMoves + waitmessage + goto Common_EventScript_MoveRelearnerDynMultiChoice + end + +Common_EventScript_MoveRelearnerDynMultiChoice:: + dynmultipush MoveRelearner_Text_LevelUpMoves, 0 +.if P_ENABLE_MOVE_RELEARNERS == TRUE + dynmultipush MoveRelearner_Text_EggMoves, 1 + dynmultipush MoveRelearner_Text_TMMoves, 2 + dynmultipush MoveRelearner_Text_TutormoveMoves, 3 +.else + call_if_set P_FLAG_EGG_MOVES, MoveRelearner_EventScript_PushEggMoves + istmrelearneractive MoveRelearner_EventScript_PushTMMoves + call_if_set P_FLAG_TUTOR_MOVES, MoveRelearner_EventScript_PushTutorMoves +.endif @ P_ENABLE_MOVE_RELEARNERS + dynmultipush MoveRelearner_Text_SeeYa, 4 + dynmultistack 0, 0, FALSE, 5, 0, 0, DYN_MULTICHOICE_CB_NONE + closemessage + switch VAR_RESULT + case 0, MoveRelearner_EventScript_TeachLevelUpMoves + case 1, MoveRelearner_EventScript_TeachEggMoves + case 2, MoveRelearner_EventScript_TeachTMMoves + case 3, MoveRelearner_EventScript_TeachTutorMoves + case 4, MoveRelearner_EventScript_PleaseComeAgain +MoveRelearner_EventScript_PleaseComeAgain: + msgbox MoveRelearner_Text_ThankYouComeAgain, MSGBOX_DEFAULT + releaseall + end + +MoveRelearner_EventScript_PushEggMoves: + dynmultipush MoveRelearner_Text_EggMoves, 1 + return + +MoveRelearner_EventScript_PushTMMoves: + dynmultipush MoveRelearner_Text_TMMoves, 2 + return + +MoveRelearner_EventScript_PushTutorMoves: + dynmultipush MoveRelearner_Text_TutormoveMoves, 3 + return + +MoveRelearner_EventScript_TeachLevelUpMoves: + setmoverelearnerstate MOVE_RELEARNER_LEVEL_UP_MOVES + bufferstring STR_VAR_3, MoveRelearner_Text_LevelUpMoveLWR + goto MoveRelearner_EventScript_TeachMove + end + +MoveRelearner_EventScript_TeachEggMoves: + setmoverelearnerstate MOVE_RELEARNER_EGG_MOVES + bufferstring STR_VAR_3, MoveRelearner_Text_EggMoveLWR + goto MoveRelearner_EventScript_TeachMove + end + +MoveRelearner_EventScript_TeachTMMoves: + setmoverelearnerstate MOVE_RELEARNER_TM_MOVES + bufferstring STR_VAR_3, MoveRelearner_Text_TMMoveLWR + goto MoveRelearner_EventScript_TeachMove + end + +MoveRelearner_EventScript_TeachTutorMoves: + setmoverelearnerstate MOVE_RELEARNER_TUTOR_MOVES + bufferstring STR_VAR_3, MoveRelearner_Text_TutorMoveLWR + goto MoveRelearner_EventScript_TeachMove + end + +MoveRelearner_EventScript_TeachMove:: + getpartysize + goto_if_eq VAR_RESULT, 0, MoveRelearner_EventScript_NoPkmn + msgbox MoveRelearner_Text_ChoosePkmn, MSGBOX_DEFAULT + special ChooseMonForMoveRelearner + waitstate + call_if_eq VAR_0x8004, PARTY_NOTHING_CHOSEN, MoveRelearner_EventScript_AnythingElse + special IsSelectedMonEgg + call_if_eq VAR_RESULT, YES, MoveRelearner_EventScript_CantTeachMoveToEgg + call_if_eq VAR_0x8005, NO, MoveRelearner_EventScript_CantTeachMoveToPkmn + msgbox MoveRelearner_Text_WhichXmoveShouldTeach, MSGBOX_DEFAULT + special TeachMoveRelearnerMove + waitstate + goto MoveRelearner_EventScript_AnythingElse + end + +MoveRelearner_EventScript_NoPkmn: + msgbox MoveRelearner_Text_HaveNoPkmn, MSGBOX_AUTOCLOSE + releaseall + end + +MoveRelearner_EventScript_CantTeachMoveToEgg: + msgbox MoveRelearner_Text_CantTeachMoveToEgg, MSGBOX_AUTOCLOSE + goto MoveRelearner_EventScript_AnythingElse + end + +MoveRelearner_EventScript_CantTeachMoveToPkmn: + msgbox MoveRelearner_Text_CantTeachMoveToPkmn, MSGBOX_AUTOCLOSE + goto MoveRelearner_EventScript_AnythingElse + end + +MoveRelearner_EventScript_AnythingElse:: + message MoveRelearner_Text_AnythingElse + waitmessage + goto Common_EventScript_MoveRelearnerDynMultiChoice + end diff --git a/data/scripts/obtain_item.inc b/data/scripts/obtain_item.inc index c54b2f8dc560..3eb7f4f0d4ed 100644 --- a/data/scripts/obtain_item.inc +++ b/data/scripts/obtain_item.inc @@ -133,8 +133,8 @@ EventScript_PickUpItem:: waitfanfare waitmessage bufferitemnameplural STR_VAR_2, VAR_0x8004, VAR_0x8005 - pyramid_inchallenge - goto_if_eq VAR_RESULT, TRUE, EventScript_PutBattlePyramidItemInBag + pyramid_getlocation + goto_if_eq VAR_RESULT, PYRAMID_LOCATION_FLOOR, EventScript_PutBattlePyramidItemInBag msgbox gText_PutItemInPocket, MSGBOX_DEFAULT hideitemdescription return @@ -205,6 +205,7 @@ EventScript_FoundHiddenItem:: end EventScript_PutHiddenItemInPocket:: + callnative Script_ClearDowsingColor delay 10 showitemdescription waitmessage @@ -215,6 +216,7 @@ EventScript_PutHiddenItemInPocket:: hideitemdescription special TryPutTreasureInvestigatorsOnAir special SetHiddenItemFlag + callnative Script_UpdateDowseState releaseall end diff --git a/data/scripts/secret_base.inc b/data/scripts/secret_base.inc index 15faddfa9d31..ed5e8594093b 100644 --- a/data/scripts/secret_base.inc +++ b/data/scripts/secret_base.inc @@ -28,7 +28,7 @@ SecretBase_EventScript_CheckEntrance:: special GetSecretBaseTypeInFrontOfPlayer special CheckPlayerHasSecretBase goto_if_eq VAR_RESULT, TRUE, SecretBase_EventScript_AlreadyHasSecretBase - checkpartymove MOVE_SECRET_POWER + checkfieldmove FIELD_MOVE_SECRET_POWER setfieldeffectargument 0, VAR_RESULT buffermovename STR_VAR_2, MOVE_SECRET_POWER goto_if_eq VAR_0x8007, SECRET_BASE_RED_CAVE, SecretBase_EventScript_Cave @@ -186,7 +186,7 @@ SecretBase_EventScript_EnterPlayersBase:: end SecretBase_EventScript_AlreadyHasSecretBase:: - checkpartymove MOVE_SECRET_POWER + checkfieldmove FIELD_MOVE_SECRET_POWER goto_if_eq VAR_RESULT, PARTY_SIZE, SecretBase_EventScript_NoSecretPower setfieldeffectargument 0, VAR_RESULT setorcopyvar VAR_0x8004, VAR_RESULT diff --git a/data/scripts/surf.inc b/data/scripts/surf.inc index edb116f991ed..630b3f9e6eca 100644 --- a/data/scripts/surf.inc +++ b/data/scripts/surf.inc @@ -1,5 +1,5 @@ EventScript_UseSurf:: - checkpartymove MOVE_SURF + checkfieldmove FIELD_MOVE_SURF goto_if_eq VAR_RESULT, PARTY_SIZE, EventScript_EndUseSurf bufferpartymonnick STR_VAR_1, VAR_RESULT setfieldeffectargument 0, VAR_RESULT diff --git a/data/sound_data.s b/data/sound_data.s index 39bef4b332f1..b52f9d2f861c 100644 --- a/data/sound_data.s +++ b/data/sound_data.s @@ -1,7 +1,11 @@ .section .rodata + .include "asm/macros.inc" + .include "constants/constants.inc" + .include "asm/macros/m4a.inc" .include "asm/macros/music_voice.inc" + .include "include/config/general.h" .include "include/config/pokemon.h" .include "sound/voice_groups.inc" .include "sound/keysplit_tables.inc" diff --git a/data/specials.inc b/data/specials.inc index c95cea9a7e05..f80933c0112c 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -563,3 +563,7 @@ gSpecials:: def_special UseBlankMessageToCancelPokemonPic def_special EnterCode def_special GetCodeFeedback + def_special SetHiddenNature + def_special SetAbility + def_special ObjectEventInteractionGetApricornTreeData + def_special ObjectEventInteractionPickApricornTree diff --git a/data/text/contest_link.inc b/data/text/contest_link.inc deleted file mode 100644 index f2f1469e0f80..000000000000 --- a/data/text/contest_link.inc +++ /dev/null @@ -1,38 +0,0 @@ -@ With the exception of Link standby, none of the below texts are used - -gTest_MissedTurn:: - .string "Missed turn$" - -gText_LinkStandby4:: - .string "Link standby!$" - -gText_WinnerIsPlayersMonCongrats:: - .string "The winner is {STR_VAR_1}'s {STR_VAR_2}!\n" - .string "Congratulations!$" - -gText_WinnerIsPlayersMon:: - .string "The winner is {STR_VAR_1}'s {STR_VAR_2}!{PAUSE_UNTIL_PRESS}$" - -gText_PrimaryJudgingNumX:: - .string "Primary judging: No. {STR_VAR_1}{PAUSE_UNTIL_PRESS}$" - -gText_SecondaryJudgingNumX:: - .string "Secondary judging: No. {STR_VAR_1}{PAUSE_UNTIL_PRESS}$" - -gText_SetEventNumX:: - .string "Set event: No. {STR_VAR_1}{PAUSE_UNTIL_PRESS}$" - -gText_MoveUsedMostOften:: - .string "The move used most often:\n" - .string "{STR_VAR_1}{PAUSE_UNTIL_PRESS}$" - -gText_MostImpressiveMon:: - .string "The most impressive POKΓ©MON:\n" - .string "{STR_VAR_1}'s {STR_VAR_2}{PAUSE_UNTIL_PRESS}$" - -gText_SetEventNumX2:: - .string "Set event: No. {STR_VAR_1}{PAUSE_UNTIL_PRESS}$" - -gText_LinkTVProgramWillNotBeMadeTrainerLost:: - .string "A link TV program will not be made\n" - .string "because the TRAINER lost.{PAUSE_UNTIL_PRESS}$" diff --git a/data/text/contest_painting.inc b/data/text/contest_painting.inc deleted file mode 100644 index 5152cb3bb8e9..000000000000 --- a/data/text/contest_painting.inc +++ /dev/null @@ -1,96 +0,0 @@ -gContestHallPaintingCaption:: - .string "{STR_VAR_1}\n" - .string "{STR_VAR_2}'s {STR_VAR_3}$" - -@ Unused -gContestPaintingContest:: - .string "CONTEST$" - -gContestRankNormal:: - .string "NORMAL RANK$" - -gContestRankSuper:: - .string "SUPER RANK$" - -gContestRankHyper:: - .string "HYPER RANK$" - -gContestRankMaster:: - .string "MASTER RANK$" - -gContestLink:: - .string "LINK$" - -gContestCoolness:: - .string "COOLNESS$" - -gContestBeauty:: - .string "BEAUTY$" - -gContestCuteness:: - .string "CUTENESS$" - -gContestSmartness:: - .string "SMARTNESS$" - -gContestToughness:: - .string "TOUGHNESS$" - -gContestPaintingCool1:: - .string "Nonstop supercool--\n" - .string "the inestimable {STR_VAR_1}$" - -gContestPaintingCool2:: - .string "Hey, there!\n" - .string "The good-looking POKΓ©MON {STR_VAR_1}$" - -gContestPaintingCool3:: - .string "The marvelous, wonderful, and\n" - .string "very great {STR_VAR_1}$" - -gContestPaintingBeauty1:: - .string "This century's last Venus--\n" - .string "the beautiful {STR_VAR_1}$" - -gContestPaintingBeauty2:: - .string "{STR_VAR_1}'s dazzling,\n" - .string "glittering smile$" - -gContestPaintingBeauty3:: - .string "POKΓ©MON CENTER's super idol--\n" - .string "the incomparable {STR_VAR_1}$" - -gContestPaintingCute1:: - .string "The lovely and sweet {STR_VAR_1}$" - -gContestPaintingCute2:: - .string "The pretty {STR_VAR_1}'s\n" - .string "winning portrait$" - -gContestPaintingCute3:: - .string "Give us a wink!\n" - .string "The cutie POKΓ©MON {STR_VAR_1}$" - -gContestPaintingSmart1:: - .string "The smartness maestro--\n" - .string "the wise POKΓ©MON {STR_VAR_1}$" - -gContestPaintingSmart2:: - .string "{STR_VAR_1}--the one chosen\n" - .string "above all POKΓ©MON$" - -gContestPaintingSmart3:: - .string "The excellent {STR_VAR_1}'s\n" - .string "moment of elegance$" - -gContestPaintingTough1:: - .string "The powerfully muscular\n" - .string "speedster {STR_VAR_1}$" - -gContestPaintingTough2:: - .string "The strong, stronger, and\n" - .string "strongest {STR_VAR_1}$" - -gContestPaintingTough3:: - .string "The mighty tough\n" - .string "hyper POKΓ©MON {STR_VAR_1}$" diff --git a/data/text/contest_strings.inc b/data/text/contest_strings.inc deleted file mode 100644 index 4b144a21bcea..000000000000 --- a/data/text/contest_strings.inc +++ /dev/null @@ -1,314 +0,0 @@ -gText_AppealNumWhichMoveWillBePlayed:: - .string "Appeal no. {STR_VAR_1}!\n" - .string "Which move will be played?$" - -gText_AppealNumButItCantParticipate:: - .string "Appeal no. {STR_VAR_1}!\n" - .string "But it can't participate!$" - -gText_MonAppealedWithMove:: - .string "{STR_VAR_1} appealed with\n" - .string "{STR_VAR_2}!$" - -gText_MonWasWatchingOthers:: - .string "{STR_VAR_1} was watching\n" - .string "the others.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_AllOutOfAppealTime:: - .string "We're all out of\n" - .string "Appeal Time!{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -@ Appeal result texts - -gText_BecameMoreConsciousOfOtherMons:: - .string "It became more conscious\n" - .string "of the other POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonCantMakeAnAppealAfterThis:: - .string "{STR_VAR_1} can't make an\n" - .string "appeal after this.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_SettledDownJustLittleBit:: - .string "It settled down just a\n" - .string "little bit.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_BecameObliviousToOtherMons:: - .string "It became oblivious to\n" - .string "the other POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_BecameLessAwareOfOtherMons:: - .string "It became less aware of\n" - .string "the other POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_StoppedCaringAboutOtherMons:: - .string "It stopped caring about\n" - .string "other POKΓ©MON much.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_TriedToStartleOtherMons:: - .string "It tried to startle the\n" - .string "other POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_TriedToDazzleOthers:: - .string "It tried to dazzle the\n" - .string "others.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_JudgeLookedAwayFromMon:: - .string "The JUDGE looked away\n" - .string "from {STR_VAR_1}.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_TriedToUnnerveNextMon:: - .string "It tried to unnerve the\n" - .string "next POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonBecameNervous:: - .string "{STR_VAR_1} became\n" - .string "nervous.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_AppealTriedToUnnerveWaitingMons:: - .string "The appeal tried to\n" - .string "unnerve waiting POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_TauntedMonsDoingWell:: - .string "It taunted POKΓ©MON\n" - .string "doing well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonRegainedItsForm:: - .string "{STR_VAR_1} regained its\n" - .string "form.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_TriedToJamMonDoingWell:: - .string "It tried to jam POKΓ©MON\n" - .string "doing well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_StandoutMonHustledEvenMore:: - .string "The standout {STR_VAR_1}\n" - .string "hustled even more.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_LargelyUnnoticedMonWorkedHard:: - .string "The largely unnoticed\n" - .string "{STR_VAR_1} worked hard.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_WorkedAsMuchAsMonBefore:: - .string "It worked as much as\n" - .string "POKΓ©MON before it.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealDidNotGoWell:: - .string "{STR_VAR_1}'s appeal did\n" - .string "not go well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_WorkedAsMuchAsPrecedingMon:: - .string "It worked as much as the\n" - .string "preceding POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealDidNotGoWell2:: - .string "{STR_VAR_1}'s appeal did\n" - .string "not go well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealDidNotGoWell3:: - .string "{STR_VAR_1}'s appeal did\n" - .string "not go well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealWentSlightlyWell:: - .string "{STR_VAR_1}'s appeal\n" - .string "went slightly well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealWentPrettyWell:: - .string "{STR_VAR_1}'s appeal\n" - .string "went pretty well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealWentExcellently:: - .string "{STR_VAR_1}'s appeal\n" - .string "went excellently.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealWasDud:: - .string "{STR_VAR_1}'s appeal was\n" - .string "a dud.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealDidNotWorkVeryWell:: - .string "{STR_VAR_1}'s appeal did\n" - .string "not work very well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealWentSlightlyWell2:: - .string "{STR_VAR_1}'s appeal\n" - .string "went slightly well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealWentPrettyWell2:: - .string "{STR_VAR_1}'s appeal\n" - .string "went pretty well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealWentVeryWell:: - .string "{STR_VAR_1}'s appeal\n" - .string "went very well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsAppealWentExcellently2:: - .string "{STR_VAR_1}'s appeal\n" - .string "went excellently.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_SameTypeAsOneBeforeGood:: - .string "It's the same type as the\n" - .string "POKΓ©MON before--good!{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_NotSameTypeAsOneBeforeGood:: - .string "It's not the same type as\n" - .string "the one before--good!{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_StoodOutMuchMoreThanMonBefore:: - .string "It stood out much more\n" - .string "than the POKΓ©MON before.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_DidntDoAsWellAsMonBefore:: - .string "It didn't do as well as the\n" - .string "POKΓ©MON before.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsConditionRoseAboveUsual:: - .string "{STR_VAR_1}'s condition\n" - .string "rose above usual.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MonsHotStatusMadeGreatAppeal:: - .string "{STR_VAR_1}'s hot status\n" - .string "made it a great appeal!{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MovedUpInLineForNextAppeal:: - .string "It moved up in line for\n" - .string "the next appeal.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_MovedBackInLineForNextAppeal:: - .string "It moved back in line once\n" - .string "for the next appeal.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_ScrambledUpOrderForNextTurn:: - .string "It scrambled up the\n" - .string "order for the next turn.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}$" - -gText_JudgeLookedAtMonExpectantly:: - .string "The JUDGE looked at\n" - .string "{STR_VAR_1} expectantly.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_AppealComboWentOverWell:: - .string "The appeal combo went\n" - .string "over well.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_AppealComboWentOverVeryWell:: - .string "The appeal combo went\n" - .string "over very well.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_AppealComboWentOverExcellently:: - .string "The appeal combo went\n" - .string "over excellently.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonManagedToAvertGaze:: - .string "{STR_VAR_1} managed to\n" - .string "avert its gaze.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonManagedToAvoidSeeingIt:: - .string "{STR_VAR_1} managed to\n" - .string "avoid seeing it.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonIsntFazedByThatSortOfThing:: - .string "{STR_VAR_1} isn't fazed\n" - .string "by that sort of thing.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonBecameALittleDistracted:: - .string "{STR_VAR_1} became a\n" - .string "little distracted.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_TriedToStartleOtherPokemon:: - .string "It tried to startle the\n" - .string "other POKΓ©MON.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonLookedDownOutOfDistraction:: - .string "{STR_VAR_1} looked down\n" - .string "out of distraction.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonTurnedBackOutOfDistraction:: - .string "{STR_VAR_1} turned back\n" - .string "out of distraction.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonCouldntHelpUtteringCry:: - .string "{STR_VAR_1} couldn't help\n" - .string "uttering a cry.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonCouldntHelpLeapingUp:: - .string "{STR_VAR_1} couldn't help\n" - .string "leaping up.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonTrippedOutOfDistraction:: - .string "{STR_VAR_1} tripped over\n" - .string "out of distraction.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonWasTooNervousToMove:: - .string "{STR_VAR_1} was too\n" - .string "nervous to move.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_ButItMessedUp2:: - .string "But it messed up.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_ButItFailedToMakeTargetNervous:: - .string "But it failed to make\n" - .string "the target nervous.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_ButItFailedToMakeAnyoneNervous:: - .string "But it failed to make\n" - .string "anyone nervous.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_ButItWasIgnored:: - .string "But it was ignored…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_CouldntImproveItsCondition:: - .string "But it couldn't improve\n" - .string "its condition…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_BadConditionResultedInWeakAppeal:: - .string "Its bad condition\n" - .string "resulted in a weak appeal.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonWasUnaffected:: - .string "{STR_VAR_1} was\n" - .string "unaffected.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_RepeatedAppeal:: - .string "{STR_VAR_1} disappointed\n" - .string "by repeating an appeal.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonsXWentOverGreat:: - .string "{STR_VAR_1}'s {STR_VAR_3}\n" - .string "went over great.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonsXDidntGoOverWell:: - .string "{STR_VAR_1}'s {STR_VAR_3}\n" - .string "didn't go over well here…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonsXGotTheCrowdGoing:: - .string "{STR_VAR_1}'s {STR_VAR_3}\n" - .string "got the crowd going.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonCantAppealNextTurn:: - .string "{STR_VAR_1} can't appeal\n" - .string "next turn…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_AttractedCrowdsAttention:: - .string "It attracted the crowd's\n" - .string "attention.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_CrowdContinuesToWatchMon:: - .string "The crowd continues to\n" - .string "watch {STR_VAR_3}.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_MonsMoveIsIgnored:: - .string "{STR_VAR_1}'s\n" - .string "{STR_VAR_2} is ignored.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}$" - -gText_Contest_Shyness:: - .string "shyness$" - -gText_Contest_Anxiety:: - .string "anxiety$" - -gText_Contest_Laziness:: - .string "laziness$" - -gText_Contest_Hesitancy:: - .string "hesitancy$" - -gText_Contest_Fear:: - .string "fear$" diff --git a/data/text/move_relearner.inc b/data/text/move_relearner.inc new file mode 100644 index 000000000000..b9400fd62b5f --- /dev/null +++ b/data/text/move_relearner.inc @@ -0,0 +1,55 @@ +MoveRelearner_Text_WouldLearnNewMoves: + .string "Hi, I'm the Move Relearner.\n" + .string "Would you like to learn new moves?$" + +MoveRelearner_Text_LevelUpMoves: + .string "Level Up Moves$" + +MoveRelearner_Text_EggMoves: + .string "Egg Moves$" + +MoveRelearner_Text_TMMoves: + .string "TM Moves$" + +MoveRelearner_Text_TutormoveMoves: + .string "Tutor Moves$" + +MoveRelearner_Text_SeeYa: + .string "See ya!$" + +MoveRelearner_Text_AnythingElse: + .string "Is there anything else I may do for you?$" + +MoveRelearner_Text_ChoosePkmn: + .string "Please choose your PokΓ©mon.$" + +MoveRelearner_Text_HaveNoPkmn: + .string "You have no PokΓ©mon.$" + +MoveRelearner_Text_CantTeachMoveToEgg: + .string "Sorry…\n" + .string "But an Egg can't learn moves.$" + +MoveRelearner_Text_CantTeachMoveToPkmn: + .string "Sorry…\p" + .string "It doesn't appear as if I have any move\n" + .string "I can teach that PokΓ©mon.$" + +MoveRelearner_Text_LevelUpMoveLWR:: + .string "level up move$" + +MoveRelearner_Text_EggMoveLWR:: + .string "egg move$" + +MoveRelearner_Text_TMMoveLWR:: + .string "TM move$" + +MoveRelearner_Text_TutorMoveLWR:: + .string "tutor move$" + +MoveRelearner_Text_WhichXmoveShouldTeach: + .string "Which {STR_VAR_3} should I teach?$" + +MoveRelearner_Text_ThankYouComeAgain: + .string "Thank you for using our services.\n" + .string "Please come again!$" diff --git a/docs/FEATURES.md b/docs/FEATURES.md new file mode 100644 index 000000000000..892a07c16b0a --- /dev/null +++ b/docs/FEATURES.md @@ -0,0 +1 @@ +{{#include ../FEATURES.md}} diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index fa03ca20ee5c..e5835ea07b72 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -1,25 +1,61 @@ # Summary - [README](./README.md) +- [FEATURES](./FEATURES.md) - [Installation](./INSTALL.md) - [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md) + - [ChromeOS](./install/chromeos/CHROME_OS.md) + - [Linux]() + - [ARCH_LINUX](./install/linux/ARCH_LINUX.md) + - [DEBIAN](./install/linux/DEBIAN.md) + - [FEDORA](./install/linux/FEDORA.md) + - [NIXOS](./install/linux/NIXOS.md) + - [OTHERS](./install/linux/OTHERS.md) + - [UBUNTU](./install/linux/UBUNTU.md) + - [macOS](./install/mac/MAC_OS.md) + - [Windows]() + - [CYGWIN](./install/windows/CYGWIN.md) + - [MSYS2](./install/windows/MSYS2.md) + - [WSL](./install/windows/WSL.md) - [Run documentation site locally](local_mdbook/index.md) - [Ubuntu WSL1/WSL2](local_mdbook/ubuntu_WSL.md) - [Contributing](./CONTRIBUTING.md) +- [Styleguide and Principles](./STYLEGUIDE.md) - [Credits](./CREDITS.md) - [Tutorials]() - [What are AI Flags?](tutorials/ai_flags.md) - [How to add new AI Flags](tutorials/ai_logic.md) - [How to add new battle script commands/macros](tutorials/how_to_battle_script_command_macro.md) - [How to add a new move](tutorials/how_to_new_move.md) - - [How to add a new trainer class](tutorials/how_to_trainer_class.md) + - [How to add a new trainer class]() + - [How to add a new trainer front pic](tutorials/how_to_trainer_front_pic.md) + - [How to add a new trainer back pic](tutorials/how_to_trainer_back_pic.md) - [How to add a new PokΓ©mon](tutorials/how_to_new_pokemon.md) - [v1.6.x and earlier](tutorials/how_to_new_pokemon_1_6_0.md) - [How to use the Testing System](tutorials/how_to_testing_system.md) - [How to add new Trainer Slides](tutorials/how_to_new_trainer_slide.md) - [Day/Night System FAQ](tutorials/dns.md) + - [How to use the code entry system](tutorials/how_to_code_entry.md) + - [How to use Follower NPCs](tutorials/how_to_follower_npc.md) + - [Time-Based Encounters](tutorials/how_to_time_of_day_encounters.md) + - [How to use Trainer Party Pools](tutorials/how_to_trainer_party_pool.md) + - [How to Apricorn Tree](tutorials/how_to_apricorn_tree.md) + - [How to Namebox](tutorials/how_to_namebox.md) + - [Vs. Seeker](tutorials/vs_seeker.md) - [Changelog](./CHANGELOG.md) + - [1.14.x]() + - [Version 1.14.1](changelogs/1.14.x/1.14.1.md) + - [Version 1.14.0](changelogs/1.14.x/1.14.0.md) + - [1.13.x]() + - [Version 1.13.4](changelogs/1.13.x/1.13.4.md) + - [Version 1.13.3](changelogs/1.13.x/1.13.3.md) + - [Version 1.13.2](changelogs/1.13.x/1.13.2.md) + - [Version 1.13.1](changelogs/1.13.x/1.13.1.md) + - [Version 1.13.0](changelogs/1.13.x/1.13.0.md) - [1.12.x]() + - [Version 1.12.3](changelogs/1.12.x/1.12.3.md) + - [Version 1.12.2](changelogs/1.12.x/1.12.2.md) + - [Version 1.12.1](changelogs/1.12.x/1.12.1.md) - [Version 1.12.0](changelogs/1.12.x/1.12.0.md) - [1.11.x]() - [Version 1.11.4](changelogs/1.11.x/1.11.4.md) @@ -32,6 +68,7 @@ - [Version 1.10.2](changelogs/1.10.x/1.10.2.md) - [Version 1.10.1](changelogs/1.10.x/1.10.1.md) - [Version 1.10.0](changelogs/1.10.x/1.10.0.md) + - [Megaman Battle Network Style Names](./mmbn_style_names.md) - [1.9.x]() - [Version 1.9.4](changelogs/1.9.x/1.9.4.md) - [Version 1.9.3](changelogs/1.9.x/1.9.3.md) @@ -80,4 +117,5 @@ - [Team Procedures]() - [How to make an Expansion version](team_procedures/expansion_versions.md) - [Release Schedule and Process](team_procedures/schedule.md) + - [Merge Checklist](team_procedures/merge_checklist.md) - [Scope Guidelines](team_procedures/scope.md) diff --git a/docs/book.toml b/docs/book.toml index 3282d8c8e7ad..a1e994eff305 100644 --- a/docs/book.toml +++ b/docs/book.toml @@ -1,6 +1,5 @@ [book] language = "en" -multilingual = false src = "." title = "pokeemerald-expansion" diff --git a/docs/changelogs/1.12.x/1.12.0.md b/docs/changelogs/1.12.x/1.12.0.md index b223e040dab2..965ae27b275d 100644 --- a/docs/changelogs/1.12.x/1.12.0.md +++ b/docs/changelogs/1.12.x/1.12.0.md @@ -121,7 +121,7 @@ - Added option to disable object event shadows - Added option to turn DNS on or off, `OW_ENABLE_DNS` - Added option to for vanilla shadow behaviour, `OW_OBJECT_VANILLA_SHADOWS` - - Scripts containing consecutive `removeobject and `addobject ` needs a `delay 1` between the commands. + - Scripts containing consecutive `removeobject ` and `addobject ` needs a `delay 1` between the commands. ```diff removeobject MY_OBJECT + delay 1 diff --git a/docs/changelogs/1.12.x/1.12.1.md b/docs/changelogs/1.12.x/1.12.1.md new file mode 100644 index 000000000000..ba1d24c93494 --- /dev/null +++ b/docs/changelogs/1.12.x/1.12.1.md @@ -0,0 +1,145 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.12.1 +`. +``` + + +## 🧬 General 🧬 +### Changed +* Changed trainer tutorial to take into account removed palette compression by @hedara90 in [#7044](https://github.com/rh-hideout/pokeemerald-expansion/pull/7044) +* Update CI to ignore allcontributors commits by @pkmnsnfrn in [#7046](https://github.com/rh-hideout/pokeemerald-expansion/pull/7046) +* Fixed CI issue introduced 7046 by @pkmnsnfrn in [#7072](https://github.com/rh-hideout/pokeemerald-expansion/pull/7072) +* Added loop iterator style by @hedara90 in [#7092](https://github.com/rh-hideout/pokeemerald-expansion/pull/7092) +* Fix typo in INSTALL.md by @hedara90 in [#7116](https://github.com/rh-hideout/pokeemerald-expansion/pull/7116) +* Use RGB values for DEFAULT_LIGHT_COLOR by @hedara90 in [#7133](https://github.com/rh-hideout/pokeemerald-expansion/pull/7133) +* Applied Kasen's documentation improvements by @hedara90 in [#7104](https://github.com/rh-hideout/pokeemerald-expansion/pull/7104) +* Fixed description of `FORM_CHANGE_WITHDRAW` by @AsparagusEduardo in [#7152](https://github.com/rh-hideout/pokeemerald-expansion/pull/7152) +* Pret merge (19th of June, 2025) by @Bassoonian in [#7163](https://github.com/rh-hideout/pokeemerald-expansion/pull/7163) +* Update the description of OW_OBJECT_VANILLA_SHADOWS by @pkmnsnfrn in [#7184](https://github.com/rh-hideout/pokeemerald-expansion/pull/7184) +* fix: use BackPickId to calculate player intro ball throw animation palette by @pablopenna in [#7193](https://github.com/rh-hideout/pokeemerald-expansion/pull/7193) + +### Fixed +* Added line break between Trainer 1 name and Trainer 2 name in sText_TwoTrainersWantToBattle by @grintoul1 in [#7028](https://github.com/rh-hideout/pokeemerald-expansion/pull/7028) +* Fixed Battle Pyramid mon generation by @hedara90 in [#7146](https://github.com/rh-hideout/pokeemerald-expansion/pull/7146) +* force sGFRomHeader to always be present by @DizzyEggg in [#7186](https://github.com/rh-hideout/pokeemerald-expansion/pull/7186) +* force RHH Rom Header to always be present by @DizzyEggg in [#7187](https://github.com/rh-hideout/pokeemerald-expansion/pull/7187) +* Fixed debug flag menu sound by @AsparagusEduardo in [#7190](https://github.com/rh-hideout/pokeemerald-expansion/pull/7190) +* Fix BtlController_EmitChosenMonReturnValue UB by @DizzyEggg in [#7197](https://github.com/rh-hideout/pokeemerald-expansion/pull/7197) +* Backported Safari catch and add to party fix by @hedara90 in [#7192](https://github.com/rh-hideout/pokeemerald-expansion/pull/7192) +* Fix 01_battle_engine_bugs.yaml by @hedara90 in [#7242](https://github.com/rh-hideout/pokeemerald-expansion/pull/7242) + +## πŸ—ΊοΈ Overworld πŸ—ΊοΈ +### Fixed +* Bug fix: clear saved follower NPC door warp when doing dive warp by @Bivurnum in [#7065](https://github.com/rh-hideout/pokeemerald-expansion/pull/7065) +* Fix Contest Painting load palette error by @ExMingYan in [#7077](https://github.com/rh-hideout/pokeemerald-expansion/pull/7077) +* Bug fix: Follower NPC no longer retains bike sprite after white out by @Bivurnum in [#7120](https://github.com/rh-hideout/pokeemerald-expansion/pull/7120) +* Bug fix: clear follower npc surf blob on white out by @Bivurnum in [#7153](https://github.com/rh-hideout/pokeemerald-expansion/pull/7153) + +## πŸ‰ PokΓ©mon πŸ‰ +### Changed +* Fixes Rapid Spin description (#7178) by @grintoul1 in [#7181](https://github.com/rh-hideout/pokeemerald-expansion/pull/7181) + +### Fixed +* Fixed text width for a lot of forms in HGSS Dex by @AsparagusEduardo in [#7035](https://github.com/rh-hideout/pokeemerald-expansion/pull/7035) +* Fixes Roamers not saving shininess by @i0brendan0 in [#7185](https://github.com/rh-hideout/pokeemerald-expansion/pull/7185) +* [FIX] Prevent caught PokΓ©mon loss in NPC partner battles by @J2M2 in [#7177](https://github.com/rh-hideout/pokeemerald-expansion/pull/7177) + +## βš”οΈ Battle General βš”οΈ +### Changed +* Fixes large battle messages being cut off instead of being prompted to advance 2 by @PhallenTree in [#7036](https://github.com/rh-hideout/pokeemerald-expansion/pull/7036) +* Battle controller pret documentation by @AlexOn1ine in [#7029](https://github.com/rh-hideout/pokeemerald-expansion/pull/7029) +* Fix typos and some cleanup (mainly in battle files) by @PhallenTree in [#7107](https://github.com/rh-hideout/pokeemerald-expansion/pull/7107) + +### Fixed +* Fixes multi battle party re-order by @AlexOn1ine in [#7042](https://github.com/rh-hideout/pokeemerald-expansion/pull/7042) +* Fixes Aura Wheel + Normalize and Hunger Switch while Transformed/Terastallized by @PhallenTree in [#7061](https://github.com/rh-hideout/pokeemerald-expansion/pull/7061) +* Fixes speed calculation order by @AlexOn1ine in [#7064](https://github.com/rh-hideout/pokeemerald-expansion/pull/7064) +* Bug fix for Grassy Terrain incorrectly healing non-grounded Pokemon by @LinathanZel in [#7058](https://github.com/rh-hideout/pokeemerald-expansion/pull/7058) +* Fixes Wandering Spirit copied ability activation on fainted mon by @AlexOn1ine in [#7066](https://github.com/rh-hideout/pokeemerald-expansion/pull/7066) +* Chloroblast fix by @LinathanZel in [#7008](https://github.com/rh-hideout/pokeemerald-expansion/pull/7008) +* Fix Normalize not boosting Normal type moves if they were already Normal type by @i0brendan0 in [#7060](https://github.com/rh-hideout/pokeemerald-expansion/pull/7060) +* Fixes freeze during a 1v2 double battle by @AlexOn1ine in [#7075](https://github.com/rh-hideout/pokeemerald-expansion/pull/7075) +* Fixes Pursuit potentially causing both battlers to switch into the same mon by @PhallenTree in [#7084](https://github.com/rh-hideout/pokeemerald-expansion/pull/7084) +* Fixed potential mismatch between players and battlers in tests by @AsparagusEduardo in [#7101](https://github.com/rh-hideout/pokeemerald-expansion/pull/7101) +* Fixes Ally Switch in multi battles by @AlexOn1ine in [#7109](https://github.com/rh-hideout/pokeemerald-expansion/pull/7109) +* Add missing flag for Berserk Gene by @AlexOn1ine in [#7151](https://github.com/rh-hideout/pokeemerald-expansion/pull/7151) +* Fixes Neutralizing Gas leaving the field activating unsuppressable abilities again by @PhallenTree in [#7170](https://github.com/rh-hideout/pokeemerald-expansion/pull/7170) +* Fixes Enigma, Kee and Maranga Berry activation timing by @AlexOn1ine in [#7171](https://github.com/rh-hideout/pokeemerald-expansion/pull/7171) +* Fixes wrong Future Sight indexing by @AlexOn1ine in [#7198](https://github.com/rh-hideout/pokeemerald-expansion/pull/7198) +* Fixes OOB for Teatime and Flower Shield by @AlexOn1ine in [#7214](https://github.com/rh-hideout/pokeemerald-expansion/pull/7214) +* Fixes wrong assignment in TrySymbiosis by @AlexOn1ine in [#7221](https://github.com/rh-hideout/pokeemerald-expansion/pull/7221) +* Adds missing healBlockTimer for Baton Pass by @AlexOn1ine in [#7220](https://github.com/rh-hideout/pokeemerald-expansion/pull/7220) +* Jaboca berry triggers instead of being stolen by bug bite by @ghoulslash in [#7237](https://github.com/rh-hideout/pokeemerald-expansion/pull/7237) +* Fixes Scald defrosting target while asleep by @AlexOn1ine in [#7233](https://github.com/rh-hideout/pokeemerald-expansion/pull/7233) +* Fixes Emergency Exit sometimes causing an unrelated battler to become invisible by @PhallenTree in [#7241](https://github.com/rh-hideout/pokeemerald-expansion/pull/7241) + +## 🀹 Moves 🀹 +### Changed +* Fix ScaryFace anim for Bitter Malice by @TLM-PsIQ in [#6476](https://github.com/rh-hideout/pokeemerald-expansion/pull/6476) + +### Fixed +* Fix savage spin out spider web template by @ghoulslash in [#7137](https://github.com/rh-hideout/pokeemerald-expansion/pull/7137) + +## 🎭 Abilities 🎭 +### Changed +* Flush textbox for Truant Popup by @ghoulslash in [#7252](https://github.com/rh-hideout/pokeemerald-expansion/pull/7252) + +## 🧢 Items 🧢 +### Fixed +* Fix sell price display by @cawtds in [#7123](https://github.com/rh-hideout/pokeemerald-expansion/pull/7123) + +## πŸ€– Battle AI πŸ€– +### Fixed +* Added AI_FLAG_PP_STALL_PREVENTION to AI_FLAG_SMART_TRAINER by @AlexOn1ine in [#7112](https://github.com/rh-hideout/pokeemerald-expansion/pull/7112) +* Fix incorrect function parameters used in AI damage calc by @Pawkkie in [#7130](https://github.com/rh-hideout/pokeemerald-expansion/pull/7130) + +## 🧹 Other Cleanup 🧹 +* Fix typos and some cleanup (mainly in battle files) by @PhallenTree in [#7107](https://github.com/rh-hideout/pokeemerald-expansion/pull/7107) +* Fix typo in INSTALL.md by @hedara90 in [#7116](https://github.com/rh-hideout/pokeemerald-expansion/pull/7116) +* Fixed description of `FORM_CHANGE_WITHDRAW` by @AsparagusEduardo in [#7152](https://github.com/rh-hideout/pokeemerald-expansion/pull/7152) +* Spruce up `FEATURES.md` by @AsparagusEduardo in [#7159](https://github.com/rh-hideout/pokeemerald-expansion/pull/7159) +* Fixes Rapid Spin description (#7178) by @grintoul1 in [#7181](https://github.com/rh-hideout/pokeemerald-expansion/pull/7181) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Changed +* Wrote some missing tests by @AsparagusEduardo in [#7094](https://github.com/rh-hideout/pokeemerald-expansion/pull/7094) +* Fixed KNOWN_FAILING Tera test by @AsparagusEduardo in [#6949](https://github.com/rh-hideout/pokeemerald-expansion/pull/6949) +* Add some tests by @ghoulslash in [#7234](https://github.com/rh-hideout/pokeemerald-expansion/pull/7234) +* Added tests for Toxic Thread by @hedara90 in [#7244](https://github.com/rh-hideout/pokeemerald-expansion/pull/7244) + +### Fixed +* Test runner fixes by @hedara90 in [#7100](https://github.com/rh-hideout/pokeemerald-expansion/pull/7100) +* Fixed Aura Wheel `KNOWN_FAILING` test by @AsparagusEduardo in [#7135](https://github.com/rh-hideout/pokeemerald-expansion/pull/7135) +* Fix AI party count calc being maintained between tests by @AsparagusEduardo in [#7200](https://github.com/rh-hideout/pokeemerald-expansion/pull/7200) +* Fix tests failing with `B_FRIENDSHIP_BOOST` being `TRUE` by @AsparagusEduardo in [#7194](https://github.com/rh-hideout/pokeemerald-expansion/pull/7194) +* Jaboca berry triggers instead of being stolen by bug bite by @ghoulslash in [#7237](https://github.com/rh-hideout/pokeemerald-expansion/pull/7237) + +## πŸ“š Documentation πŸ“š +* Changed trainer tutorial to take into account removed palette compression by @hedara90 in [#7044](https://github.com/rh-hideout/pokeemerald-expansion/pull/7044) +* Battle controller pret documentation by @AlexOn1ine in [#7029](https://github.com/rh-hideout/pokeemerald-expansion/pull/7029) +* Added loop iterator style by @hedara90 in [#7092](https://github.com/rh-hideout/pokeemerald-expansion/pull/7092) +* Use RGB values for DEFAULT_LIGHT_COLOR by @hedara90 in [#7133](https://github.com/rh-hideout/pokeemerald-expansion/pull/7133) +* Applied Kasen's documentation improvements by @hedara90 in [#7104](https://github.com/rh-hideout/pokeemerald-expansion/pull/7104) +* Spruce up `FEATURES.md` by @AsparagusEduardo in [#7159](https://github.com/rh-hideout/pokeemerald-expansion/pull/7159) +* Update the description of OW_OBJECT_VANILLA_SHADOWS by @pkmnsnfrn in [#7184](https://github.com/rh-hideout/pokeemerald-expansion/pull/7184) + +## πŸ“¦ Branch Synchronisation πŸ“¦ +### pret +* 24th of June, 2025 in [#7206](https://github.com/rh-hideout/pokeemerald-expansion/pull/7206) + * Move gTradePlatform_Tilemap to header and change to u32 by @DizzyEggg in [pret#2088](https://github.com/pret/pokeemerald/pull/2088) + * Fix wrong keep temps files directory in makefile by @DizzyEggg in [pret#2156](https://github.com/pret/pokeemerald/pull/2156) + * Fix collision comparison in PlayerNotOnBikeMoving by @GriffinRichards in [pret#2104](https://github.com/pret/pokeemerald/pull/2104) + * Match graphics declarations with externs in graphics.h by @DizzyEggg in [pret#2089](https://github.com/pret/pokeemerald/pull/2089) + +## New Contributors +* @TLM-PsIQ made their first contribution in [#6476](https://github.com/rh-hideout/pokeemerald-expansion/pull/6476) +* @pablopenna made their first contribution in [#7193](https://github.com/rh-hideout/pokeemerald-expansion/pull/7193) +* @J2M2 made their first contribution in [#7177](https://github.com/rh-hideout/pokeemerald-expansion/pull/7177) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.12.0...expansion/1.12.1 + + + + diff --git a/docs/changelogs/1.12.x/1.12.2.md b/docs/changelogs/1.12.x/1.12.2.md new file mode 100644 index 000000000000..9f1b210638c9 --- /dev/null +++ b/docs/changelogs/1.12.x/1.12.2.md @@ -0,0 +1,164 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.12.1 +`. +``` + + +## 🧬 General 🧬 +### Changed +* Changed trainer tutorial to take into account removed palette compression by @hedara90 in [#7044](https://github.com/rh-hideout/pokeemerald-expansion/pull/7044) +* Update CI to ignore allcontributors commits by @pkmnsnfrn in [#7046](https://github.com/rh-hideout/pokeemerald-expansion/pull/7046) +* add bassforte123 as a contributor for code by @allcontributors[bot] in [#7003](https://github.com/rh-hideout/pokeemerald-expansion/pull/7003) +* add iriv24 as a contributor for code by @allcontributors[bot] in [#7059](https://github.com/rh-hideout/pokeemerald-expansion/pull/7059) +* add Bivurnum as a contributor for code by @allcontributors[bot] in [#7067](https://github.com/rh-hideout/pokeemerald-expansion/pull/7067) +* Fixed CI issue introduced 7046 by @pkmnsnfrn in [#7072](https://github.com/rh-hideout/pokeemerald-expansion/pull/7072) +* Added loop iterator style by @hedara90 in [#7092](https://github.com/rh-hideout/pokeemerald-expansion/pull/7092) +* add Emiliasky as a contributor for test by @allcontributors[bot] in [#7082](https://github.com/rh-hideout/pokeemerald-expansion/pull/7082) +* Update CREDITS.md with correct line placement by @pkmnsnfrn in [#7096](https://github.com/rh-hideout/pokeemerald-expansion/pull/7096) +* Fix typo in INSTALL.md by @hedara90 in [#7116](https://github.com/rh-hideout/pokeemerald-expansion/pull/7116) +* Use RGB values for DEFAULT_LIGHT_COLOR by @hedara90 in [#7133](https://github.com/rh-hideout/pokeemerald-expansion/pull/7133) +* Applied Kasen's documentation improvements by @hedara90 in [#7104](https://github.com/rh-hideout/pokeemerald-expansion/pull/7104) +* add fakuzatsu as a contributor for code by @allcontributors[bot] in [#7136](https://github.com/rh-hideout/pokeemerald-expansion/pull/7136) +* Fixed description of `FORM_CHANGE_WITHDRAW` by @AsparagusEduardo in [#7152](https://github.com/rh-hideout/pokeemerald-expansion/pull/7152) +* add poetahto as a contributor for code by @allcontributors[bot] in [#7162](https://github.com/rh-hideout/pokeemerald-expansion/pull/7162) +* Pret merge (19th of June, 2025) by @Bassoonian in [#7163](https://github.com/rh-hideout/pokeemerald-expansion/pull/7163) +* Update the description of OW_OBJECT_VANILLA_SHADOWS by @pkmnsnfrn in [#7184](https://github.com/rh-hideout/pokeemerald-expansion/pull/7184) +* fix: use BackPickId to calculate player intro ball throw animation palette by @pablopenna in [#7193](https://github.com/rh-hideout/pokeemerald-expansion/pull/7193) +* add pablopenna as a contributor for code by @allcontributors[bot] in [#7202](https://github.com/rh-hideout/pokeemerald-expansion/pull/7202) + +### Fixed +* Added line break between Trainer 1 name and Trainer 2 name in sText_TwoTrainersWantToBattle by @grintoul1 in [#7028](https://github.com/rh-hideout/pokeemerald-expansion/pull/7028) +* Fixed Battle Pyramid mon generation by @hedara90 in [#7146](https://github.com/rh-hideout/pokeemerald-expansion/pull/7146) +* force sGFRomHeader to always be present by @DizzyEggg in [#7186](https://github.com/rh-hideout/pokeemerald-expansion/pull/7186) +* force RHH Rom Header to always be present by @DizzyEggg in [#7187](https://github.com/rh-hideout/pokeemerald-expansion/pull/7187) +* Fixed debug flag menu sound by @AsparagusEduardo in [#7190](https://github.com/rh-hideout/pokeemerald-expansion/pull/7190) +* Fix BtlController_EmitChosenMonReturnValue UB by @DizzyEggg in [#7197](https://github.com/rh-hideout/pokeemerald-expansion/pull/7197) +* Backported Safari catch and add to party fix by @hedara90 in [#7192](https://github.com/rh-hideout/pokeemerald-expansion/pull/7192) +* Fix 01_battle_engine_bugs.yaml by @hedara90 in [#7242](https://github.com/rh-hideout/pokeemerald-expansion/pull/7242) + +## πŸ—ΊοΈ Overworld πŸ—ΊοΈ +### Fixed +* Bug fix: clear saved follower NPC door warp when doing dive warp by @Bivurnum in [#7065](https://github.com/rh-hideout/pokeemerald-expansion/pull/7065) +* Fix Contest Painting load palette error by @ExMingYan in [#7077](https://github.com/rh-hideout/pokeemerald-expansion/pull/7077) +* Bug fix: Follower NPC no longer retains bike sprite after white out by @Bivurnum in [#7120](https://github.com/rh-hideout/pokeemerald-expansion/pull/7120) +* Bug fix: clear follower npc surf blob on white out by @Bivurnum in [#7153](https://github.com/rh-hideout/pokeemerald-expansion/pull/7153) + +## πŸ‰ PokΓ©mon πŸ‰ +### Changed +* Fixes Rapid Spin description (#7178) by @grintoul1 in [#7181](https://github.com/rh-hideout/pokeemerald-expansion/pull/7181) + +### Fixed +* Fixed text width for a lot of forms in HGSS Dex by @AsparagusEduardo in [#7035](https://github.com/rh-hideout/pokeemerald-expansion/pull/7035) +* Fixes Roamers not saving shininess by @i0brendan0 in [#7185](https://github.com/rh-hideout/pokeemerald-expansion/pull/7185) +* [FIX] Prevent caught PokΓ©mon loss in NPC partner battles by @J2M2 in [#7177](https://github.com/rh-hideout/pokeemerald-expansion/pull/7177) + + + +## βš”οΈ Battle General βš”οΈ +### Changed +* Fixes large battle messages being cut off instead of being prompted to advance 2 by @PhallenTree in [#7036](https://github.com/rh-hideout/pokeemerald-expansion/pull/7036) +* Battle controller pret documentation by @AlexOn1ine in [#7029](https://github.com/rh-hideout/pokeemerald-expansion/pull/7029) +* Fix typos and some cleanup (mainly in battle files) by @PhallenTree in [#7107](https://github.com/rh-hideout/pokeemerald-expansion/pull/7107) + +### Fixed +* Fixes multi battle party re-order by @AlexOn1ine in [#7042](https://github.com/rh-hideout/pokeemerald-expansion/pull/7042) +* Fixes Aura Wheel + Normalize and Hunger Switch while Transformed/Terastallized by @PhallenTree in [#7061](https://github.com/rh-hideout/pokeemerald-expansion/pull/7061) +* Fixes speed calculation order by @AlexOn1ine in [#7064](https://github.com/rh-hideout/pokeemerald-expansion/pull/7064) +* Bug fix for Grassy Terrain incorrectly healing non-grounded Pokemon by @LinathanZel in [#7058](https://github.com/rh-hideout/pokeemerald-expansion/pull/7058) +* Fixes Wandering Spirit copied ability activation on fainted mon by @AlexOn1ine in [#7066](https://github.com/rh-hideout/pokeemerald-expansion/pull/7066) +* Chloroblast fix by @LinathanZel in [#7008](https://github.com/rh-hideout/pokeemerald-expansion/pull/7008) + + + * Chloroblast causing recoil damage even if the move fails to connect by @LinathanZel in #7007 + + +* [DRAFT] Fix Normalize not boosting Normal type moves if they were already Normal type by @i0brendan0 in [#7060](https://github.com/rh-hideout/pokeemerald-expansion/pull/7060) +* Fixes freeze during a 1v2 double battle by @AlexOn1ine in [#7075](https://github.com/rh-hideout/pokeemerald-expansion/pull/7075) +* Fixes Pursuit potentially causing both battlers to switch into the same mon by @PhallenTree in [#7084](https://github.com/rh-hideout/pokeemerald-expansion/pull/7084) +* Fixed potential mismatch between players and battlers in tests by @AsparagusEduardo in [#7101](https://github.com/rh-hideout/pokeemerald-expansion/pull/7101) +* Fixes Ally Switch in multi battles by @AlexOn1ine in [#7109](https://github.com/rh-hideout/pokeemerald-expansion/pull/7109) +* Add missing flag for Berserk Gene by @AlexOn1ine in [#7151](https://github.com/rh-hideout/pokeemerald-expansion/pull/7151) +* Fixes Neutralizing Gas leaving the field activating unsuppressable abilities again by @PhallenTree in [#7170](https://github.com/rh-hideout/pokeemerald-expansion/pull/7170) +* Fixes Enigma, Kee and Maranga Berry activation timing by @AlexOn1ine in [#7171](https://github.com/rh-hideout/pokeemerald-expansion/pull/7171) +* Fixes wrong Future Sight indexing by @AlexOn1ine in [#7198](https://github.com/rh-hideout/pokeemerald-expansion/pull/7198) +* Fixes OOB for Teatime and Flower Shield by @AlexOn1ine in [#7214](https://github.com/rh-hideout/pokeemerald-expansion/pull/7214) +* Fixes wrong assignment in TrySymbiosis by @AlexOn1ine in [#7221](https://github.com/rh-hideout/pokeemerald-expansion/pull/7221) +* Adds missing healBlockTimer for Baton Pass by @AlexOn1ine in [#7220](https://github.com/rh-hideout/pokeemerald-expansion/pull/7220) +* Jaboca berry triggers instead of being stolen by bug bite by @ghoulslash in [#7237](https://github.com/rh-hideout/pokeemerald-expansion/pull/7237) +* Fixes Scald defrosting target while asleep by @AlexOn1ine in [#7233](https://github.com/rh-hideout/pokeemerald-expansion/pull/7233) +* Fixes Emergency Exit sometimes causing an unrelated battler to become invisible by @PhallenTree in [#7241](https://github.com/rh-hideout/pokeemerald-expansion/pull/7241) + +## 🀹 Moves 🀹 +### Changed +* Fix ScaryFace anim for Bitter Malice by @TLM-PsIQ in [#6476](https://github.com/rh-hideout/pokeemerald-expansion/pull/6476) + + + +### Fixed +* Fix savage spin out spider web template by @ghoulslash in [#7137](https://github.com/rh-hideout/pokeemerald-expansion/pull/7137) + +## 🎭 Abilities 🎭 +### Changed +* Flush textbox for Truant Popup by @ghoulslash in [#7252](https://github.com/rh-hideout/pokeemerald-expansion/pull/7252) + +## 🧢 Items 🧢 +### Fixed +* Fix sell price display by @cawtds in [#7123](https://github.com/rh-hideout/pokeemerald-expansion/pull/7123) + +## πŸ€– Battle AI πŸ€– +### Fixed +* Added AI_FLAG_PP_STALL_PREVENTION to AI_FLAG_SMART_TRAINER by @AlexOn1ine in [#7112](https://github.com/rh-hideout/pokeemerald-expansion/pull/7112) +* Fix incorrect function parameters used in AI damage calc by @Pawkkie in [#7130](https://github.com/rh-hideout/pokeemerald-expansion/pull/7130) + +## 🧹 Other Cleanup 🧹 +* Update CI to ignore allcontributors commits by @pkmnsnfrn in [#7046](https://github.com/rh-hideout/pokeemerald-expansion/pull/7046) +* Update CREDITS.md with correct line placement by @pkmnsnfrn in [#7096](https://github.com/rh-hideout/pokeemerald-expansion/pull/7096) +* Fix typos and some cleanup (mainly in battle files) by @PhallenTree in [#7107](https://github.com/rh-hideout/pokeemerald-expansion/pull/7107) +* Fix typo in INSTALL.md by @hedara90 in [#7116](https://github.com/rh-hideout/pokeemerald-expansion/pull/7116) +* Fixed description of `FORM_CHANGE_WITHDRAW` by @AsparagusEduardo in [#7152](https://github.com/rh-hideout/pokeemerald-expansion/pull/7152) +* Spruce up `FEATURES.md` by @AsparagusEduardo in [#7159](https://github.com/rh-hideout/pokeemerald-expansion/pull/7159) +* Fixes Rapid Spin description (#7178) by @grintoul1 in [#7181](https://github.com/rh-hideout/pokeemerald-expansion/pull/7181) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Changed +* Wrote some missing tests by @AsparagusEduardo in [#7094](https://github.com/rh-hideout/pokeemerald-expansion/pull/7094) +* Fixed KNOWN_FAILING Tera test by @AsparagusEduardo in [#6949](https://github.com/rh-hideout/pokeemerald-expansion/pull/6949) +* Add some tests by @ghoulslash in [#7234](https://github.com/rh-hideout/pokeemerald-expansion/pull/7234) +* Added tests for Toxic Thread by @hedara90 in [#7244](https://github.com/rh-hideout/pokeemerald-expansion/pull/7244) + +### Fixed +* Test runner fixes by @hedara90 in [#7100](https://github.com/rh-hideout/pokeemerald-expansion/pull/7100) +* Fixed Aura Wheel `KNOWN_FAILING` test by @AsparagusEduardo in [#7135](https://github.com/rh-hideout/pokeemerald-expansion/pull/7135) +* Fix AI party count calc being maintained between tests by @AsparagusEduardo in [#7200](https://github.com/rh-hideout/pokeemerald-expansion/pull/7200) +* Fix tests failing with `B_FRIENDSHIP_BOOST` being `TRUE` by @AsparagusEduardo in [#7194](https://github.com/rh-hideout/pokeemerald-expansion/pull/7194) +* Jaboca berry triggers instead of being stolen by bug bite by @ghoulslash in [#7237](https://github.com/rh-hideout/pokeemerald-expansion/pull/7237) + +## πŸ“š Documentation πŸ“š +* Changed trainer tutorial to take into account removed palette compression by @hedara90 in [#7044](https://github.com/rh-hideout/pokeemerald-expansion/pull/7044) +* Battle controller pret documentation by @AlexOn1ine in [#7029](https://github.com/rh-hideout/pokeemerald-expansion/pull/7029) +* Added loop iterator style by @hedara90 in [#7092](https://github.com/rh-hideout/pokeemerald-expansion/pull/7092) +* Use RGB values for DEFAULT_LIGHT_COLOR by @hedara90 in [#7133](https://github.com/rh-hideout/pokeemerald-expansion/pull/7133) +* Applied Kasen's documentation improvements by @hedara90 in [#7104](https://github.com/rh-hideout/pokeemerald-expansion/pull/7104) +* Spruce up `FEATURES.md` by @AsparagusEduardo in [#7159](https://github.com/rh-hideout/pokeemerald-expansion/pull/7159) +* Update the description of OW_OBJECT_VANILLA_SHADOWS by @pkmnsnfrn in [#7184](https://github.com/rh-hideout/pokeemerald-expansion/pull/7184) + +## πŸ“¦ Branch Synchronisation πŸ“¦ +### pret +* 24th of June, 2025 in [#7206](https://github.com/rh-hideout/pokeemerald-expansion/pull/7206) + * Move gTradePlatform_Tilemap to header and change to u32 by @DizzyEggg in [pret#2088](https://github.com/pret/pokeemerald/pull/2088) + * Fix wrong keep temps files directory in makefile by @DizzyEggg in [pret#2156](https://github.com/pret/pokeemerald/pull/2156) + * Fix collision comparison in PlayerNotOnBikeMoving by @GriffinRichards in [pret#2104](https://github.com/pret/pokeemerald/pull/2104) + * Match graphics declarations with externs in graphics.h by @DizzyEggg in [pret#2089](https://github.com/pret/pokeemerald/pull/2089) + +## New Contributors +* @TLM-PsIQ made their first contribution in [#6476](https://github.com/rh-hideout/pokeemerald-expansion/pull/6476) +* @pablopenna made their first contribution in [#7193](https://github.com/rh-hideout/pokeemerald-expansion/pull/7193) +* @J2M2 made their first contribution in [#7177](https://github.com/rh-hideout/pokeemerald-expansion/pull/7177) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.12.0...expansion/1.12.1 + + + + diff --git a/docs/changelogs/1.12.x/1.12.3.md b/docs/changelogs/1.12.x/1.12.3.md new file mode 100644 index 000000000000..a4deece8353f --- /dev/null +++ b/docs/changelogs/1.12.x/1.12.3.md @@ -0,0 +1,118 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.12.3 +`. +``` + + +## 🧬 General 🧬 +### Changed +* Restore git history check by @ravepossum in [#7463](https://github.com/rh-hideout/pokeemerald-expansion/pull/7463) +* Moved summary screen nature colors to summary_screen.h by @RubyRaven6 in [#7560](https://github.com/rh-hideout/pokeemerald-expansion/pull/7560) +* Added comment in event.inc for simple menus in dynmultichoice by @RubyRaven6 in [#7568](https://github.com/rh-hideout/pokeemerald-expansion/pull/7568) +* Changed default print level for DebugPrintf for mGBA to MGBA_LOG_WARN by @hedara90 in [#7567](https://github.com/rh-hideout/pokeemerald-expansion/pull/7567) +* Fixed Teleport's description not being updated based on `B_TELEPORT_BEHAVIOR` by @AsparagusEduardo in [#7580](https://github.com/rh-hideout/pokeemerald-expansion/pull/7580) +* Minor Clean up in battle_ai_main.c by @AlexOn1ine in [#7551](https://github.com/rh-hideout/pokeemerald-expansion/pull/7551) + +## πŸ—ΊοΈ Overworld πŸ—ΊοΈ +### Changed +* fix: remove unused wild_encounters.json.txt jinja file by @khbsd in [#7581](https://github.com/rh-hideout/pokeemerald-expansion/pull/7581) + +### Fixed +* Bug fix: add handling for forced movements into/after ledge jumps with follower NPCs by @Bivurnum in [#7055](https://github.com/rh-hideout/pokeemerald-expansion/pull/7055) +* Fixed compile issue `OW_TIMES_OF_DAY` is `GEN_3` by @AsparagusEduardo in [#7499](https://github.com/rh-hideout/pokeemerald-expansion/pull/7499) +* Remove shadow and hide follower on stair warp by @cornixsenex in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) +* Fix Form Change Item Task Data and Clean Up Field Use Funcs by @ravepossum in [#7535](https://github.com/rh-hideout/pokeemerald-expansion/pull/7535) +* Fix Vs Seeker Trainer Battle script issue by @pkmnsnfrn in [#7615](https://github.com/rh-hideout/pokeemerald-expansion/pull/7615) + +## βš”οΈ Battle General βš”οΈ +### Changed +* Remove unused function by @AlexOn1ine in [#7617](https://github.com/rh-hideout/pokeemerald-expansion/pull/7617) + +### Fixed +* Fixes Magnet Rise when user is Rooted/Smacked Down by @PhallenTree in [#7449](https://github.com/rh-hideout/pokeemerald-expansion/pull/7449) +* Fixes Leech Seed recovery not applying behind Sub by @AlexOn1ine in [#7468](https://github.com/rh-hideout/pokeemerald-expansion/pull/7468) +* Fixes Round and Fusion moves doubling power from previous turn's move by @PhallenTree in [#7476](https://github.com/rh-hideout/pokeemerald-expansion/pull/7476) +* Fixes shadows and mon animations for transformed battlers by @AsparagusEduardo in [#7500](https://github.com/rh-hideout/pokeemerald-expansion/pull/7500) +* Fixes Life Orb still activating if move was absorbed by @AlexOn1ine in [#7521](https://github.com/rh-hideout/pokeemerald-expansion/pull/7521) +* Fix Mimicry Only Activating Once per Turn by @ghoulslash in [#7537](https://github.com/rh-hideout/pokeemerald-expansion/pull/7537) +* Fixes Knock Off still activating when there is no Item by @AlexOn1ine in [#7496](https://github.com/rh-hideout/pokeemerald-expansion/pull/7496) +* Fixed `B_PSYWAVE_DMG` by @AsparagusEduardo in [#7557](https://github.com/rh-hideout/pokeemerald-expansion/pull/7557) +* Fixes Counter / Mirror Coat / Metal Burst damage assignment by @AlexOn1ine in [#7538](https://github.com/rh-hideout/pokeemerald-expansion/pull/7538) +* Fix in-game partner battles always causing a whiteout by @ravepossum in [#7587](https://github.com/rh-hideout/pokeemerald-expansion/pull/7587) +* Fix B_ANIMATE_MON_AFTER_KO with a new counter by @hedara90 in [#7531](https://github.com/rh-hideout/pokeemerald-expansion/pull/7531) +* Fixes Rage Fist counter increment by @AlexOn1ine in [#7582](https://github.com/rh-hideout/pokeemerald-expansion/pull/7582) +* Fixes moveend_absorb hitmarker by @AlexOn1ine in [#7591](https://github.com/rh-hideout/pokeemerald-expansion/pull/7591) +* switchinabilities also runs ON_WEATHER and ON_TERRAIN by @ghoulslash in [#7612](https://github.com/rh-hideout/pokeemerald-expansion/pull/7612) +* Fixes Explosion behavior when 3 mons can endure hit by @AlexOn1ine in [#7594](https://github.com/rh-hideout/pokeemerald-expansion/pull/7594) +* Fixes octolock not ending after user switched out by @AlexOn1ine in [#7556](https://github.com/rh-hideout/pokeemerald-expansion/pull/7556) +* The original attacker wasn't restored for Doodle by @AlexOn1ine in [#7620](https://github.com/rh-hideout/pokeemerald-expansion/pull/7620) +* Restore X item friendship increase by @ravepossum in [#7583](https://github.com/rh-hideout/pokeemerald-expansion/pull/7583) +* Fixes Wonder Room interactions with Defense/Special Defense boosting effects by @PhallenTree in [#7626](https://github.com/rh-hideout/pokeemerald-expansion/pull/7626) +* Ally Switch attract battler swapping, test for leech seed by @ghoulslash in [#7634](https://github.com/rh-hideout/pokeemerald-expansion/pull/7634) + +## 🀹 Moves 🀹 +### Fixed +* Clear gScanlineEffect to fix timeout in acid downpour animation by @FosterProgramming in [#7442](https://github.com/rh-hideout/pokeemerald-expansion/pull/7442) +* Fix terastallization anims flickering by @ravepossum in [#7613](https://github.com/rh-hideout/pokeemerald-expansion/pull/7613) + +## 🧢 Items 🧢 +### Changed +* Fix using town map as registered item by @ravepossum in [#7482](https://github.com/rh-hideout/pokeemerald-expansion/pull/7482) + +### Fixed +* Implement using party menu items from field by @ravepossum in [#7481](https://github.com/rh-hideout/pokeemerald-expansion/pull/7481) + +## πŸ€– Battle AI πŸ€– +### Changed +* Macro-for-AI-Flag-definitions by @grintoul1 in [#7471](https://github.com/rh-hideout/pokeemerald-expansion/pull/7471) + +### Fixed +* Incorrect call in Rest by @surskitty in [#7569](https://github.com/rh-hideout/pokeemerald-expansion/pull/7569) +* Fix duplicate switch in after faint by @AlexOn1ine in [#7600](https://github.com/rh-hideout/pokeemerald-expansion/pull/7600) + +## 🧹 Other Cleanup 🧹 +* Macro-for-AI-Flag-definitions by @grintoul1 in [#7471](https://github.com/rh-hideout/pokeemerald-expansion/pull/7471) +* Moved summary screen nature colors to summary_screen.h by @RubyRaven6 in [#7560](https://github.com/rh-hideout/pokeemerald-expansion/pull/7560) +* fix: remove unused wild_encounters.json.txt jinja file by @khbsd in [#7581](https://github.com/rh-hideout/pokeemerald-expansion/pull/7581) +* Fix Form Change Item Task Data and Clean Up Field Use Funcs by @ravepossum in [#7535](https://github.com/rh-hideout/pokeemerald-expansion/pull/7535) +* Fixed Teleport's description not being updated based on `B_TELEPORT_BEHAVIOR` by @AsparagusEduardo in [#7580](https://github.com/rh-hideout/pokeemerald-expansion/pull/7580) +* Fixed typo in test name by @hedara90 in [#7610](https://github.com/rh-hideout/pokeemerald-expansion/pull/7610) +* Minor Clean up in battle_ai_main.c by @AlexOn1ine in [#7551](https://github.com/rh-hideout/pokeemerald-expansion/pull/7551) +* Remove unused function by @AlexOn1ine in [#7617](https://github.com/rh-hideout/pokeemerald-expansion/pull/7617) +* Fix Vs Seeker Trainer Battle script issue by @pkmnsnfrn in [#7615](https://github.com/rh-hideout/pokeemerald-expansion/pull/7615) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Changed +* Clean up some Normalize tests to make them make sense by @hedara90 in [#7461](https://github.com/rh-hideout/pokeemerald-expansion/pull/7461) +* Add Synthesis + Utililty Umbrella test by @ghoulslash in [#7472](https://github.com/rh-hideout/pokeemerald-expansion/pull/7472) +* Add test for BoxPokemon integrity by @hedara90 in [#7487](https://github.com/rh-hideout/pokeemerald-expansion/pull/7487) +* Re-order moves in fling test by @hedara90 in [#7559](https://github.com/rh-hideout/pokeemerald-expansion/pull/7559) +* Wrote some tests by @AsparagusEduardo in [#7563](https://github.com/rh-hideout/pokeemerald-expansion/pull/7563) +* Added Ability TODO tests - Volume C by @AsparagusEduardo in [#7562](https://github.com/rh-hideout/pokeemerald-expansion/pull/7562) +* Added missing Move Effect TODO tests - Volume F by @AsparagusEduardo in [#7605](https://github.com/rh-hideout/pokeemerald-expansion/pull/7605) +* Fixed typo in test name by @hedara90 in [#7610](https://github.com/rh-hideout/pokeemerald-expansion/pull/7610) + +### Fixed +* Clear out parties between battle tests by @hedara90 in [#7460](https://github.com/rh-hideout/pokeemerald-expansion/pull/7460) +* Fixed most failed tests with `GEN_LATEST GEN_8` by @AsparagusEduardo in [#7498](https://github.com/rh-hideout/pokeemerald-expansion/pull/7498) +* Corrected Liquid Ooze test by @AsparagusEduardo in [#7527](https://github.com/rh-hideout/pokeemerald-expansion/pull/7527) +* switchinabilities also runs ON_WEATHER and ON_TERRAIN by @ghoulslash in [#7612](https://github.com/rh-hideout/pokeemerald-expansion/pull/7612) +* Ally Switch attract battler swapping, test for leech seed by @ghoulslash in [#7634](https://github.com/rh-hideout/pokeemerald-expansion/pull/7634) + +## πŸ“š Documentation πŸ“š +* Update how_to_new_pokemon.md by @kevinwklawrence in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* Updating a link to porytiles in INSTALL.md by @ThePeeps191 in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* Added comment in event.inc for simple menus in dynmultichoice by @RubyRaven6 in [#7568](https://github.com/rh-hideout/pokeemerald-expansion/pull/7568) + +## New Contributors +* @kevinwklawrence made their first contribution in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* @ThePeeps191 made their first contribution in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* @cornixsenex made their first contribution in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.12.2...expansion/1.12.3 + + + + diff --git a/docs/changelogs/1.13.x/1.13.0.md b/docs/changelogs/1.13.x/1.13.0.md new file mode 100644 index 000000000000..52babd0b43a5 --- /dev/null +++ b/docs/changelogs/1.13.x/1.13.0.md @@ -0,0 +1,483 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.13.0 +`. +``` + +## πŸŒ‹ *REFACTORS* πŸŒ‹ +πŸ“œ = Uses a migration script. +* Refactor field moves by @cawtds in [#6660](https://github.com/rh-hideout/pokeemerald-expansion/pull/6660) +* Refactors Final Gambit + Tests by @AlexOn1ine in [#7005](https://github.com/rh-hideout/pokeemerald-expansion/pull/7005) +* Combines Super Fang and Guardian of Alola effects by @AlexOn1ine in [#7048](https://github.com/rh-hideout/pokeemerald-expansion/pull/7048) +* Refactor damage calculations aruguments by using a struct context by @AlexOn1ine in [#7108](https://github.com/rh-hideout/pokeemerald-expansion/pull/7108) +* Add damage context to effectiveness multiplier by @AlexOn1ine in [#7111](https://github.com/rh-hideout/pokeemerald-expansion/pull/7111) +* Decouple Status set by ability from SetMoveEffect by @AlexOn1ine in [#7125](https://github.com/rh-hideout/pokeemerald-expansion/pull/7125) +* Converted Relic Song into a proper form change by @AsparagusEduardo in [#7139](https://github.com/rh-hideout/pokeemerald-expansion/pull/7139) + - Added `FORM_CHANGE_BATTLE_AFTER_MOVE` to parametrize Relic Song's form change +* Removed Mind Blown effect in favor of move flag by @AsparagusEduardo in [#7138](https://github.com/rh-hideout/pokeemerald-expansion/pull/7138) +* Volatile status refactoring by @cfmnephrite in [#6983](https://github.com/rh-hideout/pokeemerald-expansion/pull/6983) +* Bag refactor (groundwork for expansion) by @cfmnephrite in [#7018](https://github.com/rh-hideout/pokeemerald-expansion/pull/7018) + - If you're using @ghoulslash's bag sort branch, this PR will break it +* Stat Change (Animation) Refactor by @PhallenTree in [#7144](https://github.com/rh-hideout/pokeemerald-expansion/pull/7144) + `setgraphicalstatchangevalues` and `playstatchangeanimation` have been removed and now Stat Change Animations are handled in `statbuffchange`. + - To update your custom battle scripts: + `setgraphicalstatchangevalues` is often accompanied by `playanimation X, B_ANIM_STATS_CHANGE`. When I refer to deleting `setgraphicalstatchangevalues` below, that command should also be deleted. + 1. If `statbuffchange` is before `setgraphicalstatchangevalues`/`playstatchangeanimation` and there is something in between them (for example, `attackanimation` and `waitanimation`), add the flag `STAT_CHANGE_ONLY_CHECKING` and replace the command (`setgraphicalstatchangevalues`/`playstatchangeanimation`) with a copy of the original `statbuffchange`. + 2. If `statbuffchange` is after `setgraphicalstatchangevalues`/`playstatchangeanimation` or there is nothing in between, you should delete those commands (`setgraphicalstatchangevalues`/`playstatchangeanimation`) and no further changes other than those in _3._ should be required. + 3. If `playstatchangeanimation` had bits assigned to them (`BIT_ATK | BIT_SPATK`, for example), add ", " followed by those bits to the first `statbuffchange`; for the following `statbuffchange`s, remove stats that have already been increased/decreased. +* Untangle `InitBtlControllers` functions by @AsparagusEduardo in [#6748](https://github.com/rh-hideout/pokeemerald-expansion/pull/6748) +* Use battler arguments for SetMoveEffect by @AlexOn1ine in [#7156](https://github.com/rh-hideout/pokeemerald-expansion/pull/7156) +* Easier expandability of debug menu by @AsparagusEduardo in [#6910](https://github.com/rh-hideout/pokeemerald-expansion/pull/6910) +* Use dedicated functions for Mud/Water Sport by @AlexOn1ine in [#7248](https://github.com/rh-hideout/pokeemerald-expansion/pull/7248) +* Expanding and Refactoring Skill Swap and other ability-changing moves by @surskitty in [#7238](https://github.com/rh-hideout/pokeemerald-expansion/pull/7238) +* Refactor move Synchronise by @AlexOn1ine in [#7271](https://github.com/rh-hideout/pokeemerald-expansion/pull/7271) +* Adds hazard queue by @AlexOn1ine in [#7295](https://github.com/rh-hideout/pokeemerald-expansion/pull/7295) +* Changes AccuracyCalcHelper into CanMoveSkipAccuracyCalc by @AlexOn1ine in [#7303](https://github.com/rh-hideout/pokeemerald-expansion/pull/7303) +* battle_interface: overhaul ability pop up by @mudskipper13 in [#7227](https://github.com/rh-hideout/pokeemerald-expansion/pull/7227) + - The layout of the ability pop up's image (`graphics/battle_interface/ability_pop_up.png`) has been changed. +* Bag refactor 2 by @cfmnephrite in [#7166](https://github.com/rh-hideout/pokeemerald-expansion/pull/7166) +* Replaces STATUS2 usage with volatiles in code by @cfmnephrite in [#7262](https://github.com/rh-hideout/pokeemerald-expansion/pull/7262) + - Replaced all references to STATUS2 in the code with volatiles (but left the old bitfield behind for compatibility with downstream users). The list of volatiles is in `include/constants/battle.h` and includes information such as an enum, a field name, type and max size, and whether or not the move is Baton Passable. Users can use VOLATILE_X with any function that previously took STATUS2_X in scripts, and can check/set volatiles in C with `gBattleMons[battler].volatiles.{field name}` syntax instead of checking a flag in a bitfield. +* Refactor battle environment by @fdeblasio in [#4891](https://github.com/rh-hideout/pokeemerald-expansion/pull/4891) +* Convert various to callnatives by @AlexOn1ine in [#7355](https://github.com/rh-hideout/pokeemerald-expansion/pull/7355) +* AI refactor for weather-setting, terrain-setting, Trick Room behaviors; doubles-focused by @surskitty in [#7319](https://github.com/rh-hideout/pokeemerald-expansion/pull/7319) + - AI is more likely to use Trick Room in double battles and Terrains in general. +* Convert Status4 to volatiles by @AlexOn1ine in [#7411](https://github.com/rh-hideout/pokeemerald-expansion/pull/7411) +* Split Sheer Force tests by gen instead of by four by @AlexOn1ine in [#7260](https://github.com/rh-hideout/pokeemerald-expansion/pull/7260) +* Modify move prediction to work in doubles by @AlexOn1ine in [#7087](https://github.com/rh-hideout/pokeemerald-expansion/pull/7087) +* Convert statuses3 to volatiles by @AlexOn1ine in [#7514](https://github.com/rh-hideout/pokeemerald-expansion/pull/7514) +* Added trainerBackPic to Trainer struct to de-couple trainer pic and trainer back pic defines by @grintoul1 in [#7425](https://github.com/rh-hideout/pokeemerald-expansion/pull/7425) + +## 🧬 General 🧬 +### Added +* New sprite compressor by @hedara90, @DizzyEggg Improved performance massively for the instruction decoding., @mrgriffin, SBird and @tertu-m who has done even more optimization and answered questions about the GBA hardware whenever I had them. and @rayrobdod for the better migration script. in [#5627](https://github.com/rh-hideout/pokeemerald-expansion/pull/5627) + - `LZDecompressVram` and `LZDecompressWram` has been deprecated. All calls do decompress LZ compressed data should be using the wrapper functions `DecompressDataWithHeaderVram` or `DecompressDataWithHeaderWram`. + - A new sprite compression format has been introduced. To use it, replace files with `.4bpp.lz` with `.4bpp.smol` or `.4bpp.fastSmol`. + - `.smol` is a compression format utilizing entropy encoding in the form of tabled Asymmetric Numeral Systems (tANS) and a modified LZ style RLE/Dictionary encoding scheme specialized for the sprites used in Pokemon games. This is approximately 25% smaller than the default LZ77 compression. + - `.fastSmol` skips the entropy encoding and is therefore slightly larger than the default LZ77 compression, but decoding sprites is faster than the default LZ77 compression. + - `.smolTM` is a compression scheme for tilemaps. + - Might have unexpected behavior if user introduced decompression during hardware interrupts. + - Has a migration script that handles all files under `src/`, `migration_scripts/1.12/convert_compressed_files.py`. +* Adds FRLG asserts to Alloc/Free by @cawtds in [#7025](https://github.com/rh-hideout/pokeemerald-expansion/pull/7025) +* Debug parties and battles by @SBird1337 in [#6884](https://github.com/rh-hideout/pokeemerald-expansion/pull/6884) + - Adds options to set debug parties and battles using the debug menu +* Added naive line break by @hedara90 in [#7076](https://github.com/rh-hideout/pokeemerald-expansion/pull/7076) +* Disable unowned evo methods by @Bolt-Strike in [#7103](https://github.com/rh-hideout/pokeemerald-expansion/pull/7103) +* lto support by @DizzyEggg in [#7182](https://github.com/rh-hideout/pokeemerald-expansion/pull/7182) +* Improve trainer back pic-related data and code (+ smol documentation) by @mudskipper13 in [#6821](https://github.com/rh-hideout/pokeemerald-expansion/pull/6821) +* Add Set Hidden Nature option to the debug menu by @AlexOn1ine in [#7281](https://github.com/rh-hideout/pokeemerald-expansion/pull/7281) +* Instant Win option in Battle Debug by @AlexOn1ine in [#7333](https://github.com/rh-hideout/pokeemerald-expansion/pull/7333) +* `trainerproc` copy other trainer party by @hedara90 in [#7251](https://github.com/rh-hideout/pokeemerald-expansion/pull/7251) + - Adds the `Copy Pool` command to `trainerproc` which copies the party/pool from another trainer. +* Show chosen move in the battle debug menu by @AlexOn1ine in [#7382](https://github.com/rh-hideout/pokeemerald-expansion/pull/7382) +* Rock climb by ghoulslash by @pokesidv in [#7432](https://github.com/rh-hideout/pokeemerald-expansion/pull/7432) + - Added rock climb field effect + +### Changed +* Restore git history check by @ravepossum in [#7463](https://github.com/rh-hideout/pokeemerald-expansion/pull/7463) +* Moved summary screen nature colors to summary_screen.h by @RubyRaven6 in [#7560](https://github.com/rh-hideout/pokeemerald-expansion/pull/7560) +* Added comment in event.inc for simple menus in dynmultichoice by @RubyRaven6 in [#7568](https://github.com/rh-hideout/pokeemerald-expansion/pull/7568) +* Changed default print level for DebugPrintf for mGBA to MGBA_LOG_WARN by @hedara90 in [#7567](https://github.com/rh-hideout/pokeemerald-expansion/pull/7567) +* Fixed Teleport's description not being updated based on `B_TELEPORT_BEHAVIOR` by @AsparagusEduardo in [#7580](https://github.com/rh-hideout/pokeemerald-expansion/pull/7580) +* Minor Clean up in battle_ai_main.c by @AlexOn1ine in [#7551](https://github.com/rh-hideout/pokeemerald-expansion/pull/7551) +* Refactor field moves by @cawtds in [#6660](https://github.com/rh-hideout/pokeemerald-expansion/pull/6660) +* Replace all usages of lz compression with smol by @hedara90 in [#7032](https://github.com/rh-hideout/pokeemerald-expansion/pull/7032) +* `BtlController_EmitTwoReturnValues` cleanup by @AsparagusEduardo in [#6855](https://github.com/rh-hideout/pokeemerald-expansion/pull/6855) +* Put the gen 1 compression tests behind a config by @hedara90 in [#7033](https://github.com/rh-hideout/pokeemerald-expansion/pull/7033) +* Converts a bunch of defines to enums by @Bassoonian in [#7041](https://github.com/rh-hideout/pokeemerald-expansion/pull/7041) +* chore: remove unused section from credits by @Emiliasky in [#7085](https://github.com/rh-hideout/pokeemerald-expansion/pull/7085) +* Simplify white out messages by @kittenchilly in [#6961](https://github.com/rh-hideout/pokeemerald-expansion/pull/6961) +* Improve music/se macros and fix names by @cawtds in [#7030](https://github.com/rh-hideout/pokeemerald-expansion/pull/7030) +* Bag refactor (groundwork for expansion) by @cfmnephrite in [#7018](https://github.com/rh-hideout/pokeemerald-expansion/pull/7018) + - If you're using @ghoulslash's bag sort branch, this PR will break it +* Converts more defines to enums and name unnamed enums by @Bassoonian in [#7071](https://github.com/rh-hideout/pokeemerald-expansion/pull/7071) +* Add config options for removing bard phoneme audio to save ROM space by @poetahto in [#7155](https://github.com/rh-hideout/pokeemerald-expansion/pull/7155) +* Fix debug text order by @hedara90 in [#7149](https://github.com/rh-hideout/pokeemerald-expansion/pull/7149) +* More battle controller function consolidation. by @AsparagusEduardo in [#6877](https://github.com/rh-hideout/pokeemerald-expansion/pull/6877) +* Easier expandability of debug menu by @AsparagusEduardo in [#6910](https://github.com/rh-hideout/pokeemerald-expansion/pull/6910) +* Update .gitignore to add heal locations by @Bassoonian in [#7050](https://github.com/rh-hideout/pokeemerald-expansion/pull/7050) +* Add 'Give Decoration' function to overworld debug menu by @rayrobdod in [#7219](https://github.com/rh-hideout/pokeemerald-expansion/pull/7219) +* Changes pre-proc to a normal if for Item Desc Header by @AlexOn1ine in [#7231](https://github.com/rh-hideout/pokeemerald-expansion/pull/7231) +* Use compound strings in battle debug menu by @AsparagusEduardo in [#7282](https://github.com/rh-hideout/pokeemerald-expansion/pull/7282) +* Remove competitive syntax config by @hedara90 in [#7154](https://github.com/rh-hideout/pokeemerald-expansion/pull/7154) + - This change can be reverted by doing `git revert 14dbbf63d454073dbb198b941cc3566168c89f11`. +* Turn `OW_FRLG_WHITEOUT` into `OW_WHITEOUT_CUTSCENE` and make it generational by @kittenchilly in [#6962](https://github.com/rh-hideout/pokeemerald-expansion/pull/6962) +* Add `Macro` key to trainerproc by @hedara90 in [#7157](https://github.com/rh-hideout/pokeemerald-expansion/pull/7157) +* preproc: Support __attribute__ in enums by @mrgriffin in [#7344](https://github.com/rh-hideout/pokeemerald-expansion/pull/7344) +* Enum conversion for `enum MoveEffects` and `enum BattleMoveEffects` by @hedara90 in [#7366](https://github.com/rh-hideout/pokeemerald-expansion/pull/7366) + - This enables `-Wenum-conversion`, additional compilation errors can occur +* Get/SetMonData optimisation by @cfmnephrite in [#7313](https://github.com/rh-hideout/pokeemerald-expansion/pull/7313) +* Bag refactor3 + Ghoulslash's sorting feature port by @cfmnephrite in [#7330](https://github.com/rh-hideout/pokeemerald-expansion/pull/7330) +* Replace all usages of rl compression with smol by @rayrobdod in [#7458](https://github.com/rh-hideout/pokeemerald-expansion/pull/7458) +* Bag sorting cleanup by @mrgriffin in [#7489](https://github.com/rh-hideout/pokeemerald-expansion/pull/7489) +* Adds ghouls Rock Climb git history by @AlexOn1ine in [#7493](https://github.com/rh-hideout/pokeemerald-expansion/pull/7493) +* Changed item name/pluralName to a compound string by @cfmnephrite in [#7359](https://github.com/rh-hideout/pokeemerald-expansion/pull/7359) +* Added trainerBackPic to Trainer struct to de-couple trainer pic and trainer back pic defines by @grintoul1 in [#7425](https://github.com/rh-hideout/pokeemerald-expansion/pull/7425) +* Suppress trainerproc compile warning for unused func by @AlexOn1ine in [#7592](https://github.com/rh-hideout/pokeemerald-expansion/pull/7592) + +### Fixed +* Fix .smol compression in debug builds by @hedara90 in [#7090](https://github.com/rh-hideout/pokeemerald-expansion/pull/7090) +* Improve smol compressor by @hedara90 in [#7073](https://github.com/rh-hideout/pokeemerald-expansion/pull/7073) +* Increased heap by 768 bytes by @hedara90 in [#7097](https://github.com/rh-hideout/pokeemerald-expansion/pull/7097) +* Fix healthbox when blending effects happen by @AsparagusEduardo in [#7203](https://github.com/rh-hideout/pokeemerald-expansion/pull/7203) +* Fixed Fake RTC debug menu by @AsparagusEduardo in [#7218](https://github.com/rh-hideout/pokeemerald-expansion/pull/7218) +* Added missing braces by @cfmnephrite in [#7288](https://github.com/rh-hideout/pokeemerald-expansion/pull/7288) +* Fixed Flag Vars menu keeping artifacts from bag menu + cleanup by @AsparagusEduardo in [#7226](https://github.com/rh-hideout/pokeemerald-expansion/pull/7226) +* Fix HGSS dex running out of heap by @hedara90 in [#7317](https://github.com/rh-hideout/pokeemerald-expansion/pull/7317) +* battle intro: fix issues with follower slide-in and wild shiny mon by @mudskipper13 in [#7325](https://github.com/rh-hideout/pokeemerald-expansion/pull/7325) +* Fix sorting bag by type by @mrgriffin in [#7488](https://github.com/rh-hideout/pokeemerald-expansion/pull/7488) +* Hacky support for enums in C asm statements by @mrgriffin in [#7494](https://github.com/rh-hideout/pokeemerald-expansion/pull/7494) +* Fixed compile issue in gcc 11 by @AsparagusEduardo in [#7579](https://github.com/rh-hideout/pokeemerald-expansion/pull/7579) +* Fix overlap between spin evolution and script evolution by @FosterProgramming in [#7593](https://github.com/rh-hideout/pokeemerald-expansion/pull/7593) + +## πŸ—ΊοΈ Overworld πŸ—ΊοΈ +### Added +* Added createfollowernpc macro to make a new follower from a gfx id by @Bivurnum in [#7196](https://github.com/rh-hideout/pokeemerald-expansion/pull/7196) + - Follower NPCs can now be created without using an existing NPC, using the `createfollowernpc` macro. +* feat: separate water and rock smash encounter rate checks by @khbsd in [#7293](https://github.com/rh-hideout/pokeemerald-expansion/pull/7293) + +### Changed +* fix: remove unused wild_encounters.json.txt jinja file by @khbsd in [#7581](https://github.com/rh-hideout/pokeemerald-expansion/pull/7581) +* added Ash Greninja overworld sprites by @wiz1989 in [#6976](https://github.com/rh-hideout/pokeemerald-expansion/pull/6976) +* Update FRLG whiteouts to new pret system by @Bassoonian in [#7040](https://github.com/rh-hideout/pokeemerald-expansion/pull/7040) + - Make sure to migrate your changes to the now deleted `heal_locations_pkm_center.h` to the json file. +* Use CanAbilityAbsorbMove in GetOverworldTypeEffectiveness by @AlexOn1ine in [#7115](https://github.com/rh-hideout/pokeemerald-expansion/pull/7115) +* Add config options for removing bard phoneme audio to save ROM space by @poetahto in [#7155](https://github.com/rh-hideout/pokeemerald-expansion/pull/7155) +* Add debug options for follower NPCs by @Bivurnum in [#7215](https://github.com/rh-hideout/pokeemerald-expansion/pull/7215) +* Better system for Follower NPC running frames by @Bivurnum in [#7222](https://github.com/rh-hideout/pokeemerald-expansion/pull/7222) +* Update follower NPC tutorial doc for createfollowernpc macro by @Bivurnum in [#7230](https://github.com/rh-hideout/pokeemerald-expansion/pull/7230) + +### Fixed +* Bug fix: add handling for forced movements into/after ledge jumps with follower NPCs by @Bivurnum in [#7055](https://github.com/rh-hideout/pokeemerald-expansion/pull/7055) +* Fixed compile issue `OW_TIMES_OF_DAY` is `GEN_3` by @AsparagusEduardo in [#7499](https://github.com/rh-hideout/pokeemerald-expansion/pull/7499) +* Remove shadow and hide follower on stair warp by @cornixsenex in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) +* Fix Form Change Item Task Data and Clean Up Field Use Funcs by @ravepossum in [#7535](https://github.com/rh-hideout/pokeemerald-expansion/pull/7535) +* Fix Vs Seeker Trainer Battle script issue by @pkmnsnfrn in [#7615](https://github.com/rh-hideout/pokeemerald-expansion/pull/7615) +* Fix follower compression by @hedara90 in [#7038](https://github.com/rh-hideout/pokeemerald-expansion/pull/7038) +* Changing P_ONLY_OBTAINABLE_SHINIES to truly be Only Obtainable Shinies by @surskitty in [#7275](https://github.com/rh-hideout/pokeemerald-expansion/pull/7275) + +## πŸ‰ PokΓ©mon πŸ‰ +### Added +* Add P_ASK_MOVE_CONFIRMATION by @pkmnsnfrn in [#7132](https://github.com/rh-hideout/pokeemerald-expansion/pull/7132) + - This will change the behavior of the game for players, as a new default is being set. +* Added `CRY_MODE_DYNAMAX` by @AsparagusEduardo in [#6933](https://github.com/rh-hideout/pokeemerald-expansion/pull/6933) +* Wild PokΓ©mon animate after breaking out of PokΓ© Ball by @LinathanZel in [#7339](https://github.com/rh-hideout/pokeemerald-expansion/pull/7339) + +### Changed +* Add dedicated getter functions for PokΓ©mon types and abilities by @Bassoonian in [#7043](https://github.com/rh-hideout/pokeemerald-expansion/pull/7043) +* added Ash Greninja overworld sprites by @wiz1989 in [#6976](https://github.com/rh-hideout/pokeemerald-expansion/pull/6976) +* Get/SetMonData optimisation by @cfmnephrite in [#7313](https://github.com/rh-hideout/pokeemerald-expansion/pull/7313) + +### Fixed +* fixes #7129: 'add to full party' feature in the safari zone by @fakuzatsu in [#7147](https://github.com/rh-hideout/pokeemerald-expansion/pull/7147) +* Fix substruct offsets from #7313 by @mrgriffin in [#7431](https://github.com/rh-hideout/pokeemerald-expansion/pull/7431) +* Fixes refusing to replace a move on evolution causing a softlock by @PhallenTree in [#7585](https://github.com/rh-hideout/pokeemerald-expansion/pull/7585) + +## βš”οΈ Battle General βš”οΈ +### Added +* Add Gen 2 Moonlight, Morning Sun, Synthesis configuration by @i0brendan0 in [#7209](https://github.com/rh-hideout/pokeemerald-expansion/pull/7209) +* Add a heal animation to Hospitality recovery by @AlexOn1ine in [#7426](https://github.com/rh-hideout/pokeemerald-expansion/pull/7426) +* Updated Dream Eater/Liquid Ooze's interaction to Gen 5 standards by @AsparagusEduardo in [#7528](https://github.com/rh-hideout/pokeemerald-expansion/pull/7528) + +### Changed +* Remove unused function by @AlexOn1ine in [#7617](https://github.com/rh-hideout/pokeemerald-expansion/pull/7617) +* Clean up battlescript calls with func BattleScriptCall by @AlexOn1ine in [#6873](https://github.com/rh-hideout/pokeemerald-expansion/pull/6873) +* Refactors Final Gambit + Tests by @AlexOn1ine in [#7005](https://github.com/rh-hideout/pokeemerald-expansion/pull/7005) +* `GetBattlerMon` cleanup by @AsparagusEduardo in [#6967](https://github.com/rh-hideout/pokeemerald-expansion/pull/6967) +* Change GetZMaxMoveAgainstProtectionModifier to prevent regressions by @AlexOn1ine in [#7047](https://github.com/rh-hideout/pokeemerald-expansion/pull/7047) +* Combines Super Fang and Guardian of Alola effects by @AlexOn1ine in [#7048](https://github.com/rh-hideout/pokeemerald-expansion/pull/7048) +* Remove more instances of hard-coded Move IDs by @AsparagusEduardo in [#7056](https://github.com/rh-hideout/pokeemerald-expansion/pull/7056) + - Added `EFFECT_SHEER_COLD` to parametrize Sheer Cold's interactions with Ice types +* Deprecate sStatusFlagsForMoveEffects by @AlexOn1ine in [#7063](https://github.com/rh-hideout/pokeemerald-expansion/pull/7063) +* Removes duplicate AI ability func by @AlexOn1ine in [#7045](https://github.com/rh-hideout/pokeemerald-expansion/pull/7045) +* Deprecate absent member from battlerState by @AlexOn1ine in [#7091](https://github.com/rh-hideout/pokeemerald-expansion/pull/7091) +* Refactor damage calculations aruguments by using a struct context by @AlexOn1ine in [#7108](https://github.com/rh-hideout/pokeemerald-expansion/pull/7108) +* Add damage context to effectiveness multiplier by @AlexOn1ine in [#7111](https://github.com/rh-hideout/pokeemerald-expansion/pull/7111) +* Decouple Status set by ability from SetMoveEffect by @AlexOn1ine in [#7125](https://github.com/rh-hideout/pokeemerald-expansion/pull/7125) +* Removed redundant Damp check by @AsparagusEduardo in [#7134](https://github.com/rh-hideout/pokeemerald-expansion/pull/7134) +* Converted Relic Song into a proper form change by @AsparagusEduardo in [#7139](https://github.com/rh-hideout/pokeemerald-expansion/pull/7139) + - Added `FORM_CHANGE_BATTLE_AFTER_MOVE` to parametrize Relic Song's form change +* Removed Mind Blown effect in favor of move flag by @AsparagusEduardo in [#7138](https://github.com/rh-hideout/pokeemerald-expansion/pull/7138) +* Volatile status refactoring by @cfmnephrite in [#6983](https://github.com/rh-hideout/pokeemerald-expansion/pull/6983) +* Repurposes IsMagicGuardProtected into a general function by @AlexOn1ine in [#7114](https://github.com/rh-hideout/pokeemerald-expansion/pull/7114) +* Stat Change (Animation) Refactor by @PhallenTree in [#7144](https://github.com/rh-hideout/pokeemerald-expansion/pull/7144) + -`setgraphicalstatchangevalues` and `playstatchangeanimation` have been removed and now Stat Change Animations are handled in `statbuffchange`. + - To update your custom battle scripts: + `setgraphicalstatchangevalues` is often accompanied by `playanimation X, B_ANIM_STATS_CHANGE`. When I refer to deleting `setgraphicalstatchangevalues` below, that command should also be deleted. + 1. If `statbuffchange` is before `setgraphicalstatchangevalues`/`playstatchangeanimation` and there is something in between them (for example, `attackanimation` and `waitanimation`), add the flag `STAT_CHANGE_ONLY_CHECKING` and replace the command (`setgraphicalstatchangevalues`/`playstatchangeanimation`) with a copy of the original `statbuffchange`. + 2. If `statbuffchange` is after `setgraphicalstatchangevalues`/`playstatchangeanimation` or there is nothing in between, you should delete those commands (`setgraphicalstatchangevalues`/`playstatchangeanimation`) and no further changes other than those in _3._ should be required. + 3. If `playstatchangeanimation` had bits assigned to them (`BIT_ATK | BIT_SPATK`, for example), add ", " followed by those bits to the first `statbuffchange`; for the following `statbuffchange`s, remove stats that have already been increased/decreased. +* Use `argument.type` for `EFFECT_SOAK` by @AsparagusEduardo in [#7141](https://github.com/rh-hideout/pokeemerald-expansion/pull/7141) +* Untangle `InitBtlControllers` functions by @AsparagusEduardo in [#6748](https://github.com/rh-hideout/pokeemerald-expansion/pull/6748) +* Increase party action limit by @cawtds in [#7119](https://github.com/rh-hideout/pokeemerald-expansion/pull/7119) +* Adds Gen5+ Encore config by @AlexOn1ine in [#7051](https://github.com/rh-hideout/pokeemerald-expansion/pull/7051) +* Attackcanceller clean up by @AlexOn1ine in [#7210](https://github.com/rh-hideout/pokeemerald-expansion/pull/7210) +* Remove redundant move result flag checks by @AlexOn1ine in [#7223](https://github.com/rh-hideout/pokeemerald-expansion/pull/7223) +* Use dedicated functions for Mud/Water Sport by @AlexOn1ine in [#7248](https://github.com/rh-hideout/pokeemerald-expansion/pull/7248) +* Script clean up for Flame Burst and Costar by @AlexOn1ine in [#7264](https://github.com/rh-hideout/pokeemerald-expansion/pull/7264) +* Renaming STATUS1_REFRESH and adding more constants for common STATUS1 checks. by @surskitty in [#7284](https://github.com/rh-hideout/pokeemerald-expansion/pull/7284) +* Refactor move Synchronise by @AlexOn1ine in [#7271](https://github.com/rh-hideout/pokeemerald-expansion/pull/7271) +* Adds hazard queue by @AlexOn1ine in [#7295](https://github.com/rh-hideout/pokeemerald-expansion/pull/7295) +* Removed all instances of .chance = 100, SHEER_FORCE_NO_BOOST by @cfmnephrite in [#7300](https://github.com/rh-hideout/pokeemerald-expansion/pull/7300) +* Changes AccuracyCalcHelper into CanMoveSkipAccuracyCalc by @AlexOn1ine in [#7303](https://github.com/rh-hideout/pokeemerald-expansion/pull/7303) +* Replaces STATUS2 usage with volatiles in code by @cfmnephrite in [#7262](https://github.com/rh-hideout/pokeemerald-expansion/pull/7262) + - Replaced all references to STATUS2 in the code with volatiles (but left the old bitfield behind for compatibility with downstream users). The list of volatiles is in `include/constants/battle.h` and includes information such as an enum, a field name, type and max size, and whether or not the move is Baton Passable. Users can use VOLATILE_X with any function that previously took STATUS2_X in scripts, and can check/set volatiles in C with `gBattleMons[battler].volatiles.{field name}` syntax instead of checking a flag in a bitfield. +* Refactor battle environment by @fdeblasio in [#4891](https://github.com/rh-hideout/pokeemerald-expansion/pull/4891) +* Convert various to callnatives by @AlexOn1ine in [#7355](https://github.com/rh-hideout/pokeemerald-expansion/pull/7355) +* Remove leftover code by @AlexOn1ine in [#7397](https://github.com/rh-hideout/pokeemerald-expansion/pull/7397) +* Moved some fields to BattlerState/PartyState by @AsparagusEduardo in [#7409](https://github.com/rh-hideout/pokeemerald-expansion/pull/7409) +* Additional effects tweak by @cfmnephrite in [#7392](https://github.com/rh-hideout/pokeemerald-expansion/pull/7392) +* Clean up noResultString by @AlexOn1ine in [#7408](https://github.com/rh-hideout/pokeemerald-expansion/pull/7408) +* Convert Status4 to volatiles by @AlexOn1ine in [#7411](https://github.com/rh-hideout/pokeemerald-expansion/pull/7411) +* Convert statuses3 to volatiles by @AlexOn1ine in [#7514](https://github.com/rh-hideout/pokeemerald-expansion/pull/7514) +* Prevents a regression for custom abilties by @AlexOn1ine in [#7616](https://github.com/rh-hideout/pokeemerald-expansion/pull/7616) + +### Fixed +* Fixes Magnet Rise when user is Rooted/Smacked Down by @PhallenTree in [#7449](https://github.com/rh-hideout/pokeemerald-expansion/pull/7449) +* Fixes Leech Seed recovery not applying behind Sub by @AlexOn1ine in [#7468](https://github.com/rh-hideout/pokeemerald-expansion/pull/7468) +* Fixes Round and Fusion moves doubling power from previous turn's move by @PhallenTree in [#7476](https://github.com/rh-hideout/pokeemerald-expansion/pull/7476) +* Fixes shadows and mon animations for transformed battlers by @AsparagusEduardo in [#7500](https://github.com/rh-hideout/pokeemerald-expansion/pull/7500) +* Fixes Life Orb still activating if move was absorbed by @AlexOn1ine in [#7521](https://github.com/rh-hideout/pokeemerald-expansion/pull/7521) +* Fix Mimicry Only Activating Once per Turn by @ghoulslash in [#7537](https://github.com/rh-hideout/pokeemerald-expansion/pull/7537) +* Fixes Knock Off still activating when there is no Item by @AlexOn1ine in [#7496](https://github.com/rh-hideout/pokeemerald-expansion/pull/7496) +* Fixed `B_PSYWAVE_DMG` by @AsparagusEduardo in [#7557](https://github.com/rh-hideout/pokeemerald-expansion/pull/7557) +* Fixes Counter / Mirror Coat / Metal Burst damage assignment by @AlexOn1ine in [#7538](https://github.com/rh-hideout/pokeemerald-expansion/pull/7538) +* Fix in-game partner battles always causing a whiteout by @ravepossum in [#7587](https://github.com/rh-hideout/pokeemerald-expansion/pull/7587) +* Fix B_ANIMATE_MON_AFTER_KO with a new counter by @hedara90 in [#7531](https://github.com/rh-hideout/pokeemerald-expansion/pull/7531) +* Fixes Rage Fist counter increment by @AlexOn1ine in [#7582](https://github.com/rh-hideout/pokeemerald-expansion/pull/7582) +* Fixes moveend_absorb hitmarker by @AlexOn1ine in [#7591](https://github.com/rh-hideout/pokeemerald-expansion/pull/7591) +* switchinabilities also runs ON_WEATHER and ON_TERRAIN by @ghoulslash in [#7612](https://github.com/rh-hideout/pokeemerald-expansion/pull/7612) +* Fixes Explosion behavior when 3 mons can endure hit by @AlexOn1ine in [#7594](https://github.com/rh-hideout/pokeemerald-expansion/pull/7594) +* Fixes octolock not ending after user switched out by @AlexOn1ine in [#7556](https://github.com/rh-hideout/pokeemerald-expansion/pull/7556) +* The original attacker wasn't restored for Doodle by @AlexOn1ine in [#7620](https://github.com/rh-hideout/pokeemerald-expansion/pull/7620) +* Restore X item friendship increase by @ravepossum in [#7583](https://github.com/rh-hideout/pokeemerald-expansion/pull/7583) +* Fixes Wonder Room interactions with Defense/Special Defense boosting effects by @PhallenTree in [#7626](https://github.com/rh-hideout/pokeemerald-expansion/pull/7626) +* Ally Switch attract battler swapping, test for leech seed by @ghoulslash in [#7634](https://github.com/rh-hideout/pokeemerald-expansion/pull/7634) +* Fixes Defiant/Competitive not resetting stat change animations and stat change related cleanup by @PhallenTree in [#7004](https://github.com/rh-hideout/pokeemerald-expansion/pull/7004) +* Use battler arguments for SetMoveEffect by @AlexOn1ine in [#7156](https://github.com/rh-hideout/pokeemerald-expansion/pull/7156) +* Fixes Booster Energy timing activation + Clean up by @AlexOn1ine in [#7175](https://github.com/rh-hideout/pokeemerald-expansion/pull/7175) +* Fixes Eject Pack not resolving correctly during switch in effects by @AlexOn1ine in [#7002](https://github.com/rh-hideout/pokeemerald-expansion/pull/7002) +* Adds Ability Shield activation message by @PhallenTree in [#7224](https://github.com/rh-hideout/pokeemerald-expansion/pull/7224) +* Fix incorrect type input by @hedara90 in [#7228](https://github.com/rh-hideout/pokeemerald-expansion/pull/7228) +* Set correct Instruction by @AlexOn1ine in [#7236](https://github.com/rh-hideout/pokeemerald-expansion/pull/7236) +* Fixes Life Dew playing anim when it is not supposed to + tests by @AlexOn1ine in [#7239](https://github.com/rh-hideout/pokeemerald-expansion/pull/7239) +* Fixes instances of battler mutation for abilities by @AlexOn1ine in [#7250](https://github.com/rh-hideout/pokeemerald-expansion/pull/7250) +* Fix Psych Up message and cleanup and don't allow switching to self in tests by @PhallenTree in [#7277](https://github.com/rh-hideout/pokeemerald-expansion/pull/7277) +* Fix incorrect status in beneficial ability Guts check by @grintoul1 in [#7285](https://github.com/rh-hideout/pokeemerald-expansion/pull/7285) +* battle_interface: overhaul ability pop up by @mudskipper13 in [#7227](https://github.com/rh-hideout/pokeemerald-expansion/pull/7227) + - The layout of the ability pop up's image (`graphics/battle_interface/ability_pop_up.png`) has been changed. +* Fixes Status overwrites and Effect Spore wrong func args by @AlexOn1ine in [#7340](https://github.com/rh-hideout/pokeemerald-expansion/pull/7340) +* Fixes various Choice lock issues by @AlexOn1ine in [#7383](https://github.com/rh-hideout/pokeemerald-expansion/pull/7383) +* Fixes draining moves recovering 1 HP when dealing 0 damage by @LinathanZel in [#7523](https://github.com/rh-hideout/pokeemerald-expansion/pull/7523) + +## 🀹 Moves 🀹 +### Changed +* New Attack Animations: 25w20a by @ShinyVolcarona in [#6886](https://github.com/rh-hideout/pokeemerald-expansion/pull/6886) + - Added move animations for multiple moves by @LinathanZel + - Dynamax Cannon, Behemoth Blade, Behemoth Bash, Eternabeam, Glaive Rush, Triple Dive, Doodle, Ruination, Collision Course, Electro Drift, Blazing Torque, Wicked Torque, Noxious Torque, Combat Torque, Magical Torque, Psyblade, Mighty Cleave, Supercell Slam +* Documented usage of `delay X` by @AsparagusEduardo in [#6951](https://github.com/rh-hideout/pokeemerald-expansion/pull/6951) +* Animation documentation by @AsparagusEduardo in [#7052](https://github.com/rh-hideout/pokeemerald-expansion/pull/7052) +* New and polished battle animations by @LinathanZel in [#7074](https://github.com/rh-hideout/pokeemerald-expansion/pull/7074) + +### Fixed +* Clear gScanlineEffect to fix timeout in acid downpour animation by @FosterProgramming in [#7442](https://github.com/rh-hideout/pokeemerald-expansion/pull/7442) +* Fix terastallization anims flickering by @ravepossum in [#7613](https://github.com/rh-hideout/pokeemerald-expansion/pull/7613) + +## 🧢 Items 🧢 +### Changed +* Fix using town map as registered item by @ravepossum in [#7482](https://github.com/rh-hideout/pokeemerald-expansion/pull/7482) +* Compound strings for hold effect names by @AsparagusEduardo in [#7140](https://github.com/rh-hideout/pokeemerald-expansion/pull/7140) +* Untangled TMs and HMs from item ids by @cfmnephrite in [#7173](https://github.com/rh-hideout/pokeemerald-expansion/pull/7173) +* Bag refactor 2 by @cfmnephrite in [#7166](https://github.com/rh-hideout/pokeemerald-expansion/pull/7166) + +### Fixed +* Implement using party menu items from field by @ravepossum in [#7481](https://github.com/rh-hideout/pokeemerald-expansion/pull/7481) +* Fixed TM and Berries disappearing when sorting by @AsparagusEduardo in [#7168](https://github.com/rh-hideout/pokeemerald-expansion/pull/7168) +* Fixed item swapping bug (#7428) by @cfmnephrite in [#7430](https://github.com/rh-hideout/pokeemerald-expansion/pull/7430) +* Fixes some Ability Shield interactions by @PhallenTree in [#7532](https://github.com/rh-hideout/pokeemerald-expansion/pull/7532) +* Fix tossing a stack of berries hiding following berries by @hedara90 in [#7571](https://github.com/rh-hideout/pokeemerald-expansion/pull/7571) + +## πŸ€– Battle AI πŸ€– +### Added +* AI: Add AI_SMART_TERA flag to make smarter decisions about when to terastalize. by @jfb1337 in [#6705](https://github.com/rh-hideout/pokeemerald-expansion/pull/6705) + - Only single battles are currently supported. +* Haze Boosting AI Followup by @Pawkkie in [#6966](https://github.com/rh-hideout/pokeemerald-expansion/pull/6966) +* Improved logic for Guard Split and Power Split. by @surskitty in [#7298](https://github.com/rh-hideout/pokeemerald-expansion/pull/7298) +* Add AI_FLAG_ASSUME_STAB by @Pawkkie in [#6797](https://github.com/rh-hideout/pokeemerald-expansion/pull/6797) +* AI checks the partner's moves for Flatter, Swagger, and Soak. by @surskitty in [#7306](https://github.com/rh-hideout/pokeemerald-expansion/pull/7306) +* AI uses After You to help set up Trick Room. by @surskitty in [#7310](https://github.com/rh-hideout/pokeemerald-expansion/pull/7310) +* AI assumes Magnitude / Present damage by @Pawkkie in [#7334](https://github.com/rh-hideout/pokeemerald-expansion/pull/7334) +* AI_FLAG_ASSUME_STATUS_MOVES -- AI flag to randomly know some of the player's status moves by @surskitty in [#7324](https://github.com/rh-hideout/pokeemerald-expansion/pull/7324) +* Improve AI's setup logic by @Pawkkie in [#7345](https://github.com/rh-hideout/pokeemerald-expansion/pull/7345) +* Improve AI's ShouldRecover by @Pawkkie in [#7342](https://github.com/rh-hideout/pokeemerald-expansion/pull/7342) +* Switch AI can see weather abilities of switchin candidates during damage calcs by @Pawkkie in [#7373](https://github.com/rh-hideout/pokeemerald-expansion/pull/7373) +* AI refactor for weather-setting, terrain-setting, Trick Room behaviors; doubles-focused by @surskitty in [#7319](https://github.com/rh-hideout/pokeemerald-expansion/pull/7319) + - AI is more likely to use Trick Room in double battles and Terrains in general. +* Improve AI type matchup calcs by @Pawkkie in [#7364](https://github.com/rh-hideout/pokeemerald-expansion/pull/7364) +* Multibattle Partner AI Flags and 2vs1 battler3 AI Flags fix by @grintoul1 in [#7378](https://github.com/rh-hideout/pokeemerald-expansion/pull/7378) +* Improve AI's Sucker Punch handling by @Pawkkie in [#7389](https://github.com/rh-hideout/pokeemerald-expansion/pull/7389) +* Improve AI's priority handling by @Pawkkie in [#7337](https://github.com/rh-hideout/pokeemerald-expansion/pull/7337) +* Fix dynamic move types in switching by @Pawkkie in [#7415](https://github.com/rh-hideout/pokeemerald-expansion/pull/7415) +* Adds AI_FLAG_ASSUMPTIONS as a constant for semi-omniscience by @surskitty in [#7435](https://github.com/rh-hideout/pokeemerald-expansion/pull/7435) +* AI_FLAG_ATTACKS_PARTNER with a config for bloodthirstiness by @surskitty in [#7401](https://github.com/rh-hideout/pokeemerald-expansion/pull/7401) +* Improved Guaranteed Flinch logic (fake out et al) by @surskitty in [#7501](https://github.com/rh-hideout/pokeemerald-expansion/pull/7501) +* AI uses Court Change. by @surskitty in [#7525](https://github.com/rh-hideout/pokeemerald-expansion/pull/7525) +* AI uses Tailwind. by @surskitty in [#7515](https://github.com/rh-hideout/pokeemerald-expansion/pull/7515) +* AI should not use Dark Void or Hyperspace Fury while wrong species by @surskitty in [#7540](https://github.com/rh-hideout/pokeemerald-expansion/pull/7540) +* AI uses Rototiller. by @surskitty in [#7542](https://github.com/rh-hideout/pokeemerald-expansion/pull/7542) +* Helping Hand logic by @surskitty in [#7504](https://github.com/rh-hideout/pokeemerald-expansion/pull/7504) + +### Changed +* Macro-for-AI-Flag-definitions by @grintoul1 in [#7471](https://github.com/rh-hideout/pokeemerald-expansion/pull/7471) +* Remove redundancy for ShouldLowerStat functions by @AlexOn1ine in [#6577](https://github.com/rh-hideout/pokeemerald-expansion/pull/6577) +* Expanding and Refactoring Skill Swap and other ability-changing moves by @surskitty in [#7238](https://github.com/rh-hideout/pokeemerald-expansion/pull/7238) +* Changes AccuracyCalcHelper into CanMoveSkipAccuracyCalc by @AlexOn1ine in [#7303](https://github.com/rh-hideout/pokeemerald-expansion/pull/7303) +* AI Tests + accompanying bugfixes for Skill Swap, Worry Seed, weather setting in double battles, and Discharging into an ally's lightningrod by @surskitty in [#7297](https://github.com/rh-hideout/pokeemerald-expansion/pull/7297) +* Fix AI resisted move scoring by @Pawkkie in [#7350](https://github.com/rh-hideout/pokeemerald-expansion/pull/7350) +* Fiddling with CanLowerStat. by @surskitty in [#7510](https://github.com/rh-hideout/pokeemerald-expansion/pull/7510) +* Improved hazards logic and Mycelium Might ignores ability checks by @surskitty in [#7509](https://github.com/rh-hideout/pokeemerald-expansion/pull/7509) +* AI handling for similar utility moves by @surskitty in [#7513](https://github.com/rh-hideout/pokeemerald-expansion/pull/7513) +* Modify move prediction to work in doubles by @AlexOn1ine in [#7087](https://github.com/rh-hideout/pokeemerald-expansion/pull/7087) +* Uncommenting out No Retreat, Clangorous Soul, and Extreme Evoboost from CheckBadMove by @surskitty in [#7541](https://github.com/rh-hideout/pokeemerald-expansion/pull/7541) +* AI Tailwind singles fix correction. by @surskitty in [#7543](https://github.com/rh-hideout/pokeemerald-expansion/pull/7543) +* Remove funcResult from AiThinkingStruct by @Pawkkie in [#7545](https://github.com/rh-hideout/pokeemerald-expansion/pull/7545) +* AI handling for Autotomize. by @surskitty in [#7550](https://github.com/rh-hideout/pokeemerald-expansion/pull/7550) +* AI uses Stuff Cheeks; treating it simply as a def +2 move for now. by @surskitty in [#7554](https://github.com/rh-hideout/pokeemerald-expansion/pull/7554) +* Slight Purify adjustment for targeting ally; test that AI can use Purify. by @surskitty in [#7553](https://github.com/rh-hideout/pokeemerald-expansion/pull/7553) +* AI handling for Howl. by @surskitty in [#7549](https://github.com/rh-hideout/pokeemerald-expansion/pull/7549) +* Test that AI uses Dragon Cheer. by @surskitty in [#7552](https://github.com/rh-hideout/pokeemerald-expansion/pull/7552) +* Tests to see that the AI uses moves. by @surskitty in [#7555](https://github.com/rh-hideout/pokeemerald-expansion/pull/7555) + +### Fixed +* Incorrect call in Rest by @surskitty in [#7569](https://github.com/rh-hideout/pokeemerald-expansion/pull/7569) +* Fix duplicate switch in after faint by @AlexOn1ine in [#7600](https://github.com/rh-hideout/pokeemerald-expansion/pull/7600) +* Feature/ai/wide guard quick guard singles by @Emiliasky in [#7086](https://github.com/rh-hideout/pokeemerald-expansion/pull/7086) +* Add missing break by @Pawkkie in [#7356](https://github.com/rh-hideout/pokeemerald-expansion/pull/7356) +* fixed-damage-move-ai-calc-fix by @grintoul1 in [#7385](https://github.com/rh-hideout/pokeemerald-expansion/pull/7385) +* Avoid doubling up on status moves in double battles. by @surskitty in [#7452](https://github.com/rh-hideout/pokeemerald-expansion/pull/7452) +* Fix doubles switch AI to use new type matchup system by @Pawkkie in [#7495](https://github.com/rh-hideout/pokeemerald-expansion/pull/7495) +* Fix Bad Odds not seeing damage properly by @Pawkkie in [#7492](https://github.com/rh-hideout/pokeemerald-expansion/pull/7492) +* Fix GetSwitchinHitsToKO one shot heal calcs by @Pawkkie in [#7502](https://github.com/rh-hideout/pokeemerald-expansion/pull/7502) +* Fix AI's KO evaluation getting messed up by priority by @Pawkkie in [#7533](https://github.com/rh-hideout/pokeemerald-expansion/pull/7533) +* Fixing Refresh AI scoring by @surskitty in [#7539](https://github.com/rh-hideout/pokeemerald-expansion/pull/7539) +* Fix switch AI not seeing its own move PP by @Pawkkie in [#7578](https://github.com/rh-hideout/pokeemerald-expansion/pull/7578) +* Fix wrong battler argument in `GetBattleMovePriority` call by @Pawkkie in [#7576](https://github.com/rh-hideout/pokeemerald-expansion/pull/7576) +* Restore AI: Basic Trainer to PARTNER_STEVEN by @grintoul1 in [#7586](https://github.com/rh-hideout/pokeemerald-expansion/pull/7586) + +## 🧹 Other Cleanup 🧹 +* Macro-for-AI-Flag-definitions by @grintoul1 in [#7471](https://github.com/rh-hideout/pokeemerald-expansion/pull/7471) +* Moved summary screen nature colors to summary_screen.h by @RubyRaven6 in [#7560](https://github.com/rh-hideout/pokeemerald-expansion/pull/7560) +* fix: remove unused wild_encounters.json.txt jinja file by @khbsd in [#7581](https://github.com/rh-hideout/pokeemerald-expansion/pull/7581) +* Fix Form Change Item Task Data and Clean Up Field Use Funcs by @ravepossum in [#7535](https://github.com/rh-hideout/pokeemerald-expansion/pull/7535) +* Fixed Teleport's description not being updated based on `B_TELEPORT_BEHAVIOR` by @AsparagusEduardo in [#7580](https://github.com/rh-hideout/pokeemerald-expansion/pull/7580) +* Fixed typo in test name by @hedara90 in [#7610](https://github.com/rh-hideout/pokeemerald-expansion/pull/7610) +* Minor Clean up in battle_ai_main.c by @AlexOn1ine in [#7551](https://github.com/rh-hideout/pokeemerald-expansion/pull/7551) +* Remove unused function by @AlexOn1ine in [#7617](https://github.com/rh-hideout/pokeemerald-expansion/pull/7617) +* Fix Vs Seeker Trainer Battle script issue by @pkmnsnfrn in [#7615](https://github.com/rh-hideout/pokeemerald-expansion/pull/7615) +* Clean up battlescript calls with func BattleScriptCall by @AlexOn1ine in [#6873](https://github.com/rh-hideout/pokeemerald-expansion/pull/6873) +* Replace all usages of lz compression with smol by @hedara90 in [#7032](https://github.com/rh-hideout/pokeemerald-expansion/pull/7032) +* `BtlController_EmitTwoReturnValues` cleanup by @AsparagusEduardo in [#6855](https://github.com/rh-hideout/pokeemerald-expansion/pull/6855) +* `GetBattlerMon` cleanup by @AsparagusEduardo in [#6967](https://github.com/rh-hideout/pokeemerald-expansion/pull/6967) +* Converts a bunch of defines to enums by @Bassoonian in [#7041](https://github.com/rh-hideout/pokeemerald-expansion/pull/7041) +* Change GetZMaxMoveAgainstProtectionModifier to prevent regressions by @AlexOn1ine in [#7047](https://github.com/rh-hideout/pokeemerald-expansion/pull/7047) +* Remove more instances of hard-coded Move IDs by @AsparagusEduardo in [#7056](https://github.com/rh-hideout/pokeemerald-expansion/pull/7056) + - Added `EFFECT_SHEER_COLD` to parametrize Sheer Cold's interactions with Ice types +* Animation documentation by @AsparagusEduardo in [#7052](https://github.com/rh-hideout/pokeemerald-expansion/pull/7052) +* Deprecate sStatusFlagsForMoveEffects by @AlexOn1ine in [#7063](https://github.com/rh-hideout/pokeemerald-expansion/pull/7063) +* chore: remove unused section from credits by @Emiliasky in [#7085](https://github.com/rh-hideout/pokeemerald-expansion/pull/7085) +* Removes duplicate AI ability func by @AlexOn1ine in [#7045](https://github.com/rh-hideout/pokeemerald-expansion/pull/7045) +* Remove redundancy for ShouldLowerStat functions by @AlexOn1ine in [#6577](https://github.com/rh-hideout/pokeemerald-expansion/pull/6577) +* Deprecate absent member from battlerState by @AlexOn1ine in [#7091](https://github.com/rh-hideout/pokeemerald-expansion/pull/7091) +* Use CanAbilityAbsorbMove in GetOverworldTypeEffectiveness by @AlexOn1ine in [#7115](https://github.com/rh-hideout/pokeemerald-expansion/pull/7115) +* Removed redundant Damp check by @AsparagusEduardo in [#7134](https://github.com/rh-hideout/pokeemerald-expansion/pull/7134) +* Improve music/se macros and fix names by @cawtds in [#7030](https://github.com/rh-hideout/pokeemerald-expansion/pull/7030) +* Compound strings for hold effect names by @AsparagusEduardo in [#7140](https://github.com/rh-hideout/pokeemerald-expansion/pull/7140) +* Repurposes IsMagicGuardProtected into a general function by @AlexOn1ine in [#7114](https://github.com/rh-hideout/pokeemerald-expansion/pull/7114) +* Converts more defines to enums and name unnamed enums by @Bassoonian in [#7071](https://github.com/rh-hideout/pokeemerald-expansion/pull/7071) +* Use `argument.type` for `EFFECT_SOAK` by @AsparagusEduardo in [#7141](https://github.com/rh-hideout/pokeemerald-expansion/pull/7141) +* More battle controller function consolidation. by @AsparagusEduardo in [#6877](https://github.com/rh-hideout/pokeemerald-expansion/pull/6877) +* Add assumes for bag tests by @Bassoonian in [#7188](https://github.com/rh-hideout/pokeemerald-expansion/pull/7188) +* Fixes Booster Energy timing activation + Clean up by @AlexOn1ine in [#7175](https://github.com/rh-hideout/pokeemerald-expansion/pull/7175) +* Update .gitignore to add heal locations by @Bassoonian in [#7050](https://github.com/rh-hideout/pokeemerald-expansion/pull/7050) +* Attackcanceller clean up by @AlexOn1ine in [#7210](https://github.com/rh-hideout/pokeemerald-expansion/pull/7210) +* Remove redundant move result flag checks by @AlexOn1ine in [#7223](https://github.com/rh-hideout/pokeemerald-expansion/pull/7223) +* Add P_ASK_MOVE_CONFIRMATION by @pkmnsnfrn in [#7132](https://github.com/rh-hideout/pokeemerald-expansion/pull/7132) + - This will change the behavior of the game for players, as a new default is being set. +* Script clean up for Flame Burst and Costar by @AlexOn1ine in [#7264](https://github.com/rh-hideout/pokeemerald-expansion/pull/7264) +* Use compound strings in battle debug menu by @AsparagusEduardo in [#7282](https://github.com/rh-hideout/pokeemerald-expansion/pull/7282) +* Renaming STATUS1_REFRESH and adding more constants for common STATUS1 checks. by @surskitty in [#7284](https://github.com/rh-hideout/pokeemerald-expansion/pull/7284) +* Removed all instances of .chance = 100, SHEER_FORCE_NO_BOOST by @cfmnephrite in [#7300](https://github.com/rh-hideout/pokeemerald-expansion/pull/7300) +* AI Tests + accompanying bugfixes for Skill Swap, Worry Seed, weather setting in double battles, and Discharging into an ally's lightningrod by @surskitty in [#7297](https://github.com/rh-hideout/pokeemerald-expansion/pull/7297) +* Turn `OW_FRLG_WHITEOUT` into `OW_WHITEOUT_CUTSCENE` and make it generational by @kittenchilly in [#6962](https://github.com/rh-hideout/pokeemerald-expansion/pull/6962) +* Fix AI resisted move scoring by @Pawkkie in [#7350](https://github.com/rh-hideout/pokeemerald-expansion/pull/7350) +* Convert various to callnatives by @AlexOn1ine in [#7355](https://github.com/rh-hideout/pokeemerald-expansion/pull/7355) +* Remove leftover code by @AlexOn1ine in [#7397](https://github.com/rh-hideout/pokeemerald-expansion/pull/7397) +* Moved some fields to BattlerState/PartyState by @AsparagusEduardo in [#7409](https://github.com/rh-hideout/pokeemerald-expansion/pull/7409) +* Additional effects tweak by @cfmnephrite in [#7392](https://github.com/rh-hideout/pokeemerald-expansion/pull/7392) +* Clean up noResultString by @AlexOn1ine in [#7408](https://github.com/rh-hideout/pokeemerald-expansion/pull/7408) +* Bag sorting cleanup by @mrgriffin in [#7489](https://github.com/rh-hideout/pokeemerald-expansion/pull/7489) +* Convert statuses3 to volatiles by @AlexOn1ine in [#7514](https://github.com/rh-hideout/pokeemerald-expansion/pull/7514) +* Uncommenting out No Retreat, Clangorous Soul, and Extreme Evoboost from CheckBadMove by @surskitty in [#7541](https://github.com/rh-hideout/pokeemerald-expansion/pull/7541) +* AI Tailwind singles fix correction. by @surskitty in [#7543](https://github.com/rh-hideout/pokeemerald-expansion/pull/7543) +* Remove funcResult from AiThinkingStruct by @Pawkkie in [#7545](https://github.com/rh-hideout/pokeemerald-expansion/pull/7545) +* Suppress trainerproc compile warning for unused func by @AlexOn1ine in [#7592](https://github.com/rh-hideout/pokeemerald-expansion/pull/7592) +* Prevents a regression for custom abilties by @AlexOn1ine in [#7616](https://github.com/rh-hideout/pokeemerald-expansion/pull/7616) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Changed +* Clean up some Normalize tests to make them make sense by @hedara90 in [#7461](https://github.com/rh-hideout/pokeemerald-expansion/pull/7461) +* Add Synthesis + Utililty Umbrella test by @ghoulslash in [#7472](https://github.com/rh-hideout/pokeemerald-expansion/pull/7472) +* Add test for BoxPokemon integrity by @hedara90 in [#7487](https://github.com/rh-hideout/pokeemerald-expansion/pull/7487) +* Re-order moves in fling test by @hedara90 in [#7559](https://github.com/rh-hideout/pokeemerald-expansion/pull/7559) +* Wrote some tests by @AsparagusEduardo in [#7563](https://github.com/rh-hideout/pokeemerald-expansion/pull/7563) +* Added Ability TODO tests - Volume C by @AsparagusEduardo in [#7562](https://github.com/rh-hideout/pokeemerald-expansion/pull/7562) +* Added missing Move Effect TODO tests - Volume F by @AsparagusEduardo in [#7605](https://github.com/rh-hideout/pokeemerald-expansion/pull/7605) +* Fixed typo in test name by @hedara90 in [#7610](https://github.com/rh-hideout/pokeemerald-expansion/pull/7610) +* Add assumes for bag tests by @Bassoonian in [#7188](https://github.com/rh-hideout/pokeemerald-expansion/pull/7188) +* Split Sheer Force tests by gen instead of by four by @AlexOn1ine in [#7260](https://github.com/rh-hideout/pokeemerald-expansion/pull/7260) +* make check TESTS="..." support for filenames and infix matches by @mrgriffin in [#7536](https://github.com/rh-hideout/pokeemerald-expansion/pull/7536) +* Fix shell side arm rng in battle tests moves by @FosterProgramming in [#7548](https://github.com/rh-hideout/pokeemerald-expansion/pull/7548) +* Test that AI uses Dragon Cheer. by @surskitty in [#7552](https://github.com/rh-hideout/pokeemerald-expansion/pull/7552) +* Tests to see that the AI uses moves. by @surskitty in [#7555](https://github.com/rh-hideout/pokeemerald-expansion/pull/7555) + +### Fixed +* Clear out parties between battle tests by @hedara90 in [#7460](https://github.com/rh-hideout/pokeemerald-expansion/pull/7460) +* Fixed most failed tests with `GEN_LATEST GEN_8` by @AsparagusEduardo in [#7498](https://github.com/rh-hideout/pokeemerald-expansion/pull/7498) +* Corrected Liquid Ooze test by @AsparagusEduardo in [#7527](https://github.com/rh-hideout/pokeemerald-expansion/pull/7527) +* switchinabilities also runs ON_WEATHER and ON_TERRAIN by @ghoulslash in [#7612](https://github.com/rh-hideout/pokeemerald-expansion/pull/7612) +* Ally Switch attract battler swapping, test for leech seed by @ghoulslash in [#7634](https://github.com/rh-hideout/pokeemerald-expansion/pull/7634) +* Fixed changed effect for Sheer Cold by @hedara90 in [#7099](https://github.com/rh-hideout/pokeemerald-expansion/pull/7099) +* Fixed Transistor damage calculation test failing when `GEN_LATEST` is less than `GEN_9` by @AsparagusEduardo in [#7577](https://github.com/rh-hideout/pokeemerald-expansion/pull/7577) + +## πŸ“š Documentation πŸ“š +* Update how_to_new_pokemon.md by @kevinwklawrence in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* Updating a link to porytiles in INSTALL.md by @ThePeeps191 in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* Added comment in event.inc for simple menus in dynmultichoice by @RubyRaven6 in [#7568](https://github.com/rh-hideout/pokeemerald-expansion/pull/7568) +* Documented usage of `delay X` by @AsparagusEduardo in [#6951](https://github.com/rh-hideout/pokeemerald-expansion/pull/6951) +* Update follower NPC tutorial doc for createfollowernpc macro by @Bivurnum in [#7230](https://github.com/rh-hideout/pokeemerald-expansion/pull/7230) +* Improve trainer back pic-related data and code (+ smol documentation) by @mudskipper13 in [#6821](https://github.com/rh-hideout/pokeemerald-expansion/pull/6821) +* Update trainer.h usage warning by @hedara90 in [#7439](https://github.com/rh-hideout/pokeemerald-expansion/pull/7439) + +## New Contributors +* @kevinwklawrence made their first contribution in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* @ThePeeps191 made their first contribution in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* @cornixsenex made their first contribution in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.12.2...expansion/1.12.3 + +## New Contributors +* @ShinyVolcarona made their first contribution in [#6886](https://github.com/rh-hideout/pokeemerald-expansion/pull/6886) +* @Emiliasky made their first contribution in [#7085](https://github.com/rh-hideout/pokeemerald-expansion/pull/7085) +* @poetahto made their first contribution in [#7155](https://github.com/rh-hideout/pokeemerald-expansion/pull/7155) +* @Bolt-Strike made their first contribution in [#7103](https://github.com/rh-hideout/pokeemerald-expansion/pull/7103) +* @kevinwklawrence made their first contribution in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* @FosterProgramming made their first contribution in [#7442](https://github.com/rh-hideout/pokeemerald-expansion/pull/7442) +* @ThePeeps191 made their first contribution in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* @cornixsenex made their first contribution in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.12.2...expansion/1.13.0 + + + + diff --git a/docs/changelogs/1.13.x/1.13.1.md b/docs/changelogs/1.13.x/1.13.1.md new file mode 100644 index 000000000000..97b33e931d08 --- /dev/null +++ b/docs/changelogs/1.13.x/1.13.1.md @@ -0,0 +1,44 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.13.1 +`. +``` + + +## 🧬 General 🧬 +### Fixed +* Added sortType to Douse Drive by @fdeblasio in [#7664](https://github.com/rh-hideout/pokeemerald-expansion/pull/7664) + +## πŸ‰ PokΓ©mon πŸ‰ +### Fixed +* Fixed disabled cross-evolutions still being possible by @AsparagusEduardo in [#7678](https://github.com/rh-hideout/pokeemerald-expansion/pull/7678) + +## βš”οΈ Battle General βš”οΈ +### Changed +* Replace boolean multiplications with ternaries by @hedara90 in [#7653](https://github.com/rh-hideout/pokeemerald-expansion/pull/7653) + +## πŸ€– Battle AI πŸ€– +### Fixed +* Helping Hand bugfix; used FOE instead of BATTLE_OPPOSITE. by @surskitty in [#7659](https://github.com/rh-hideout/pokeemerald-expansion/pull/7659) + +## 🧹 Other Cleanup 🧹 +* Replace boolean multiplications with ternaries by @hedara90 in [#7653](https://github.com/rh-hideout/pokeemerald-expansion/pull/7653) +* Fix Rage Fist test name by @AlexOn1ine in [#7681](https://github.com/rh-hideout/pokeemerald-expansion/pull/7681) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Changed +* Fix Rage Fist test name by @AlexOn1ine in [#7681](https://github.com/rh-hideout/pokeemerald-expansion/pull/7681) + +### Fixed +* Fix crashing tests duplicating tests from another thread by @hedara90 in [#7683](https://github.com/rh-hideout/pokeemerald-expansion/pull/7683) + +## πŸ“š Documentation πŸ“š +* Update README.md by @Bassoonian in [#7639](https://github.com/rh-hideout/pokeemerald-expansion/pull/7639) + + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.13.0...expansion/1.13.1 + + + + diff --git a/docs/changelogs/1.13.x/1.13.2.md b/docs/changelogs/1.13.x/1.13.2.md new file mode 100644 index 000000000000..6cd2249378aa --- /dev/null +++ b/docs/changelogs/1.13.x/1.13.2.md @@ -0,0 +1,123 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.13.2 +`. +``` + + +## 🧬 General 🧬 +### Changed +* Removed superflous palette compression check by @hedara90 in [#7718](https://github.com/rh-hideout/pokeemerald-expansion/pull/7718) +* update of sv.json to consider newest DLC changes by @wiz1989 in [#7672](https://github.com/rh-hideout/pokeemerald-expansion/pull/7672) +* Adjusted line break substring breaking by @hedara90 in [#7789](https://github.com/rh-hideout/pokeemerald-expansion/pull/7789) +* Fixup add-new-trainer-front-pic tutorial. by @GraionDilach in [#7802](https://github.com/rh-hideout/pokeemerald-expansion/pull/7802) +* Adds conversion script for trainers.h by @AlexOn1ine in [#7663](https://github.com/rh-hideout/pokeemerald-expansion/pull/7663) + +### Fixed +* Fix bug with IF_GENDER evolution condition by @FosterProgramming in [#7749](https://github.com/rh-hideout/pokeemerald-expansion/pull/7749) +* Pokemon storage moving items bugfix by @FosterProgramming in [#7763](https://github.com/rh-hideout/pokeemerald-expansion/pull/7763) +* Fix catch bug introduced in #7774 by @FosterProgramming in [#7782](https://github.com/rh-hideout/pokeemerald-expansion/pull/7782) +* Fix Party Menu move select name width by @AsparagusEduardo in [#7820](https://github.com/rh-hideout/pokeemerald-expansion/pull/7820) +* Fix Debug Give PokΓ©mon (Complex) with duplicate moves by @AsparagusEduardo in [#7821](https://github.com/rh-hideout/pokeemerald-expansion/pull/7821) + +## πŸ—ΊοΈ Overworld πŸ—ΊοΈ +### Changed +* Added missing `LOCALID_NONE` by @estellarc in [#7783](https://github.com/rh-hideout/pokeemerald-expansion/pull/7783) + +### Fixed +* Fix TRAINER_TYPE_SEE_ALL_DIRECTIONS by @DizzyEggg in [#7779](https://github.com/rh-hideout/pokeemerald-expansion/pull/7779) + +## πŸ‰ PokΓ©mon πŸ‰ +### Fixed +* fix: seen flags for first mon in enemy party by @khbsd in [#7791](https://github.com/rh-hideout/pokeemerald-expansion/pull/7791) + +## βš”οΈ Battle General βš”οΈ +### Fixed +* Fix most failed tests with `GEN_LATEST` = `GEN_7` by @AsparagusEduardo in [#7688](https://github.com/rh-hideout/pokeemerald-expansion/pull/7688) +* Fixes Sweet Veil not protecting sleep from Yawn status by @AlexOn1ine in [#7704](https://github.com/rh-hideout/pokeemerald-expansion/pull/7704) +* Fix incorrect wrap turn amount by @AlexOn1ine in [#7667](https://github.com/rh-hideout/pokeemerald-expansion/pull/7667) +* Fixes Rage Fist for gen7 Disguise by @AlexOn1ine in [#7692](https://github.com/rh-hideout/pokeemerald-expansion/pull/7692) +* Fixes Intrepid Sword/Dauntless Shield boosting after entering while at max stats by @PhallenTree in [#7716](https://github.com/rh-hideout/pokeemerald-expansion/pull/7716) +* Fixes incorrect ending for some scripts by @AlexOn1ine in [#7691](https://github.com/rh-hideout/pokeemerald-expansion/pull/7691) +* Fixes Uproar not waking up mons by @AlexOn1ine in [#7714](https://github.com/rh-hideout/pokeemerald-expansion/pull/7714) +* Fixes Endure and Eject Pack issues by @AlexOn1ine in [#7687](https://github.com/rh-hideout/pokeemerald-expansion/pull/7687) +* Fix Beak Blast burning fire types by @hedara90 in [#7740](https://github.com/rh-hideout/pokeemerald-expansion/pull/7740) +* Fixes Recharge not actually being removed when recharge turn occurs by @PhallenTree in [#7744](https://github.com/rh-hideout/pokeemerald-expansion/pull/7744) +* Bugfixes Batch by @AlexOn1ine in [#7739](https://github.com/rh-hideout/pokeemerald-expansion/pull/7739) +* Fixes Beat Up incorrect slots usage by @AlexOn1ine in [#7741](https://github.com/rh-hideout/pokeemerald-expansion/pull/7741) +* Fixes Mycelium Might and Lagging Tail adjusting prio incorrectly by @AlexOn1ine in [#7742](https://github.com/rh-hideout/pokeemerald-expansion/pull/7742) +* Wrong argument passed down by @AlexOn1ine in [#7751](https://github.com/rh-hideout/pokeemerald-expansion/pull/7751) +* Fixed Ball Fetch Ability by @bassforte123 in [#7764](https://github.com/rh-hideout/pokeemerald-expansion/pull/7764) +* Fixes Flower Shield affecting semi-invulnerable mons by @AlexOn1ine in [#7766](https://github.com/rh-hideout/pokeemerald-expansion/pull/7766) +* Fixes Helping Hand boosts not stacking with each other by @PhallenTree in [#7775](https://github.com/rh-hideout/pokeemerald-expansion/pull/7775) +* Fixes OHKO moves calculating accuracy twice by @AlexOn1ine in [#7785](https://github.com/rh-hideout/pokeemerald-expansion/pull/7785) +* Fixes Instructed moves looking at the wrong turn order number by @PhallenTree in [#7788](https://github.com/rh-hideout/pokeemerald-expansion/pull/7788) +* Fix Flame Burst timeout if primary target is fainted by @hedara90 in [#7793](https://github.com/rh-hideout/pokeemerald-expansion/pull/7793) +* Fixes Leppa Berry timings by @AlexOn1ine in [#7787](https://github.com/rh-hideout/pokeemerald-expansion/pull/7787) +* Fixes Effects activating when move wasn't successful by @AlexOn1ine in [#7803](https://github.com/rh-hideout/pokeemerald-expansion/pull/7803) +* Fixes Throat Spray being blocked by Sheer Force by @AlexOn1ine in [#7808](https://github.com/rh-hideout/pokeemerald-expansion/pull/7808) +* Fixes inaccurate save / restore in Fling script by @AlexOn1ine in [#7811](https://github.com/rh-hideout/pokeemerald-expansion/pull/7811) +* Fix test exit prints for stored battlers by @AlexOn1ine in [#7807](https://github.com/rh-hideout/pokeemerald-expansion/pull/7807) +* Fixes EndTurn Eject Pack by @AlexOn1ine in [#7813](https://github.com/rh-hideout/pokeemerald-expansion/pull/7813) +* Fix Battle Frontier using Strange Balls by @AsparagusEduardo in [#7823](https://github.com/rh-hideout/pokeemerald-expansion/pull/7823) +* Fix Throat Spray activating multiply times by @AlexOn1ine in [#7818](https://github.com/rh-hideout/pokeemerald-expansion/pull/7818) +* fix (choice lock): Gorilla Tactics interactions with choice item removal by @ghostyboyy97 in [#7824](https://github.com/rh-hideout/pokeemerald-expansion/pull/7824) + - Fixed interactions with choice items and Gorilla Tactics both present when choice item is removed by a thief effect or item swap effect. +* Fixes encore random target for gen5+ by @AlexOn1ine in [#7800](https://github.com/rh-hideout/pokeemerald-expansion/pull/7800) + +## 🀹 Moves 🀹 +### Changed +* Initial Lash Out tests by @grintoul1 in [#7769](https://github.com/rh-hideout/pokeemerald-expansion/pull/7769) + +### Fixed +* Fix Salt Cure in double battles by @Bassoonian in [#7797](https://github.com/rh-hideout/pokeemerald-expansion/pull/7797) + +## 🎭 Abilities 🎭 +### Fixed +* Fix for Levitate and Mold Breaker being seen correctly by switch AI, with Levitate tests by @grintoul1 in [#7748](https://github.com/rh-hideout/pokeemerald-expansion/pull/7748) +* Fix Forecast and Flower Gift corruption by @Bassoonian in [#7796](https://github.com/rh-hideout/pokeemerald-expansion/pull/7796) +* Immunity abilities trigger on turn 0 (leads) by @spindrift64 in [#7814](https://github.com/rh-hideout/pokeemerald-expansion/pull/7814) + +## πŸ€– Battle AI πŸ€– +### Changed +* Tidy up CanTargetFaintAiWithMod and CanTargetMoveFaintAi by @grintoul1 in [#7693](https://github.com/rh-hideout/pokeemerald-expansion/pull/7693) +* Doubles AI: Trick Room timer fix and test for DOUBLE_TRICK_ROOM_ON_LAST_TURN_CHANCE by @grintoul1 in [#7622](https://github.com/rh-hideout/pokeemerald-expansion/pull/7622) + +### Fixed +* Toxic thread uses light screen's scoring.... by @surskitty in [#7674](https://github.com/rh-hideout/pokeemerald-expansion/pull/7674) +* Fix most failed and assume fail tests with `GEN_LATEST` = `GEN_6` by @AsparagusEduardo in [#7696](https://github.com/rh-hideout/pokeemerald-expansion/pull/7696) +* Fix for Levitate and Mold Breaker being seen correctly by switch AI, with Levitate tests by @grintoul1 in [#7748](https://github.com/rh-hideout/pokeemerald-expansion/pull/7748) + +## 🧹 Other Cleanup 🧹 +* Tidy up CanTargetFaintAiWithMod and CanTargetMoveFaintAi by @grintoul1 in [#7693](https://github.com/rh-hideout/pokeemerald-expansion/pull/7693) +* Removed superflous palette compression check by @hedara90 in [#7718](https://github.com/rh-hideout/pokeemerald-expansion/pull/7718) +* Fix failing test for B_PREFERRED_ICE_WEATHER = B_ICE_WEATHER_SNOW by @phexmiau in [#7755](https://github.com/rh-hideout/pokeemerald-expansion/pull/7755) +* Adjusted line break substring breaking by @hedara90 in [#7789](https://github.com/rh-hideout/pokeemerald-expansion/pull/7789) +* Added missing `LOCALID_NONE` by @estellarc in [#7783](https://github.com/rh-hideout/pokeemerald-expansion/pull/7783) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Changed +* Add tests for Filter, Solid Rock and Prism Armor by @hedara90 in [#7734](https://github.com/rh-hideout/pokeemerald-expansion/pull/7734) +* Fix failing test for B_PREFERRED_ICE_WEATHER = B_ICE_WEATHER_SNOW by @phexmiau in [#7755](https://github.com/rh-hideout/pokeemerald-expansion/pull/7755) +* Initial Lash Out tests by @grintoul1 in [#7769](https://github.com/rh-hideout/pokeemerald-expansion/pull/7769) +* Improve how test involving ball throw work by @FosterProgramming in [#7774](https://github.com/rh-hideout/pokeemerald-expansion/pull/7774) + +### Fixed +* Fix EWRAM_INIT in tests and add a default state to test runner main loop by @hedara90 in [#7699](https://github.com/rh-hideout/pokeemerald-expansion/pull/7699) +* Fix most failed and assume fail tests with `GEN_LATEST` = `GEN_6` by @AsparagusEduardo in [#7696](https://github.com/rh-hideout/pokeemerald-expansion/pull/7696) +* Fix for Levitate and Mold Breaker being seen correctly by switch AI, with Levitate tests by @grintoul1 in [#7748](https://github.com/rh-hideout/pokeemerald-expansion/pull/7748) +* Fix Big Root tests by @hedara90 in [#7817](https://github.com/rh-hideout/pokeemerald-expansion/pull/7817) + +## πŸ“š Documentation πŸ“š +* Fixup add-new-trainer-front-pic tutorial. by @GraionDilach in [#7802](https://github.com/rh-hideout/pokeemerald-expansion/pull/7802) + +## New Contributors +* @phexmiau made their first contribution in [#7755](https://github.com/rh-hideout/pokeemerald-expansion/pull/7755) +* @ghostyboyy97 made their first contribution in [#7824](https://github.com/rh-hideout/pokeemerald-expansion/pull/7824) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.13.1...expansion/1.13.2 + + + + diff --git a/docs/changelogs/1.13.x/1.13.3.md b/docs/changelogs/1.13.x/1.13.3.md new file mode 100644 index 000000000000..70e1830ff4b7 --- /dev/null +++ b/docs/changelogs/1.13.x/1.13.3.md @@ -0,0 +1,193 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.13.3 +`. +``` + + +## 🧬 General 🧬 +### Added +* Add test to detect save file shifting by @Bassoonian in [#8030](https://github.com/rh-hideout/pokeemerald-expansion/pull/8030) + +### Changed +* 1.13.2 release by @hedara90 in [#7831](https://github.com/rh-hideout/pokeemerald-expansion/pull/7831) +* Remove unnecessary EWRAM and IWRAM variables from the Window code by @estellarc in [#7897](https://github.com/rh-hideout/pokeemerald-expansion/pull/7897) +* Replace magic numbers with define'd values in field_player_avatar.c by @FosterProgramming in [#7910](https://github.com/rh-hideout/pokeemerald-expansion/pull/7910) +* Pret merge (1st of November, 2025) by @hedara90 in [#8103](https://github.com/rh-hideout/pokeemerald-expansion/pull/8103) + +### Fixed +* Fixes `EVO_BATTLE_END` evolutions not removing item with additional conditions by @PhallenTree in [#7841](https://github.com/rh-hideout/pokeemerald-expansion/pull/7841) +* Fix EV display in debug menu by @cawtds in [#7848](https://github.com/rh-hideout/pokeemerald-expansion/pull/7848) +* Fix right player position battle partner target display by @ravepossum in [#7878](https://github.com/rh-hideout/pokeemerald-expansion/pull/7878) +* Ensure last used ball and move description window sprites don't free palette too early by @ravepossum in [#7875](https://github.com/rh-hideout/pokeemerald-expansion/pull/7875) +* Fix fusion pokemon aquiring illegal movesets by @FosterProgramming in [#7896](https://github.com/rh-hideout/pokeemerald-expansion/pull/7896) + - Calyrex will now delete moves if they are not part of its learnset when unfusing + - Kyurem will now properly swap the moves Glaciate and Scary Face to its signature moves when fusing/unfusing +* Fix bug causing hgss dex to freeze by @FosterProgramming in [#7936](https://github.com/rh-hideout/pokeemerald-expansion/pull/7936) + - Fix a bug when checking evolutions info screen while search mode is active in the hgss dex +* Show convergent evolution to Gholdengo in HGSS dex by @FosterProgramming in [#7934](https://github.com/rh-hideout/pokeemerald-expansion/pull/7934) +* Fix HGSS dex sprites for gen9+ by @FosterProgramming in [#7922](https://github.com/rh-hideout/pokeemerald-expansion/pull/7922) +* Fix nicknames containing many / overflowing the party screen textbox by @hedara90 in [#7970](https://github.com/rh-hideout/pokeemerald-expansion/pull/7970) +* Fix ruination and nature's madness damage percentage by @FosterProgramming in [#7983](https://github.com/rh-hideout/pokeemerald-expansion/pull/7983) +* Fix ribbon colours by @hedara90 in [#7971](https://github.com/rh-hideout/pokeemerald-expansion/pull/7971) +* Fix long pokemon name in partner party not appearing properly by @FosterProgramming in [#8009](https://github.com/rh-hideout/pokeemerald-expansion/pull/8009) +* Fix battle dome bug (again) by @FosterProgramming in [#8007](https://github.com/rh-hideout/pokeemerald-expansion/pull/8007) +* Fix battle arena counting all judges loss for the opponent by @FosterProgramming in [#8046](https://github.com/rh-hideout/pokeemerald-expansion/pull/8046) + - Fix battle arena referees giving undeserved wins to the player +* Fix wrong gimmick spite showing when inputting too fast by @FosterProgramming in [#8066](https://github.com/rh-hideout/pokeemerald-expansion/pull/8066) + +## πŸ—ΊοΈ Overworld πŸ—ΊοΈ +### Fixed +* Fix LTO breaking with FREE_MYSTERY_GIFT set to TRUE by @DizzyEggg in [#7844](https://github.com/rh-hideout/pokeemerald-expansion/pull/7844) +* Fix dns palette weight by @FosterProgramming in [#7855](https://github.com/rh-hideout/pokeemerald-expansion/pull/7855) +* Bug Fix: NPC follower not inheriting facing direction upon creation by @Bivurnum in [#7895](https://github.com/rh-hideout/pokeemerald-expansion/pull/7895) +* Fix follower pokemon not playing animation when colliding by @FosterProgramming in [#7908](https://github.com/rh-hideout/pokeemerald-expansion/pull/7908) +* Fix incorrect font width in Dexnav search window hiding some elements by @FosterProgramming in [#7949](https://github.com/rh-hideout/pokeemerald-expansion/pull/7949) +* Fix dns color transition not applying weather blending by @FosterProgramming in [#7883](https://github.com/rh-hideout/pokeemerald-expansion/pull/7883) +* Fix follower NPC sidewaystair movement by @FosterProgramming in [#7909](https://github.com/rh-hideout/pokeemerald-expansion/pull/7909) +* Fix battle dome pre round 1 waiting room by @FosterProgramming in [#7976](https://github.com/rh-hideout/pokeemerald-expansion/pull/7976) +* Fix no_effect script command overwriting trainer data in trainer script by @FosterProgramming in [#7978](https://github.com/rh-hideout/pokeemerald-expansion/pull/7978) +* Setting wallclock time now properly sets fakeRTC by @FosterProgramming in [#7860](https://github.com/rh-hideout/pokeemerald-expansion/pull/7860) + - Fix time bug when setting wallclock in fakeRTC mode + - When setting the wall clock, it will start on current time instead of 10AM + - If FakeRTC is active, new game will start at 10AM +* Bugfix hidefollower not waiting properly by @FosterProgramming in [#7768](https://github.com/rh-hideout/pokeemerald-expansion/pull/7768) +* Bugfix Emotes not loading their palette by @estellarc in [#7843](https://github.com/rh-hideout/pokeemerald-expansion/pull/7843) +* Fix OW PokΓ©mon VObjects by @HashtagMarky in [#7991](https://github.com/rh-hideout/pokeemerald-expansion/pull/7991) +* fix: hypertraining a stat now optionally reflects in the summary screen by @khbsd in [#8035](https://github.com/rh-hideout/pokeemerald-expansion/pull/8035) +* Fix pc turning on/off animation not working in battle frontier by @FosterProgramming in [#8048](https://github.com/rh-hideout/pokeemerald-expansion/pull/8048) +* Fix non-battle trainer script not running properly by @FosterProgramming in [#8056](https://github.com/rh-hideout/pokeemerald-expansion/pull/8056) + +## πŸ‰ PokΓ©mon πŸ‰ +### Fixed +* Fixes shininess for givemon by @cawtds in [#7847](https://github.com/rh-hideout/pokeemerald-expansion/pull/7847) +* Fix Minior start of battle form by @hedara90 in [#7972](https://github.com/rh-hideout/pokeemerald-expansion/pull/7972) +* Add error messages for trying to send an illegal mon to the PC and fixes index in double wild battles by @hedara90 in [#7982](https://github.com/rh-hideout/pokeemerald-expansion/pull/7982) +* fix: hypertraining a stat now optionally reflects in the summary screen by @khbsd in [#8035](https://github.com/rh-hideout/pokeemerald-expansion/pull/8035) +* Add camera-facing right-walking Krabby and Kingler follower sprites by @rayrobdod in [#7881](https://github.com/rh-hideout/pokeemerald-expansion/pull/7881) + +## βš”οΈ Battle General βš”οΈ +### Changed +* Tests for Battery ability by @grintoul1 in [#7846](https://github.com/rh-hideout/pokeemerald-expansion/pull/7846) +* Aura Break tests by @grintoul1 in [#8099](https://github.com/rh-hideout/pokeemerald-expansion/pull/8099) + +### Fixed +* Fixes Endure lasting forever by @AlexOn1ine in [#7838](https://github.com/rh-hideout/pokeemerald-expansion/pull/7838) +* Fix for uncaught mon with terrain active by @DizzyEggg in [#7868](https://github.com/rh-hideout/pokeemerald-expansion/pull/7868) +* Fixes Steadfast not activating + tests by @PhallenTree in [#7886](https://github.com/rh-hideout/pokeemerald-expansion/pull/7886) +* Fix hgss pokedex when catching mon with terrain by @DizzyEggg in [#7884](https://github.com/rh-hideout/pokeemerald-expansion/pull/7884) +* Fix SmartStrike crashing the game in double battles by @DizzyEggg in [#7902](https://github.com/rh-hideout/pokeemerald-expansion/pull/7902) +* Fix palaceUnableToUseMove falling through to change battle script by @ghoulslash in [#7912](https://github.com/rh-hideout/pokeemerald-expansion/pull/7912) +* Add new Move target types to GetBattlePalaceMoveGroup by @ghoulslash in [#7913](https://github.com/rh-hideout/pokeemerald-expansion/pull/7913) +* Fixes 2 instances of global usage in the `Cmd_adjustdamage` loop by @AlexOn1ine in [#7918](https://github.com/rh-hideout/pokeemerald-expansion/pull/7918) +* Fix Battle Anim monbg calls Part 1 by @ghoulslash in [#7906](https://github.com/rh-hideout/pokeemerald-expansion/pull/7906) +* Adds missing breakable flag for Bulletproof by @AlexOn1ine in [#7928](https://github.com/rh-hideout/pokeemerald-expansion/pull/7928) +* Fix multiple battle arena bugs by @FosterProgramming in [#7941](https://github.com/rh-hideout/pokeemerald-expansion/pull/7941) +* Fixes Cursed Body failing to disable moves on the last PP by @PhallenTree in [#7940](https://github.com/rh-hideout/pokeemerald-expansion/pull/7940) +* Fixed an issue related to Pokemon animation bleeding into attack anim… by @LinathanZel in [#7924](https://github.com/rh-hideout/pokeemerald-expansion/pull/7924) +* Fixes terrain not failing on duplicate by @AlexOn1ine in [#7939](https://github.com/rh-hideout/pokeemerald-expansion/pull/7939) +* Fix volt tackle not inflicting recoil by @FosterProgramming in [#7944](https://github.com/rh-hideout/pokeemerald-expansion/pull/7944) +* Fix Knock Off not being restored and Wild Battles by @ghoulslash in [#7952](https://github.com/rh-hideout/pokeemerald-expansion/pull/7952) +* Fix Anticipation type effectiveness check by @spindrift64 in [#7840](https://github.com/rh-hideout/pokeemerald-expansion/pull/7840) +* Fix Cherim and Castfrom not reverting to baseform when Teraform Zero is triggered by @FosterProgramming in [#7961](https://github.com/rh-hideout/pokeemerald-expansion/pull/7961) +* Fix Focus Energy boosting crit by the wrong amount with gen1 crit chance by @FosterProgramming in [#7956](https://github.com/rh-hideout/pokeemerald-expansion/pull/7956) +* Fix bug where transformed pokemon lose copied stats on levelup by @FosterProgramming in [#7969](https://github.com/rh-hideout/pokeemerald-expansion/pull/7969) +* Fixes Shields Down incorrectly preventing status on Minior Core form by @PhallenTree in [#7968](https://github.com/rh-hideout/pokeemerald-expansion/pull/7968) +* SetShellSideArmCategory avoid div by zero by @DizzyEggg in [#7980](https://github.com/rh-hideout/pokeemerald-expansion/pull/7980) +* CalcBarFilledPixels Safe Div by @DizzyEggg in [#7979](https://github.com/rh-hideout/pokeemerald-expansion/pull/7979) +* Fix psychic terrain affecting semi-invulnerable mons by @FosterProgramming in [#7986](https://github.com/rh-hideout/pokeemerald-expansion/pull/7986) +* Fixes Terrain Extender timer by @AlexOn1ine in [#7995](https://github.com/rh-hideout/pokeemerald-expansion/pull/7995) +* Fixed Max Move in-battle descriptions by @AsparagusEduardo in [#8004](https://github.com/rh-hideout/pokeemerald-expansion/pull/8004) +* Fixes Echoed Voice base power increase depending on attacker's use of the move by @PhallenTree in [#7997](https://github.com/rh-hideout/pokeemerald-expansion/pull/7997) +* Fixed Stomping Tantrum not doubling in damage if the user failed Protect by @AsparagusEduardo in [#8008](https://github.com/rh-hideout/pokeemerald-expansion/pull/8008) +* Fix badge boost not applying in gen1 and 2 by @FosterProgramming in [#8013](https://github.com/rh-hideout/pokeemerald-expansion/pull/8013) +* Fix toxic debris setting hazards on the wrong side when hit by an ally by @FosterProgramming in [#8026](https://github.com/rh-hideout/pokeemerald-expansion/pull/8026) +* Adds missing alive check for Rapid Spin by @AlexOn1ine in [#8024](https://github.com/rh-hideout/pokeemerald-expansion/pull/8024) +* Fixes visual glitch after Misty Explosion by @AlexOn1ine in [#8022](https://github.com/rh-hideout/pokeemerald-expansion/pull/8022) +* Fixes Protosynthesis not activating after weather was reset by @AlexOn1ine in [#8021](https://github.com/rh-hideout/pokeemerald-expansion/pull/8021) +* Fix Salt Cure script by @AlexOn1ine in [#8005](https://github.com/rh-hideout/pokeemerald-expansion/pull/8005) +* Fix emergency exit not triggering properly during wild battles by @FosterProgramming in [#8037](https://github.com/rh-hideout/pokeemerald-expansion/pull/8037) +* Fix target cancelling not working properly with z-move by @FosterProgramming in [#8067](https://github.com/rh-hideout/pokeemerald-expansion/pull/8067) +* Corrects battler partner identification in battle_ai_switch_items.c by @grintoul1 in [#8071](https://github.com/rh-hideout/pokeemerald-expansion/pull/8071) +* Fix Ally Switch being useable in Frontier Link Multi battles by @grintoul1 in [#8059](https://github.com/rh-hideout/pokeemerald-expansion/pull/8059) +* Fixes hazards and switch-in items not being reset when switching in by @PhallenTree in [#8074](https://github.com/rh-hideout/pokeemerald-expansion/pull/8074) +* Fixes Liquid Ooze dmg not blocked by Magic Guard by @AlexOn1ine in [#8036](https://github.com/rh-hideout/pokeemerald-expansion/pull/8036) +* Fix move description prompt window not appear when choosing a move after canceling target selection by @FosterProgramming in [#8055](https://github.com/rh-hideout/pokeemerald-expansion/pull/8055) +* Initialize DamageContext on declaration to zero by @AlexOn1ine in [#8076](https://github.com/rh-hideout/pokeemerald-expansion/pull/8076) +* Fixed Hunger Switch changing forms on switch out while Tera'd by @AsparagusEduardo in [#8080](https://github.com/rh-hideout/pokeemerald-expansion/pull/8080) +* Fixes Gooey/Tangling Hair ability pop up triggering on Clear Body by @AlexOn1ine in [#8083](https://github.com/rh-hideout/pokeemerald-expansion/pull/8083) +* Fixes intimidate activating on empty field by @AlexOn1ine in [#8058](https://github.com/rh-hideout/pokeemerald-expansion/pull/8058) +* Fix bug where mon selection doesn't properly account for party order by @FosterProgramming in [#8088](https://github.com/rh-hideout/pokeemerald-expansion/pull/8088) +* Fix bug when a captured pokemon replaces a party member who changed forms by @FosterProgramming in [#8091](https://github.com/rh-hideout/pokeemerald-expansion/pull/8091) +* Fixed Zygarde Complete disappearing upon catch by @AsparagusEduardo in [#8089](https://github.com/rh-hideout/pokeemerald-expansion/pull/8089) +* Initialize DamageContext struct with zero values by @AlexOn1ine in [#8107](https://github.com/rh-hideout/pokeemerald-expansion/pull/8107) + +## 🀹 Moves 🀹 +### Fixed +* Updated Mountain Gale's PP for Gen 9 by @fdeblasio in [#7856](https://github.com/rh-hideout/pokeemerald-expansion/pull/7856) +* Fix Brine move anim and document Water Spout anim by @ravepossum in [#7865](https://github.com/rh-hideout/pokeemerald-expansion/pull/7865) +* Add Struggle tests, weakness berry tests and prevent Struggle from activating Silk Scarf and Chilan Berry by @rayrobdod in [#7880](https://github.com/rh-hideout/pokeemerald-expansion/pull/7880) +* Fix Battle Anim monbg calls Part 1 by @ghoulslash in [#7906](https://github.com/rh-hideout/pokeemerald-expansion/pull/7906) +* Add missing end signal for AnimTask_SetAttackerInvisibleWaitForSignal by @hedara90 in [#7950](https://github.com/rh-hideout/pokeemerald-expansion/pull/7950) +* Fix Ally Switch being useable in Frontier Link Multi battles by @grintoul1 in [#8059](https://github.com/rh-hideout/pokeemerald-expansion/pull/8059) +* Fixed Belly Drum/Contrary interaction at max Attack by @AsparagusEduardo in [#8078](https://github.com/rh-hideout/pokeemerald-expansion/pull/8078) + +## 🎭 Abilities 🎭 +### Changed +* Tests for Battery ability by @grintoul1 in [#7846](https://github.com/rh-hideout/pokeemerald-expansion/pull/7846) +* Aura Break tests by @grintoul1 in [#8099](https://github.com/rh-hideout/pokeemerald-expansion/pull/8099) + +## 🧢 Items 🧢 +### Fixed +* Add gBallItemIds Array by @HashtagMarky in [#7905](https://github.com/rh-hideout/pokeemerald-expansion/pull/7905) +* Fix Persim Berry battle usage by @hedara90 in [#7963](https://github.com/rh-hideout/pokeemerald-expansion/pull/7963) + +## πŸ€– Battle AI πŸ€– +### Fixed +* Add failsafe to AI_DecideHoldEffectForTurn by @AlexOn1ine in [#7849](https://github.com/rh-hideout/pokeemerald-expansion/pull/7849) +* Fix some ai action check happening before the logic was computed by @FosterProgramming in [#7867](https://github.com/rh-hideout/pokeemerald-expansion/pull/7867) + - Roamers will now flee in the first turn of battle +* Fix ShouldPivot overwriting random memory by @DizzyEggg in [#7882](https://github.com/rh-hideout/pokeemerald-expansion/pull/7882) +* Fix AI seeing priority wrong for players choice lock by @MaximeGr00 in [#7899](https://github.com/rh-hideout/pokeemerald-expansion/pull/7899) +* fix (post-KO switch): force AI data recalc to see abilities on field correctly when pivot moves used by player by @ghostyboyy97 in [#7900](https://github.com/rh-hideout/pokeemerald-expansion/pull/7900) +* Add missing break to Power Split AI case by @ghoulslash in [#7959](https://github.com/rh-hideout/pokeemerald-expansion/pull/7959) + +## 🧹 Other Cleanup 🧹 +* Fix some failed and assume fail tests with `GEN_LATEST` = `GEN_5` by @AsparagusEduardo in [#7735](https://github.com/rh-hideout/pokeemerald-expansion/pull/7735) +* Update INSTALL.md by @RubyRaven6 in [#7852](https://github.com/rh-hideout/pokeemerald-expansion/pull/7852) +* Remove unnecessary EWRAM and IWRAM variables from the Window code by @estellarc in [#7897](https://github.com/rh-hideout/pokeemerald-expansion/pull/7897) +* Replace magic numbers with define'd values in field_player_avatar.c by @FosterProgramming in [#7910](https://github.com/rh-hideout/pokeemerald-expansion/pull/7910) +* Reverts wrongly applies fix to book.toml by @AlexOn1ine in [#8105](https://github.com/rh-hideout/pokeemerald-expansion/pull/8105) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Changed +* Fix some failed and assume fail tests with `GEN_LATEST` = `GEN_5` by @AsparagusEduardo in [#7735](https://github.com/rh-hideout/pokeemerald-expansion/pull/7735) +* Tests for Battery ability by @grintoul1 in [#7846](https://github.com/rh-hideout/pokeemerald-expansion/pull/7846) +* Fixed fainting form change tests by @AsparagusEduardo in [#8079](https://github.com/rh-hideout/pokeemerald-expansion/pull/8079) +* Aura Break tests by @grintoul1 in [#8099](https://github.com/rh-hideout/pokeemerald-expansion/pull/8099) + +### Fixed +* Fix Knock Off not being restored and Wild Battles by @ghoulslash in [#7952](https://github.com/rh-hideout/pokeemerald-expansion/pull/7952) +* Fixes Shields Down incorrectly preventing status on Minior Core form by @PhallenTree in [#7968](https://github.com/rh-hideout/pokeemerald-expansion/pull/7968) +* Fixed Stomping Tantrum not doubling in damage if the user failed Protect by @AsparagusEduardo in [#8008](https://github.com/rh-hideout/pokeemerald-expansion/pull/8008) +* Fix stats defined in tests being overwritteng by stat change by @FosterProgramming in [#8018](https://github.com/rh-hideout/pokeemerald-expansion/pull/8018) + +## πŸ“š Documentation πŸ“š +* Update INSTALL.md by @RubyRaven6 in [#7852](https://github.com/rh-hideout/pokeemerald-expansion/pull/7852) +* Updated PR template to make existing credit policy clearer by @pkmnsnfrn in [#7864](https://github.com/rh-hideout/pokeemerald-expansion/pull/7864) +* Fix image links in doc site by @rayrobdod in [#7948](https://github.com/rh-hideout/pokeemerald-expansion/pull/7948) +* Add all pages in `docs` to doc website by @rayrobdod in [#7907](https://github.com/rh-hideout/pokeemerald-expansion/pull/7907) +* Relativize doc links, to fix links in docs site by @rayrobdod in [#7964](https://github.com/rh-hideout/pokeemerald-expansion/pull/7964) +* Fix docs compile issue by @AlexOn1ine in [#8101](https://github.com/rh-hideout/pokeemerald-expansion/pull/8101) +* Reverts wrongly applies fix to book.toml by @AlexOn1ine in [#8105](https://github.com/rh-hideout/pokeemerald-expansion/pull/8105) + +## New Contributors +* @HashtagMarky made their first contribution in [#7905](https://github.com/rh-hideout/pokeemerald-expansion/pull/7905) +* @MaximeGr00 made their first contribution in [#7899](https://github.com/rh-hideout/pokeemerald-expansion/pull/7899) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.13.2...expansion/1.13.3 + + + + diff --git a/docs/changelogs/1.13.x/1.13.4.md b/docs/changelogs/1.13.x/1.13.4.md new file mode 100644 index 000000000000..6884bbd95c0f --- /dev/null +++ b/docs/changelogs/1.13.x/1.13.4.md @@ -0,0 +1,213 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.13.4 +`. +``` + + +## 🧬 General 🧬 +### Changed +* 1.13.3 release by @hedara90 in [#8109](https://github.com/rh-hideout/pokeemerald-expansion/pull/8109) +* Adds an auto-generated include file of script commands by @FosterProgramming in [#8156](https://github.com/rh-hideout/pokeemerald-expansion/pull/8156) +* Adjust label workflow to only run if PR is approved by @hedara90 in [#8183](https://github.com/rh-hideout/pokeemerald-expansion/pull/8183) +* Add include/constants/script_commands.h to gitignore by @AlexOn1ine in [#8169](https://github.com/rh-hideout/pokeemerald-expansion/pull/8169) +* add fdeblasio as a contributor for code by @allcontributors[bot] in [#8200](https://github.com/rh-hideout/pokeemerald-expansion/pull/8200) +* Adjust Canceler naming to contain only one l by @AlexOn1ine in [#8258](https://github.com/rh-hideout/pokeemerald-expansion/pull/8258) +* Pret merge (16th of November, 2025) by @AlexOn1ine in [#8262](https://github.com/rh-hideout/pokeemerald-expansion/pull/8262) +* *.party: text with lfs by @mrgriffin in [#8320](https://github.com/rh-hideout/pokeemerald-expansion/pull/8320) +* Fedora install instructions by @estellarc in [#8355](https://github.com/rh-hideout/pokeemerald-expansion/pull/8355) +* Indent unintented if statement by @hedara90 in [#8367](https://github.com/rh-hideout/pokeemerald-expansion/pull/8367) + +### Fixed +* Update mdbook to v0.5.0-beta.1 by @rayrobdod in [#8133](https://github.com/rh-hideout/pokeemerald-expansion/pull/8133) +* Fix wild_encounters script not closing arrays properly by @FosterProgramming in [#8123](https://github.com/rh-hideout/pokeemerald-expansion/pull/8123) +* Fix missing FREE_MATCH_CALL by @FosterProgramming in [#8171](https://github.com/rh-hideout/pokeemerald-expansion/pull/8171) +* Fix scroll prompt sometimes being off-screen with automatic line breaks by @hedara90 in [#8182](https://github.com/rh-hideout/pokeemerald-expansion/pull/8182) +* Fix gcc11 again by @AsparagusEduardo in [#8188](https://github.com/rh-hideout/pokeemerald-expansion/pull/8188) +* Fixed decompression error reporter OOB window creation by @hedara90 in [#8199](https://github.com/rh-hideout/pokeemerald-expansion/pull/8199) +* Fix error when compiling with P_FUSION_FORMS disabled by @cawtds in [#8298](https://github.com/rh-hideout/pokeemerald-expansion/pull/8298) +* Fix compile on gcc11 by @AlexOn1ine in [#8300](https://github.com/rh-hideout/pokeemerald-expansion/pull/8300) +* Fix debug battle flag never being cleared by @FosterProgramming in [#8357](https://github.com/rh-hideout/pokeemerald-expansion/pull/8357) + +## πŸ—ΊοΈ Overworld πŸ—ΊοΈ +### Changed +* Add additional comment explaing map name popup transparency side-effects by @FosterProgramming in [#8117](https://github.com/rh-hideout/pokeemerald-expansion/pull/8117) + +### Fixed +* Fix berry blender not computing flavor correctly by @FosterProgramming in [#8113](https://github.com/rh-hideout/pokeemerald-expansion/pull/8113) +* Allow vs seekers to work with script not starting with trainerbattle by @FosterProgramming in [#8062](https://github.com/rh-hideout/pokeemerald-expansion/pull/8062) + - VS seeker now work with trainers who don't start with trainer_battle. You can use `vsseeker_rematchid TRAINER_ID` to indicate that this NPC is a battling trainer and the game will fetch the appropriate rematch if necessary. ` vsseeker_rematchid` work like a `cant_see_if_trainerflag_set` with additional functionality to handle vs seeker. + All NPCs who don't start with either `vsseeker_rematchid` or `trainerbattle` will show as "X"/unmatchable by the vs seeker, so non-rematchable trainer who do not start with `trainerbattle may "lie" and not show an excalmation mark showing they haven't been fought yet. This can be fixed by including a `vsseeker_rematchid` for them too. +* Fix grade in summary screen not accounting for 26 IV by @FosterProgramming in [#8157](https://github.com/rh-hideout/pokeemerald-expansion/pull/8157) +* Fix match call regression by @FosterProgramming in [#8227](https://github.com/rh-hideout/pokeemerald-expansion/pull/8227) +* Fix mew sprite not appearing correctly by @FosterProgramming in [#8235](https://github.com/rh-hideout/pokeemerald-expansion/pull/8235) +* Fix wrong palette for types sprites in hgss dex after catching mon by @FosterProgramming in [#8153](https://github.com/rh-hideout/pokeemerald-expansion/pull/8153) +* Fix mirage tower ceiling crumble color by @FosterProgramming in [#8081](https://github.com/rh-hideout/pokeemerald-expansion/pull/8081) +* Fix light flickering when different types of light sprite are present by @FosterProgramming in [#8043](https://github.com/rh-hideout/pokeemerald-expansion/pull/8043) + - Light intensity of neon signs was reduced to avoid conflicts with other light sources + - Fix flickering when both neon signs and light ball are present on screen +* Bug Fix: NPC Followers not working on slow sideways stairs by @Bivurnum in [#8257](https://github.com/rh-hideout/pokeemerald-expansion/pull/8257) +* Fix not enough memory being allocated when moves load background in contests by @FosterProgramming in [#8284](https://github.com/rh-hideout/pokeemerald-expansion/pull/8284) +* Make MON_DATA_NICKNAME10 return a 10 character string by @FosterProgramming in [#8291](https://github.com/rh-hideout/pokeemerald-expansion/pull/8291) + - Fix bug where interviews would print bad data in their string +* Fix game freeze when trainers try to walk on sideway stairs by @FosterProgramming in [#8316](https://github.com/rh-hideout/pokeemerald-expansion/pull/8316) +* Fix tossing items applying to the wrong stack by @FosterProgramming in [#8282](https://github.com/rh-hideout/pokeemerald-expansion/pull/8282) +* Prevent moves to be changed when choosing half party by @FosterProgramming in [#8336](https://github.com/rh-hideout/pokeemerald-expansion/pull/8336) + +## πŸ‰ PokΓ©mon πŸ‰ +### Changed +* Fix Kyurem typo in swap move tables by @Bassoonian in [#8139](https://github.com/rh-hideout/pokeemerald-expansion/pull/8139) +* Fix typo in Voltorb-Hisui pokedex entry by @PhallenTree in [#8143](https://github.com/rh-hideout/pokeemerald-expansion/pull/8143) +* Fix some followers sprites by @estellarc in [#8208](https://github.com/rh-hideout/pokeemerald-expansion/pull/8208) + +## βš”οΈ Battle General βš”οΈ +### Changed +* Clean up redundant todo by @AlexOn1ine in [#8094](https://github.com/rh-hideout/pokeemerald-expansion/pull/8094) +* Powder Move blocking cleanup by @PhallenTree in [#8194](https://github.com/rh-hideout/pokeemerald-expansion/pull/8194) +* Restored encourageEncore flag to non-volatile status effects by @AsparagusEduardo in [#8387](https://github.com/rh-hideout/pokeemerald-expansion/pull/8387) + +### Fixed +* Allow to send active mon to PC when capturing a Pokemon by @FosterProgramming in [#8111](https://github.com/rh-hideout/pokeemerald-expansion/pull/8111) +* Fix transform not loading the correct sprites when facing shiny or unown by @FosterProgramming in [#8146](https://github.com/rh-hideout/pokeemerald-expansion/pull/8146) +* Fixes Receiver not immediately activating copied abilities by @PhallenTree in [#8162](https://github.com/rh-hideout/pokeemerald-expansion/pull/8162) +* Fix destiny knot behavior and add tests by @FosterProgramming in [#8174](https://github.com/rh-hideout/pokeemerald-expansion/pull/8174) +* Fix recharge moves + add recharge move tests by @FosterProgramming in [#8181](https://github.com/rh-hideout/pokeemerald-expansion/pull/8181) +* Fixes Magician for spread moves by @AlexOn1ine in [#8170](https://github.com/rh-hideout/pokeemerald-expansion/pull/8170) +* Fix tera tint not applying on activation by @FosterProgramming in [#8135](https://github.com/rh-hideout/pokeemerald-expansion/pull/8135) +* Fixes wrongly assigned count for Semi Invulnerable state by @AlexOn1ine in [#8175](https://github.com/rh-hideout/pokeemerald-expansion/pull/8175) +* Fixes Drain Punch / Parental Bond / Scale Shot interaction by @AlexOn1ine in [#8198](https://github.com/rh-hideout/pokeemerald-expansion/pull/8198) +* Fix wrong ditto sprite on capture by @FosterProgramming in [#8226](https://github.com/rh-hideout/pokeemerald-expansion/pull/8226) +* Fixed an issue related to same turn Encore targeting by @LinathanZel in [#8230](https://github.com/rh-hideout/pokeemerald-expansion/pull/8230) +* Fixes Shell Trap not activating on contact but no damage by @AlexOn1ine in [#8243](https://github.com/rh-hideout/pokeemerald-expansion/pull/8243) +* Fix Magic Coat reflecting hazard moves incorrectly when used by a partner by @moostoet in [#8272](https://github.com/rh-hideout/pokeemerald-expansion/pull/8272) + - Magic Coat now properly reflects hazard moves from either slot in double battles. +* Shell Trap tests and Fix for Encore interaction by @AlexOn1ine in [#8268](https://github.com/rh-hideout/pokeemerald-expansion/pull/8268) +* Fix max mushroom unable to be selected when one stat is maxed by @FosterProgramming in [#8287](https://github.com/rh-hideout/pokeemerald-expansion/pull/8287) +* Block selecting x items when contrary pokemon are at minimum stages by @FosterProgramming in [#8288](https://github.com/rh-hideout/pokeemerald-expansion/pull/8288) +* Fix Fur Coat affecting confusion self-damage by @moostoet in [#8267](https://github.com/rh-hideout/pokeemerald-expansion/pull/8267) + - Fix confusion self-damage ignoring defense/attack abilities such as Fur Coat. +* Fixes End Turn Speed Order by @AlexOn1ine in [#8289](https://github.com/rh-hideout/pokeemerald-expansion/pull/8289) +* Make switchout abilities trigger after a pokemon has returned to its ball by @FosterProgramming in [#8304](https://github.com/rh-hideout/pokeemerald-expansion/pull/8304) +* Fix Shed Shell allowing fleeing/teleporting and Smoke Ball failing to guarantee escape by @moostoet in [#8286](https://github.com/rh-hideout/pokeemerald-expansion/pull/8286) +* Fix bug where defiant/competitive would pass their stat change to the next target by @FosterProgramming in [#8312](https://github.com/rh-hideout/pokeemerald-expansion/pull/8312) +* Fix max move message against semi invulnerable target by @FosterProgramming in [#8313](https://github.com/rh-hideout/pokeemerald-expansion/pull/8313) +* Fixes Neutralizing Gas displaying message when exiting with multiple users by @PhallenTree in [#8318](https://github.com/rh-hideout/pokeemerald-expansion/pull/8318) +* Fix Kings Rock not being ignored by flinch moves by @AlexOn1ine in [#8327](https://github.com/rh-hideout/pokeemerald-expansion/pull/8327) +* Fix Protosynthesis stat boosts ignoring speed drops by @moostoet in [#8277](https://github.com/rh-hideout/pokeemerald-expansion/pull/8277) + - Protosynthesis and Quark Drive now recalculate their boosted stat when Speed is lowered or Neutralizing Gas temporarily disables the ability. +* Fix switch-in abilities not triggering on revive by @FosterProgramming in [#8293](https://github.com/rh-hideout/pokeemerald-expansion/pull/8293) +* More Neutralizing Gas cleanup by @PhallenTree in [#8335](https://github.com/rh-hideout/pokeemerald-expansion/pull/8335) +* Fix cure status item effect not working properly in doubles by @FosterProgramming in [#8339](https://github.com/rh-hideout/pokeemerald-expansion/pull/8339) +* Fix infinite confusion (berserk gene) not being cured by cure_status bag items by @FosterProgramming in [#8343](https://github.com/rh-hideout/pokeemerald-expansion/pull/8343) +* Fix `B_PHYSICAL_SPECIAL_SPLIT` when set to Gen 4 by @AsparagusEduardo in [#8348](https://github.com/rh-hideout/pokeemerald-expansion/pull/8348) +* Refactor Beat Up handling for Gen 3/4 defaults, fix crit check, and expand test coverage by @moostoet in [#8307](https://github.com/rh-hideout/pokeemerald-expansion/pull/8307) + - BUGFIX: Beat Up (`GEN =< 5`) now no longer doubles its damage on every non-critical hit + - Beat Up now precomputes eligible party members/strikers for consistent multi-hit resolution and expanded tests covering both pre-Gen5 and Gen5+ rules +* Fix substitute graphic not disappearing after using a pivor move by @FosterProgramming in [#8340](https://github.com/rh-hideout/pokeemerald-expansion/pull/8340) +* Fixes Beak Blast burning after Beak Blast was already used by @PhallenTree in [#8361](https://github.com/rh-hideout/pokeemerald-expansion/pull/8361) +* Fix Roar not being recorded for LastUsedMove by @AlexOn1ine in [#8362](https://github.com/rh-hideout/pokeemerald-expansion/pull/8362) +* Fixes Neutralizing Gas / Mold Breaker / Dragon Darts interaction by @AlexOn1ine in [#8389](https://github.com/rh-hideout/pokeemerald-expansion/pull/8389) +* Fixes battle tv overwriting damage values by @AlexOn1ine in [#8378](https://github.com/rh-hideout/pokeemerald-expansion/pull/8378) +* Fix ball cycling not working properly when the same ball take multiple bag slots by @FosterProgramming in [#8163](https://github.com/rh-hideout/pokeemerald-expansion/pull/8163) + - Two new defines added to items.h `FIRST_BALL_INDEX` and `LAST_BALL_INDEX` + - We now assume the indexes of all regular ball usable in wild battle have consecutive indexes and some features (throw ball shortcut in battle) might break if not true + +## 🀹 Moves 🀹 +### Changed +* Fixed Uproar's description and spacing by @fdeblasio in [#8187](https://github.com/rh-hideout/pokeemerald-expansion/pull/8187) +* Clean usage of gMovesInfo by @AsparagusEduardo in [#8234](https://github.com/rh-hideout/pokeemerald-expansion/pull/8234) + - Also, fixed an OOB in `HasMoveThatChangesKOThreshold` +* Make tailwind anim mirror based on side by @FosterProgramming in [#8249](https://github.com/rh-hideout/pokeemerald-expansion/pull/8249) +* Make rainbow effect anim change based on side by @FosterProgramming in [#8269](https://github.com/rh-hideout/pokeemerald-expansion/pull/8269) + - Art assets by [SonikkuA-DatH](https://github.com/SonikkuA-DatH) +* Update Lash Out description to clarify its effect by @PhallenTree in [#8372](https://github.com/rh-hideout/pokeemerald-expansion/pull/8372) + +### Fixed +* Fix some move animations leaking VRAM and freeing already freed tags by @hedara90 in [#7977](https://github.com/rh-hideout/pokeemerald-expansion/pull/7977) + +## 🧢 Items 🧢 +### Fixed +* Allow vs seekers to work with script not starting with trainerbattle by @FosterProgramming in [#8062](https://github.com/rh-hideout/pokeemerald-expansion/pull/8062) + - VS seeker now work with trainers who don't start with trainer_battle. You can use `vsseeker_rematchid TRAINER_ID` to indicate that this NPC is a battling trainer and the game will fetch the appropriate rematch if necessary. ` vsseeker_rematchid` work like a `cant_see_if_trainerflag_set` with additional functionality to handle vs seeker. + All NPCs who don't start with either `vsseeker_rematchid` or `trainerbattle` will show as "X"/unmatchable by the vs seeker, so non-rematchable trainer who do not start with `trainerbattle may "lie" and not show an excalmation mark showing they haven't been fought yet. This can be fixed by including a `vsseeker_rematchid` for them too. + +## πŸ€– Battle AI πŸ€– +### Fixed +* fix (AI scoring): shield dust considerations, IsMoveEffectInMinus self effect edge case, hitsToKO zero-case consideration by @ghostyboyy97 in [#8126](https://github.com/rh-hideout/pokeemerald-expansion/pull/8126) + - The AI now sees Shield Dust on the player's Pokemon correctly + - The AI now sees self-targeted positive effect boosts correctly +* fix (contrary): Contrary stat down handling in MoveEffectInPlus by @ghostyboyy97 in [#8165](https://github.com/rh-hideout/pokeemerald-expansion/pull/8165) + - When comparing positive move effects in damaging move comparison, the AI will correctly see moves like Leaf Storm as beneficial if their Pokemon has Contrary. +* Added check for parental bond killing through sturdy by @MaximeGr00 in [#8206](https://github.com/rh-hideout/pokeemerald-expansion/pull/8206) + AI now accounts for Parental Bond when checking if a move can ko the player through sturdy/focus sash. +* Fix AI_FLAG_DOUBLE_ACE_POKEMON sending duplicate PokΓ©mon in doubles by @moostoet in [#8279](https://github.com/rh-hideout/pokeemerald-expansion/pull/8279) + - Fixed AI_FLAG_DOUBLE_ACE_POKEMON trainers resending the same PokΓ©mon after a KO instead of their two Ace PokΓ©mon in double battles. +* Fix switchin KO threshold logic by @Pawkkie in [#8370](https://github.com/rh-hideout/pokeemerald-expansion/pull/8370) + +## 🧹 Other Cleanup 🧹 +* Clean up redundant todo by @AlexOn1ine in [#8094](https://github.com/rh-hideout/pokeemerald-expansion/pull/8094) +* Fix Kyurem typo in swap move tables by @Bassoonian in [#8139](https://github.com/rh-hideout/pokeemerald-expansion/pull/8139) +* Fix typo in Voltorb-Hisui pokedex entry by @PhallenTree in [#8143](https://github.com/rh-hideout/pokeemerald-expansion/pull/8143) +* Fixed Uproar's description and spacing by @fdeblasio in [#8187](https://github.com/rh-hideout/pokeemerald-expansion/pull/8187) +* Add include/constants/script_commands.h to gitignore by @AlexOn1ine in [#8169](https://github.com/rh-hideout/pokeemerald-expansion/pull/8169) +* Powder Move blocking cleanup by @PhallenTree in [#8194](https://github.com/rh-hideout/pokeemerald-expansion/pull/8194) +* Clean usage of gMovesInfo by @AsparagusEduardo in [#8234](https://github.com/rh-hideout/pokeemerald-expansion/pull/8234) + - Also, fixed an OOB in `HasMoveThatChangesKOThreshold` +* Adjust Canceler naming to contain only one l by @AlexOn1ine in [#8258](https://github.com/rh-hideout/pokeemerald-expansion/pull/8258) +* Fix wrongly renamed logs by @AlexOn1ine in [#8264](https://github.com/rh-hideout/pokeemerald-expansion/pull/8264) +* Tests for Max Moves already exist by @AlexOn1ine in [#8314](https://github.com/rh-hideout/pokeemerald-expansion/pull/8314) +* Use MAP_OFFSET by @estellarc in [#8328](https://github.com/rh-hideout/pokeemerald-expansion/pull/8328) +* Fixed broken friendship from items in battle test and added new test for opposite case by @pkmnsnfrn in [#7872](https://github.com/rh-hideout/pokeemerald-expansion/pull/7872) +* Indent unintented if statement by @hedara90 in [#8367](https://github.com/rh-hideout/pokeemerald-expansion/pull/8367) +* Update Lash Out description to clarify its effect by @PhallenTree in [#8372](https://github.com/rh-hideout/pokeemerald-expansion/pull/8372) +* Restored encourageEncore flag to non-volatile status effects by @AsparagusEduardo in [#8387](https://github.com/rh-hideout/pokeemerald-expansion/pull/8387) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Added +* Prevent EXPECT functions from casting negative numbers into unsigned by @FosterProgramming in [#7866](https://github.com/rh-hideout/pokeemerald-expansion/pull/7866) + +### Changed +* Added Soundproof and Bulletproof tests by @AsparagusEduardo in [#8189](https://github.com/rh-hideout/pokeemerald-expansion/pull/8189) +* Wrote some missing tests by @AsparagusEduardo in [#8203](https://github.com/rh-hideout/pokeemerald-expansion/pull/8203) +* A couple more tests by @AsparagusEduardo in [#8209](https://github.com/rh-hideout/pokeemerald-expansion/pull/8209) +* Fixed some failing tests with GEN_LATEST = GEN_5 by @AsparagusEduardo in [#8241](https://github.com/rh-hideout/pokeemerald-expansion/pull/8241) +* Add test for mold breaker/ice scales interaction by @FosterProgramming in [#8240](https://github.com/rh-hideout/pokeemerald-expansion/pull/8240) +* Yet more tests by @AsparagusEduardo in [#8228](https://github.com/rh-hideout/pokeemerald-expansion/pull/8228) + - Added tests for: + - Dark Aura + - Fairy Aura + - Flare Boost + - Toxic Boost + - Added test names for Flying Press. +* Slightly increase headless test speed by modifying animations by @AsparagusEduardo in [#8299](https://github.com/rh-hideout/pokeemerald-expansion/pull/8299) +* Make `gTestRunnerHeadless` into a constant outside of tests by @hedara90 in [#8306](https://github.com/rh-hideout/pokeemerald-expansion/pull/8306) +* Tests for Max Moves already exist by @AlexOn1ine in [#8314](https://github.com/rh-hideout/pokeemerald-expansion/pull/8314) +* Finished fixing tests when setting `GEN_LATEST` to `GEN_5` by @AsparagusEduardo in [#8263](https://github.com/rh-hideout/pokeemerald-expansion/pull/8263) +* Wrote missing Fling tests by @AsparagusEduardo in [#8383](https://github.com/rh-hideout/pokeemerald-expansion/pull/8383) + +### Fixed +* Fixes difficulty not being restored after tests by @grintoul1 in [#8129](https://github.com/rh-hideout/pokeemerald-expansion/pull/8129) +* Reset saveblock data between test runs by @hedara90 in [#8145](https://github.com/rh-hideout/pokeemerald-expansion/pull/8145) +* Fix ohko moves ai tests by @FosterProgramming in [#8309](https://github.com/rh-hideout/pokeemerald-expansion/pull/8309) +* Fixed broken friendship from items in battle test and added new test for opposite case by @pkmnsnfrn in [#7872](https://github.com/rh-hideout/pokeemerald-expansion/pull/7872) +* Add tests to verify aromatherapy is not affected by heal bell config by @FosterProgramming in [#8344](https://github.com/rh-hideout/pokeemerald-expansion/pull/8344) +* Pre gen 5 encored move now signals the test engine a move is happening by @FosterProgramming in [#8338](https://github.com/rh-hideout/pokeemerald-expansion/pull/8338) +* Refactor Beat Up handling for Gen 3/4 defaults, fix crit check, and expand test coverage by @moostoet in [#8307](https://github.com/rh-hideout/pokeemerald-expansion/pull/8307) + - BUGFIX: Beat Up (`GEN =< 5`) now no longer doubles its damage on every non-critical hit + - Beat Up now precomputes eligible party members/strikers for consistent multi-hit resolution and expanded tests covering both pre-Gen5 and Gen5+ rules +* Fix known failing AI trace test by @FosterProgramming in [#8337](https://github.com/rh-hideout/pokeemerald-expansion/pull/8337) + +## πŸ“š Documentation πŸ“š +* Lock mdbook to v0.4.35 to fix docs not building by @grintoul1 in [#8130](https://github.com/rh-hideout/pokeemerald-expansion/pull/8130) +* Add additional comment explaing map name popup transparency side-effects by @FosterProgramming in [#8117](https://github.com/rh-hideout/pokeemerald-expansion/pull/8117) +* Fix wrongly renamed logs by @AlexOn1ine in [#8264](https://github.com/rh-hideout/pokeemerald-expansion/pull/8264) +* Use MAP_OFFSET by @estellarc in [#8328](https://github.com/rh-hideout/pokeemerald-expansion/pull/8328) +* Fedora install instructions by @estellarc in [#8355](https://github.com/rh-hideout/pokeemerald-expansion/pull/8355) + + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.13.3...expansion/1.13.4 + + + + diff --git a/docs/changelogs/1.14.x/1.14.0.md b/docs/changelogs/1.14.x/1.14.0.md new file mode 100644 index 000000000000..3a75d35e6ec1 --- /dev/null +++ b/docs/changelogs/1.14.x/1.14.0.md @@ -0,0 +1,534 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.14.0 +`. +``` + +## πŸŒ‹ *REFACTORS* πŸŒ‹ +πŸ“œ = Uses a migration script. +* Refactors Attackstring and PP deduction by @AlexOn1ine in [#7402](https://github.com/rh-hideout/pokeemerald-expansion/pull/7402) +* Attackcanceller fixes and improvements by @AlexOn1ine in [#7698](https://github.com/rh-hideout/pokeemerald-expansion/pull/7698) +* Fixes activation order for a couple abilities by @AlexOn1ine in [#7732](https://github.com/rh-hideout/pokeemerald-expansion/pull/7732) +* feat: change defines in `constants/abilities.h` to an enum by @khbsd in [#7006](https://github.com/rh-hideout/pokeemerald-expansion/pull/7006) +* Item battle effect refactor by @AlexOn1ine in [#7857](https://github.com/rh-hideout/pokeemerald-expansion/pull/7857) +* Optimize GetWhichBattlerFasterOrTies by @AlexOn1ine in [#7953](https://github.com/rh-hideout/pokeemerald-expansion/pull/7953) +* Decouple passive hp updates from move damage updates by @AlexOn1ine in [#7942](https://github.com/rh-hideout/pokeemerald-expansion/pull/7942) +* Make movelist calculations happen during compilation instead of runtime by @FosterProgramming in [#7967](https://github.com/rh-hideout/pokeemerald-expansion/pull/7967) + - tmIlliterate flag in speciesInfo changed to teachingType. The options are `DEFAULT_LEARNING`, `TM_ILLITERATE` and `ALL_TEACHABLES`. The first two options match the tmIlliterate = false and tmIlliterate = true while the third one allow a pokemon to learn all teachables similarly to Mew + - Reduce EWRAM usage of HGSS dex + - Fix pokemon.c needing to be recompiled everytime a .inc file was changed + - P_TUTOR_MOVES_ARRAY has been removed (now always true when HGSS dex is enabled) + - Mew move teaching exception and univeral moves are now coded in the JSON file `src/data/pokemon/special_movesets.json` under the name signatureTeachables and universalMoves +* Grudge, Destiny Bond and FaintBattler refactor by @AlexOn1ine in [#8072](https://github.com/rh-hideout/pokeemerald-expansion/pull/8072) +* Increase number of additional move effects by @AlexOn1ine in [#8149](https://github.com/rh-hideout/pokeemerald-expansion/pull/8149) +* πŸ“œ update: time-based encounters system tuneup and @cawtds' header script by @khbsd in [#8158](https://github.com/rh-hideout/pokeemerald-expansion/pull/8158) +* Refactor random functions to be runner specific by @FosterProgramming in [#7816](https://github.com/rh-hideout/pokeemerald-expansion/pull/7816) + +## 🧬 General 🧬 +### Added +* Battle debug menu: highlight chosen action and change separator by @grintoul1 in [#7709](https://github.com/rh-hideout/pokeemerald-expansion/pull/7709) +* Implement `field_name_box` by @mudskipper13 in [#7697](https://github.com/rh-hideout/pokeemerald-expansion/pull/7697) +* Add new actions to Debug Menu by @FosterProgramming in [#7837](https://github.com/rh-hideout/pokeemerald-expansion/pull/7837) + - Adds an action to change a Pokemon ability in the party side of the Debug Menu + - Adds an action to set the friendship of a Pokemon in the party side of the Debug Menu + +* Display TM/HM's move name in the debug menu by @estellarc in [#7994](https://github.com/rh-hideout/pokeemerald-expansion/pull/7994) + +### Changed +* Text rendering optimizations by @mrgriffin in [#7497](https://github.com/rh-hideout/pokeemerald-expansion/pull/7497) +* Battle debug menu now checks correct parties depending on battler party by @grintoul1 in [#7652](https://github.com/rh-hideout/pokeemerald-expansion/pull/7652) +* Add make release target by @jschoeny in [#7296](https://github.com/rh-hideout/pokeemerald-expansion/pull/7296) + - Most of what's above. But most importantly, that normal `make` will have all the debug stuff enabled and so releases should be done with `make release`. +* Add pool rules for Mega Stones and Z-Crystals by @hedara90 in [#7720](https://github.com/rh-hideout/pokeemerald-expansion/pull/7720) +* `field_name_box` smol followup by @mudskipper13 in [#7762](https://github.com/rh-hideout/pokeemerald-expansion/pull/7762) +* Added COMPOUND_STRINGs to region_map_entries.h by @fdeblasio in [#7669](https://github.com/rh-hideout/pokeemerald-expansion/pull/7669) +* Improve ability/heldEffect access for IsBattlerGrounded func by @AlexOn1ine in [#7753](https://github.com/rh-hideout/pokeemerald-expansion/pull/7753) +* Removed `SAVE_TYPE_ERROR_SCREEN` config by @AsparagusEduardo in [#7836](https://github.com/rh-hideout/pokeemerald-expansion/pull/7836) +* Give the Coin Case when coins are maxed by @estellarc in [#7973](https://github.com/rh-hideout/pokeemerald-expansion/pull/7973) +* Revert HGSS dex and movelist changes by @FosterProgramming in [#8016](https://github.com/rh-hideout/pokeemerald-expansion/pull/8016) +* Converts some defines to enums and name unnamed enums by @Bassoonian in [#8019](https://github.com/rh-hideout/pokeemerald-expansion/pull/8019) +* Some more documentation and cleanup by @Bassoonian in [#8020](https://github.com/rh-hideout/pokeemerald-expansion/pull/8020) +* Even more enums and documentation by @Bassoonian in [#8029](https://github.com/rh-hideout/pokeemerald-expansion/pull/8029) +* Add type enum by @Bassoonian in [#8054](https://github.com/rh-hideout/pokeemerald-expansion/pull/8054) +* Minor clean up in menu.c by @estellarc in [#8060](https://github.com/rh-hideout/pokeemerald-expansion/pull/8060) +* Adds an auto-generated include file of script commands by @FosterProgramming in [#8156](https://github.com/rh-hideout/pokeemerald-expansion/pull/8156) +* Master to upcoming merge 20251107 by @grintoul1 in [#8167](https://github.com/rh-hideout/pokeemerald-expansion/pull/8167) +* porymap default settings by @FosterProgramming in [#8038](https://github.com/rh-hideout/pokeemerald-expansion/pull/8038) + - WARNING: A change was made for new projects map files to match poymap output. This change might break people's projects with existing versions of those files. The files affected are ` data/maps/map_groups.json`, `src/data/heal_locations.json`, `src/data/region_map/region_map_sections.json` and `src/data/wild_encounters.json` + If you have an issue with one of those files during the merging process, you should run this command + `git checkout HEAD -- ` + which will reset the file to the version before you initiated the merge +* Adjust label workflow to only run if PR is approved by @hedara90 in [#8183](https://github.com/rh-hideout/pokeemerald-expansion/pull/8183) +* Add include/constants/script_commands.h to gitignore by @AlexOn1ine in [#8169](https://github.com/rh-hideout/pokeemerald-expansion/pull/8169) +* Converted landmarks to COMPOUND_STRINGs by @fdeblasio in [#8205](https://github.com/rh-hideout/pokeemerald-expansion/pull/8205) +* Added contest config and cleaned up contest category variables by @fdeblasio in [#8178](https://github.com/rh-hideout/pokeemerald-expansion/pull/8178) +* Moves name box configs into a new file by @AlexOn1ine in [#8250](https://github.com/rh-hideout/pokeemerald-expansion/pull/8250) +* Converted options text into COMPOUND_STRINGs by @fdeblasio in [#8248](https://github.com/rh-hideout/pokeemerald-expansion/pull/8248) +* Adjust Canceler naming to contain only one l by @AlexOn1ine in [#8258](https://github.com/rh-hideout/pokeemerald-expansion/pull/8258) +* Pret merge (16th of November, 2025) by @AlexOn1ine in [#8262](https://github.com/rh-hideout/pokeemerald-expansion/pull/8262) +* Fixed bKGD for last_used_ball_r_cycle.png by @montmoguri in [#8261](https://github.com/rh-hideout/pokeemerald-expansion/pull/8261) +* Small bg drawing optimization by @estellarc in [#8259](https://github.com/rh-hideout/pokeemerald-expansion/pull/8259) +* Added missing 'coolness' string by @fdeblasio in [#8274](https://github.com/rh-hideout/pokeemerald-expansion/pull/8274) +* *.party: text with lfs by @mrgriffin in [#8320](https://github.com/rh-hideout/pokeemerald-expansion/pull/8320) +* Fedora install instructions by @estellarc in [#8355](https://github.com/rh-hideout/pokeemerald-expansion/pull/8355) +* Indent unintented if statement by @hedara90 in [#8367](https://github.com/rh-hideout/pokeemerald-expansion/pull/8367) + +### Fixed +* Added brackets where needed by @hedara90 in [#7781](https://github.com/rh-hideout/pokeemerald-expansion/pull/7781) +* Fix shiny stars being freed before shiny animation was played by @FosterProgramming in [#7917](https://github.com/rh-hideout/pokeemerald-expansion/pull/7917) + - Fixes shiny sparks in battle not appearing properly in rare circumstances (more common with various speedup options) +* Make movelist calculations happen during compilation instead of runtime by @FosterProgramming in [#7967](https://github.com/rh-hideout/pokeemerald-expansion/pull/7967) + - tmIlliterate flag in speciesInfo changed to teachingType. The options are `DEFAULT_LEARNING`, `TM_ILLITERATE` and `ALL_TEACHABLES`. The first two options match the tmIlliterate = false and tmIlliterate = true while the third one allow a pokemon to learn all teachables similarly to Mew + - Reduce EWRAM usage of HGSS dex + - Fix pokemon.c needing to be recompiled everytime a .inc file was changed + - P_TUTOR_MOVES_ARRAY has been removed (now always true when HGSS dex is enabled) + - Mew move teaching exception and univeral moves are now coded in the JSON file `src/data/pokemon/special_movesets.json` under the name signatureTeachables and universalMoves +* Fix unhandled config in hgss dex by @FosterProgramming in [#7999](https://github.com/rh-hideout/pokeemerald-expansion/pull/7999) +* Fixes compilation error due to #8002 by @AlexOn1ine in [#8050](https://github.com/rh-hideout/pokeemerald-expansion/pull/8050) +* Fix compile issue in gcc 11 by @AsparagusEduardo in [#8095](https://github.com/rh-hideout/pokeemerald-expansion/pull/8095) +* Update mdbook to v0.5.0-beta.1 by @rayrobdod in [#8133](https://github.com/rh-hideout/pokeemerald-expansion/pull/8133) +* Fix build failing with NOOPT=1 due to discarding static data. by @Ultimate-Bob in [#8053](https://github.com/rh-hideout/pokeemerald-expansion/pull/8053) +* Fix wild_encounters script not closing arrays properly by @FosterProgramming in [#8123](https://github.com/rh-hideout/pokeemerald-expansion/pull/8123) +* Fix missing FREE_MATCH_CALL by @FosterProgramming in [#8171](https://github.com/rh-hideout/pokeemerald-expansion/pull/8171) +* Again fixed compiling in GCC11 by @AsparagusEduardo in [#8184](https://github.com/rh-hideout/pokeemerald-expansion/pull/8184) +* Fix scroll prompt sometimes being off-screen with automatic line breaks by @hedara90 in [#8182](https://github.com/rh-hideout/pokeemerald-expansion/pull/8182) +* Fix gcc11 again by @AsparagusEduardo in [#8188](https://github.com/rh-hideout/pokeemerald-expansion/pull/8188) +* Fixed decompression error reporter OOB window creation by @hedara90 in [#8199](https://github.com/rh-hideout/pokeemerald-expansion/pull/8199) +* Fix error when compiling with P_FUSION_FORMS disabled by @cawtds in [#8298](https://github.com/rh-hideout/pokeemerald-expansion/pull/8298) +* Fix compile on gcc11 by @AlexOn1ine in [#8300](https://github.com/rh-hideout/pokeemerald-expansion/pull/8300) +* Fix debug battle flag never being cleared by @FosterProgramming in [#8357](https://github.com/rh-hideout/pokeemerald-expansion/pull/8357) + +## πŸ—ΊοΈ Overworld πŸ—ΊοΈ +### Added +* New Feature: ORAS Dowsing by @Bivurnum in [#7211](https://github.com/rh-hideout/pokeemerald-expansion/pull/7211) + - Added ORAS Dowsing Machine mechanics. +* feat: adds stevebeller's instant text and MandL27's faster text printing by @khbsd in [#8063](https://github.com/rh-hideout/pokeemerald-expansion/pull/8063) +* Implement GSC berry/apricorn tree functionality. by @GraionDilach in [#7777](https://github.com/rh-hideout/pokeemerald-expansion/pull/7777) + - Implement GSC berry/apricorn tree functionality. + +### Changed +* Trainers trigger in local id order by @grintoul1 in [#7424](https://github.com/rh-hideout/pokeemerald-expansion/pull/7424) +* Added regional form evolution condition by @AsparagusEduardo in [#6990](https://github.com/rh-hideout/pokeemerald-expansion/pull/6990) +* Update fishing odds to match official games by @FosterProgramming in [#7574](https://github.com/rh-hideout/pokeemerald-expansion/pull/7574) + - (BREAKING!) Fishing config has been moved to a new file. If you did not use default config fishing, make sure to reapply your config settings in the new file. + - (WARNING!) If you wrote custom code that calls one the following function, you may need to include `fishing.h` to get access to them(their functionaly was not affected): + - `StartFishing`previously defined in `field_player_avatar.h` + - `CalculateChainFishingShinyRolls` previously_defined in `wild_encounter.h` + - Adds a new config option to increase fish bite chance in morning and evening to match XY + - Modifies the way fishing "proximity boost" is calculated to match XY + - Fix Sticky Hold / Suction Cups bug which were increasing odds the wrong way +* Add additional comment explaing map name popup transparency side-effects by @FosterProgramming in [#8117](https://github.com/rh-hideout/pokeemerald-expansion/pull/8117) +* update: time-based encounters system tuneup and @cawtds' header script by @khbsd in [#8158](https://github.com/rh-hideout/pokeemerald-expansion/pull/8158) +* Sets instant text speed flag to false by default by @khbsd in [#8179](https://github.com/rh-hideout/pokeemerald-expansion/pull/8179) +* Follower NPCs no longer move if the player would be forced back onto the same tile. by @Bivurnum in [#8260](https://github.com/rh-hideout/pokeemerald-expansion/pull/8260) + - Follower NPCs no longer move if the player would be forced back onto the same tile + +### Fixed +* CheckForTrainersWantingBattle trainerObjects array now initialized to zero and loop now starts at zero by @grintoul1 in [#7765](https://github.com/rh-hideout/pokeemerald-expansion/pull/7765) +* Bugfix `setspeaker` Namebox not beign drawn correctly by @estellarc in [#7771](https://github.com/rh-hideout/pokeemerald-expansion/pull/7771) +* Banned species list by @FosterProgramming in [#8003](https://github.com/rh-hideout/pokeemerald-expansion/pull/8003) + - Add a window displaying caught banned species list in the Battle Frontier instead of the string detailing all the is +* Fix namebox bug when reloading the map mid-script by @FosterProgramming in [#8073](https://github.com/rh-hideout/pokeemerald-expansion/pull/8073) +* Fix copyvar instead of setvar causing issue with LTO by @FosterProgramming in [#8097](https://github.com/rh-hideout/pokeemerald-expansion/pull/8097) +* Fix berry blender not computing flavor correctly by @FosterProgramming in [#8113](https://github.com/rh-hideout/pokeemerald-expansion/pull/8113) +* Allow vs seekers to work with script not starting with trainerbattle by @FosterProgramming in [#8062](https://github.com/rh-hideout/pokeemerald-expansion/pull/8062) + - VS seeker now work with trainers who don't start with trainer_battle. You can use `vsseeker_rematchid TRAINER_ID` to indicate that this NPC is a battling trainer and the game will fetch the appropriate rematch if necessary. ` vsseeker_rematchid` work like a `cant_see_if_trainerflag_set` with additional functionality to handle vs seeker. + - All NPCs who don't start with either `vsseeker_rematchid` or `trainerbattle` will show as "X"/unmatchable by the vs seeker, so non-rematchable trainer who do not start with `trainerbattle may "lie" and not show an excalmation mark showing they haven't been fought yet. This can be fixed by including a `vsseeker_rematchid` for them too. +* Fix grade in summary screen not accounting for 26 IV by @FosterProgramming in [#8157](https://github.com/rh-hideout/pokeemerald-expansion/pull/8157) +* Fix match call regression by @FosterProgramming in [#8227](https://github.com/rh-hideout/pokeemerald-expansion/pull/8227) +* Fix mew sprite not appearing correctly by @FosterProgramming in [#8235](https://github.com/rh-hideout/pokeemerald-expansion/pull/8235) +* Fix wrong palette for types sprites in hgss dex after catching mon by @FosterProgramming in [#8153](https://github.com/rh-hideout/pokeemerald-expansion/pull/8153) +* Fix Apricorns with OW_SHOW_ITEM_DESCRIPTIONS not off by @hedara90 in [#8253](https://github.com/rh-hideout/pokeemerald-expansion/pull/8253) +* Fix mirage tower ceiling crumble color by @FosterProgramming in [#8081](https://github.com/rh-hideout/pokeemerald-expansion/pull/8081) +* Fix light flickering when different types of light sprite are present by @FosterProgramming in [#8043](https://github.com/rh-hideout/pokeemerald-expansion/pull/8043) + - Light intensity of neon signs was reduced to avoid conflicts with other light sources + - Fix flickering when both neon signs and light ball are present on screen +* Bug Fix: NPC Followers not working on slow sideways stairs by @Bivurnum in [#8257](https://github.com/rh-hideout/pokeemerald-expansion/pull/8257) + - Fixed NPC followers on slow sideways stairs +* Fix not enough memory being allocated when moves load background in contests by @FosterProgramming in [#8284](https://github.com/rh-hideout/pokeemerald-expansion/pull/8284) +* Make MON_DATA_NICKNAME10 return a 10 character string by @FosterProgramming in [#8291](https://github.com/rh-hideout/pokeemerald-expansion/pull/8291) + - Fix bug where interviews would print bad data in their string +* Fix game freeze when trainers try to walk on sideway stairs by @FosterProgramming in [#8316](https://github.com/rh-hideout/pokeemerald-expansion/pull/8316) +* Fix tossing items applying to the wrong stack by @FosterProgramming in [#8282](https://github.com/rh-hideout/pokeemerald-expansion/pull/8282) +* Prevent moves to be changed when choosing half party by @FosterProgramming in [#8336](https://github.com/rh-hideout/pokeemerald-expansion/pull/8336) + +## πŸ‰ PokΓ©mon πŸ‰ +### Added +* Add Legends Z-A content by @Bassoonian in [#7935](https://github.com/rh-hideout/pokeemerald-expansion/pull/7935) + * To retain compatibility with your new items and species, make sure to move the new additions behind your own additions. + * The save block will shift if you have enabled `USE_DEXNAV_SEARCH_LEVELS` (due to the new species) or if `OW_SHOW_ITEM_DESCRIPTIONS` is set to `OW_ITEM_DESCRIPTIONS_FIRST_TIME` (due to the new items). +* Move Relearners for TMs, Tutors and Egg moves by @PCG06 in [#8040](https://github.com/rh-hideout/pokeemerald-expansion/pull/8040) + - Increased the size of `MAX_RELEARNER_MOVES` to 60 to prevent crashes when viewing Mew. + +### Changed +* Nickit & Thievul visual revamp by @purrfectdoodle in [#7689](https://github.com/rh-hideout/pokeemerald-expansion/pull/7689) +* Fix Kyurem typo in swap move tables by @Bassoonian in [#8139](https://github.com/rh-hideout/pokeemerald-expansion/pull/8139) +* Fix typo in Voltorb-Hisui pokedex entry by @PhallenTree in [#8143](https://github.com/rh-hideout/pokeemerald-expansion/pull/8143) +* Fix some followers sprites by @estellarc in [#8208](https://github.com/rh-hideout/pokeemerald-expansion/pull/8208) + +### Fixed +* Fix gba sprites trying load non existent female versions by @FosterProgramming in [#7996](https://github.com/rh-hideout/pokeemerald-expansion/pull/7996) + - Fixes issues with pokemon getting gender differences in later gens when using gen3 sprite config +* GetEggSpecies: Only enabled species by @mrgriffin in [#8221](https://github.com/rh-hideout/pokeemerald-expansion/pull/8221) +* Fix compiling using `make debug` by @PCG06 in [#8380](https://github.com/rh-hideout/pokeemerald-expansion/pull/8380) + +## βš”οΈ Battle General βš”οΈ +### Added +* Config for capture to appear critical if the pokemon is already caught by @FosterProgramming in [#7730](https://github.com/rh-hideout/pokeemerald-expansion/pull/7730) + +### Changed +* Separates FRB and FRZ animations by @grintoul1 in [#7611](https://github.com/rh-hideout/pokeemerald-expansion/pull/7611) +* Update multiple battle messages by @AsparagusEduardo in [#7529](https://github.com/rh-hideout/pokeemerald-expansion/pull/7529) + - Removed unused messages + - Changed ability "X prevents Y" to "It doesn't affect X..." + - Eg. `"The opposing Snorlax's Immunity prevents poisoning!"` + - Removed `B_ABILITY_POP_UP`. Revert commit `b501fe7354bcd957396465c621ae7af5959ac5b0` to undo this. +* Refactors Attackstring and PP deduction by @AlexOn1ine in [#7402](https://github.com/rh-hideout/pokeemerald-expansion/pull/7402) +* Remove Uproar attack battle script by @AlexOn1ine in [#7715](https://github.com/rh-hideout/pokeemerald-expansion/pull/7715) +* Fix up end turn scripts plus small documentation by @AlexOn1ine in [#7758](https://github.com/rh-hideout/pokeemerald-expansion/pull/7758) +* Remove redundant function call by @AlexOn1ine in [#7752](https://github.com/rh-hideout/pokeemerald-expansion/pull/7752) +* Minor White Herb and Neutralizing Gas clean up by @AlexOn1ine in [#7754](https://github.com/rh-hideout/pokeemerald-expansion/pull/7754) +* Minor clean up for Lightning Rod / Storm Drain by @AlexOn1ine in [#7778](https://github.com/rh-hideout/pokeemerald-expansion/pull/7778) +* Improve ability/heldEffect access for IsBattlerGrounded func by @AlexOn1ine in [#7753](https://github.com/rh-hideout/pokeemerald-expansion/pull/7753) +* Add func GetChosenMoveFromPosition by @AlexOn1ine in [#7810](https://github.com/rh-hideout/pokeemerald-expansion/pull/7810) +* GetBattlerHoldEffect clean up by @AlexOn1ine in [#7819](https://github.com/rh-hideout/pokeemerald-expansion/pull/7819) +* Remove unused gBattleStruct fields by @Bassoonian in [#7822](https://github.com/rh-hideout/pokeemerald-expansion/pull/7822) +* feat: change defines in `constants/abilities.h` to an enum by @khbsd in [#7006](https://github.com/rh-hideout/pokeemerald-expansion/pull/7006) +* Streamline tryheal macros by @Bassoonian in [#7830](https://github.com/rh-hideout/pokeemerald-expansion/pull/7830) +* No bag use flag changed to a varable by @FosterProgramming in [#7780](https://github.com/rh-hideout/pokeemerald-expansion/pull/7780) + - IMPORTANT: The config flag B_FLAG_NO_BAG_USE has been removed + - A config var B_VAR_NO_BAG_USE has been added to replace it. It allows you to choose between: + bag available in battle, bag available in wild battle only, and unavailable bag +* Remove two unused bits from battle structs by @Bassoonian in [#7835](https://github.com/rh-hideout/pokeemerald-expansion/pull/7835) +* Removes a few redundant hitmarkers by @AlexOn1ine in [#7915](https://github.com/rh-hideout/pokeemerald-expansion/pull/7915) +* Remove EffectHitSetTerrain script to use moveeffect by @AlexOn1ine in [#7938](https://github.com/rh-hideout/pokeemerald-expansion/pull/7938) +* Clean up follow up for AtkCanceller refactor by @AlexOn1ine in [#7951](https://github.com/rh-hideout/pokeemerald-expansion/pull/7951) +* Optimize GetWhichBattlerFasterOrTies by @AlexOn1ine in [#7953](https://github.com/rh-hideout/pokeemerald-expansion/pull/7953) +* Decouple passive hp updates from move damage updates by @AlexOn1ine in [#7942](https://github.com/rh-hideout/pokeemerald-expansion/pull/7942) +* Remove appearedInBattle bitfield & redundant use of sentOut partyState by @Nopinou in [#8011](https://github.com/rh-hideout/pokeemerald-expansion/pull/8011) +* Volatile cleared in a redundant spot by @AlexOn1ine in [#8015](https://github.com/rh-hideout/pokeemerald-expansion/pull/8015) +* Moved usedHeldItem to Party State struct by @AlexOn1ine in [#8006](https://github.com/rh-hideout/pokeemerald-expansion/pull/8006) +* Remove usage of gBattlerTarget for MirrorHerb/Opportunist by @AlexOn1ine in [#8033](https://github.com/rh-hideout/pokeemerald-expansion/pull/8033) +* Fixed test "Revival Blessing cannot revive a partner's party member" by @grintoul1 in [#8031](https://github.com/rh-hideout/pokeemerald-expansion/pull/8031) +* Decouple (Overworld) Statuses from ability function by @AlexOn1ine in [#8002](https://github.com/rh-hideout/pokeemerald-expansion/pull/8002) +* Combine Simple Beam and Worry Seed into one effect by @AlexOn1ine in [#8039](https://github.com/rh-hideout/pokeemerald-expansion/pull/8039) +* Clean up for item hold effect refactor by @AlexOn1ine in [#8014](https://github.com/rh-hideout/pokeemerald-expansion/pull/8014) +* Grudge, Destiny Bond and FaintBattler refactor by @AlexOn1ine in [#8072](https://github.com/rh-hideout/pokeemerald-expansion/pull/8072) +* Parametrized Ice Face's weather form change by @AsparagusEduardo in [#8115](https://github.com/rh-hideout/pokeemerald-expansion/pull/8115) +* Clean up redundant todo by @AlexOn1ine in [#8094](https://github.com/rh-hideout/pokeemerald-expansion/pull/8094) +* Deprecate various macro by @AlexOn1ine in [#8092](https://github.com/rh-hideout/pokeemerald-expansion/pull/8092) +* Fixes hacky SetMoveEffect script calls by @AlexOn1ine in [#7987](https://github.com/rh-hideout/pokeemerald-expansion/pull/7987) +* Create BattleStruct sub struct for event states by @AlexOn1ine in [#8131](https://github.com/rh-hideout/pokeemerald-expansion/pull/8131) +* Attackstring hitmarker clean up by @AlexOn1ine in [#8136](https://github.com/rh-hideout/pokeemerald-expansion/pull/8136) +* Clean up ability effect hitmarker by @AlexOn1ine in [#8138](https://github.com/rh-hideout/pokeemerald-expansion/pull/8138) +* Increase number of additional move effects by @AlexOn1ine in [#8149](https://github.com/rh-hideout/pokeemerald-expansion/pull/8149) +* Remove redundant Future Sight flag by @AlexOn1ine in [#8185](https://github.com/rh-hideout/pokeemerald-expansion/pull/8185) +* Powder Move blocking cleanup by @PhallenTree in [#8194](https://github.com/rh-hideout/pokeemerald-expansion/pull/8194) +* Micro clean up in BattleStruct by @AlexOn1ine in [#8177](https://github.com/rh-hideout/pokeemerald-expansion/pull/8177) +* HandleAction_UseMove minor cleanup by @mrgriffin in [#8214](https://github.com/rh-hideout/pokeemerald-expansion/pull/8214) +* Revert gBattleTurnCounter change by @AlexOn1ine in [#8197](https://github.com/rh-hideout/pokeemerald-expansion/pull/8197) +* Canceller -> Canceler rename by @AlexOn1ine in [#8294](https://github.com/rh-hideout/pokeemerald-expansion/pull/8294) +* Remove leftover scrtipt redirection by @AlexOn1ine in [#8317](https://github.com/rh-hideout/pokeemerald-expansion/pull/8317) +* Expand usage of FaintedActions enum in HandleFaintedMonActions by @PhallenTree in [#8346](https://github.com/rh-hideout/pokeemerald-expansion/pull/8346) +* Move end clear bits clean up by @AlexOn1ine in [#8354](https://github.com/rh-hideout/pokeemerald-expansion/pull/8354) +* Restored encourageEncore flag to non-volatile status effects by @AsparagusEduardo in [#8387](https://github.com/rh-hideout/pokeemerald-expansion/pull/8387) + +### Fixed +* Fixes Weak Armor and items not displaying stat change attributes by @PhallenTree in [#7701](https://github.com/rh-hideout/pokeemerald-expansion/pull/7701) +* Refactors ruin ability checks into a field effect by @AlexOn1ine in [#7711](https://github.com/rh-hideout/pokeemerald-expansion/pull/7711) +* Attackcanceller fixes and improvements by @AlexOn1ine in [#7698](https://github.com/rh-hideout/pokeemerald-expansion/pull/7698) +* Fix Critical Capture RNG and Catching Charm boost by @kittenchilly in [#7534](https://github.com/rh-hideout/pokeemerald-expansion/pull/7534) +* Fixes activation order for a couple abilities by @AlexOn1ine in [#7732](https://github.com/rh-hideout/pokeemerald-expansion/pull/7732) +* More White Herb fixes/clean up by @AlexOn1ine in [#7826](https://github.com/rh-hideout/pokeemerald-expansion/pull/7826) +* Missing IsBattlerAlive checks in Opportunist/Mirror Herb by @AlexOn1ine in [#7829](https://github.com/rh-hideout/pokeemerald-expansion/pull/7829) +* Item battle effect refactor by @AlexOn1ine in [#7857](https://github.com/rh-hideout/pokeemerald-expansion/pull/7857) +* Fix Fling Mental Herb message by @AlexOn1ine in [#7984](https://github.com/rh-hideout/pokeemerald-expansion/pull/7984) +* Fixes Ruin field statuses negation conditions + upcoming cleanup by @PhallenTree in [#8042](https://github.com/rh-hideout/pokeemerald-expansion/pull/8042) +* Fix nature power string and add support for evnvironment in tests by @FosterProgramming in [#8068](https://github.com/rh-hideout/pokeemerald-expansion/pull/8068) + - Add option to choose an environment when setting up a battle test +* Corrects battler position checks in battle_message.c by @grintoul1 in [#8070](https://github.com/rh-hideout/pokeemerald-expansion/pull/8070) +* Emergency Exit on hazards activation + fix end of turn activation by @PhallenTree in [#8075](https://github.com/rh-hideout/pokeemerald-expansion/pull/8075) +* Improve sBattleIntroSlideFuncs bounds check by @hedara90 in [#8084](https://github.com/rh-hideout/pokeemerald-expansion/pull/8084) +* Fixes Sticky Barb never getting transferred to attacker + tests by @PhallenTree in [#8108](https://github.com/rh-hideout/pokeemerald-expansion/pull/8108) +* Fixes flung items sometimes being blocked by Unnerve by @PhallenTree in [#8114](https://github.com/rh-hideout/pokeemerald-expansion/pull/8114) +* Adjust faint battler script by @AlexOn1ine in [#8137](https://github.com/rh-hideout/pokeemerald-expansion/pull/8137) +* Allow to send active mon to PC when capturing a Pokemon by @FosterProgramming in [#8111](https://github.com/rh-hideout/pokeemerald-expansion/pull/8111) +* Fix transform not loading the correct sprites when facing shiny or unown by @FosterProgramming in [#8146](https://github.com/rh-hideout/pokeemerald-expansion/pull/8146) +* Fixes Receiver not immediately activating copied abilities by @PhallenTree in [#8162](https://github.com/rh-hideout/pokeemerald-expansion/pull/8162) +* Fix destiny knot behavior and add tests by @FosterProgramming in [#8174](https://github.com/rh-hideout/pokeemerald-expansion/pull/8174) +* Fix recharge moves + add recharge move tests by @FosterProgramming in [#8181](https://github.com/rh-hideout/pokeemerald-expansion/pull/8181) +* Fixes Magician for spread moves by @AlexOn1ine in [#8170](https://github.com/rh-hideout/pokeemerald-expansion/pull/8170) +* Fix tera tint not applying on activation by @FosterProgramming in [#8135](https://github.com/rh-hideout/pokeemerald-expansion/pull/8135) +* Fixes wrongly assigned count for Semi Invulnerable state by @AlexOn1ine in [#8175](https://github.com/rh-hideout/pokeemerald-expansion/pull/8175) +* Fixes Drain Punch / Parental Bond / Scale Shot interaction by @AlexOn1ine in [#8198](https://github.com/rh-hideout/pokeemerald-expansion/pull/8198) +* Avoid illegal GetBattlerAtPosition by @mrgriffin in [#8225](https://github.com/rh-hideout/pokeemerald-expansion/pull/8225) +* DamageContext: chosenMove by @mrgriffin in [#8224](https://github.com/rh-hideout/pokeemerald-expansion/pull/8224) +* AccuracyCheck: Avoid calling GetMoveEffect with NO_ACC_CALC_CHECK_LOC… by @mrgriffin in [#8222](https://github.com/rh-hideout/pokeemerald-expansion/pull/8222) +* moveend: Handle MOVE_UNAVAILABLE in MOVEEND_THIRD_MOVE_BLOCK by @mrgriffin in [#8215](https://github.com/rh-hideout/pokeemerald-expansion/pull/8215) +* Fix wrong ditto sprite on capture by @FosterProgramming in [#8226](https://github.com/rh-hideout/pokeemerald-expansion/pull/8226) +* SpriteCB_EnemyShadow: Avoid use-after-free by @mrgriffin in [#8220](https://github.com/rh-hideout/pokeemerald-expansion/pull/8220) +* trysethelpinghand avoid illegal target by @mrgriffin in [#8218](https://github.com/rh-hideout/pokeemerald-expansion/pull/8218) +* Fixed an issue related to same turn Encore targeting by @LinathanZel in [#8230](https://github.com/rh-hideout/pokeemerald-expansion/pull/8230) +* Avoid illegal move retargeting in singles by @mrgriffin in [#8217](https://github.com/rh-hideout/pokeemerald-expansion/pull/8217) +* Fixes Shell Trap not activating on contact but no damage by @AlexOn1ine in [#8243](https://github.com/rh-hideout/pokeemerald-expansion/pull/8243) +* Fix Magic Coat reflecting hazard moves incorrectly when used by a partner by @moostoet in [#8272](https://github.com/rh-hideout/pokeemerald-expansion/pull/8272) + - Magic Coat now properly reflects hazard moves from either slot in double battles. +* Shell Trap tests and Fix for Encore interaction by @AlexOn1ine in [#8268](https://github.com/rh-hideout/pokeemerald-expansion/pull/8268) +* Fix max mushroom unable to be selected when one stat is maxed by @FosterProgramming in [#8287](https://github.com/rh-hideout/pokeemerald-expansion/pull/8287) +* Block selecting x items when contrary pokemon are at minimum stages by @FosterProgramming in [#8288](https://github.com/rh-hideout/pokeemerald-expansion/pull/8288) +* Fix Fur Coat affecting confusion self-damage by @moostoet in [#8267](https://github.com/rh-hideout/pokeemerald-expansion/pull/8267) + - Fix confusion self-damage ignoring defense/attack abilities such as Fur Coat. +* Fixes End Turn Speed Order by @AlexOn1ine in [#8289](https://github.com/rh-hideout/pokeemerald-expansion/pull/8289) +* Make switchout abilities trigger after a pokemon has returned to its ball by @FosterProgramming in [#8304](https://github.com/rh-hideout/pokeemerald-expansion/pull/8304) +* Fix Shed Shell allowing fleeing/teleporting and Smoke Ball failing to guarantee escape by @moostoet in [#8286](https://github.com/rh-hideout/pokeemerald-expansion/pull/8286) +* Fix bug where defiant/competitive would pass their stat change to the next target by @FosterProgramming in [#8312](https://github.com/rh-hideout/pokeemerald-expansion/pull/8312) +* Fix max move message against semi invulnerable target by @FosterProgramming in [#8313](https://github.com/rh-hideout/pokeemerald-expansion/pull/8313) +* Fixes Neutralizing Gas displaying message when exiting with multiple users by @PhallenTree in [#8318](https://github.com/rh-hideout/pokeemerald-expansion/pull/8318) +* Fix Kings Rock not being ignored by flinch moves by @AlexOn1ine in [#8327](https://github.com/rh-hideout/pokeemerald-expansion/pull/8327) +* Fix Upper Hand failure still activating Protean by @AlexOn1ine in [#8329](https://github.com/rh-hideout/pokeemerald-expansion/pull/8329) +* Fix Protosynthesis stat boosts ignoring speed drops by @moostoet in [#8277](https://github.com/rh-hideout/pokeemerald-expansion/pull/8277) + - Protosynthesis and Quark Drive now recalculate their boosted stat when Speed is lowered or Neutralizing Gas temporarily disables the ability. +* Fix switch-in abilities not triggering on revive by @FosterProgramming in [#8293](https://github.com/rh-hideout/pokeemerald-expansion/pull/8293) +* More Neutralizing Gas cleanup by @PhallenTree in [#8335](https://github.com/rh-hideout/pokeemerald-expansion/pull/8335) +* Clear Destiny Bond/Grudge bits when not activated by @PhallenTree in [#8334](https://github.com/rh-hideout/pokeemerald-expansion/pull/8334) +* Fix cure status item effect not working properly in doubles by @FosterProgramming in [#8339](https://github.com/rh-hideout/pokeemerald-expansion/pull/8339) +* Fix infinite confusion (berserk gene) not being cured by cure_status bag items by @FosterProgramming in [#8343](https://github.com/rh-hideout/pokeemerald-expansion/pull/8343) +* Fix `B_PHYSICAL_SPECIAL_SPLIT` when set to Gen 4 by @AsparagusEduardo in [#8348](https://github.com/rh-hideout/pokeemerald-expansion/pull/8348) +* Refactor Beat Up handling for Gen 3/4 defaults, fix crit check, and expand test coverage by @moostoet in [#8307](https://github.com/rh-hideout/pokeemerald-expansion/pull/8307) + - BUGFIX: Beat Up (`GEN =< 5`) now no longer doubles its damage on every non-critical hit + - Beat Up now precomputes eligible party members/strikers for consistent multi-hit resolution and expanded tests covering both pre-Gen5 and Gen5+ rules +* Fix substitute graphic not disappearing after using a pivor move by @FosterProgramming in [#8340](https://github.com/rh-hideout/pokeemerald-expansion/pull/8340) +* Fixes Beak Blast burning after Beak Blast was already used by @PhallenTree in [#8361](https://github.com/rh-hideout/pokeemerald-expansion/pull/8361) +* Fix Roar not being recorded for LastUsedMove by @AlexOn1ine in [#8362](https://github.com/rh-hideout/pokeemerald-expansion/pull/8362) +* Fixes Neutralizing Gas / Mold Breaker / Dragon Darts interaction by @AlexOn1ine in [#8389](https://github.com/rh-hideout/pokeemerald-expansion/pull/8389) +* Fixes battle tv overwriting damage values by @AlexOn1ine in [#8378](https://github.com/rh-hideout/pokeemerald-expansion/pull/8378) +* Fix ball cycling not working properly when the same ball take multiple bag slots by @FosterProgramming in [#8163](https://github.com/rh-hideout/pokeemerald-expansion/pull/8163) + - Two new defines added to items.h `FIRST_BALL_INDEX` and `LAST_BALL_INDEX` + - We now assume the indexes of all regular ball usable in wild battle have consecutive indexes and some features (throw ball shortcut in battle) might break if not true +* Prevent double Dynamax for single-trainer 2v1 multi battles by @moostoet in [#8323](https://github.com/rh-hideout/pokeemerald-expansion/pull/8323) + - Fixed AI 2v1 multibattles incorrectly allowing both opponent leads to Dynamax in the same turn. + +## 🀹 Moves 🀹 +### Changed +* Separates FRB and FRZ animations by @grintoul1 in [#7611](https://github.com/rh-hideout/pokeemerald-expansion/pull/7611) +* Fixed test "Revival Blessing cannot revive a partner's party member" by @grintoul1 in [#8031](https://github.com/rh-hideout/pokeemerald-expansion/pull/8031) +* Fixed Uproar's description and spacing by @fdeblasio in [#8187](https://github.com/rh-hideout/pokeemerald-expansion/pull/8187) +* Clean usage of gMovesInfo by @AsparagusEduardo in [#8234](https://github.com/rh-hideout/pokeemerald-expansion/pull/8234) + - Also, fixed an OOB in `HasMoveThatChangesKOThreshold` +* Added Gen 6 contest combos by @fdeblasio in [#8251](https://github.com/rh-hideout/pokeemerald-expansion/pull/8251) +* Make tailwind anim mirror based on side by @FosterProgramming in [#8249](https://github.com/rh-hideout/pokeemerald-expansion/pull/8249) +* Make rainbow effect anim change based on side by @FosterProgramming in [#8269](https://github.com/rh-hideout/pokeemerald-expansion/pull/8269) + - Art assets by [SonikkuA-DatH](https://github.com/SonikkuA-DatH) +* Update Lash Out description to clarify its effect by @PhallenTree in [#8372](https://github.com/rh-hideout/pokeemerald-expansion/pull/8372) + +### Fixed +* Fix some move animations leaking VRAM and freeing already freed tags by @hedara90 in [#7977](https://github.com/rh-hideout/pokeemerald-expansion/pull/7977) + +## 🎭 Abilities 🎭 +### Changed +* followup: AbilityBattleEffects return type is incorrect by @khbsd in [#7827](https://github.com/rh-hideout/pokeemerald-expansion/pull/7827) + +## 🧢 Items 🧢 +### Fixed +* Allow vs seekers to work with script not starting with trainerbattle by @FosterProgramming in [#8062](https://github.com/rh-hideout/pokeemerald-expansion/pull/8062) + - VS seeker now work with trainers who don't start with trainer_battle. You can use `vsseeker_rematchid TRAINER_ID` to indicate that this NPC is a battling trainer and the game will fetch the appropriate rematch if necessary. ` vsseeker_rematchid` work like a `cant_see_if_trainerflag_set` with additional functionality to handle vs seeker. + - All NPCs who don't start with either `vsseeker_rematchid` or `trainerbattle` will show as "X"/unmatchable by the vs seeker, so non-rematchable trainer who do not start with `trainerbattle may "lie" and not show an excalmation mark showing they haven't been fought yet. This can be fixed by including a `vsseeker_rematchid` for them too. +* Removed extra period in PokΓ©shi Doll description by @montmoguri in [#8252](https://github.com/rh-hideout/pokeemerald-expansion/pull/8252) + +## πŸ€– Battle AI πŸ€– +### Added +* Improved move additional effect handling; now accounts for Shield Dust. by @surskitty in [#7650](https://github.com/rh-hideout/pokeemerald-expansion/pull/7650) +* Adjusted AI handling for Gravity; AI for weather/field status additional effects. by @surskitty in [#7651](https://github.com/rh-hideout/pokeemerald-expansion/pull/7651) +* Improved AI for status curing; trainer items, Purify, Smelling Salts, Sparkling Aria by @surskitty in [#7853](https://github.com/rh-hideout/pokeemerald-expansion/pull/7853) + +### Changed +* AI uses Magnetic Flux. by @surskitty in [#7642](https://github.com/rh-hideout/pokeemerald-expansion/pull/7642) +* AI uses Flower Shield. by @surskitty in [#7640](https://github.com/rh-hideout/pokeemerald-expansion/pull/7640) +* AI uses Life Dew. by @surskitty in [#7643](https://github.com/rh-hideout/pokeemerald-expansion/pull/7643) +* AI uses Gear Up. by @surskitty in [#7641](https://github.com/rh-hideout/pokeemerald-expansion/pull/7641) +* Correcting test AI won't use status moves if partner chose Helping Hand by @surskitty in [#7649](https://github.com/rh-hideout/pokeemerald-expansion/pull/7649) +* IncreaseStatUpScore adjustments for Simple, +3 moves, Acupressure, max move effects by @surskitty in [#7662](https://github.com/rh-hideout/pokeemerald-expansion/pull/7662) +* AI handling for Coaching. by @surskitty in [#7661](https://github.com/rh-hideout/pokeemerald-expansion/pull/7661) +* Simplifying calls to IsBattlerTrapped; treats being unable to switch as trappedness by @surskitty in [#7671](https://github.com/rh-hideout/pokeemerald-expansion/pull/7671) +* AI Tests: Gimmick Support by @mrgriffin in [#7694](https://github.com/rh-hideout/pokeemerald-expansion/pull/7694) +* AI can use Z-status moves by @surskitty in [#7666](https://github.com/rh-hideout/pokeemerald-expansion/pull/7666) +* Move some checks out of IncreaseStatUpScore to ShouldRaiseAnyStat by @surskitty in [#7722](https://github.com/rh-hideout/pokeemerald-expansion/pull/7722) +* Moving additional effects out of AI_CalcMoveEffectScore and into AI_CalcMoveAdditionalEffectScore by @surskitty in [#7727](https://github.com/rh-hideout/pokeemerald-expansion/pull/7727) +* AI sees dynamic moves and Nature Power as correct types for weather, terrain by @surskitty in [#7759](https://github.com/rh-hideout/pokeemerald-expansion/pull/7759) +* Fix abusable two-turn-move switch behaviour by @Pawkkie in [#7770](https://github.com/rh-hideout/pokeemerald-expansion/pull/7770) +* Z Status move handling: Conversion, Detect, Nature Power, Transform by @surskitty in [#7721](https://github.com/rh-hideout/pokeemerald-expansion/pull/7721) +* Use stored values for ai switch-in effectiveness checks by @AlexOn1ine in [#7794](https://github.com/rh-hideout/pokeemerald-expansion/pull/7794) +* Changing all HasBattlerSideAbility to AI_IsAbilityOnSide. by @surskitty in [#7927](https://github.com/rh-hideout/pokeemerald-expansion/pull/7927) +* Weather/Terrain AI touch-ups. by @surskitty in [#7933](https://github.com/rh-hideout/pokeemerald-expansion/pull/7933) +* Improving the checks for the AI to avoid Encore; adding RISK_ENCORE_CHANCE config. by @surskitty in [#7929](https://github.com/rh-hideout/pokeemerald-expansion/pull/7929) +* Fixes CanUseLastResort and resolves 3 KNOWN_FAILING Last Resort tests by @grintoul1 in [#8032](https://github.com/rh-hideout/pokeemerald-expansion/pull/8032) +* Add AI flag AI_FLAG_KNOW_OPPONENT_PARTY to know all species in party by @moostoet in [#8290](https://github.com/rh-hideout/pokeemerald-expansion/pull/8290) + +### Fixed +* Score adjustments towards guaranteed stat drops. by @surskitty in [#7670](https://github.com/rh-hideout/pokeemerald-expansion/pull/7670) +* AI uses Extreme Evoboost. by @surskitty in [#7706](https://github.com/rh-hideout/pokeemerald-expansion/pull/7706) +* Fixes AI scoring when Priority moves are blocked by @PhallenTree in [#7745](https://github.com/rh-hideout/pokeemerald-expansion/pull/7745) +* fix (AI scoring): shield dust considerations, IsMoveEffectInMinus self effect edge case, hitsToKO zero-case consideration by @ghostyboyy97 in [#8126](https://github.com/rh-hideout/pokeemerald-expansion/pull/8126) + - The AI now sees Shield Dust on the player's Pokemon correctly + - The AI now sees self-targeted positive effect boosts correctly +* fix (contrary): Contrary stat down handling in MoveEffectInPlus by @ghostyboyy97 in [#8165](https://github.com/rh-hideout/pokeemerald-expansion/pull/8165) + - When comparing positive move effects in damaging move comparison, the AI will correctly see moves like Leaf Storm as beneficial if their Pokemon has Contrary. +* Added check for parental bond killing through sturdy by @MaximeGr00 in [#8206](https://github.com/rh-hideout/pokeemerald-expansion/pull/8206) + - AI now accounts for Parental Bond when checking if a move can ko the player through sturdy/focus sash. +* AI: Handle MOVE_UNAVAILABLE in last used moves by @mrgriffin in [#8219](https://github.com/rh-hideout/pokeemerald-expansion/pull/8219) +* Fix AI_FLAG_DOUBLE_ACE_POKEMON sending duplicate PokΓ©mon in doubles by @moostoet in [#8279](https://github.com/rh-hideout/pokeemerald-expansion/pull/8279) + - Fixed AI_FLAG_DOUBLE_ACE_POKEMON trainers resending the same PokΓ©mon after a KO instead of their two Ace PokΓ©mon in double battles. +* Rework switch AI and add more tests for ace pokemon flags by @FosterProgramming in [#8321](https://github.com/rh-hideout/pokeemerald-expansion/pull/8321) + - All remaining issues with the AI flags Ace Pokemon and Double Ace pokemon should be fixed + - The smart switching AI should be less likely to switch a pokemon about to die if it doesn't have a pokemon with a good matchup to replace it +* Fix switchin KO threshold logic by @Pawkkie in [#8370](https://github.com/rh-hideout/pokeemerald-expansion/pull/8370) + +## 🧹 Other Cleanup 🧹 +* Update multiple battle messages by @AsparagusEduardo in [#7529](https://github.com/rh-hideout/pokeemerald-expansion/pull/7529) + - Removed unused messages + - Changed ability "X prevents Y" to "It doesn't affect X..." + - Eg. `"The opposing Snorlax's Immunity prevents poisoning!"` + - Removed `B_ABILITY_POP_UP`. Revert commit `b501fe7354bcd957396465c621ae7af5959ac5b0` to undo this. +* Battle debug menu now checks correct parties depending on battler party by @grintoul1 in [#7652](https://github.com/rh-hideout/pokeemerald-expansion/pull/7652) +* Correcting test AI won't use status moves if partner chose Helping Hand by @surskitty in [#7649](https://github.com/rh-hideout/pokeemerald-expansion/pull/7649) +* Remove Uproar attack battle script by @AlexOn1ine in [#7715](https://github.com/rh-hideout/pokeemerald-expansion/pull/7715) +* Fix up end turn scripts plus small documentation by @AlexOn1ine in [#7758](https://github.com/rh-hideout/pokeemerald-expansion/pull/7758) +* `field_name_box` smol followup by @mudskipper13 in [#7762](https://github.com/rh-hideout/pokeemerald-expansion/pull/7762) +* Remove redundant function call by @AlexOn1ine in [#7752](https://github.com/rh-hideout/pokeemerald-expansion/pull/7752) +* Minor White Herb and Neutralizing Gas clean up by @AlexOn1ine in [#7754](https://github.com/rh-hideout/pokeemerald-expansion/pull/7754) +* Minor clean up for Lightning Rod / Storm Drain by @AlexOn1ine in [#7778](https://github.com/rh-hideout/pokeemerald-expansion/pull/7778) +* Add func GetChosenMoveFromPosition by @AlexOn1ine in [#7810](https://github.com/rh-hideout/pokeemerald-expansion/pull/7810) +* GetBattlerHoldEffect clean up by @AlexOn1ine in [#7819](https://github.com/rh-hideout/pokeemerald-expansion/pull/7819) +* Remove unused gBattleStruct fields by @Bassoonian in [#7822](https://github.com/rh-hideout/pokeemerald-expansion/pull/7822) +* followup: AbilityBattleEffects return type is incorrect by @khbsd in [#7827](https://github.com/rh-hideout/pokeemerald-expansion/pull/7827) +* Streamline tryheal macros by @Bassoonian in [#7830](https://github.com/rh-hideout/pokeemerald-expansion/pull/7830) +* Remove two unused bits from battle structs by @Bassoonian in [#7835](https://github.com/rh-hideout/pokeemerald-expansion/pull/7835) +* Removes a few redundant hitmarkers by @AlexOn1ine in [#7915](https://github.com/rh-hideout/pokeemerald-expansion/pull/7915) +* Remove EffectHitSetTerrain script to use moveeffect by @AlexOn1ine in [#7938](https://github.com/rh-hideout/pokeemerald-expansion/pull/7938) +* Clean up follow up for AtkCanceller refactor by @AlexOn1ine in [#7951](https://github.com/rh-hideout/pokeemerald-expansion/pull/7951) +* Remove appearedInBattle bitfield & redundant use of sentOut partyState by @Nopinou in [#8011](https://github.com/rh-hideout/pokeemerald-expansion/pull/8011) +* Some more documentation and cleanup by @Bassoonian in [#8020](https://github.com/rh-hideout/pokeemerald-expansion/pull/8020) +* Volatile cleared in a redundant spot by @AlexOn1ine in [#8015](https://github.com/rh-hideout/pokeemerald-expansion/pull/8015) +* Moved usedHeldItem to Party State struct by @AlexOn1ine in [#8006](https://github.com/rh-hideout/pokeemerald-expansion/pull/8006) +* Remove usage of gBattlerTarget for MirrorHerb/Opportunist by @AlexOn1ine in [#8033](https://github.com/rh-hideout/pokeemerald-expansion/pull/8033) +* Even more enums and documentation by @Bassoonian in [#8029](https://github.com/rh-hideout/pokeemerald-expansion/pull/8029) +* Decouple (Overworld) Statuses from ability function by @AlexOn1ine in [#8002](https://github.com/rh-hideout/pokeemerald-expansion/pull/8002) +* Fixes Ruin field statuses negation conditions + upcoming cleanup by @PhallenTree in [#8042](https://github.com/rh-hideout/pokeemerald-expansion/pull/8042) +* Minor clean up in menu.c by @estellarc in [#8060](https://github.com/rh-hideout/pokeemerald-expansion/pull/8060) +* Clean up for item hold effect refactor by @AlexOn1ine in [#8014](https://github.com/rh-hideout/pokeemerald-expansion/pull/8014) +* Parametrized Ice Face's weather form change by @AsparagusEduardo in [#8115](https://github.com/rh-hideout/pokeemerald-expansion/pull/8115) +* Clean up redundant todo by @AlexOn1ine in [#8094](https://github.com/rh-hideout/pokeemerald-expansion/pull/8094) +* Deprecate various macro by @AlexOn1ine in [#8092](https://github.com/rh-hideout/pokeemerald-expansion/pull/8092) +* Fixes hacky SetMoveEffect script calls by @AlexOn1ine in [#7987](https://github.com/rh-hideout/pokeemerald-expansion/pull/7987) +* Create BattleStruct sub struct for event states by @AlexOn1ine in [#8131](https://github.com/rh-hideout/pokeemerald-expansion/pull/8131) +* Attackstring hitmarker clean up by @AlexOn1ine in [#8136](https://github.com/rh-hideout/pokeemerald-expansion/pull/8136) +* Clean up ability effect hitmarker by @AlexOn1ine in [#8138](https://github.com/rh-hideout/pokeemerald-expansion/pull/8138) +* Fix Kyurem typo in swap move tables by @Bassoonian in [#8139](https://github.com/rh-hideout/pokeemerald-expansion/pull/8139) +* Fix typo in Voltorb-Hisui pokedex entry by @PhallenTree in [#8143](https://github.com/rh-hideout/pokeemerald-expansion/pull/8143) +* porymap default settings by @FosterProgramming in [#8038](https://github.com/rh-hideout/pokeemerald-expansion/pull/8038) + - WARNING: A change was made for new projects map files to match poymap output. This change might break people's projects with existing versions of those files. The files affected are ` data/maps/map_groups.json`, `src/data/heal_locations.json`, `src/data/region_map/region_map_sections.json` and `src/data/wild_encounters.json` + If you have an issue with one of those files during the merging process, you should run this command + `git checkout HEAD -- ` + which will reset the file to the version before you initiated the merge +* Sets instant text speed flag to false by default by @khbsd in [#8179](https://github.com/rh-hideout/pokeemerald-expansion/pull/8179) +* Remove redundant Future Sight flag by @AlexOn1ine in [#8185](https://github.com/rh-hideout/pokeemerald-expansion/pull/8185) +* Fix incorrect comments by @AlexOn1ine in [#8193](https://github.com/rh-hideout/pokeemerald-expansion/pull/8193) +* Fixed Uproar's description and spacing by @fdeblasio in [#8187](https://github.com/rh-hideout/pokeemerald-expansion/pull/8187) +* Add include/constants/script_commands.h to gitignore by @AlexOn1ine in [#8169](https://github.com/rh-hideout/pokeemerald-expansion/pull/8169) +* Powder Move blocking cleanup by @PhallenTree in [#8194](https://github.com/rh-hideout/pokeemerald-expansion/pull/8194) +* Converted landmarks to COMPOUND_STRINGs by @fdeblasio in [#8205](https://github.com/rh-hideout/pokeemerald-expansion/pull/8205) +* Micro clean up in BattleStruct by @AlexOn1ine in [#8177](https://github.com/rh-hideout/pokeemerald-expansion/pull/8177) +* Clean usage of gMovesInfo by @AsparagusEduardo in [#8234](https://github.com/rh-hideout/pokeemerald-expansion/pull/8234) + - Also, fixed an OOB in `HasMoveThatChangesKOThreshold` +* HandleAction_UseMove minor cleanup by @mrgriffin in [#8214](https://github.com/rh-hideout/pokeemerald-expansion/pull/8214) +* Revert gBattleTurnCounter change by @AlexOn1ine in [#8197](https://github.com/rh-hideout/pokeemerald-expansion/pull/8197) +* Added contest config and cleaned up contest category variables by @fdeblasio in [#8178](https://github.com/rh-hideout/pokeemerald-expansion/pull/8178) +* Adjust Canceler naming to contain only one l by @AlexOn1ine in [#8258](https://github.com/rh-hideout/pokeemerald-expansion/pull/8258) +* Fix wrongly renamed logs by @AlexOn1ine in [#8264](https://github.com/rh-hideout/pokeemerald-expansion/pull/8264) +* Test type enum indentation by @AsparagusEduardo in [#8273](https://github.com/rh-hideout/pokeemerald-expansion/pull/8273) +* Added missing 'coolness' string by @fdeblasio in [#8274](https://github.com/rh-hideout/pokeemerald-expansion/pull/8274) +* Canceller -> Canceler rename by @AlexOn1ine in [#8294](https://github.com/rh-hideout/pokeemerald-expansion/pull/8294) +* Tests for Max Moves already exist by @AlexOn1ine in [#8314](https://github.com/rh-hideout/pokeemerald-expansion/pull/8314) +* Documentation clean up for MoveCanceler by @AlexOn1ine in [#8297](https://github.com/rh-hideout/pokeemerald-expansion/pull/8297) +* Use MAP_OFFSET by @estellarc in [#8328](https://github.com/rh-hideout/pokeemerald-expansion/pull/8328) +* Remove leftover scrtipt redirection by @AlexOn1ine in [#8317](https://github.com/rh-hideout/pokeemerald-expansion/pull/8317) +* Fixed broken friendship from items in battle test and added new test for opposite case by @pkmnsnfrn in [#7872](https://github.com/rh-hideout/pokeemerald-expansion/pull/7872) +* Expand usage of FaintedActions enum in HandleFaintedMonActions by @PhallenTree in [#8346](https://github.com/rh-hideout/pokeemerald-expansion/pull/8346) +* Move end clear bits clean up by @AlexOn1ine in [#8354](https://github.com/rh-hideout/pokeemerald-expansion/pull/8354) +* Indent unintented if statement by @hedara90 in [#8367](https://github.com/rh-hideout/pokeemerald-expansion/pull/8367) +* Update Lash Out description to clarify its effect by @PhallenTree in [#8372](https://github.com/rh-hideout/pokeemerald-expansion/pull/8372) +* Slight Protect moveend cleanup by @AsparagusEduardo in [#8385](https://github.com/rh-hideout/pokeemerald-expansion/pull/8385) +* Restored encourageEncore flag to non-volatile status effects by @AsparagusEduardo in [#8387](https://github.com/rh-hideout/pokeemerald-expansion/pull/8387) + +## πŸ§ͺ Test Runner πŸ§ͺ +### Added +* Multibattle testing system by @grintoul1 in [#7257](https://github.com/rh-hideout/pokeemerald-expansion/pull/7257) +* Prevent EXPECT functions from casting negative numbers into unsigned by @FosterProgramming in [#7866](https://github.com/rh-hideout/pokeemerald-expansion/pull/7866) + +### Changed +* AI Tests: Gimmick Support by @mrgriffin in [#7694](https://github.com/rh-hideout/pokeemerald-expansion/pull/7694) +* Some tests for future Dynamax AI behavior. by @surskitty in [#7707](https://github.com/rh-hideout/pokeemerald-expansion/pull/7707) +* Add some missing move animations to the move animation tests by @FosterProgramming in [#7507](https://github.com/rh-hideout/pokeemerald-expansion/pull/7507) +* Fixes CanUseLastResort and resolves 3 KNOWN_FAILING Last Resort tests by @grintoul1 in [#8032](https://github.com/rh-hideout/pokeemerald-expansion/pull/8032) +* Fixed test "Revival Blessing cannot revive a partner's party member" by @grintoul1 in [#8031](https://github.com/rh-hideout/pokeemerald-expansion/pull/8031) +* Added Soundproof and Bulletproof tests by @AsparagusEduardo in [#8189](https://github.com/rh-hideout/pokeemerald-expansion/pull/8189) +* Wrote some missing tests by @AsparagusEduardo in [#8203](https://github.com/rh-hideout/pokeemerald-expansion/pull/8203) +* Refactor random functions to be runner specific by @FosterProgramming in [#7816](https://github.com/rh-hideout/pokeemerald-expansion/pull/7816) +* A couple more tests by @AsparagusEduardo in [#8209](https://github.com/rh-hideout/pokeemerald-expansion/pull/8209) +* Fixed some failing tests with GEN_LATEST = GEN_5 by @AsparagusEduardo in [#8241](https://github.com/rh-hideout/pokeemerald-expansion/pull/8241) +* Add test for mold breaker/ice scales interaction by @FosterProgramming in [#8240](https://github.com/rh-hideout/pokeemerald-expansion/pull/8240) +* Yet more tests by @AsparagusEduardo in [#8228](https://github.com/rh-hideout/pokeemerald-expansion/pull/8228) + - Added tests for: + - Dark Aura + - Fairy Aura + - Flare Boost + - Toxic Boost + - Added test names for Flying Press. +* Test type enum indentation by @AsparagusEduardo in [#8273](https://github.com/rh-hideout/pokeemerald-expansion/pull/8273) +* Slightly increase headless test speed by modifying animations by @AsparagusEduardo in [#8299](https://github.com/rh-hideout/pokeemerald-expansion/pull/8299) +* Make `gTestRunnerHeadless` into a constant outside of tests by @hedara90 in [#8306](https://github.com/rh-hideout/pokeemerald-expansion/pull/8306) +* Tests for Max Moves already exist by @AlexOn1ine in [#8314](https://github.com/rh-hideout/pokeemerald-expansion/pull/8314) +* Finished fixing tests when setting `GEN_LATEST` to `GEN_5` by @AsparagusEduardo in [#8263](https://github.com/rh-hideout/pokeemerald-expansion/pull/8263) +* Wrote missing Fling tests by @AsparagusEduardo in [#8383](https://github.com/rh-hideout/pokeemerald-expansion/pull/8383) + +### Fixed +* Corrects ONE_VS_TWO_BATTLE_TEST to use BATTLE_TEST_ARGS_ONE_VS_TWO by @grintoul1 in [#8061](https://github.com/rh-hideout/pokeemerald-expansion/pull/8061) +* Fixes difficulty not being restored after tests by @grintoul1 in [#8129](https://github.com/rh-hideout/pokeemerald-expansion/pull/8129) +* Reset saveblock data between test runs by @hedara90 in [#8145](https://github.com/rh-hideout/pokeemerald-expansion/pull/8145) +* Sheer force test fix by @grintoul1 in [#8142](https://github.com/rh-hideout/pokeemerald-expansion/pull/8142) +* Test only enabled species by @mrgriffin in [#8216](https://github.com/rh-hideout/pokeemerald-expansion/pull/8216) +* Fix ohko moves ai tests by @FosterProgramming in [#8309](https://github.com/rh-hideout/pokeemerald-expansion/pull/8309) +* Fixed broken friendship from items in battle test and added new test for opposite case by @pkmnsnfrn in [#7872](https://github.com/rh-hideout/pokeemerald-expansion/pull/7872) +* Add tests to verify aromatherapy is not affected by heal bell config by @FosterProgramming in [#8344](https://github.com/rh-hideout/pokeemerald-expansion/pull/8344) +* Pre gen 5 encored move now signals the test engine a move is happening by @FosterProgramming in [#8338](https://github.com/rh-hideout/pokeemerald-expansion/pull/8338) +* Refactor Beat Up handling for Gen 3/4 defaults, fix crit check, and expand test coverage by @moostoet in [#8307](https://github.com/rh-hideout/pokeemerald-expansion/pull/8307) + - BUGFIX: Beat Up (`GEN =< 5`) now no longer doubles its damage on every non-critical hit + - Beat Up now precomputes eligible party members/strikers for consistent multi-hit resolution and expanded tests covering both pre-Gen5 and Gen5+ rules +* Fix player and partner trainer sprite palettes to 8 and 9, preventing unwanted palette changes by @grintoul1 in [#8127](https://github.com/rh-hideout/pokeemerald-expansion/pull/8127) +* Fix known failing AI trace test by @FosterProgramming in [#8337](https://github.com/rh-hideout/pokeemerald-expansion/pull/8337) + +## πŸ“š Documentation πŸ“š +* Converts some defines to enums and name unnamed enums by @Bassoonian in [#8019](https://github.com/rh-hideout/pokeemerald-expansion/pull/8019) +* Some more documentation and cleanup by @Bassoonian in [#8020](https://github.com/rh-hideout/pokeemerald-expansion/pull/8020) +* Even more enums and documentation by @Bassoonian in [#8029](https://github.com/rh-hideout/pokeemerald-expansion/pull/8029) +* Add type enum by @Bassoonian in [#8054](https://github.com/rh-hideout/pokeemerald-expansion/pull/8054) +* Revert reversion by @AlexOn1ine in [#8112](https://github.com/rh-hideout/pokeemerald-expansion/pull/8112) +* Lock mdbook to v0.4.35 to fix docs not building by @grintoul1 in [#8130](https://github.com/rh-hideout/pokeemerald-expansion/pull/8130) +* Add additional comment explaing map name popup transparency side-effects by @FosterProgramming in [#8117](https://github.com/rh-hideout/pokeemerald-expansion/pull/8117) +* Fix incorrect comments by @AlexOn1ine in [#8193](https://github.com/rh-hideout/pokeemerald-expansion/pull/8193) +* Moves name box configs into a new file by @AlexOn1ine in [#8250](https://github.com/rh-hideout/pokeemerald-expansion/pull/8250) +* Fix wrongly renamed logs by @AlexOn1ine in [#8264](https://github.com/rh-hideout/pokeemerald-expansion/pull/8264) +* Documentation clean up for MoveCanceler by @AlexOn1ine in [#8297](https://github.com/rh-hideout/pokeemerald-expansion/pull/8297) +* Use MAP_OFFSET by @estellarc in [#8328](https://github.com/rh-hideout/pokeemerald-expansion/pull/8328) +* Fedora install instructions by @estellarc in [#8355](https://github.com/rh-hideout/pokeemerald-expansion/pull/8355) + +## New Contributors +* @purrfectdoodle made their first contribution in [#7689](https://github.com/rh-hideout/pokeemerald-expansion/pull/7689) +* @montmoguri made their first contribution in [#8252](https://github.com/rh-hideout/pokeemerald-expansion/pull/8252) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.13.3...expansion/1.14.0 + + + + diff --git a/docs/changelogs/1.14.x/1.14.1.md b/docs/changelogs/1.14.x/1.14.1.md new file mode 100644 index 000000000000..1e1631707608 --- /dev/null +++ b/docs/changelogs/1.14.x/1.14.1.md @@ -0,0 +1,22 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.14.1 +`. +``` + + +## 🧬 General 🧬 +### Changed +* Pret merge, (1st of December, 2025) by @hedara90 in [#8402](https://github.com/rh-hideout/pokeemerald-expansion/pull/8402) + - This changes all the audio samples from `.aif` to `.wav`, `.aif` support is removed. + - There's a migration script to convert from `.bin` to `.wav` in `migration_scripts/1.14/bin_to_wav.py`. + - Run the migration script with `python migration_scripts/1.14/bin_to_wav.py path/to/folder/with/bin/samples` + + + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.14.0...expansion/1.14.1 + + + + diff --git a/docs/fix_links.py b/docs/fix_links.py index 6e2eaec48546..3a4184b72ccb 100644 --- a/docs/fix_links.py +++ b/docs/fix_links.py @@ -46,6 +46,6 @@ def proc_items(items): sys.exit(0) context, book = json.load(sys.stdin) - proc_items(book['sections']) + proc_items(book['items']) print(json.dumps(book)) diff --git a/docs/install/linux/FEDORA.md b/docs/install/linux/FEDORA.md new file mode 100644 index 000000000000..0dba9c1e7808 --- /dev/null +++ b/docs/install/linux/FEDORA.md @@ -0,0 +1,6 @@ +# Fedora instructions +## Installing dependencies +Open a terminal and run the following command from the command line: +```console +sudo dnf install gcc g++ arm-none-eabi-binutils-cs arm-none-eabi-gcc-cs arm-none-eabi-newlib git libpng-devel python3 +``` diff --git a/docs/local_mdbook/index.md b/docs/local_mdbook/index.md index ef362dc45f77..fa4b7f1e7061 100644 --- a/docs/local_mdbook/index.md +++ b/docs/local_mdbook/index.md @@ -1,2 +1,2 @@ ## Running documentation website locally -- [Ubuntu WSL1/WSL2](/docs/local_mdbook/ubuntu_WSL.md) +- [Ubuntu WSL1/WSL2](ubuntu_WSL.md) diff --git a/docs/team_procedures/merge_checklist.md b/docs/team_procedures/merge_checklist.md index ae3ff60b192e..53e8d7683fcb 100644 --- a/docs/team_procedures/merge_checklist.md +++ b/docs/team_procedures/merge_checklist.md @@ -7,7 +7,7 @@ This document is a guide for maintainers to account for all the reccomended step # Checklist ## Is the branch's theoretical functionality in scope? -If you're not sure if a branch's functionality is [in scope](docs/team_procedures/scope.md), start a conversation on Discord to resolve. +If you're not sure if a branch's functionality is [in scope](scope.md), start a conversation on Discord to resolve. ## Does the branch successfully compile? From `make clean`, the branch should locally compile. @@ -37,18 +37,18 @@ If you're not sure if something CAN be tested, start a discussion. Some contribu If any new tests are `KNOWN_FAILING`, issues should be opened describing each of the `KNOWN_FAILING` tests and our understanding of why they fail. -## Does the branch meet our [config philosophy](/docs/STYLEGUIDE.md#config-philosophy)? +## Does the branch meet our [config philosophy](../STYLEGUIDE.md#config-philosophy)? -## Does the branch meet our [saves philosophy](/docs/STYLEGUIDE.md#saves-philosophy)? +## Does the branch meet our [saves philosophy](../STYLEGUIDE.md#saves-philosophy)? -## Does the submitted code follow the [styleguide](/docs/STYLEGUIDE.md)? +## Does the submitted code follow the [styleguide](../STYLEGUIDE.md)? This applies to code that comes from other branches or games. ## Is the pull request appropriately labeled? Without labels, the CHANGELOG will not be properly formatted. For specifically the `bugfix` label, an additional label, detailing what area the bug exists in is required. ## Is `pokeemerald-expansion` free from a merge freeze? -Our [release schedule](/docs/team_procedures/schedule.md) prevents us from merging Big Features and non-bugfixes within certain dates close to a release. Please use `/release` in the RHH Discord to clarify when these are occuring. +Our [release schedule](schedule.md) prevents us from merging Big Features and non-bugfixes within certain dates close to a release. Please use `/release` in the RHH Discord to clarify when these are occuring. # Merging diff --git a/docs/team_procedures/schedule.md b/docs/team_procedures/schedule.md index c689e5b45457..520c4af00018 100644 --- a/docs/team_procedures/schedule.md +++ b/docs/team_procedures/schedule.md @@ -53,4 +53,4 @@ This designation should be reserved for instances where an existing feature on ` Blocking issues or PRs can be deferred to future releases but should be discussed with the Maintainers that assigned the designation in the first place. -If a version's milestone does not have any issues or PRs assigned to it, that version should be [released](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/docs/team_procedures/expansion_versions.md) as close to the goal date as possible. +If a version's milestone does not have any issues or PRs assigned to it, that version should be [released](expansion_versions.md) as close to the goal date as possible. diff --git a/docs/tutorials/ai_flags.md b/docs/tutorials/ai_flags.md index b0ecc8d77ab1..2c13cee8bdef 100644 --- a/docs/tutorials/ai_flags.md +++ b/docs/tutorials/ai_flags.md @@ -33,7 +33,7 @@ Expansion has a few "composite" AI flags. This means that these flags have no un `AI_FLAG_BASIC_TRAINER` is expansion's version of generic, normal AI behaviour. It includes `AI_FLAG_CHECK_BAD_MOVE` (don't use bad moves), `AI_FLAG_TRY_TO_FAINT` (faint the player where possible), and `AI_FLAG_CHECK_VIABILITY` (choose the most effective move to use in the current context). Trainers with this flag will still be smarter than they are in vanilla as there have been dramatic improvements made to move selection, but not incredibly so. Trainers with this flag should feel like normal trainers. In general we recommend these three flags be used in all cases, unless you specifically want a trainer who makes obvious mistakes in battle. -`AI_FLAG_SMART_TRAINER` is expansion's version of a "smart AI". It includes everything in `AI_FLAG_BASIC_TRAINER` along with `AI_FLAG_SMART_SWITCHING` (make smart decisions about when to switch), `AI_FLAG_SMART_MON_CHOICES` (make smart decisions about what mon to send in after a switch / KO), and `AI_FLAG_OMNISCIENT` (awareness of what moves, items, and abilities the player's mons have to better inform decisions). Expansion will keep this updated to represent the most objectively intelligent behaviour our flags are capable of producing. +`AI_FLAG_SMART_TRAINER` is expansion's version of a "smart AI". It includes everything in `AI_FLAG_BASIC_TRAINER` along with `AI_FLAG_SMART_SWITCHING` (make smart decisions about when to switch), `AI_FLAG_SMART_MON_CHOICES` (make smart decisions about what mon to send in after a switch / KO), `AI_FLAG_OMNISCIENT` (awareness of what moves, items, and abilities the player's mons have to better inform decisions), and `AI_FLAG_SMART_TERA` (make smart decisions about when to terastalize). Expansion will keep this updated to represent the most objectively intelligent behaviour our flags are capable of producing. `AI_FLAG_PREDICTION` will enable all of the prediction flags at once, so the AI can perform as well as possible. It is best paired with the flags in `AI_FLAG_SMART_TRAINER` for optimal behaviour. This currently includes `AI_FLAG_PREDICT_SWITCH` and `AI_FLAG_PREDICT_INCOMING_MON`, but will likely be expanded in the future. @@ -54,6 +54,9 @@ This flag is divided into two components to calculate the best available move fo This is different to `AI_FLAG_CHECK_BAD_MOVE` as it calculates how poor a move is and not whether it will fail or not. +## `AI_FLAG_ATTACKS_PARTNER` +This flag is meant for double battles where both of the opponents hate each other. They prioritize damage to their 'partner' over the player. + ## `AI_FLAG_FORCE_SETUP_FIRST_TURN` AI will prioritize using setup moves on the first turn at the expense of all else. These include stat buffs, field effects, status moves, etc. AI_FLAG_CHECK_VIABILITY will instead do this when the AI determines it makes sense. @@ -144,6 +147,16 @@ Marks the last two PokΓ©mon in the party as Ace PokΓ©mon, with the same behaviou ## `AI_FLAG_OMNISCIENT` AI has full knowledge of player moves, abilities, and hold items, and can use this knowledge when making decisions. +## `AI_FLAG_ASSUME_STAB` +A significantly more restricted version of `AI_FLAG_OMNISCIENT`, the AI only knows the player's STAB moves, as their existence would be reasonable to assume in almost any case. + +## `AI_FLAG_ASSUME_STATUS_MOVES` +A more restricted version of `AI_FLAG_OMNISCIENT`. The AI has a _chance_ to know what status moves the player has, plus additionally Fake Out and fixed percentage moves like Super Fang. The intention is so that if the AI has a counterplay implemented, it will seem to have guessed if the player's pokemon has a move, without giving the AI perfect information. For example, with Omniscient set, the AI will not usually put a pokemon to sleep if it has Sleep Talk; with neither Assume Powerful Status nor Omniscient set, the AI will always assume the pokemon does not have Sleep Talk. + +By default, there are three groups of higher likelihood status moves defined in `include/config/ai.h` under `ASSUME_STATUS_HIGH_ODDS`, `ASSUME_STATUS_MEDIUM_ODDS`, and `ASSUME_STATUS_LOW_ODDS`. Moves are sorted in `src/battle_ai_util.c` within `ShouldRecordStatusMove()`. + +Any move that is not special cased is then potentially caught by `ASSUME_ALL_STATUS_ODDS`. + ## `AI_FLAG_SMART_MON_CHOICES` Affects what the AI chooses to send out after a switch. AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are handled separately. Automatically included when `AI_FLAG_SMART_SWITCHING` is enabled. @@ -180,6 +193,9 @@ AI will determine whether it would switch out in the player's situation or not, ## `AI_FLAG_PREDICT_INCOMING_MON` This flag requires `AI_FLAG_PREDICT_SWITCH` to function. If the AI predicts that the player will switch, this flag allows the AI to run its move scoring calculation against the PokΓ©mon it expects the player to switch into, instead of the PokΓ©mon that it expects to switch out. +## `AI_FLAG_SMART_TERA` +AI will make smarter decisions about when to terastalize (over the default behaviour to always tera when available). This considers factors such as whether tera allows the AI to KO the opponent, whether it can save itself from a KO or a big hit, and how many remaining pokemon could terastalize. This behavior is not currently supported in double battles. + ## `AI_FLAG_PREDICT_MOVE` AI will predict what move the player is going to use based on what move it would use in the same situation. Generally works best if also using `AI_FLAG_OMNISCIENT`. diff --git a/docs/tutorials/dns.md b/docs/tutorials/dns.md index 350957f07630..6fdd1c1d7732 100644 --- a/docs/tutorials/dns.md +++ b/docs/tutorials/dns.md @@ -12,6 +12,9 @@ If you intend to use vanilla maps and have not already edited them, revert commi If you _have_ edited vanilla maps, the merge conflicts from reverting that commit will cause problems. If you are using vanilla maps, manually copy some of the tileset changes, `.pal`, and `.pla` files in your branch, and begin rebuilding your metatiles to have windows use the palettes that have a `.pla` for light blending the correct color slots. [Triple-layer metatiles](https://github.com/pret/pokeemerald/wiki/Triple-layer-metatiles) are highly recommended. +WARNING: [As per issue #7034](https://github.com/rh-hideout/pokeemerald-expansion/issues/7034) if you follow this tutorial reverting the previously mentioned commit to use the updated palettes in the Hoenn maps and *after* that you try to follow the [Triple-layer metatiles tutorial](https://github.com/pret/pokeemerald/wiki/Triple-layer-metatiles), you'll encounter an issue when running the script to update old tilesets to support triple-layer metatiles. +Follow the band-aid fix proposed in that issue after this tutorial but before following the triple-layer metatiles tutorial if you want everythign to work properly with light-blended palettes and triple-layer metatiles together. + You will also want to add the lighting object events from that commit. If you are not using Hoenn maps, the primary concern is that you do not use the exact same palette indices for colors you want to be darkened during night time and colors you want to light up. Err towards not light blending a color if you aren't sure how to avoid conflicts. @@ -20,8 +23,8 @@ When writing map scripts, `fadescreenswapbuffers` should be preferred over `fade ### Q: How do I make lightbulbs glow? -![Rustboro before adding lamp object events](/docs/tutorials/img/dns/without_lamp.png) -![Rustboro after adding lamp object events](/docs/tutorials/img/dns/with_lamp.png) +![Rustboro before adding lamp object events](img/dns/without_lamp.png) +![Rustboro after adding lamp object events](img/dns/with_lamp.png) A: Making lamps glow is not part of the tileset itself. Instead, place certain object events on top of where you desire a glowing effect. @@ -45,7 +48,7 @@ on separate lines to mark those colors as being light-blended, i.e: During the day time, these color indices appear as normal, but will be blended with either yellow or the 0 index at night. These indices should only be used for things you expect to light up. If you are using [porytiles](https://github.com/grunt-lucas/porytiles/wiki), palette overrides and using slight alterations to a color will aid you in avoiding color conflicts where the wrong index is assigned. -![Rustboro gym after light-blending the windows](/docs/tutorials/img/dns/window_lights.png) +![Rustboro gym after light-blending the windows](img/dns/window_lights.png) The windows appear as normal during the day time (blue) and light up in the night. These use the default color. diff --git a/docs/tutorials/how_to_apricorn_tree.md b/docs/tutorials/how_to_apricorn_tree.md new file mode 100644 index 000000000000..1efd5f62febf --- /dev/null +++ b/docs/tutorials/how_to_apricorn_tree.md @@ -0,0 +1,58 @@ +# How to interact with Apricorn Trees + +![apricorn-tree](/docs/tutorials/img/apricorn_tree/apricorn-tree.gif) + +### Adding a new apricorn tree + +To add a new tree, first increase the tree count and expand the tree list in `include/constants/apricorn_tree.h`. + +Note that each tree will take a bit in the savegame's `SaveBlock3` struct so increasing `APRICORN_TREE_COUNT` **breaks the savegame**. +Due to this, pokeemerald-expansion doesn't have any trees set up by default to prevent breaking downstream savegames. +The trees support random yields and properly use plural case on plural yields. + +```diff +#define APRICORN_TREE_NONE 0 + +-#define APRICORN_TREE_COUNT 0 ++#define APRICORN_TREE_ROUTE101_RED_TREE 1 ++ ++#define APRICORN_TREE_COUNT 32 +``` + +Then list its data in `src/data/apricorns.h`. + +```diff +const struct ApricornTree gApricornTrees[APRICORN_TREE_COUNT] = +{ + [APRICORN_TREE_NONE] = + { + .minimum = 1, + .maximum = 1, + .apricornType = APRICORN_RED, + }, + ++ [APRICORN_TREE_ROUTE101_RED_TREE] = ++ { ++ .minimum = 1, ++ .maximum = 1, ++ .apricornType = APRICORN_RED, ++ }, +}; +``` +Finally, just place your new tree using Porymap. +Similarly to berries, the Sight Radius / Berry Tree ID field is used for the tree's ID. + +![apricorn-tree-porymap](/docs/tutorials/img/apricorn_tree/apricorn-tree-porymap.png) + +### Add a new apricorn type + +After you created your new item, simply expand the `ApricornType` enum in `include/constants/apricorn_tree.h`. + +```diff +enum ApricornType +{ + [...] + APRICORN_BERRY_MARANGA = ITEM_MARANGA_BERRY, ++ APRICORN_BROWN = ITEM_BROWN_APRICORN, +}; +``` diff --git a/docs/tutorials/how_to_battle_script_command_macro.md b/docs/tutorials/how_to_battle_script_command_macro.md index 2bbf503fbe13..911da7d09c43 100644 --- a/docs/tutorials/how_to_battle_script_command_macro.md +++ b/docs/tutorials/how_to_battle_script_command_macro.md @@ -12,36 +12,33 @@ In general, `gBattlescriptCurrInstr` tracks the current battle script position a ``` `callnative` uses the last battle script command ID in order to pass a native function as an argument. Additional optional arguments are added recursively via a macro, so no need to worry about how they need to align to the amount of instructions to skip. -Now, how might we add a custom `callnative` command? Here are the steps. We will use `BS_TrySetOctolock` as an example. +Now, how might we add a custom `callnative` command? Here are the steps. We will use `BS_JumpIfTerrainAffected` as an example. ### 1. Create a macro in `asm/macros/battle_script.inc`. For example: ```c - .macro trysetoctolock battler:req, failInstr:req - callnative BS_TrySetOctolock + .macro jumpifterrainaffected battler:req, terrainFlags:req, jumpInstr:req + callnative BS_JumpIfTerrainAffected .byte \battler - .4byte \failInstr + .4byte \terrainFlags + .4byte \jumpInstr .endm ``` ### 2. Add your new callnative command ID to `src/battle_script_commands.c`. For example: ```c -void BS_TrySetOctolock(void) +void BS_JumpIfTerrainAffected(void) { - NATIVE_ARGS(u8 battler, const u8 *failInstr); + NATIVE_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gDisableStructs[battler].octolock) - { - gBattlescriptCurrInstr = cmd->failInstr; - } + if (IsBattlerTerrainAffected(battler, cmd->flags)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - gDisableStructs[battler].octolock = TRUE; - gBattleMons[battler].status2 |= STATUS2_ESCAPE_PREVENTION; - gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker; gBattlescriptCurrInstr = cmd->nextInstr; - } } ``` -Each of the arguments defined in the macro (`battler`, `failInstr`) need to be called at the start of the command using `NATIVE_ARGS`. +Each of the arguments defined in the macro (`battler`, `flags`, `failInstr`) need to be called at the start of the command using `NATIVE_ARGS`. The byte count in the macro should correspond to the type that will be used for the command (eg, `u8` is `byte`, while the pointer are `4byte`). -These arguments can then be accessed as `cmd->battler` and `cmd->battler`. -`gBattlescriptCurrInstr = cmd->nextInstr;` advances to the next instruction. +These arguments can then be accessed as `cmd->battler`, `cmd->flags` and `cmd->failInstr`. +Note that for `cmd->battler` we need to use `GetBattlerForBattleScript` to fetch the correct battler because with the macro we are accessing a scripting command that doesn't corresponds to `gBattlerTarget`, `gBattlerAttacker`, etc. +For the battler argument specifically, most of the time the battler is accessed through `gBattlerAttacker`, `gBattlerTarget` and the battler argument left out. +In the majority of cases, this is fine since the script commands are mostly used for moves and the interaction is usually between an attacker and target. +A script command usually ends with either a jump or next instruction `gBattlescriptCurrInstr = cmd->nextInstr / cmd->nextInstr;` advancing to the next instruction. diff --git a/docs/tutorials/how_to_follower_npc.md b/docs/tutorials/how_to_follower_npc.md index e55e6d814925..fbd0087859fc 100644 --- a/docs/tutorials/how_to_follower_npc.md +++ b/docs/tutorials/how_to_follower_npc.md @@ -2,7 +2,7 @@ *Written by Bivurnum* *gif by ghoulslash* -![follower-npc](/docs/tutorials/img/follower_npc/follower-npc.gif) +![follower-npc](img/follower_npc/follower-npc.gif) ## Configs The configs for follower NPCs can be found in [include/config/follower_npc.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/upcoming/include/config/follower_npc.h). @@ -24,11 +24,14 @@ This would turn object number 3 on the current map into an NPC follower, give th The object ***MUST*** have an event flag or the NPC follower will not be created! +## Create a Follower +The `createfollowernpc` macro will create a new follower without needing to convert an existing NPC. It works similarly to `setfollowernpc`, but instead of providing an object id, you give it a GFX id. For example, if you wanted to create a follower with the May sprite, you could do something like this: +`createfollowernpc OBJ_EVENT_GFX_RIVAL_MAY_NORMAL, FNPC_ALL, EventScript_MayFollow` +The created follower NPC will initially be invisible until the player takes a step. + ## Follower Flags These are required to tell the game what behavior you want the NPC follower to have. They are defined in [include/constants/follower_npc.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/upcoming/include/constants/follower_npc.h). The second list of flags is the same as the first, but with shortened names to make them easier to type when scripting. The first 7 flags in the list are individual behaviors, whereas the remaining three are bundles of flags. For example, if you use `FNPC_SURF` in `setfollowernpc`, the NPC follower will be able to Surf behind the player. If you use `FNPC_ALL_WATER` instead, the NPC follower will be able to Dive and go up Waterfalls in addition to being able to Surf. Feel free to add your own custom bundles of flags to the file to meet your needs. -If the NPC doesn't have unique running frames, you should not use the `FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES`(`FNPC_RUNNING`) flag for them, as this will cause visual glitching. If the flag is not used, the follower will simply use their regular walking animation frames, just sped up. The only objects currently in the game that have unique running frames are the player and rival characters, so the running frames flag should be used for those. - To make sure the NPC follower uses the correct animation frames, you should add an entry to `gFollowerAlternateSprites` in [include/follower_npc_alternate_sprites.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/upcoming/include/follower_npc_alternate_sprites.h). Only do this if your object has distinct animation frames for different behaviors (running, biking, surfing, etc). Follow the templates for Rival May and Rival Brendan that already exist there. ## Follower Movements diff --git a/docs/tutorials/how_to_namebox.md b/docs/tutorials/how_to_namebox.md new file mode 100644 index 000000000000..db059af61df3 --- /dev/null +++ b/docs/tutorials/how_to_namebox.md @@ -0,0 +1,100 @@ +# How to Use Namebox + +_New implementation made by mudskipper13, originally made by Tustin2121._ + +## Overview + +![Npc Trainers](/docs/tutorials/img/namebox/npc_trainers.gif) +![Pokenav](/docs/tutorials/img/namebox/pokenav.gif) +![Messagebox](/docs/tutorials/img/namebox/msgbox.gif) + +This is a broad and self-contained implementation of Tustin2121's namebox feature branch [here](https://github.com/tustin2121/pokeemerald/tree/feature/namebox), which includes the following: +- Cleaner implementation of namebox onto both the field message box _and_ the field PokΓ©Nav textbox. +- New configs: + - `OW_NAME_BOX_USE_DYNAMIC_WIDTH` lets the namebox use dynamic window width depending on the speaker's string length. + - When disabled and/or the speaker name is too long, `OW_NAME_BOX_DEFAULT_WIDTH` will be used as the maximum width. + - `OW_NAME_BOX_NPC_TRAINER` lets any approaching NPC trainers shows a namebox in their dialogue automagically. + - `OW_NAME_BOX_DEFAULT_WIDTH` and `OW_NAME_BOX_DEFAULT_HEIGHT` sets the default width and height. + - `OW_NAME_BOX_FOREGROUND_COLOR` and `OW_NAME_BOX_SHADOW_COLOR` sets the default text colors, the background color is handled by the engine. + - `OW_FLAG_SUPPRESS_NAME_BOX` lets you enable/disable the namebox globally, assign a flag from [`include/constants/flags.h`](/include/constants/flags.h) onto this config to be able to use it. +- Added a Speaker Name table, frequently-used names can be stored into `gSpeakerNamesTable` in [`src/data/speaker_names.h`](/src/data/speaker_names.h) and they can accessed by using a `SP_NAME_*` constant defined in [`include/constants/speaker_names.h`](/include/constants/speaker_names.h). +- Added a new scripting macro `setspeaker ([textPointer]/[SP_NAME_*])`. + - Besides a text pointer, it is possible to use the Speaker Name table to set the textPointer with the `gSpeakerNamesTable` array instead. + - Feed it either `NULL` or `SP_NAME_NONE` will remove the namebox instead. + - `release`, `releaseall`, and `closemessage` will automatically remove the namebox, together with the messagebox. +- Added a new text control code/inline text `{SPEAKER NAME_*}`. + - Unlike the `setspeaker` macro, you can only use the `SP_NAME_*` constants for this. It is partly due to the text engine's limitation itself. + - You'll need to add the constants into `charmap.txt` to be able to use them for the same reason as above. + - Feed it `SP_NAME_NONE` to remove the namebox manually. + - Similarly, `release`, `releaseall`, and `closemessage` will automatically remove the namebox, together with the message box. + +## Usage + +### `setspeaker` +#### Using a text pointer +First, define your speaker's string. +``` +Speaker_Jeremy: + .string "Jeremy$" +``` + +And then in your script, add the `setspeaker` with the speaker's name earlier. +``` +... + setspeaker Speaker_Jeremy +... +``` + +If you are using poryscript, you can also include the string right there with the `setspeaker` aka inline. +``` +... + setspeaker("Jeremy") +... +``` +#### Using a `SP_NAME_*` constant +Add the `setspeaker` with your constant. +``` + setspeaker SP_NAME_JEREMY +``` +For instruction on how to add a new Speaker Name, continue [here](#adding-a-new-speaker-name). + +### `SPEAKER` inline +The usage is identical to using `setspeaker` with `SP_NAME_*` constant, but instead it's within your _text_ script and uses the constant you added to `charmap.txt`. +``` + "{SPEAKER NAME_JEREMY}Yo wassup!" +``` +For instruction on how to add a new Speaker Name, continue [here](#adding-a-new-speaker-name). + +### Adding a new Speaker Name +1. Add a new constant to [`include/constants/speaker_names.h`](/include/constants/speaker_names.h) just after `SP_NAME_NONE` _and_ before `SP_NAME_COUNT`. +```diff + enum SpeakerNames { + SP_NAME_NONE = 0, + SP_NAME_MOM, + SP_NAME_PLAYER, ++ SP_NAME_JEREMY, + SP_NAME_COUNT + }; + +``` + +2. Add an entry to `gSpeakerNamesTable` in [`src/data/speaker_names.h`](/src/data/speaker_names.h) with your newly added constant as the array index. +```diff + const u8 *const gSpeakerNamesTable[SP_NAME_COUNT] = + { + [SP_NAME_MOM] = COMPOUND_STRING("MOM"), + [SP_NAME_PLAYER] = COMPOUND_STRING("{PLAYER}"), ++ [SP_NAME_JEREMY] = COMPOUND_STRING("JEREMY"), + }; +``` + +3. In order for this constant to be usable for `{SPEAKER}` inline, you'll need to add your constant onto [`charmap.txt`](/charmap.txt). **Do note that the order here MUST match with the one in [`include/constants/speaker_names.h`](/include/constants/speaker_names.h)!** +```diff + @ Speaker names, the order must be matching with include/constants/speaker_names.h + NAME_NONE = 00 + NAME_MOM = 01 + NAME_PLAYER = 02 +-NAME_COUNT = 03 ++NAME_JEREMY = 03 ++NAME_COUNT = 04 +``` diff --git a/docs/tutorials/how_to_new_move.md b/docs/tutorials/how_to_new_move.md index e4289f4c5844..0f7ca1d15c57 100644 --- a/docs/tutorials/how_to_new_move.md +++ b/docs/tutorials/how_to_new_move.md @@ -40,7 +40,6 @@ Let's look at an example: .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .sheerForceBoost = TRUE, .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 10, @@ -94,14 +93,21 @@ Contains more fundamental functions that control the flow of the battle. Functio ### data/battle_scripts_1.s Each move's effect is governed by a script defined here. For a simple example, let's look at the script for Fake Out/First Impression: +TODO: New Script ``` -BattleScript_EffectFirstTurnOnly:: +BattleScript_EffectTaunt:: attackcanceler - jumpifnotfirstturn BattleScript_FailedFromAtkString - goto BattleScript_EffectHit + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects + accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + settaunt BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNFELLFORTAUNT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd ``` -`attackcanceler` is a command that covers all the cases that could cause a move to fail before it's even attempted (e.g. paralysis). And as we can tell from the commands, if it's not the first turn, we go to `BattleScript_FailedFromAtkString` which evidently causes us to print the `attackstring` ("POKEMON used MOVE") then fail ("But it failed!"). Otherwise, we go to the generic "hit" effect which is the same script for moves that just deal damage and nothing else. +`attackcanceler` is a command that covers all cases that could cause a move to fail before it's even attempted (e.g. paralysis). The next command is a jump command. A jump command can check anything and usually comes with a jump instruction. Usually it jumps to a place from where the move should pick up because of certain conditions. The next one is an accuracy check. Accuracy checks happen after all prior move failure checks happened. The next set of commands are unique to a certain move, they are mostly the same for damaging moves but can widely differ for status moves. Lastly there is `BattleScript_MoveEnd` which the move after a succesful hit. An ability activation or specific move effect like Burn, Freeze, Absorb etc. This is the most advanced part of the ROM. There are dozens upon dozens of commands and hundreds of scripts so this guide would go on forever if I were to go into more detail. To learn how these scripts work, it's best to look at a few examples of moves you know. @@ -140,7 +146,18 @@ If you look at the example [here](#srcdatamoves_infoh), you can see that Thunder All additional effects with a defined chance (even 100%) are treated as "secondary effects". This means that they are nullified by Sheer Force, blocked by Shield Dust or the Covert Cloak, and have their chance modified by Serene Grace. Additional effects without a chance field (effectively setting it to 0) are treated as "primary effects", which means that they cannot be blocked by the aforementioned items and abilities and their chance to occur cannot be modified; they will *always* happen. -Each move can have up to 15 additional effects, allowing you to construct monstrosities like this: +Depending on the move effect, it is possible to also set a `multistring` value. For example: + +``` +.additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_WRAP, + .multistring = B_MSG_WRAPPED_MAGMA_STORM, +}), +``` + +For Magma Storm, we not only want the wrapping move effect, we want to give it a unique string when it activates. The index is an enum defined in `battle_string_ids.h` and it corresponds to an entry (for this move effect) in the `gWrappedStringIds` list in battle_message.c. For custom strings, you need to add an enum and an entry respectively. For new custom move effects, you will have to add a new set of enums and a new table of strings. + +Each move can have up to 3 additional effects, allowing you to construct monstrosities like this: ``` [MOVE_POUND] = { @@ -165,13 +182,6 @@ Each move can have up to 15 additional effects, allowing you to construct monstr },{ .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, - },{ - .moveEffect = MOVE_EFFECT_ALL_STATS_UP, - .chance = 40, - .self = TRUE, - },{ - .moveEffect = MOVE_EFFECT_DEF_MINUS_2, - .chance = 50, }), .makesContact = TRUE, .ignoresKingsRock = B_UPDATED_MOVE_FLAGS == GEN_4, diff --git a/docs/tutorials/how_to_new_pokemon.md b/docs/tutorials/how_to_new_pokemon.md index de2d41d57c5f..79f01acbd230 100644 --- a/docs/tutorials/how_to_new_pokemon.md +++ b/docs/tutorials/how_to_new_pokemon.md @@ -42,7 +42,7 @@ The main things that the Expansion changes are listed here. # Useful resources You can open a sprite debug menu by pressing `Select` in a PokΓ©mon's summary screen outside of battle. -![visualizer1](/docs/tutorials/img/add_pokemon/visualizer1.gif) +![visualizer1](img/add_pokemon/visualizer1.gif) # The Data - Part 1 @@ -73,7 +73,7 @@ We add this at the end so that no existing species change Id and so that we don' Now, let's see how it looks in-game! -![visualizer2](/docs/tutorials/img/add_pokemon/visualizer2.png) +![visualizer2](img/add_pokemon/visualizer2.png) Hmmm, something's not right... @@ -314,7 +314,8 @@ Cry_Pecharunt:: Then we add the cry ID to [include/constants/cries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/cries.h): ```diff -enum { +enum PokemonCry +{ CRY_NONE, ... #if P_FAMILY_TERAPAGOS @@ -371,7 +372,8 @@ Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-exp ```diff // National Pokedex order -enum { +enum NationalDexOrder +{ NATIONAL_DEX_NONE, // Kanto NATIONAL_DEX_BULBASAUR, @@ -394,7 +396,8 @@ Do keep in mind that if you intend to add your new species to the Hoenn Dex, you ```diff // Hoenn Pokedex order -enum { +enum HoennDexOrder +{ HOENN_DEX_NONE, HOENN_DEX_TREECKO, ... @@ -443,7 +446,7 @@ Now we can add the number and entry to our Mewthree: }, }; ``` -![image](/docs/tutorials/img/add_pokemon/dex1.png) +![image](img/add_pokemon/dex1.png) The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the PokΓ©dex. @@ -494,7 +497,7 @@ Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemera ... }; ``` -![mGBA_lUBfmFEKUx](/docs/tutorials/img/add_pokemon/dex2.gif) +![mGBA_lUBfmFEKUx](img/add_pokemon/dex2.gif) # The Graphics @@ -524,9 +527,9 @@ Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-exp ```diff #if P_FAMILY_PECHARUNT const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz"); - const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz"); + const u16 gMonPalette_Pecharunt[] = INCBIN_U16("graphics/pokemon/pecharunt/normal.gbapal"); const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz"); - const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz"); + const u16 gMonShinyPalette_Pecharunt[] = INCBIN_U16("graphics/pokemon/pecharunt/shiny.gbapal"); const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); @@ -534,20 +537,20 @@ Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-exp #if OW_POKEMON_OBJECT_EVENTS const u32 gObjectEventPic_Pecharunt[] = INCBIN_COMP("graphics/pokemon/pecharunt/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - const u32 gOverworldPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/overworld_normal.gbapal.lz"); - const u32 gShinyOverworldPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/overworld_shiny.gbapal.lz"); + const u16 gOverworldPalette_Pecharunt[] = INCBIN_U16("graphics/pokemon/pecharunt/overworld_normal.gbapal"); + const u16 gShinyOverworldPalette_Pecharunt[] = INCBIN_U16("graphics/pokemon/pecharunt/overworld_shiny.gbapal"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_PECHARUNT const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz"); - const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz"); + const u16 gMonPalette_Egg[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal"); const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp"); + const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/anim_front.4bpp.lz"); + const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); -+ const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); -+ const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); ++ const u16 gMonPalette_Mewthree[] = INCBIN_U16("graphics/pokemon/mewthree/normal.gbapal"); ++ const u16 gMonShinyPalette_Mewthree[] = INCBIN_U16("graphics/pokemon/mewthree/shiny.gbapal"); + const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); + const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); ``` @@ -1055,7 +1058,7 @@ What this allows us to do is to be able to get all forms of a PokΓ©mon in our co For example, in the HGSS dex, it lets us browse between the entries of every form available.: -![hgssdex1](/docs/tutorials/img/add_pokemon/hgssdex1.png) ![image](/docs/tutorials/img/add_pokemon/hgssdex2.png) +![hgssdex1](img/add_pokemon/hgssdex1.png) ![image](img/add_pokemon/hgssdex2.png) In addition, we have the `GET_BASE_SPECIES_ID` macro, which returns the first entry of the table (or return the species itself if it doesn't have a table registered). With this, you can check if a PokΓ©mon is any form of a species. For example, making it so that the Light Ball affects all Pikachu forms: ```c @@ -1086,7 +1089,7 @@ The second value is the target form, to which the PokΓ©mon will change into. Values after that are referred as arguments, and needs to be put there depends on the type of form change, detailed in `include/constants/form_change_types.h`. ## 3. Gender differences -![gender_diffs](/docs/tutorials/img/add_pokemon/gender_diffs.gif) +![gender_diffs](img/add_pokemon/gender_diffs.gif) You may have seen that there's a couple of duplicate fields with a "Female" suffix. ```diff @@ -1259,8 +1262,8 @@ Either way, you may also create custom animation tables and use them here approp ### How to add the PokΓ©mon Object Events to map In Porymap, select the object you want to set the sprite to. Then, change the field "Sprite" to use `OBJ_EVENT_GFX_SPECIES(SPECIES)`, replacing SPECIES with the name of the species you want to use. If you get a compiler error, it's because it used the species define as part of the macro, so it needs to match how you defined it all the way back in [Declare a species constant](#1-Declare-a-species-constant). -![charizard](/docs/tutorials/img/add_pokemon/charizard.png) -![overworld_data](/docs/tutorials/img/add_pokemon/overworld_data.gif) +![charizard](img/add_pokemon/charizard.png) +![overworld_data](img/add_pokemon/overworld_data.gif) If you want to use their shiny and/or female versions, use one of the following macros: - `OBJ_EVENT_GFX_SPECIES_SHINY(name)` diff --git a/docs/tutorials/how_to_testing_system.md b/docs/tutorials/how_to_testing_system.md index 2e5f83ff7668..70ee6c4033f7 100644 --- a/docs/tutorials/how_to_testing_system.md +++ b/docs/tutorials/how_to_testing_system.md @@ -79,7 +79,7 @@ SINGLE_BATTLE_TEST("Stun Spore does not affect Grass-types") { GIVEN { ASSUME(IsPowderMove(MOVE_STUN_SPORE)); - ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + ASSUME(GetSpeciesType(SPECIES_ODDISH, 0) == TYPE_GRASS); PLAYER(SPECIES_ODDISH); // 1. OPPONENT(SPECIES_ODDISH); // 2. } WHEN { @@ -164,17 +164,17 @@ ASSUMPTIONS ``` ### `SINGLE_BATTLE_TEST` -`SINGLE_BATTLE_TEST(name, results...)` and `DOUBLE_BATTLE_TEST(name, results...)` -Define single- and double- battles. The names should start with the name of the mechanic being tested so that it is easier to run all the related tests. `results` contains variable declarations to be placed into the `results` array which is available in tests using `PARAMETRIZE` commands. -The main differences for doubles are: +`SINGLE_BATTLE_TEST(name, results...)`, `DOUBLE_BATTLE_TEST(name, results...)`, `MULTI_BATTLE_TEST(name, results...)`, `TWO_VS_ONE_BATTLE_TEST(name, results...)`, and `ONE_VS_TWO_BATTLE_TEST(name, results...)` +Define single-, double-, 2v2-multi-, 2v1-multi-, and 1v2- battles. The names should start with the name of the mechanic being tested so that it is easier to run all the related tests. `results` contains variable declarations to be placed into the `results` array which is available in tests using `PARAMETRIZE` commands. +The main differences for doubles, 2v2, 2v1, and 1v2 are: - Move targets sometimes need to be explicit. - Instead of `player` and `opponent` there is `playerLeft`, `playerRight`, `opponentLeft`, and `opponentRight`. ### `AI_SINGLE_BATTLE_TEST` -`AI_SINGLE_BATTLE_TEST(name, results...)` and `AI_DOUBLE_BATTLE_TEST(name, results...)` +`AI_SINGLE_BATTLE_TEST(name, results...)`, `AI_DOUBLE_BATTLE_TEST(name, results...)`, `AI_MULTI_BATTLE_TEST(name, results...)`, `AI_TWO_VS_ONE_BATTLE_TEST(name, results...)`, and `AI_ONE_VS_TWO_BATTLE_TEST(name, results...)` Define battles where opponent mons are controlled by AI, the same that runs when battling regular Trainers. The flags for AI should be specified by the `AI_FLAGS` command. -The rules remain the same as with the `SINGLE` and `DOUBLE` battle tests with some differences: +The rules remain the same as with the `SINGLE`, `DOUBLE`, `MULTI`, `TWO_VS_ONE`, and `ONE_VS_TWO` battle tests with some differences: - opponent's action is specified by the `EXPECT_MOVE` / `EXPECT_SEND_OUT` / `EXPECT_SWITCH` commands - we don't control what opponent actually does, instead we make sure the opponent does what we expect it to do - we still control the player's action the same way @@ -268,7 +268,7 @@ GIVEN { ``` ### `PLAYER` and `OPPONENT` -`PLAYER(species)` and `OPPONENT(species` +`PLAYER(species)` and `OPPONENT(species)` Adds the species to the player's or opponent's party respectively. The PokΓ©mon can be further customized with the following functions: - `Gender(MON_MALE | MON_FEMALE)` @@ -285,11 +285,29 @@ For example to create a level 42 Wobbuffet that is poisoned: **Note if Speed is specified for any PokΓ©mon then it must be specified for all PokΓ©mon.** **Note if Moves is specified then MOVE will not automatically add moves to the moveset.** +### `MULTI_PLAYER`, `MULTI_PARTNER`, `MULTI_OPPONENT_A`, and `MULTI_OPPONENT_B` +For tests using `MULTI_BATTLE_TEST`, `AI_MULTI_BATTLE_TEST`, `TWO_VS_ONE_BATTLE_TEST`, `AI_TWO_VS_ONE_BATTLE_TEST`, `ONE_VS_TWO_BATTLE_TEST`, and `AI_ONE_VS_TWO_BATTLE_TEST`, the below must be used instead of `PLAYER(species)` and `OPPONENT(species)`. +`MULTI_PLAYER(species)`, `MULTI_PARTNER(species)`, `MULTI_OPPONENT_A(species)`, and `MULTI_OPPONENT_B(species)` +Adds the species to the player's, player partner's, opponent A's, or opponent B's party, respectively. +Pokemon can be customised as per the guidance for `PLAYER(species)` and `OPPONENT(species)`. +The functions assign the PokΓ©mon to the party of the trainer at `B_POSITION_PLAYER_LEFT`, `B_POSITION_PLAYER_RIGHT`, `B_POSITION_OPPONENT_LEFT`, and `B_POSITION_OPPONENT_RIGHT`, respectively. +`MULTI_PLAYER(species)` and `MULTI_OPPONENT_A(species)` set PokΓ©mon starting at party index 0, while `MULTI_PARTNER(species)` and `MULTI_OPPONENT_B(species)` set PokΓ©mon starting at party index 3. +For `ONE_VS_TWO` tests, `MULTI_PLAYER(species)` must be used for all player-side PokΓ©mon, and for `TWO_VS_ONE` tests, `MULTI_OPPONENT_A(species)` must be used for all opponent-side PokΓ©mon. +All `MULTI_PLAYER(species)` PokΓ©mon must be set before any `MULTI_PARTNER(species)` PokΓ©mon, and all `MULTI_OPPONENT_A(species)` must be set before any `MULTI_OPPONENT_B(species)` PokΓ©mon, else PokΓ©mon will be set in the incorrect parties in the test. +**Note where a side in a test has two trainers, the test setup manages the assigning of correct multi-party orders, therefore when using functions such as SEND_OUT, Player and Opponent A PokΓ©mon may be referenced using indexes 0, 1, and 2, and Player's Partner and Opponent B PokΓ©mon may be referenced using indexes 3, 4, and 5.** + ### `AI_FLAGS` `AI_FLAGS(flags)` -Specifies which AI flags are run during the test. Has use only for AI tests. +Specifies which AI flags are run for all battlers during the test. Has use only for AI tests. The most common combination is `AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT)` which is the general 'smart' AI. +### `BATTLER_AI_FLAGS` +`BATTLER_AI_FLAGS(battler, flags)` +Specifies additional AI flags to be applied to specific battlers (battler 0/1/2/3). Has use only for AI tests. +Must be used strictly after `AI_FLAGS(flags)`, which overwrites all existing flags. +Example: `BATTLER_AI_FLAGS(3, AI_FLAG_RISKY)` used after `AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT)` +will set `AI_FLAG_RISKY` to only `battler3` (Opponent B), in addition to the flags set by `AI_FLAGS`. + ### `WHEN` ``` ... @@ -428,7 +446,7 @@ Spaces in pattern match newlines (\n, \l, and \p) in the message. Often used to check that a battler took its turn but it failed, e.g.: ``` MESSAGE("Wobbuffet used Dream Eater!"); - MESSAGE("The opposing Wobbuffet wasn't affected!"); + MESSAGE("It doesn't affect the opposing Wobbuffet…"); ``` ### `STATUS_ICON` @@ -446,6 +464,20 @@ If the expected status icon is parametrized the corresponding `STATUS1` constant STATUS_ICON(player, status1); ``` +### `SUB_HIT` +`SUB_HIT(battler, captureDamage: | subBreak:)` +Causes the test to fail the test to fail if a Substitute for the specified battler doesn't take damage. +If `captureDamage` is used, the damage the substitute takes is written to the supplied pointer. +``` +u16 damage; +... +SUB_HIT(player, captureDamage: &damage); +``` +If `subBreak` is set to `TRUE`, the test will fail unless the substitute breaks. And if set to `FALSE`, the test will fail unless the substitute survives. +``` +SUB_HIT(player, subBreak: TRUE); +``` + ### `NOT` `NOT sceneCommand` Causes the test to fail if the `SCENE` command succeeds before the following command succeeds. @@ -465,10 +497,10 @@ Causes the test to fail if the `SCENE` command succeeds before the following com ``` Causes the test to fail unless one of the `SCENE` commands succeeds. ``` - ONE_OF { - MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); - } + ONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); + } ``` ### `NONE_OF` @@ -479,12 +511,12 @@ Causes the test to fail unless one of the `SCENE` commands succeeds. ``` Causes the test to fail if one of the `SCENE` commands succeeds before the command after the `NONE_OF` succeeds. ``` - // Our Wobbuffet does not move before the foe's. - NONE_OF { - MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); - } - MESSAGE("The opposing Wobbuffet used Celebrate!"); + // Our Wobbuffet does not move before the foe's. + NONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); + } + MESSAGE("The opposing Wobbuffet used Celebrate!"); ``` ### `PLAYER_PARTY` diff --git a/docs/tutorials/how_to_trainer_back_pic.md b/docs/tutorials/how_to_trainer_back_pic.md new file mode 100644 index 000000000000..5c262942ae8d --- /dev/null +++ b/docs/tutorials/how_to_trainer_back_pic.md @@ -0,0 +1,93 @@ +# How to add a new trainer back pic + +## Content +* [Quick Summary](#quick-summary) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#2-edit-the-sprites) + * [2. Register the sprites](#2-register-the-sprites) + * [3. Connecting pictures to the data](#2-connecting-pictures-to-the-data) +* [The Data](#the-data) + * [4. Defining the trainer back pic](#2-defining-the-trainer-back-pic) +* [Usage](#usage) + +## Quick Summary +If you've done this before and just need a quick lookup, here's what files you need: +1. Place graphics in [`graphics/trainers/back_pics`](./graphics/trainers/back_pics). +2. Point game to where graphic files are found: [`src/data/graphics/trainers`](./src/data/graphics/trainers.h). +3. Add trainer to [`include/constants/trainers.h`](./include/constants/trainers.h), + +## The Graphics + +### 1. Add the sprites +We will start with a graphic that we want to use for our new trainer pic. Unlike with adding PokΓ©mon, the trainer sprites aren't sorted in individual folders, but rather in one folder: [`graphics/trainers/back_pics`](./graphics/trainers/back_pics). **Trainers sprites cannot be more than 16 - this includes the color that will be transparent, which is the first slot of the palette.** + +### 2. Register the sprites +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them by linking the graphic files in [`src/data/graphics/trainers.h`](./src/data/graphics/trainers.h): +```diff + const u8 gTrainerBackPic_Wally[] = INCBIN_U8("graphics/trainers/back_pics/wally.4bpp"); + const u8 gTrainerBackPic_Steven[] = INCBIN_U8("graphics/trainers/back_pics/steven.4bpp"); ++const u8 gTrainerBackPic_NewOne[] = INCBIN_U8("graphics/trainers/back_pics/new_one.4bpp"); + + const u16 gTrainerBackPicPalette_Red[] = INCBIN_U16("graphics/trainers/back_pics/red.gbapal"); + const u16 gTrainerBackPicPalette_Leaf[] = INCBIN_U16("graphics/trainers/back_pics/leaf.gbapal"); ++const u16 gTrainerBackPicPalette_NewOne[] = INCBIN_U16("graphics/trainers/back_pics/new_one.gbapal"); +``` + +### 3. Connecting the Pictures to the Data +The last few things we have to do is prepare the graphics for usage. In [`src/data/graphics/trainers.h`](./src/data/graphics/trainers.h) you'll find the `gTrainerBacksprites` struct, we need to add the trainer to this. You can just copy the last trainer type defined and edit it, but this is what it does: Connects the new trainer with the image we defined earlier. + +So, finally, it needs to look like this: +```diff + #define TRAINER_BACK_SPRITE(trainerPic, yOffset, sprite, pal, anim) \ + [trainerPic] = \ + { \ + .coordinates = {.size = 8, .y_offset = yOffset}, \ + .backPic = {.data = sprite, .size = TRAINER_PIC_SIZE, .relativeFrames = TRUE}, \ + .palette = {.data = pal, .tag = trainerPic}, \ + .animation = anim, \ + } + + const struct TrainerBacksprite gTrainerBacksprites[] = + { + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_BRENDAN, 4, gTrainerBackPic_Brendan, gTrainerPalette_Brendan, sBackAnims_Hoenn), + ... + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_STEVEN, 4, gTrainerBackPic_Steven, gTrainerPalette_Steven, sBackAnims_Hoenn), ++ TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_NEW_ONE, 4, gTrainerBackPic_NewOne, gTrainerBackPicPalette_NewOne, sBackAnims_Hoenn), +}; +``` + +**Note**: Trainer back pics can have 4 or 5 frames of animation. Trainers with 5 frames must have their `yOffset` set to 5, and their `anim` set to `sBackAnims_Kanto`. + +### The Data +#### 4. Defining the trainer back pic +Finally, let's bring it all together by defining our new trainer pic in [`include/constants/trainers.h`](./include/constants/trainers.h): + +```diff + #define TRAINER_BACK_PIC_WALLY 6 + #define TRAINER_BACK_PIC_STEVEN 7 ++#define TRAINER_BACK_PIC_NEW_ONE 8 +``` +Remember to count the number next to the trainer pic up by one! + +## Usage +You can test your new trainer back pic by going to [`src/data/battle_partners.party`](./src/data/battle_partners.party) and change the `Pic` field. The syntax should match the constant (`TRAINER_BACK_PIC_NEW_ONE`) with the underscore replaced by spaces. For example: +```diff + === PARTNER_STEVEN === + Name: STEVEN + Class: Rival +-Pic: Steven ++Pic: New One + Gender: Male + Music: Male +``` + +Otherwise if you use [`src/data/battle_partners.h`](./src/data/battle_partners.h), change the `trainerPic` field instead. For example: +```diff + [DIFFICULTY_NORMAL][PARTNER_STEVEN] = + { + .trainerName = _("STEVEN"), + .trainerClass = TRAINER_CLASS_RIVAL, +- .trainerPic = TRAINER_BACK_PIC_STEVEN, ++ .trainerPic = TRAINER_BACK_PIC_NEW_ONE, + .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, +``` diff --git a/docs/tutorials/how_to_trainer_front_pic.md b/docs/tutorials/how_to_trainer_front_pic.md new file mode 100644 index 000000000000..1b3d303bf99e --- /dev/null +++ b/docs/tutorials/how_to_trainer_front_pic.md @@ -0,0 +1,97 @@ +# How to add a new trainer front pic + +## Content +* [Quick Summary](#quick-summary) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#2-edit-the-sprites) + * [2. Register the sprites](#2-register-the-sprites) + * [3. Connecting pictures to the data](#2-connecting-pictures-to-the-data) +* [The Data](#the-data) + * [4. Defining the trainer pic](#2-defining-the-trainer-pic) +* [Usage](#usage) + +## Quick Summary +If you've done this before and just need a quick lookup, here's what files you need: +1. Place graphics into [`graphics/trainers/front_pics`](./graphics/trainers/front_pics). +2. Point game to where graphic files are found: [`src/data/graphics/trainers`](./src/data/graphics/trainers.h). +3. Add trainer to [`include/constants/trainers.h`](./include/constants/trainers.h). + +## The Graphics + +### 1. Edit the sprites +We will start with a graphic that we want to use for our new trainer pic. Unlike with adding PokΓ©mon, the trainer sprites aren't sorted in individual folders, but rather in one folder: [`graphics/trainers/front_pics`](./graphics/trainers/front_pics). **Trainers sprites cannot have more than 16 colors - this includes the color that will be transparent, which is the first slot of the palette.** + +### 2. Register the sprites +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them by linking the graphic files in [`src/data/graphics/trainers`](./data/graphics/trainers.h): +```diff + const u16 gTrainerPalette_RubySapphireBrendan[] = INCBIN_U16("graphics/trainers/palettes/brendan_rs.gbapal"); + + const u32 gTrainerFrontPic_RubySapphireMay[] = INCBIN_U32("graphics/trainers/front_pics/may_rs.4bpp.smol"); + const u16 gTrainerPalette_RubySapphireMay[] = INCBIN_U16("graphics/trainers/palettes/may_rs.gbapal"); ++ ++const u32 gTrainerFrontPic_NewOne[] = INCBIN_U32("graphics/trainers/front_pics/new_one.4bpp.smol"); ++const u16 gTrainerPalette_NewOne[] = INCBIN_U16("graphics/trainers/front_pics/new_one.gbapal"); + + const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan.4bpp"); +``` + +### 3. Connecting the Pictures to the Data +The last few things we have to do is prepare the graphics for usage. In [`src/data/graphics/trainers.h`](./src/data/graphics/trainers.h) you'll find the `gTrainerSprites` struct, we need to add the trainer to this. You can just copy the last trainer type defined and edit it, but this is what it does: Connects the new trainer with the image we defined earlier. + +So, finally, it needs to look like this: +```diff + #define TRAINER_SPRITE(trainerPic, picFile, paletteFile, ...) \ + [trainerPic] = \ + { \ + .frontPic = {picFile, TRAINER_PIC_SIZE, trainerPic}, \ + .palette = {paletteFile, trainerPic}, \ + .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ + .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ + } + + const struct TrainerSprite gTrainerSprites[] = + { + TRAINER_SPRITE(TRAINER_PIC_HIKER, gTrainerFrontPic_Hiker, gTrainerPalette_Hiker), + TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM), + ... + TRAINER_SPRITE(TRAINER_PIC_RS_MAY, gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay), ++ TRAINER_SPRITE(TRAINER_PIC_NEW_ONE, gTrainerFrontPic_NewOne, gTrainerPalette_NewOne), + }; +``` +### The Data +#### 4. Defining the trainer pic +Finally, let's bring it all together by defining our new trainer pic in [`include/constants/trainers.h`](./include/constants/trainers.h): + +```diff + #define TRAINER_PIC_RS_MAY 92 ++#define TRAINER_PIC_NEW_ONE 93 + + #define TRAINER_BACK_PIC_BRENDAN 0 + #define TRAINER_BACK_PIC_MAY 1 +``` +Remember to count the number next to the trainer pic up by one! + +## Usage +You can test your trainer type by going to [`src/data/trainers.party`](./src/data/trainers.party) and change the `Pic` field. The syntax should match the constant (`TRAINER_PIC_NEW_ONE`) with the underscore replaced by spaces. For example: +```diff + === TRAINER_BRENDAN_PLACEHOLDER === + Name: BRENDAN + Class: RS Protag +-Pic: RS Brendan ++Pic: New One + Gender: Male + Music: Male + Double Battle: No +``` + +Otherwise if you use [`src/data/trainers.h`](./src/data/trainers.h), change the `.trainerPic` field instead. For example: +```diff + [DIFFICULTY_NORMAL][TRAINER_BRENDAN_PLACEHOLDER] = + { + .trainerName = _("BRENDAN"), + .trainerClass = TRAINER_CLASS_RS_PROTAG, +- .trainerPic = TRAINER_PIC_RS_BRENDAN, ++ .trainerPic = TRAINER_PIC_NEW_ONE, + .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, + .doubleBattle = FALSE, +``` diff --git a/docs/tutorials/how_to_trainer_party_pool.md b/docs/tutorials/how_to_trainer_party_pool.md index e0e7639de376..e111ba957e2f 100644 --- a/docs/tutorials/how_to_trainer_party_pool.md +++ b/docs/tutorials/how_to_trainer_party_pool.md @@ -52,6 +52,11 @@ By default, only `DefaultPickFunction` and `PickLowest` are implemente - `Pool Prune` (`.poolPruneIndex`) controls if members in the pool should be removed before party members are picked from the pool. By default, only `POOL_PRUNE_NONE`, which doesn't remove anything from the pool, and `POOL_PRUNE_TEST`, which removes Wobbuffet from the pool, are implemented. Must be an `enum` value in `enum PoolPruneOptions`. +## Pool copy +The `Copy Pool` option can be used to have the trainer use the party or pool from a different trainer. +If you for example want some other trainer to have the same team/pool as Tiana, you'd use `Copy Pool: TRAINER_TIANA`. +If `Party Size` isn't defined for the current trainer, it will inherit from the copied trainer. + ## Example pool ``` === TRAINER_TIANA === diff --git a/docs/tutorials/how_to_trainer_pic.md b/docs/tutorials/how_to_trainer_pic.md deleted file mode 100644 index beddb641e45e..000000000000 --- a/docs/tutorials/how_to_trainer_pic.md +++ /dev/null @@ -1,98 +0,0 @@ -# How to add a new trainer pic - -## Content -* [Quick Summary](#quick-summary) -* [The Graphics](#the-graphics) - * [1. Edit the sprites](#2-edit-the-sprites) - * [2. Register the sprites](#2-register-the-sprites) - * [3. Connecting pictures to the data](#2-connecting-pictures-to-the-data) -* [The Data](#the-data) - * [4. Defining the trainer pic](#2-defining-the-trainer-pic) -* [Usage](#usage) - -## Quick Summary -If you've done this before and just need a quick lookup, here's what files you need: -1. GFX into [graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) -2. Palette into [graphics/trainers/palettes](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/palettes) -3. Point game to where graphic files are found: [src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h) -4. Add trainer to [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h) - -## The Graphics - -### 1. Edit the sprites -We will start with a graphic that we want to use for our new trainer pic. Unlike with adding PokΓ©mon, the trainer sprites aren't sorted in individual folders, but rather in one folder: -[graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) - -**Remember to limit yourself to 16 colors including transparency in the first slot!** - -Export the palette and place into the same folder. - -### 2. Register the sprites -Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them by linking the graphic files. -[src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h): -```diff -const u16 gTrainerPalette_RubySapphireBrendan[] = INCBIN_U16("graphics/trainers/palettes/ruby_sapphire_brendan.gbapal"); - -const u32 gTrainerFrontPic_RubySapphireMay[] = INCBIN_U32("graphics/trainers/front_pics/ruby_sapphire.4bpp.lz"); -const u16 gTrainerPalette_RubySapphireMay[] = INCBIN_U16("graphics/trainers/palettes/ruby_sapphire_may.gbapal"); - -+ const u32 gTrainerFrontPic_myTrainerClass[] = INCBIN_U32("graphics/trainers/front_pics/myTrainerClass.4bpp.lz"); -+ const u16 gTrainerPalette_myTrainerClass[] = INCBIN_U16("graphics/trainers/palettes/myTrainerClass.gbapal"); - -const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan.4bpp"); -``` - -### 3. Connecting the Pictures to the Data -The last few things we have to do is prepare the graphics for usage. In [src/data/graphics/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h) you'll find the gTrainerSprites struct, we need to add the trainer to this. You can just copy the last trainer type defined and edit it, but this is what it does: Connects the trainer type with the image we defined earlier. - -So, finally, it needs to look like this: -```diff -define TRAINER_SPRITE(trainerPic, picFile, paletteFile, ...) \ - [trainerPic] = \ - { \ - .frontPic = {picFile, TRAINER_PIC_SIZE, trainerPic}, \ - .palette = {paletteFile, trainerPic}, \ - .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ - .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ - } - -const struct TrainerSprite gTrainerSprites[] = -{ - TRAINER_SPRITE(TRAINER_PIC_HIKER, gTrainerFrontPic_Hiker, gTrainerPalette_Hiker), - TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM), - ... - TRAINER_SPRITE(TRAINER_PIC_RS_MAY, gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay), - TRAINER_SPRITE(TRAINER_PIC_MY_TRAINER_CLASS, gTrainerFrontPic_myTrainerClass, gTrainerPalette_myTrainerClass) -}; -``` -### The Data -#### 4. Defining the trainer pic -Finally, let's bring it all together by defining our new trainer pic in [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h): - -```diff -#define TRAINER_PIC_RS_MAY 92 -+ #define TRAINER_PIC_MY_TRAINER_CLASS 93 - -#define TRAINER_BACK_PIC_BRENDAN 0 -#define TRAINER_BACK_PIC_MAY 1 -``` -Remember to count the number next to the trainer pic up by one! - -## Usage -You can test your trainer type by going to [src/data/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h) and changing a trainer type. For example: -```diff - [TRAINER_BRENDAN_PLACEHOLDER] = - { - .partyFlags = 0, - .trainerClass = TRAINER_CLASS_RS_PROTAG, - .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, -- .trainerPic = TRAINER_PIC_RS_BRENDAN, -+ .trainerPic = TRAINER_PIC_MY_TRAINER_CLASS, - .trainerName = _("BRENDAN"), - .items = {}, - .doubleBattle = FALSE, - .aiFlags = 0, - .partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder), - .party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder}, - }, -``` diff --git a/docs/tutorials/img/apricorn_tree/apricorn-tree-porymap.png b/docs/tutorials/img/apricorn_tree/apricorn-tree-porymap.png new file mode 100644 index 000000000000..1b75f885daf9 Binary files /dev/null and b/docs/tutorials/img/apricorn_tree/apricorn-tree-porymap.png differ diff --git a/docs/tutorials/img/apricorn_tree/apricorn-tree.gif b/docs/tutorials/img/apricorn_tree/apricorn-tree.gif new file mode 100644 index 000000000000..e7769d87c8b2 Binary files /dev/null and b/docs/tutorials/img/apricorn_tree/apricorn-tree.gif differ diff --git a/docs/tutorials/img/namebox/msgbox.gif b/docs/tutorials/img/namebox/msgbox.gif new file mode 100644 index 000000000000..a5d9455725cd Binary files /dev/null and b/docs/tutorials/img/namebox/msgbox.gif differ diff --git a/docs/tutorials/img/namebox/npc_trainers.gif b/docs/tutorials/img/namebox/npc_trainers.gif new file mode 100644 index 000000000000..6e9e1b13fb23 Binary files /dev/null and b/docs/tutorials/img/namebox/npc_trainers.gif differ diff --git a/docs/tutorials/img/namebox/pokenav.gif b/docs/tutorials/img/namebox/pokenav.gif new file mode 100644 index 000000000000..6de3f1370d5f Binary files /dev/null and b/docs/tutorials/img/namebox/pokenav.gif differ diff --git a/docs/tutorials/vs_seeker.md b/docs/tutorials/vs_seeker.md new file mode 100644 index 000000000000..136465a5b482 --- /dev/null +++ b/docs/tutorials/vs_seeker.md @@ -0,0 +1,115 @@ +# `pokemerald-expansion` Vs. Seeker + +## What is the Vs. Seeker? +The Vs. Seeker is a Key Item that is used to battle Trainers that the player has battled previously. + +When used, the Vs. Seeker sends out a signal that allows the player to find other Trainers who want a rematch. This signal affects all Trainers that are on-screen. Once used on Trainers that can be rematched, the device cannot be used again until it is charged. The player does this by walking a specific number of steps. The effect on the Trainers wears off if they are battled, the player leaves the area, or the player walks a specific number of steps. If the player attempts to use the Vs. Seeker when it is not fully charged, the player will be told how many steps remain until it is. After the player uses the Vs. Seeker, some Trainers may have their team changed from their first battle. + +## How is the Vs. Seeker enabled? +### Users +Vs. Seeker functionality is enabled by setting `I_VS_SEEKER_CHARGING` to `TRUE`. + +### Players +`ITEM_VS_SEEKER` can only be used outside of battle. It can be used from the bag or registered to be used from the field. + +Usage of the Vs. Seeker will ALWAYS fail unless all of the conditions are met: +* Player has at least five badges +* There is an NPC on screen that has previously been defeated +* Player is not inside of a building +* The Vs. Seeker is fully recharged + +#### Charge +If the player has `ITEM_VS_SEEKER` and at least five badges, the Vs. Seeker will be charged by walking steps. The Vs. Seeker is fully charged once the player has walked `VSSEEKER_RECHARGE_STEPS`, which is `100` by default. The Vs. Seeker's charge is depleted if the player uses the item. + +### How does Match Call interact with the Vs. Seeker? +When `I_VS_SEEKER_CHARGING` is enabled, the Match Call does not function at all. Trainers will never be rematch eligible outside of the use of the Vs. Seeker. + +## How does the Vs. Seeker choose a Trainer? + +When the Vs. Seeker is successfully used, every Trainer on screen is individually queried. There is a 31% chance that the Trainer will want a rematch. +Objects listed in `regularTrainersOnLand` or `regularTrainersInWater` are considered Land/Water objects. + +| Status | Is Land/Water Object | Emote | New Movement Type | +| --- | --- | --- | --- | +| Wants Rematch | Yes | `MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK` | `MOVEMENT_TYPE_COUNTER_CLOCKWISE` | +| Wants Rematch | No | `MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK` | `MOVEMENT_TYPE_FACE_DOWN` | +| Does Not Want Rematch | - | `MOVEMENT_ACTION_EMOTE_X` | none | +| Has Not Been Fought | - | `MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK` | none | + +### Rematch Table + +| Sequence | Trainer ID | +| ---------- | ---------------- | +| 1st Battle | `TRAINER_ROSE_1` | +| 2nd Battle | `TRAINER_ROSE_2` | +| 3rd Battle | `TRAINER_ROSE_3` | +| 4th Battle | `TRAINER_ROSE_4` | +| 5th Battle | `TRAINER_ROSE_5` | + +The game determines which version of the Trainer you'll fight next by following these rules: + +1. Start with the next Trainer in the sequence after the one that has been defeated. If there are no more, the battle is against the last listed Trainer. +2. If that next Trainer hasn't been unlocked yet, the battle is against the latest available unlocked version. +3. If the next Trainer is unlocked but not yet defeated, the battle is against that version. +4. If the next Trainer has already been defeated, check the next one in the sequence. + +## How do users implement rematches with the Vs. Seeker? +### Existing `pokemerald` Trainers +No extra work is required. With the exception of Wally, Gym Leaders and Elite Four, all of the rematchable Trainers in Emerald will work with the Vs. Seeker without any changes. +### New Trainers +#### Party / `gRematchTable` +Each of the rematches for the Trainer must be defined as seperate Trainers in `src/data/trainers.party` and `include/constants/opponents`. For example, `TRAINER_CALVIN_1` also has `TRAINER_CALVIN_2`,`TRAINER_CALVIN_3`,`TRAINER_CALVIN_4`, and `TRAINER_CALVIN_5`. + +Once all of those constants and parties are defined, a new row must be added to `gRematchTable` (located in in `src/battle_setup.c`). The row header should be a rematch ID, which can be added in `include/constants/rematches.h`. The row contents must be the five constants created for the new parties, with the lat argument being the constant of the map (`include/constants/map_groups.h`) where the Trainer is placed. + +If a Trainer is intended to have less than five unique rematch parties, the extra slots can be filled with the last available Trainer ID. + +```c +// This Trainer only has two teams. + [REMATCH_ROSE] = REMATCH(TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_2, TRAINER_ROSE_2, TRAINER_ROSE_2, MAP_ROUTE118), +``` + +WARNING: Rematch IDs should be placed BEFORE `REMATCH_WALLY_VR`. Trainers below that are treated as "special Trainers" that are not triggered by the Vs. Seeker. + +#### Scripts +The trainer's object needs to have a script that begins with a method to signify what this object's trainer ID is. + +#### `trainerbattle` +``` +Route103_EventScript_Daisy:: + trainerbattle_single TRAINER_DAISY, Route103_Text_DaisyIntro, Route103_Text_DaisyDefeated + msgbox Route103_Text_DaisyPostBattle, MSGBOX_AUTOCLOSE + end +``` + +Daisy is using one of the `trainerbattle` macros, which has the trainer battle macro in the first command of the script. Most trainers in `pokeemerald` use this pattern. + +##### `vsseeker_rematchid` +``` +Route102_EventScript_Calvin:: + vsseeker_rematchid TRAINER_CALVIN_1 + applymovement LOCALID_CALVIN, CalvinMovementTest + waitmovement 0 + trainerbattle_single TRAINER_CALVIN_1, Route102_Text_CalvinIntro, Route102_Text_CalvinDefeated, Route102_EventScript_CalvinRegisterMatchCallAfterBattle + specialvar VAR_RESULT, ShouldTryRematchBattle + goto_if_eq VAR_RESULT, TRUE, Route102_EventScript_CalvinRematch + setvar VAR_0x8004, TRAINER_CALVIN_1 + specialvar VAR_RESULT, IsTrainerRegistered + goto_if_eq VAR_RESULT, FALSE, Route102_EventScript_CalvinTryRegister + msgbox Route102_Text_CalvinPostBattle, MSGBOX_DEFAULT + release + end +``` + +If the trainer has other script commands before the eventual `trainerbattle` macro, the first command in the script needs to be `vsseeker_rematchid`. This macro does nothing but takes a single argument, which should be the same as the first Trainer ID for this trainer. + +#### `MOVEMENT_TYPE_COUNTER_CLOCKWISE` +If you want Trainers to spin once they are eligible for a rematch, their overworld graphics object ID (`include/constants/event_objects.h`) must be listed in either `regularTrainersOnLand` or `regularTrainersInWater`.Otherwise they will adopt the movement type `MOVEMENT_TYPE_FACE_DOWN`. + +## What can be customized about the Vs. Seeker? +* **Unlock Conditions**: The next "level" of rematches is unlocked when a specific flag is set. The flags that are currently used in `GetGameProgressFlags` can be changed to flags that better suit your game. +* **Recharge Steps**: `VSSEEKER_RECHARGE_STEPS` is initally set to 100, but this value can be changed to any number under 256. +* **Badge Requirement**: `HasAtLeastFiveBadges` is used to check if the Vs. Seeker will successfully work. You can customize the number of badges by changing `REMATCH_BADGE_COUNT` or otherwise alterting the function. + +## What are the limitations of the Vs. Seeker? +The Vs. Seeker does not currently work with Gym Leaders. There is a bug filed to hopefully fix this in the future. diff --git a/graphics/battle_anims/backgrounds/rainbow.bin b/graphics/battle_anims/backgrounds/rainbow.bin deleted file mode 100644 index 770389abf4de..000000000000 Binary files a/graphics/battle_anims/backgrounds/rainbow.bin and /dev/null differ diff --git a/graphics/battle_anims/backgrounds/rainbow.pal b/graphics/battle_anims/backgrounds/rainbow.pal deleted file mode 100644 index 9b62b7b25b4f..000000000000 --- a/graphics/battle_anims/backgrounds/rainbow.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -109 92 75 -255 255 255 -255 107 122 -255 200 102 -255 255 107 -143 255 160 -107 255 255 -107 129 255 -220 114 255 -199 255 250 -232 240 248 -224 232 240 -208 224 240 -191 202 224 -183 189 202 -157 166 181 diff --git a/graphics/battle_anims/backgrounds/rainbow.png b/graphics/battle_anims/backgrounds/rainbow.png deleted file mode 100644 index bd41645b3571..000000000000 Binary files a/graphics/battle_anims/backgrounds/rainbow.png and /dev/null differ diff --git a/graphics/battle_anims/backgrounds/rainbow_opponent_tile.bin b/graphics/battle_anims/backgrounds/rainbow_opponent_tile.bin new file mode 100644 index 000000000000..3aedd149cb8f Binary files /dev/null and b/graphics/battle_anims/backgrounds/rainbow_opponent_tile.bin differ diff --git a/graphics/battle_anims/backgrounds/rainbow_opponent_tile.png b/graphics/battle_anims/backgrounds/rainbow_opponent_tile.png new file mode 100644 index 000000000000..27377148052c Binary files /dev/null and b/graphics/battle_anims/backgrounds/rainbow_opponent_tile.png differ diff --git a/graphics/battle_anims/backgrounds/rainbow_player_tile.bin b/graphics/battle_anims/backgrounds/rainbow_player_tile.bin new file mode 100644 index 000000000000..a4f509ebe954 Binary files /dev/null and b/graphics/battle_anims/backgrounds/rainbow_player_tile.bin differ diff --git a/graphics/battle_anims/backgrounds/rainbow_player_tile.png b/graphics/battle_anims/backgrounds/rainbow_player_tile.png new file mode 100644 index 000000000000..5597a2fa9284 Binary files /dev/null and b/graphics/battle_anims/backgrounds/rainbow_player_tile.png differ diff --git a/graphics/battle_anims/sprites/tatsugiri_curly.png b/graphics/battle_anims/sprites/tatsugiri_curly.png new file mode 100644 index 000000000000..8642833f8f44 Binary files /dev/null and b/graphics/battle_anims/sprites/tatsugiri_curly.png differ diff --git a/graphics/battle_anims/sprites/tatsugiri_droopy.png b/graphics/battle_anims/sprites/tatsugiri_droopy.png new file mode 100644 index 000000000000..ae478dec5c8d Binary files /dev/null and b/graphics/battle_anims/sprites/tatsugiri_droopy.png differ diff --git a/graphics/battle_anims/sprites/tatsugiri_stretchy.png b/graphics/battle_anims/sprites/tatsugiri_stretchy.png new file mode 100644 index 000000000000..650807db0e54 Binary files /dev/null and b/graphics/battle_anims/sprites/tatsugiri_stretchy.png differ diff --git a/graphics/battle_anims/sprites/tera_symbol.png b/graphics/battle_anims/sprites/tera_symbol.png new file mode 100644 index 000000000000..ccade976e350 Binary files /dev/null and b/graphics/battle_anims/sprites/tera_symbol.png differ diff --git a/graphics/battle_interface/ability_pop_up.png b/graphics/battle_interface/ability_pop_up.png index ede0a7b5d7e3..fa0f09dba38e 100644 Binary files a/graphics/battle_interface/ability_pop_up.png and b/graphics/battle_interface/ability_pop_up.png differ diff --git a/graphics/battle_interface/healthbox_doubles_opponent.png b/graphics/battle_interface/healthbox_doubles_opponent.png index def9d07af000..28fdbbbeb984 100644 Binary files a/graphics/battle_interface/healthbox_doubles_opponent.png and b/graphics/battle_interface/healthbox_doubles_opponent.png differ diff --git a/graphics/battle_interface/healthbox_doubles_player.png b/graphics/battle_interface/healthbox_doubles_player.png index f843c664b19a..c3587ec3fd14 100644 Binary files a/graphics/battle_interface/healthbox_doubles_player.png and b/graphics/battle_interface/healthbox_doubles_player.png differ diff --git a/graphics/battle_interface/healthbox_safari.png b/graphics/battle_interface/healthbox_safari.png index e48f380a4b5e..b2a9255c5a3c 100644 Binary files a/graphics/battle_interface/healthbox_safari.png and b/graphics/battle_interface/healthbox_safari.png differ diff --git a/graphics/battle_interface/healthbox_singles_opponent.png b/graphics/battle_interface/healthbox_singles_opponent.png index 52f70e85801a..3047ed62d06c 100644 Binary files a/graphics/battle_interface/healthbox_singles_opponent.png and b/graphics/battle_interface/healthbox_singles_opponent.png differ diff --git a/graphics/battle_interface/healthbox_singles_player.png b/graphics/battle_interface/healthbox_singles_player.png index 0862ca399d54..cf65e6761293 100644 Binary files a/graphics/battle_interface/healthbox_singles_player.png and b/graphics/battle_interface/healthbox_singles_player.png differ diff --git a/graphics/battle_interface/last_used_ball_r_cycle.png b/graphics/battle_interface/last_used_ball_r_cycle.png index 0a73148e15f5..55b7bc7c0c7b 100644 Binary files a/graphics/battle_interface/last_used_ball_r_cycle.png and b/graphics/battle_interface/last_used_ball_r_cycle.png differ diff --git a/graphics/field_effects/palettes/big_dust.pal b/graphics/field_effects/palettes/big_dust.pal new file mode 100644 index 000000000000..34beaf03719a --- /dev/null +++ b/graphics/field_effects/palettes/big_dust.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 172 238 +198 181 156 +165 140 115 +181 165 140 +148 123 99 +206 198 173 +189 173 148 +82 74 57 +222 180 148 +140 123 82 +173 156 123 +238 213 180 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/field_effects/palettes/oras_dowsing.pal b/graphics/field_effects/palettes/oras_dowsing.pal new file mode 100644 index 000000000000..d3446e39714b --- /dev/null +++ b/graphics/field_effects/palettes/oras_dowsing.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 0 255 diff --git a/graphics/field_effects/pics/oras_dowsing_brendan.png b/graphics/field_effects/pics/oras_dowsing_brendan.png new file mode 100644 index 000000000000..fd8351981984 Binary files /dev/null and b/graphics/field_effects/pics/oras_dowsing_brendan.png differ diff --git a/graphics/field_effects/pics/oras_dowsing_may.png b/graphics/field_effects/pics/oras_dowsing_may.png new file mode 100644 index 000000000000..6a4eb08f0293 Binary files /dev/null and b/graphics/field_effects/pics/oras_dowsing_may.png differ diff --git a/graphics/field_effects/pics/rock_climb_blob.png b/graphics/field_effects/pics/rock_climb_blob.png new file mode 100644 index 000000000000..19a9a7cea9b6 Binary files /dev/null and b/graphics/field_effects/pics/rock_climb_blob.png differ diff --git a/graphics/field_effects/pics/rock_climb_dust.png b/graphics/field_effects/pics/rock_climb_dust.png new file mode 100644 index 000000000000..541c6ba9b8b3 Binary files /dev/null and b/graphics/field_effects/pics/rock_climb_dust.png differ diff --git a/graphics/fonts/latin_small_narrower.png b/graphics/fonts/latin_small_narrower.png index 69bca4645ac6..ebb7c70d2725 100644 Binary files a/graphics/fonts/latin_small_narrower.png and b/graphics/fonts/latin_small_narrower.png differ diff --git a/graphics/object_events/pics/misc/apricorn_tree.png b/graphics/object_events/pics/misc/apricorn_tree.png new file mode 100644 index 000000000000..6267970061d2 Binary files /dev/null and b/graphics/object_events/pics/misc/apricorn_tree.png differ diff --git a/graphics/pokemon/castform/back_gba.png b/graphics/pokemon/castform/back_gba.png new file mode 100644 index 000000000000..6348a35e8662 Binary files /dev/null and b/graphics/pokemon/castform/back_gba.png differ diff --git a/graphics/pokemon/castform/front_gba.png b/graphics/pokemon/castform/front_gba.png new file mode 100644 index 000000000000..39bfaf4266e5 Binary files /dev/null and b/graphics/pokemon/castform/front_gba.png differ diff --git a/graphics/pokemon/castform/icon_gba.png b/graphics/pokemon/castform/icon_gba.png new file mode 100644 index 000000000000..56c62ad07623 Binary files /dev/null and b/graphics/pokemon/castform/icon_gba.png differ diff --git a/graphics/pokemon/castform/normal_gba.pal b/graphics/pokemon/castform/normal_gba.pal new file mode 100644 index 000000000000..3fe2b769285c --- /dev/null +++ b/graphics/pokemon/castform/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 148 +90 82 82 +205 189 189 +230 222 222 +246 246 238 +0 0 0 +255 255 255 +222 222 246 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +148 148 148 +74 82 74 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/castform/rainy/back_gba.png b/graphics/pokemon/castform/rainy/back_gba.png new file mode 100644 index 000000000000..70bad9130b24 Binary files /dev/null and b/graphics/pokemon/castform/rainy/back_gba.png differ diff --git a/graphics/pokemon/castform/rainy/front_gba.png b/graphics/pokemon/castform/rainy/front_gba.png new file mode 100644 index 000000000000..15537403506f Binary files /dev/null and b/graphics/pokemon/castform/rainy/front_gba.png differ diff --git a/graphics/pokemon/castform/rainy/normal_gba.pal b/graphics/pokemon/castform/rainy/normal_gba.pal new file mode 100644 index 000000000000..914cdac62200 --- /dev/null +++ b/graphics/pokemon/castform/rainy/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 148 +57 65 90 +98 115 189 +115 139 213 +148 180 205 +0 0 0 +205 238 246 +180 197 222 +139 205 222 +131 180 197 +82 98 131 +197 197 197 +148 139 148 +90 90 82 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/castform/rainy/shiny_gba.pal b/graphics/pokemon/castform/rainy/shiny_gba.pal new file mode 100644 index 000000000000..914cdac62200 --- /dev/null +++ b/graphics/pokemon/castform/rainy/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 148 +57 65 90 +98 115 189 +115 139 213 +148 180 205 +0 0 0 +205 238 246 +180 197 222 +139 205 222 +131 180 197 +82 98 131 +197 197 197 +148 139 148 +90 90 82 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/castform/shiny_gba.pal b/graphics/pokemon/castform/shiny_gba.pal new file mode 100644 index 000000000000..2fa401dd6f36 --- /dev/null +++ b/graphics/pokemon/castform/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 148 +98 90 90 +205 164 189 +230 197 222 +255 222 255 +0 0 0 +255 246 65 +230 180 32 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +148 148 148 +74 82 74 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/castform/snowy/back_gba.png b/graphics/pokemon/castform/snowy/back_gba.png new file mode 100644 index 000000000000..b4f27cbe6da8 Binary files /dev/null and b/graphics/pokemon/castform/snowy/back_gba.png differ diff --git a/graphics/pokemon/castform/snowy/front_gba.png b/graphics/pokemon/castform/snowy/front_gba.png new file mode 100644 index 000000000000..a75bf647e6a6 Binary files /dev/null and b/graphics/pokemon/castform/snowy/front_gba.png differ diff --git a/graphics/pokemon/castform/snowy/normal_gba.pal b/graphics/pokemon/castform/snowy/normal_gba.pal new file mode 100644 index 000000000000..d1c64ac75ca5 --- /dev/null +++ b/graphics/pokemon/castform/snowy/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 148 +41 82 57 +123 82 189 +139 115 213 +148 180 205 +0 0 0 +197 180 255 +156 156 197 +139 205 172 +115 164 139 +98 74 115 +189 230 230 +82 115 106 +74 82 74 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/castform/snowy/shiny_gba.pal b/graphics/pokemon/castform/snowy/shiny_gba.pal new file mode 100644 index 000000000000..d1c64ac75ca5 --- /dev/null +++ b/graphics/pokemon/castform/snowy/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 148 +41 82 57 +123 82 189 +139 115 213 +148 180 205 +0 0 0 +197 180 255 +156 156 197 +139 205 172 +115 164 139 +98 74 115 +189 230 230 +82 115 106 +74 82 74 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/castform/sunny/back_gba.png b/graphics/pokemon/castform/sunny/back_gba.png new file mode 100644 index 000000000000..83b27298ad21 Binary files /dev/null and b/graphics/pokemon/castform/sunny/back_gba.png differ diff --git a/graphics/pokemon/castform/sunny/front_gba.png b/graphics/pokemon/castform/sunny/front_gba.png new file mode 100644 index 000000000000..7e14f9892e79 Binary files /dev/null and b/graphics/pokemon/castform/sunny/front_gba.png differ diff --git a/graphics/pokemon/castform/sunny/normal_gba.pal b/graphics/pokemon/castform/sunny/normal_gba.pal new file mode 100644 index 000000000000..af0cfbb93bc4 --- /dev/null +++ b/graphics/pokemon/castform/sunny/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 148 +98 49 41 +205 90 74 +238 123 74 +255 156 65 +0 0 0 +255 246 106 +230 213 106 +255 156 98 +213 131 74 +148 90 65 +213 205 230 +0 0 0 +90 90 82 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/castform/sunny/shiny_gba.pal b/graphics/pokemon/castform/sunny/shiny_gba.pal new file mode 100644 index 000000000000..af0cfbb93bc4 --- /dev/null +++ b/graphics/pokemon/castform/sunny/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 148 +98 49 41 +205 90 74 +238 123 74 +255 156 65 +0 0 0 +255 246 106 +230 213 106 +255 156 98 +213 131 74 +148 90 65 +213 205 230 +0 0 0 +90 90 82 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/chesnaught/overworld.png b/graphics/pokemon/chesnaught/overworld.png index 7902feaf5758..99c5d10cba7f 100644 Binary files a/graphics/pokemon/chesnaught/overworld.png and b/graphics/pokemon/chesnaught/overworld.png differ diff --git a/graphics/pokemon/chespin/overworld.png b/graphics/pokemon/chespin/overworld.png index 5056ad774a4a..92df00e97da2 100644 Binary files a/graphics/pokemon/chespin/overworld.png and b/graphics/pokemon/chespin/overworld.png differ diff --git a/graphics/pokemon/delphox/overworld.png b/graphics/pokemon/delphox/overworld.png index e490e31cd818..dbf3da76ea4d 100644 Binary files a/graphics/pokemon/delphox/overworld.png and b/graphics/pokemon/delphox/overworld.png differ diff --git a/graphics/pokemon/deoxys/attack/back_gba.png b/graphics/pokemon/deoxys/attack/back_gba.png new file mode 100644 index 000000000000..6f9b3fd9ef05 Binary files /dev/null and b/graphics/pokemon/deoxys/attack/back_gba.png differ diff --git a/graphics/pokemon/deoxys/attack/front_gba.png b/graphics/pokemon/deoxys/attack/front_gba.png new file mode 100644 index 000000000000..67c092649ebd Binary files /dev/null and b/graphics/pokemon/deoxys/attack/front_gba.png differ diff --git a/graphics/pokemon/deoxys/attack/normal_gba.pal b/graphics/pokemon/deoxys/attack/normal_gba.pal new file mode 100644 index 000000000000..e8921dd3d55e --- /dev/null +++ b/graphics/pokemon/deoxys/attack/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 255 +115 74 49 +213 106 106 +255 131 74 +255 172 131 +115 213 172 +82 172 123 +57 98 90 +0 0 0 +156 156 131 +106 8 156 +0 98 230 +115 115 106 +197 197 213 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/deoxys/attack/shiny_gba.pal b/graphics/pokemon/deoxys/attack/shiny_gba.pal new file mode 100644 index 000000000000..666acaa3ae62 --- /dev/null +++ b/graphics/pokemon/deoxys/attack/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 255 +106 90 24 +197 189 65 +255 222 74 +255 246 139 +115 213 172 +82 172 123 +57 98 90 +0 0 0 +156 156 131 +106 8 156 +0 98 230 +115 115 106 +197 197 213 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/deoxys/defense/back_gba.png b/graphics/pokemon/deoxys/defense/back_gba.png new file mode 100644 index 000000000000..c1fcf46738f5 Binary files /dev/null and b/graphics/pokemon/deoxys/defense/back_gba.png differ diff --git a/graphics/pokemon/deoxys/defense/front_gba.png b/graphics/pokemon/deoxys/defense/front_gba.png new file mode 100644 index 000000000000..5e2f38019ec4 Binary files /dev/null and b/graphics/pokemon/deoxys/defense/front_gba.png differ diff --git a/graphics/pokemon/deoxys/defense/normal_gba.pal b/graphics/pokemon/deoxys/defense/normal_gba.pal new file mode 100644 index 000000000000..e8921dd3d55e --- /dev/null +++ b/graphics/pokemon/deoxys/defense/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 255 +115 74 49 +213 106 106 +255 131 74 +255 172 131 +115 213 172 +82 172 123 +57 98 90 +0 0 0 +156 156 131 +106 8 156 +0 98 230 +115 115 106 +197 197 213 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/deoxys/defense/shiny_gba.pal b/graphics/pokemon/deoxys/defense/shiny_gba.pal new file mode 100644 index 000000000000..666acaa3ae62 --- /dev/null +++ b/graphics/pokemon/deoxys/defense/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 255 +106 90 24 +197 189 65 +255 222 74 +255 246 139 +115 213 172 +82 172 123 +57 98 90 +0 0 0 +156 156 131 +106 8 156 +0 98 230 +115 115 106 +197 197 213 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/deoxys/speed/back_gba.png b/graphics/pokemon/deoxys/speed/back_gba.png new file mode 100644 index 000000000000..979936c640b2 Binary files /dev/null and b/graphics/pokemon/deoxys/speed/back_gba.png differ diff --git a/graphics/pokemon/deoxys/speed/front_gba.png b/graphics/pokemon/deoxys/speed/front_gba.png new file mode 100644 index 000000000000..ab713aeeaf4a Binary files /dev/null and b/graphics/pokemon/deoxys/speed/front_gba.png differ diff --git a/graphics/pokemon/deoxys/speed/normal_gba.pal b/graphics/pokemon/deoxys/speed/normal_gba.pal new file mode 100644 index 000000000000..90fcff114bd9 --- /dev/null +++ b/graphics/pokemon/deoxys/speed/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 255 +115 74 49 +213 106 106 +255 131 74 +255 172 131 +115 213 172 +131 164 156 +57 98 90 +82 74 65 +156 156 131 +139 8 205 +222 106 230 +123 115 82 +197 197 213 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/deoxys/speed/shiny_gba.pal b/graphics/pokemon/deoxys/speed/shiny_gba.pal new file mode 100644 index 000000000000..74b8fc7775ed --- /dev/null +++ b/graphics/pokemon/deoxys/speed/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 255 +106 90 24 +197 189 65 +255 222 57 +255 246 139 +115 213 172 +82 172 123 +57 98 90 +82 74 65 +156 156 131 +106 8 156 +0 98 230 +115 115 106 +197 197 213 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/diggersby/overworld.png b/graphics/pokemon/diggersby/overworld.png index 03d6b5906674..39f72f55311b 100644 Binary files a/graphics/pokemon/diggersby/overworld.png and b/graphics/pokemon/diggersby/overworld.png differ diff --git a/graphics/pokemon/espurr/overworld.png b/graphics/pokemon/espurr/overworld.png index f7ba8e08a0a7..6df4dddb3e97 100644 Binary files a/graphics/pokemon/espurr/overworld.png and b/graphics/pokemon/espurr/overworld.png differ diff --git a/graphics/pokemon/flabebe/blue/overworld.png b/graphics/pokemon/flabebe/blue/overworld.png index cd98db3a57e2..09982c244a27 100644 Binary files a/graphics/pokemon/flabebe/blue/overworld.png and b/graphics/pokemon/flabebe/blue/overworld.png differ diff --git a/graphics/pokemon/flabebe/orange/overworld.png b/graphics/pokemon/flabebe/orange/overworld.png index 482ff4f29ecb..cf7ca349de59 100644 Binary files a/graphics/pokemon/flabebe/orange/overworld.png and b/graphics/pokemon/flabebe/orange/overworld.png differ diff --git a/graphics/pokemon/flabebe/overworld.png b/graphics/pokemon/flabebe/overworld.png index 3ad946f5f8f3..9bb8f7f53588 100644 Binary files a/graphics/pokemon/flabebe/overworld.png and b/graphics/pokemon/flabebe/overworld.png differ diff --git a/graphics/pokemon/flabebe/white/overworld.png b/graphics/pokemon/flabebe/white/overworld.png index 35b4b2f358ad..df004f2fe11a 100644 Binary files a/graphics/pokemon/flabebe/white/overworld.png and b/graphics/pokemon/flabebe/white/overworld.png differ diff --git a/graphics/pokemon/flabebe/yellow/overworld.png b/graphics/pokemon/flabebe/yellow/overworld.png index b0f7a47f7a3e..43b620a761b3 100644 Binary files a/graphics/pokemon/flabebe/yellow/overworld.png and b/graphics/pokemon/flabebe/yellow/overworld.png differ diff --git a/graphics/pokemon/fletchinder/overworld.png b/graphics/pokemon/fletchinder/overworld.png index a987365357f7..949b3e308dc8 100644 Binary files a/graphics/pokemon/fletchinder/overworld.png and b/graphics/pokemon/fletchinder/overworld.png differ diff --git a/graphics/pokemon/fletchling/overworld.png b/graphics/pokemon/fletchling/overworld.png index acfc95f616a7..4c35d25d1727 100644 Binary files a/graphics/pokemon/fletchling/overworld.png and b/graphics/pokemon/fletchling/overworld.png differ diff --git a/graphics/pokemon/floette/blue/overworld.png b/graphics/pokemon/floette/blue/overworld.png index 034b336557f1..01dd29581420 100644 Binary files a/graphics/pokemon/floette/blue/overworld.png and b/graphics/pokemon/floette/blue/overworld.png differ diff --git a/graphics/pokemon/floette/eternal/overworld.png b/graphics/pokemon/floette/eternal/overworld.png index 890288792cdd..d8cd5c5807d7 100644 Binary files a/graphics/pokemon/floette/eternal/overworld.png and b/graphics/pokemon/floette/eternal/overworld.png differ diff --git a/graphics/pokemon/floette/orange/overworld.png b/graphics/pokemon/floette/orange/overworld.png index f1559fcdc53a..b40d7c8c99b2 100644 Binary files a/graphics/pokemon/floette/orange/overworld.png and b/graphics/pokemon/floette/orange/overworld.png differ diff --git a/graphics/pokemon/floette/overworld.png b/graphics/pokemon/floette/overworld.png index 54f4dd54affb..11be9e078b76 100644 Binary files a/graphics/pokemon/floette/overworld.png and b/graphics/pokemon/floette/overworld.png differ diff --git a/graphics/pokemon/floette/white/overworld.png b/graphics/pokemon/floette/white/overworld.png index af49bcc9211f..fbf3e297a178 100644 Binary files a/graphics/pokemon/floette/white/overworld.png and b/graphics/pokemon/floette/white/overworld.png differ diff --git a/graphics/pokemon/floette/yellow/overworld.png b/graphics/pokemon/floette/yellow/overworld.png index 647e8149779e..6d515a766198 100644 Binary files a/graphics/pokemon/floette/yellow/overworld.png and b/graphics/pokemon/floette/yellow/overworld.png differ diff --git a/graphics/pokemon/gliscor/anim_front.png b/graphics/pokemon/gliscor/anim_front.png index 8c12ed4ef868..0454687c442c 100644 Binary files a/graphics/pokemon/gliscor/anim_front.png and b/graphics/pokemon/gliscor/anim_front.png differ diff --git a/graphics/pokemon/gliscor/shiny.pal b/graphics/pokemon/gliscor/shiny.pal index 647a9cd6c5f6..6faf8d1e9de4 100644 --- a/graphics/pokemon/gliscor/shiny.pal +++ b/graphics/pokemon/gliscor/shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 168 144 0 248 216 0 64 64 80 -176 160 248 192 80 144 +104 104 120 diff --git a/graphics/pokemon/greninja/ash/overworld.png b/graphics/pokemon/greninja/ash/overworld.png new file mode 100644 index 000000000000..9313520a5eee Binary files /dev/null and b/graphics/pokemon/greninja/ash/overworld.png differ diff --git a/graphics/pokemon/greninja/ash/overworld_normal.pal b/graphics/pokemon/greninja/ash/overworld_normal.pal new file mode 100644 index 000000000000..04bbf21ddfd3 --- /dev/null +++ b/graphics/pokemon/greninja/ash/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +46 56 55 +68 84 82 +20 20 20 +220 212 133 +234 152 208 +72 95 157 +245 103 190 +62 141 206 +136 186 226 +184 62 48 +176 97 134 +186 214 237 +233 85 88 +241 174 219 +100 33 26 diff --git a/graphics/pokemon/greninja/ash/overworld_shiny.pal b/graphics/pokemon/greninja/ash/overworld_shiny.pal new file mode 100644 index 000000000000..6ce04a93199c --- /dev/null +++ b/graphics/pokemon/greninja/ash/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +46 56 55 +68 84 82 +20 20 20 +184 152 83 +234 152 208 +46 56 55 +245 103 190 +68 84 82 +136 186 226 +184 62 48 +176 97 134 +186 214 237 +233 85 88 +241 174 219 +100 33 26 diff --git a/graphics/pokemon/greninja/overworld.png b/graphics/pokemon/greninja/overworld.png index bb08608ca5b8..6e14bb60eb89 100644 Binary files a/graphics/pokemon/greninja/overworld.png and b/graphics/pokemon/greninja/overworld.png differ diff --git a/graphics/pokemon/hydrapple/back.png b/graphics/pokemon/hydrapple/back.png index 19ffd6d199fe..ec5f77cabe3b 100644 Binary files a/graphics/pokemon/hydrapple/back.png and b/graphics/pokemon/hydrapple/back.png differ diff --git a/graphics/pokemon/kingler/overworld.png b/graphics/pokemon/kingler/overworld.png index 135f79b3265f..c67ce3a53af2 100644 Binary files a/graphics/pokemon/kingler/overworld.png and b/graphics/pokemon/kingler/overworld.png differ diff --git a/graphics/pokemon/krabby/overworld.png b/graphics/pokemon/krabby/overworld.png index abe66ceb6f23..f712b6f6ff16 100644 Binary files a/graphics/pokemon/krabby/overworld.png and b/graphics/pokemon/krabby/overworld.png differ diff --git a/graphics/pokemon/lillipup/overworld.png b/graphics/pokemon/lillipup/overworld.png index ef8841471354..14f876a2c6e8 100644 Binary files a/graphics/pokemon/lillipup/overworld.png and b/graphics/pokemon/lillipup/overworld.png differ diff --git a/graphics/pokemon/litleo/overworld.png b/graphics/pokemon/litleo/overworld.png index 2c128f3184b2..a419a8327df1 100644 Binary files a/graphics/pokemon/litleo/overworld.png and b/graphics/pokemon/litleo/overworld.png differ diff --git a/graphics/pokemon/nickit/front.png b/graphics/pokemon/nickit/front.png index 9aba8f113ca4..6bcf9854fc11 100644 Binary files a/graphics/pokemon/nickit/front.png and b/graphics/pokemon/nickit/front.png differ diff --git a/graphics/pokemon/nickit/normal.pal b/graphics/pokemon/nickit/normal.pal index 487647accdec..74565685e79c 100644 --- a/graphics/pokemon/nickit/normal.pal +++ b/graphics/pokemon/nickit/normal.pal @@ -5,12 +5,12 @@ JASC-PAL 40 40 32 64 64 48 16 16 16 -136 64 48 +136 64 62 64 24 16 -192 80 24 +193 108 65 216 216 224 -136 120 136 -200 184 0 +159 147 159 +197 148 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/nickit/overworld.png b/graphics/pokemon/nickit/overworld.png index 2b868637e5b4..206e2661905c 100644 Binary files a/graphics/pokemon/nickit/overworld.png and b/graphics/pokemon/nickit/overworld.png differ diff --git a/graphics/pokemon/nickit/overworld_normal.pal b/graphics/pokemon/nickit/overworld_normal.pal index faa146c087fb..ff8c34acea34 100644 --- a/graphics/pokemon/nickit/overworld_normal.pal +++ b/graphics/pokemon/nickit/overworld_normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -255 0 25 +128 196 156 8 8 7 -0 0 0 52 51 48 -21 20 18 -121 53 31 +91 41 25 +92 92 92 +136 59 35 185 90 59 -36 14 7 -255 255 255 210 184 61 -92 92 92 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +159 147 159 +223 218 223 +255 255 255 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/graphics/pokemon/nickit/overworld_shiny.pal b/graphics/pokemon/nickit/overworld_shiny.pal index 50a8845599f9..7327a9c8b6cf 100644 --- a/graphics/pokemon/nickit/overworld_shiny.pal +++ b/graphics/pokemon/nickit/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -0 0 24 -0 0 0 -8 41 115 -0 16 74 -115 106 98 -164 148 139 -24 24 24 +128 196 156 +8 8 7 +51 76 95 +82 75 73 +92 92 92 +122 112 109 +167 154 149 +210 184 61 +159 147 159 +223 218 223 255 255 255 -213 189 57 -90 90 90 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/graphics/pokemon/pancham/overworld.png b/graphics/pokemon/pancham/overworld.png index 90d10d9bfa62..a54ddda99d43 100644 Binary files a/graphics/pokemon/pancham/overworld.png and b/graphics/pokemon/pancham/overworld.png differ diff --git a/graphics/pokemon/pikachu/starter/icon.png b/graphics/pokemon/pikachu/starter/icon.png index 737fababd7d4..891f0d1b3e87 100644 Binary files a/graphics/pokemon/pikachu/starter/icon.png and b/graphics/pokemon/pikachu/starter/icon.png differ diff --git a/graphics/pokemon/scatterbug/overworld.png b/graphics/pokemon/scatterbug/overworld.png index 2da700223db7..41de917984a6 100644 Binary files a/graphics/pokemon/scatterbug/overworld.png and b/graphics/pokemon/scatterbug/overworld.png differ diff --git a/graphics/pokemon/spinda/anim_front_gba.png b/graphics/pokemon/spinda/anim_front_gba.png new file mode 100644 index 000000000000..7ddfbef5171b Binary files /dev/null and b/graphics/pokemon/spinda/anim_front_gba.png differ diff --git a/graphics/pokemon/spinda/back_gba.png b/graphics/pokemon/spinda/back_gba.png new file mode 100644 index 000000000000..c5f699e2cf61 Binary files /dev/null and b/graphics/pokemon/spinda/back_gba.png differ diff --git a/graphics/pokemon/spinda/icon_gba.png b/graphics/pokemon/spinda/icon_gba.png new file mode 100644 index 000000000000..75699c7cbb98 Binary files /dev/null and b/graphics/pokemon/spinda/icon_gba.png differ diff --git a/graphics/pokemon/spinda/normal_gba.pal b/graphics/pokemon/spinda/normal_gba.pal new file mode 100644 index 000000000000..9b0ad5bfc42d --- /dev/null +++ b/graphics/pokemon/spinda/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +246 230 172 +230 213 164 +197 180 131 +172 148 106 +222 139 74 +222 106 57 +180 90 41 +156 57 24 +115 65 16 +172 65 90 +255 255 0 +255 255 0 +123 98 74 +90 65 49 +16 16 16 diff --git a/graphics/pokemon/spinda/shiny_gba.pal b/graphics/pokemon/spinda/shiny_gba.pal new file mode 100644 index 000000000000..6aa748129609 --- /dev/null +++ b/graphics/pokemon/spinda/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +246 230 172 +230 213 164 +197 180 131 +172 148 106 +180 197 90 +148 164 57 +115 131 24 +82 98 0 +49 65 0 +172 65 90 +255 255 0 +255 255 0 +123 98 74 +90 65 49 +16 16 16 diff --git a/graphics/pokemon/talonflame/overworld.png b/graphics/pokemon/talonflame/overworld.png index 43760d9e8512..67fc802f44e7 100644 Binary files a/graphics/pokemon/talonflame/overworld.png and b/graphics/pokemon/talonflame/overworld.png differ diff --git a/graphics/pokemon/thievul/back.png b/graphics/pokemon/thievul/back.png index 7658e0ec2285..10b145f4ea79 100644 Binary files a/graphics/pokemon/thievul/back.png and b/graphics/pokemon/thievul/back.png differ diff --git a/graphics/pokemon/thievul/front.png b/graphics/pokemon/thievul/front.png index 447aeaf02bbc..941b0b9a2a15 100644 Binary files a/graphics/pokemon/thievul/front.png and b/graphics/pokemon/thievul/front.png differ diff --git a/graphics/pokemon/thievul/normal.pal b/graphics/pokemon/thievul/normal.pal index 3f3b4bf6d173..74565685e79c 100644 --- a/graphics/pokemon/thievul/normal.pal +++ b/graphics/pokemon/thievul/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -24 24 16 40 40 32 +64 64 48 16 16 16 -104 56 48 +136 64 62 64 24 16 -192 80 24 -136 120 136 -136 64 48 +193 108 65 216 216 224 -216 136 0 -176 160 184 -80 72 80 +159 147 159 +197 148 0 +0 0 0 +0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/thievul/overworld.png b/graphics/pokemon/thievul/overworld.png index c83530247159..53cf0b5b0e93 100644 Binary files a/graphics/pokemon/thievul/overworld.png and b/graphics/pokemon/thievul/overworld.png differ diff --git a/graphics/pokemon/thievul/overworld_normal.pal b/graphics/pokemon/thievul/overworld_normal.pal index 764d23bb6039..ff8c34acea34 100644 --- a/graphics/pokemon/thievul/overworld_normal.pal +++ b/graphics/pokemon/thievul/overworld_normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -238 255 0 +128 196 156 8 8 7 52 51 48 -0 0 0 -121 53 31 -21 20 18 +91 41 25 +92 92 92 +136 59 35 185 90 59 -36 14 7 -255 255 255 210 184 61 -92 92 92 -176 176 176 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +159 147 159 +223 218 223 +255 255 255 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/graphics/pokemon/thievul/overworld_shiny.pal b/graphics/pokemon/thievul/overworld_shiny.pal index 6584b3d19efb..f2d8cccbaf43 100644 --- a/graphics/pokemon/thievul/overworld_shiny.pal +++ b/graphics/pokemon/thievul/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -238 255 0 -8 8 0 -8 41 115 -0 0 0 -115 106 98 -0 16 74 -164 148 139 -24 24 24 +128 196 156 +8 8 7 +56 76 139 +78 73 71 +92 92 92 +117 108 106 +159 148 145 +210 184 61 +159 147 159 +223 218 223 255 255 255 -213 189 57 -90 90 90 -180 180 180 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/graphics/pokemon/thievul/shiny.pal b/graphics/pokemon/thievul/shiny.pal index a6c7735277f5..dce4bdc484a4 100644 --- a/graphics/pokemon/thievul/shiny.pal +++ b/graphics/pokemon/thievul/shiny.pal @@ -2,14 +2,14 @@ JASC-PAL 0100 16 152 208 160 -8 24 40 -16 40 64 +37 73 109 +14 62 109 16 16 16 88 80 80 40 40 32 168 160 152 -144 144 120 -128 120 112 +228 228 228 +175 180 191 216 216 200 216 136 0 184 184 168 diff --git a/graphics/pokemon/watchog/overworld.png b/graphics/pokemon/watchog/overworld.png index e9184c7375ad..092d97f508a1 100644 Binary files a/graphics/pokemon/watchog/overworld.png and b/graphics/pokemon/watchog/overworld.png differ diff --git a/graphics/pokenav/name_box.png b/graphics/pokenav/name_box.png new file mode 100644 index 000000000000..7c2ed7036b60 Binary files /dev/null and b/graphics/pokenav/name_box.png differ diff --git a/graphics/text_window/name_box.png b/graphics/text_window/name_box.png new file mode 100644 index 000000000000..735f39247ebe Binary files /dev/null and b/graphics/text_window/name_box.png differ diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 75460992f889..0b8a91415de2 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -340,6 +340,9 @@ $(UNUSEDGFXDIR)/color_frames.4bpp: %.4bpp: %.png $(BATINTGFXDIR)/unused_window2bar.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 5 -Wnum_tiles +$(BATINTGFXDIR)/ability_pop_up.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 4 + $(JPCONTESTGFXDIR)/composite_1.4bpp: $(JPCONTESTGFXDIR)/frame_1.4bpp \ $(JPCONTESTGFXDIR)/floor.4bpp \ $(JPCONTESTGFXDIR)/frame_2.4bpp \ @@ -402,7 +405,7 @@ $(RAYQUAZAGFXDIR)/scene_2/bg.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 313 -Wnum_tiles $(RAYQUAZAGFXDIR)/scene_3/rayquaza.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 124 -Wnum_tiles + $(GFX) $< $@ -num_tiles 128 -Wnum_tiles $(RAYQUAZAGFXDIR)/scene_4/streaks.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 19 -Wnum_tiles diff --git a/include/apricorn_tree.h b/include/apricorn_tree.h new file mode 100644 index 000000000000..fc9e95b438e1 --- /dev/null +++ b/include/apricorn_tree.h @@ -0,0 +1,15 @@ +#ifndef GUARD_APRICORN_TREE_H +#define GUARD_APRICORN_TREE_H + +#include "constants/apricorn_tree.h" + +bool8 IsApricornTreePicked(u32 id); +void SetApricornTreePicked(u32 id); + +void DailyResetApricornTrees(void); +void ObjectEventInteractionGetApricornTreeData(void); +void ObjectEventInteractionPickApricornTree(void); +enum ApricornType GetApricornTypeByApricornTreeId(u32 id); +u8 GetApricornCountByApricornTreeId(u32 id); + +#endif //GUARD_APRICORN_TREE_H diff --git a/include/battle.h b/include/battle.h old mode 100644 new mode 100755 index 6b9609758bcb..b95da58aa2c3 --- a/include/battle.h +++ b/include/battle.h @@ -2,8 +2,12 @@ #define GUARD_BATTLE_H // should they be included here or included individually by every file? +#include "constants/battle_end_turn.h" +#include "constants/abilities.h" #include "constants/battle.h" #include "constants/form_change_types.h" +#include "constants/hold_effects.h" +#include "constants/moves.h" #include "battle_main.h" #include "battle_message.h" #include "battle_util.h" @@ -13,6 +17,7 @@ #include "battle_util2.h" #include "battle_bg.h" #include "pokeball.h" +#include "main.h" #include "battle_debug.h" #include "battle_dynamax.h" #include "battle_terastal.h" @@ -44,7 +49,7 @@ // Used to exclude moves learned temporarily by Transform or Mimic #define MOVE_IS_PERMANENT(battler, moveSlot) \ - (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) \ + (!(gBattleMons[battler].volatiles.transformed) \ && !(gDisableStructs[battler].mimickedMoves & (1u << moveSlot))) // Battle Actions @@ -64,6 +69,7 @@ #define B_ACTION_FINISHED 12 #define B_ACTION_CANCEL_PARTNER 12 // when choosing an action #define B_ACTION_NOTHING_FAINTED 13 // when choosing an action +#define B_ACTION_UNK_14 14 #define B_ACTION_DEBUG 20 #define B_ACTION_THROW_BALL 21 // R to throw last used ball #define B_ACTION_NONE 0xFF @@ -96,8 +102,7 @@ struct DisableStruct u8 battlerWithSureHit; u8 isFirstTurn; u8 mimickedMoves:4; - u8 chargeTimer:4; - u8 rechargeTimer; + u8 rechargeTimer:4; u8 autotomizeCount; u16 slowStartTimer; u16 embargoTimer; @@ -112,37 +117,35 @@ struct DisableStruct u8 usedMoves:4; u8 truantCounter:1; u8 truantSwitchInHack:1; - u8 noRetreat:1; u8 tarShot:1; u8 octolock:1; u8 cudChew:1; - u8 spikesDone:1; - u8 toxicSpikesDone:1; - u8 stickyWebDone:1; - u8 stealthRockDone:1; u8 weatherAbilityDone:1; u8 terrainAbilityDone:1; u8 syrupBombIsShiny:1; - u8 steelSurgeDone:1; u8 usedProteanLibero:1; u8 flashFireBoosted:1; + u8 boosterEnergyActivated:1; + u8 padding1:1; u16 overwrittenAbility; // abilities overwritten during battle (keep separate from battle history in case of switching) - u8 boosterEnergyActivates:1; u8 roostActive:1; u8 unburdenActive:1; u8 neutralizingGas:1; u8 iceFaceActivationPrevention:1; // fixes hit escape move edge case u8 unnerveActivated:1; // Unnerve and As One (Unnerve part) activate only once per switch in - u8 padding:3; + u8 hazardsDone:1; + u8 endured:1; + u8 tryEjectPack:1; + u8 octolockedBy:3; + u8 paradoxBoostedStat:4; + u8 padding2:1; }; // Fully Cleared each turn after end turn effects are done. A few things are cleared before end turn effects struct ProtectStruct { u32 protected:7; // 126 protect options - u32 endured:1; u32 noValidMoves:1; - u32 helpingHand:1; u32 bounceMove:1; u32 stealMove:1; u32 nonVolatileStatusImmobility:1; @@ -150,31 +153,31 @@ struct ProtectStruct u32 chargingTurn:1; u32 fleeType:2; // 0: Normal, 1: FLEE_ITEM, 2: FLEE_ABILITY u32 unableToUseMove:1; // Not to be confused with HITMARKER_UNABLE_TO_USE_MOVE (It is questionable though if there is a difference. Needs further research) - u32 notFirstStrike:1; + u32 laggingTail:1; u32 palaceUnableToUseMove:1; - u32 powderSelfDmg:1; u32 statRaised:1; u32 usedCustapBerry:1; // also quick claw u32 touchedProtectLike:1; - u32 unused:8; - // End of 32-bit bitfield - u16 disableEjectPack:1; - u16 statFell:1; - u16 pranksterElevated:1; - u16 quickDraw:1; - u16 beakBlastCharge:1; - u16 quash:1; - u16 shellTrap:1; - u16 eatMirrorHerb:1; - u16 activateOpportunist:2; // 2 - to copy stats. 1 - stats copied (do not repeat). 0 - no stats to copy + u32 disableEjectPack:1; + u32 pranksterElevated:1; + u32 quickDraw:1; + u32 quash:1; + u32 shellTrap:1; + u32 eatMirrorHerb:1; + u32 activateOpportunist:2; // 2 - to copy stats. 1 - stats copied (do not repeat). 0 - no stats to copy u16 usedAllySwitch:1; u16 lashOutAffected:1; - u16 padding:4; + // End of 32-bit bitfield + u16 helpingHand:3; + u16 assuranceDoubled:1; + u16 myceliumMight:1; + u16 revengeDoubled:4; + u16 padding:7; // End of 16-bit bitfield u16 physicalDmg; u16 specialDmg; - u8 physicalBattlerId; - u8 specialBattlerId; + u8 physicalBattlerId:4; + u8 specialBattlerId:4; }; // Cleared at the start of HandleAction_ActionFinished @@ -184,20 +187,20 @@ struct SpecialStatus s32 specialDmg; u8 changedStatsBattlerId; // Battler that was responsible for the latest stat change. Can be self. u8 statLowered:1; - u8 lightningRodRedirected:1; + u8 abilityRedirected:1; u8 restoredBattlerSprite: 1; u8 faintedHasReplacement:1; - u8 preventLifeOrbDamage:1; // So that Life Orb doesn't activate various effects. u8 afterYou:1; u8 enduredDamage:1; - u8 stormDrainRedirected:1; + u8 dancerUsedMove:1; + u8 padding1:1; // End of byte u8 switchInAbilityDone:1; u8 switchInItemDone:1; u8 instructedChosenTarget:3; u8 berryReduced:1; - u8 announceNeutralizingGas:1; // See Cmd_switchineffects u8 neutralizingGasRemoved:1; // See VARIOUS_TRY_END_NEUTRALIZING_GAS + u8 padding2:1; // End of byte u8 gemParam; // End of byte @@ -209,9 +212,8 @@ struct SpecialStatus u8 teraShellAbilityDone:1; u8 criticalHit:1; // End of byte - u8 dancerUsedMove:1; u8 dancerOriginalTarget:3; - u8 unused:4; + u8 padding3:5; // End of byte }; @@ -221,23 +223,20 @@ struct SideTimer u16 lightscreenTimer; u16 mistTimer; u16 safeguardTimer; - u16 spikesAmount; // debug menu complains. might be better to solve there instead if possible - u16 toxicSpikesAmount; - u16 stealthRockAmount; - u16 stickyWebAmount; + u8 spikesAmount:4; + u8 toxicSpikesAmount:4; u8 stickyWebBattlerId; u8 stickyWebBattlerSide; // Used for Court Change u16 auroraVeilTimer; u16 tailwindTimer; u16 luckyChantTimer; - u16 steelsurgeAmount; // Timers below this point are not swapped by Court Change - u16 followmeTimer; + u8 followmeTimer:4; u8 followmeTarget:3; u8 followmePowder:1; // Rage powder, does not affect grass type pokemon. - u16 retaliateTimer; + u8 retaliateTimer; u16 damageNonTypesTimer; - u8 damageNonTypesType; + enum Type damageNonTypesType; u16 rainbowTimer; u16 seaOfFireTimer; u16 swampTimer; @@ -269,12 +268,12 @@ struct WishFutureKnock struct AI_SavedBattleMon { - u16 ability; + enum Ability ability; u16 moves[MAX_MON_MOVES]; u16 heldItem; u16 species:15; u16 saved:1; - u8 types[3]; + enum Type types[3]; }; struct AiPartyMon @@ -282,7 +281,7 @@ struct AiPartyMon u16 species; u16 item; u16 heldEffect; - u16 ability; + enum Ability ability; u16 level; u16 moves[MAX_MON_MOVES]; u32 status; @@ -315,7 +314,7 @@ struct SimulatedDamage // Ai Data used when deciding which move to use, computed only once before each turn's start. struct AiLogicData { - u16 abilities[MAX_BATTLERS_COUNT]; + enum Ability abilities[MAX_BATTLERS_COUNT]; u16 items[MAX_BATTLERS_COUNT]; u16 holdEffects[MAX_BATTLERS_COUNT]; u8 holdEffectParams[MAX_BATTLERS_COUNT]; @@ -334,12 +333,12 @@ struct AiLogicData u8 ejectButtonSwitch:1; // Tracks whether current switch out was from Eject Button u8 ejectPackSwitch:1; // Tracks whether current switch out was from Eject Pack u8 predictingSwitch:1; // Determines whether AI will use switch predictions this turn or not - u8 predictingMove:1; // Determines whether AI will use move predictions this turn or not u8 aiPredictionInProgress:1; // Tracks whether the AI is in the middle of running prediction calculations - u8 padding:2; - u8 shouldSwitch; // Stores result of ShouldSwitch, which decides whether a mon should be switched out u8 aiCalcInProgress:1; - u8 battlerDoingPrediction; // Stores which battler is currently running its prediction calcs + u8 predictingMove:1; // Determines whether AI will use move predictions this turn or not + u8 padding1:1; + u8 shouldSwitch:4; // Stores result of ShouldSwitch, which decides whether a mon should be switched out + u8 padding2:4; u16 predictedMove[MAX_BATTLERS_COUNT]; }; @@ -349,7 +348,6 @@ struct AiThinkingStruct u8 movesetIndex; u16 moveConsidered; s32 score[MAX_MON_MOVES]; - u32 funcResult; u64 aiFlags[MAX_BATTLERS_COUNT]; u8 aiAction; u8 aiLogicId; @@ -360,7 +358,7 @@ struct AiThinkingStruct struct BattleHistory { - u16 abilities[MAX_BATTLERS_COUNT]; + enum Ability abilities[MAX_BATTLERS_COUNT]; u8 itemEffects[MAX_BATTLERS_COUNT]; u16 usedMoves[MAX_BATTLERS_COUNT][MAX_MON_MOVES]; u16 moveHistory[MAX_BATTLERS_COUNT][AI_MOVE_HISTORY_COUNT]; // 3 last used moves for each battler @@ -574,7 +572,6 @@ struct BattlerState u8 targetsDone[MAX_BATTLERS_COUNT]; u32 commandingDondozo:1; - u32 absent:1; u32 focusPunchBattlers:1; u32 multipleSwitchInBattlers:1; u32 alreadyStatusedMoveAttempt:1; // For example when using Thunder Wave on an already paralyzed PokΓ©mon. @@ -588,7 +585,11 @@ struct BattlerState u32 pursuitTarget:1; u32 stompingTantrumTimer:2; u32 canPickupItem:1; - u32 padding:16; + u32 ateBoost:1; + u32 wasAboveHalfHp:1; // For Berserk, Emergency Exit, Wimp Out and Anger Shell. + u32 commanderSpecies:11; + u32 selectionScriptFinished:1; + u32 padding:3; // End of Word }; @@ -600,7 +601,27 @@ struct PartyState u32 battleBondBoost:1; u32 transformZeroToHero:1; u32 supersweetSyrup:1; - u32 padding:26; + u32 timesGotHit:5; + u32 changedSpecies:11; // For forms when multiple mons can change into the same pokemon. + u32 sentOut:1; + u32 padding:9; + u16 usedHeldItem; +}; + +struct EventStates +{ + enum EndTurnResolutionOrder endTurn:8; + u32 endTurnBlock:8; // FirstEventBlock, SecondEventBlock, ThirdEventBlock + enum BattlerId endTurnBattler:4; + u32 arenaTurn:8; + enum BattleSide battlerSide:4; + enum BattlerId moveEndBattler:4; + enum FirstTurnEventsStates beforeFristTurn:8; + enum FaintedActions faintedAction:8; + enum BattlerId faintedActionBattler:4; + enum MoveSuccessOrder atkCanceler:8; + enum BattleIntroStates battleIntro:8; + u32 padding:24; }; // Cleared at the beginning of the battle. Fields need to be cleared when needed manually otherwise. @@ -608,10 +629,7 @@ struct BattleStruct { struct BattlerState battlerState[MAX_BATTLERS_COUNT]; struct PartyState partyState[NUM_BATTLE_SIDES][PARTY_SIZE]; - u8 eventBlockCounter; - u8 turnEffectsBattlerId; - u8 endTurnEventsCounter; - u16 wrappedMove[MAX_BATTLERS_COUNT]; + struct EventStates eventState; u16 moveTarget[MAX_BATTLERS_COUNT]; u32 expShareExpValue; u32 expValue; @@ -623,18 +641,13 @@ struct BattleStruct u8 givenExpMons; // Bits for enemy party's pokemon that gave exp to player's party. u8 expSentInMons; // As bits for player party mons - not including exp share mons. u8 wildVictorySong; - u8 dynamicMoveType; - u8 wrappedBy[MAX_BATTLERS_COUNT]; + enum Type dynamicMoveType; u8 battlerPreventingSwitchout; u8 moneyMultiplier:6; u8 moneyMultiplierItem:1; u8 moneyMultiplierMove:1; u8 savedTurnActionNumber; - u8 eventsBeforeFirstTurnState; - u8 faintedActionsState; - u8 faintedActionsBattlerId; u8 scriptPartyIdx; // for printing the nickname - bool8 selectionScriptFinished[MAX_BATTLERS_COUNT]; u8 battlerPartyIndexes[MAX_BATTLERS_COUNT]; u8 monToSwitchIntoId[MAX_BATTLERS_COUNT]; u8 battlerPartyOrders[MAX_BATTLERS_COUNT][PARTY_SIZE / 2]; @@ -665,32 +678,27 @@ struct BattleStruct u8 anyMonHasTransformed:1; // Only used in battle_tv.c u8 multipleSwitchInState:2; u8 multipleSwitchInCursor:3; - u8 padding1:2; + u8 sleepClauseNotBlocked:1; + u8 isSkyBattle:1; u8 multipleSwitchInSortedBattlers[MAX_BATTLERS_COUNT]; void (*savedCallback)(void); - u16 usedHeldItems[PARTY_SIZE][NUM_BATTLE_SIDES]; // For each party member and side. For harvest, recycle u16 chosenItem[MAX_BATTLERS_COUNT]; u16 choicedMove[MAX_BATTLERS_COUNT]; u16 changedItems[MAX_BATTLERS_COUNT]; u8 switchInBattlerCounter; - u8 arenaTurnCounter; - u8 turnSideTracker; u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker] union { struct LinkBattlerHeader linkBattlerHeader; struct BattleVideo battleVideo; } multiBuffer; - u8 startingStatus:6; // status to apply at battle start. defined in constants/battle.h - u8 startingStatusDone:1; - u8 terrainDone:1; - u8 overworldWeatherDone:1; - u8 unused:3; - u8 isAtkCancelerForCalledMove:1; // Certain cases in atk canceler should only be checked once, when the original move is called, however others need to be checked the twice. + u8 startingStatus; // status to apply at battle start. defined in constants/battle.h + u8 battlerKOAnimsRunning:3; u8 friskedAbility:1; // If identifies two mons, show the ability pop-up only once. u8 fickleBeamBoosted:1; u8 poisonPuppeteerConfusion:1; + u8 toxicChainPriority:1; // If Toxic Chain will trigger on target, all other non volatiles will be blocked + u8 moldBreakerActive:1; u16 startingStatusTimer; - u8 atkCancellerTracker; struct BattleTvMovePoints tvMovePoints; struct BattleTv tv; u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT]; @@ -702,27 +710,22 @@ struct BattleStruct u8 debugBattler; u8 magnitudeBasePower; u8 presentBasePower; - u8 roostTypes[MAX_BATTLERS_COUNT][NUM_BATTLE_SIDES]; u8 savedBattlerTarget[5]; u8 savedBattlerAttacker[5]; u8 savedTargetCount:4; u8 savedAttackerCount:4; - bool8 ateBoost[MAX_BATTLERS_COUNT]; u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][NUM_BATTLE_SIDES]; // two per battler struct ZMoveData zmove; struct DynamaxData dynamax; struct BattleGimmickData gimmick; const u8 *trainerSlideMsg; - enum BattleIntroStates introState:8; u8 stolenStats[NUM_BATTLE_STATS]; // hp byte is used for which stats to raise, other inform about by how many stages u8 lastMoveTarget[MAX_BATTLERS_COUNT]; // The last target on which each mon used a move, for the sake of Instruct - u16 tracedAbility[MAX_BATTLERS_COUNT]; - u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk and Anger Shell. + enum Ability tracedAbility[MAX_BATTLERS_COUNT]; struct Illusion illusion[MAX_BATTLERS_COUNT]; u8 soulheartBattlerId; u8 friskedBattler; // Frisk needs to identify 2 battlers in double battles. - u8 sameMoveTurns[MAX_BATTLERS_COUNT]; // For Metronome, number of times the same moves has been SUCCESFULLY used. - u16 changedSpecies[NUM_BATTLE_SIDES][PARTY_SIZE]; // For forms when multiple mons can change into the same pokemon. + u8 metronomeItemCounter[MAX_BATTLERS_COUNT]; // For Metronome, number of times the same moves has been SUCCESFULLY used. u8 quickClawBattlerId; struct LostItem itemLost[NUM_BATTLE_SIDES][PARTY_SIZE]; // Pokemon that had items consumed or stolen (two bytes per party member per side) u8 blunderPolicy:1; // should blunder policy activate @@ -735,54 +738,56 @@ struct BattleStruct u8 throwingPokeBall:1; u8 ballSpriteIds[2]; // item gfx, window gfx u8 moveInfoSpriteId; // move info, window gfx - u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change u8 skyDropTargets[MAX_BATTLERS_COUNT]; // For Sky Drop, to account for if multiple Pokemon use Sky Drop in a double battle. // When using a move which hits multiple opponents which is then bounced by a target, we need to make sure, the move hits both opponents, the one with bounce, and the one without. + u16 beatUpSpecies[PARTY_SIZE]; // Species for Gen5+ Beat Up, otherwise party indexes u8 attackerBeforeBounce:2; u8 beatUpSlot:3; u8 pledgeMove:1; u8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects. u8 spriteIgnore0Hp:1; - u8 bonusCritStages[MAX_BATTLERS_COUNT]; // G-Max Chi Strike boosts crit stages of allies. u8 itemPartyIndex[MAX_BATTLERS_COUNT]; u8 itemMoveIndex[MAX_BATTLERS_COUNT]; - u8 isSkyBattle:1; s32 aiDelayTimer; // Counts number of frames AI takes to choose an action. s32 aiDelayFrames; // Number of frames it took to choose an action. s32 aiDelayCycles; // Number of cycles it took to choose an action. - u8 timesGotHit[NUM_BATTLE_SIDES][PARTY_SIZE]; - u8 stickySyrupdBy[MAX_BATTLERS_COUNT]; u8 supremeOverlordCounter[MAX_BATTLERS_COUNT]; u8 shellSideArmCategory[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; u8 speedTieBreaks; // MAX_BATTLERS_COUNT! values. - u8 categoryOverride; // for Z-Moves and Max Moves - u16 commanderActive[MAX_BATTLERS_COUNT]; + enum DamageCategory categoryOverride:8; // for Z-Moves and Max Moves u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side u8 monCausingSleepClause[NUM_BATTLE_SIDES]; // Stores which pokemon on a given side is causing Sleep Clause to be active as the mon's index in the party - u8 additionalEffectsCounter:4; // A counter for the additionalEffects applied by the current move in Cmd_setadditionaleffects - s16 savedcheekPouchDamage; // Cheek Pouch can happen in the middle of an attack execution so we need to store the current dmg - u8 cheekPouchActivated:1; - u8 padding2:3; + u16 opponentMonCanTera:6; + u16 opponentMonCanDynamax:6; + u16 additionalEffectsCounter:4; // A counter for the additionalEffects applied by the current move in Cmd_setadditionaleffects u8 pursuitStoredSwitch; // Stored id for the Pursuit target's switch s32 battlerExpReward; u16 prevTurnSpecies[MAX_BATTLERS_COUNT]; // Stores species the AI has in play at start of turn + s16 passiveHpUpdate[MAX_BATTLERS_COUNT]; // non-move damage and healing s16 moveDamage[MAX_BATTLERS_COUNT]; s16 critChance[MAX_BATTLERS_COUNT]; u16 moveResultFlags[MAX_BATTLERS_COUNT]; u8 missStringId[MAX_BATTLERS_COUNT]; - u8 noResultString[MAX_BATTLERS_COUNT]; + enum CalcDamageState noResultString[MAX_BATTLERS_COUNT]; u8 doneDoublesSpreadHit:1; u8 calculatedDamageDone:1; u8 calculatedSpreadMoveAccuracy:1; u8 printedStrongWindsWeakenedAttack:1; u8 numSpreadTargets:2; - u8 bypassMoldBreakerChecks:1; // for ABILITYEFFECT_IMMUNITY u8 noTargetPresent:1; + u8 padding2:1; struct MessageStatus slideMessageStatus; u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT]; - u16 opponentMonCanTera:6; - u16 opponentMonCanDynamax:6; - u16 padding:4; + u8 hazardsQueue[NUM_BATTLE_SIDES][HAZARDS_MAX_COUNT]; + u8 numHazards[NUM_BATTLE_SIDES]; + u8 hazardsCounter:4; // Counter for applying hazard on switch in + enum SubmoveState submoveAnnouncement:2; + u8 tryDestinyBond:1; + u8 tryGrudge:1; + u16 flingItem; + u8 incrementEchoedVoice:1; + u8 echoedVoiceCounter:3; + u8 padding3:4; }; struct AiBattleData @@ -791,6 +796,7 @@ struct AiBattleData u8 playerStallMons[PARTY_SIZE]; u8 chosenMoveIndex[MAX_BATTLERS_COUNT]; u8 chosenTarget[MAX_BATTLERS_COUNT]; + u16 aiUsingGimmick:6; u8 actionFlee:1; u8 choiceWatch:1; u8 padding:6; @@ -825,7 +831,7 @@ static inline bool32 IsBattleMoveStatus(u32 move) * times with one type because it shares the 'GetBattlerTypes' result. */ #define _IS_BATTLER_ANY_TYPE(battler, ignoreTera, ...) \ ({ \ - u32 types[3]; \ + enum Type types[3]; \ GetBattlerTypes(battler, ignoreTera, types); \ RECURSIVELY(R_FOR_EACH(_IS_BATTLER_ANY_TYPE_HELPER, __VA_ARGS__)) FALSE; \ }) @@ -839,7 +845,7 @@ static inline bool32 IsBattleMoveStatus(u32 move) #define IS_BATTLER_TYPELESS(battlerId) \ ({ \ - u32 types[3]; \ + enum Type types[3]; \ GetBattlerTypes(battlerId, FALSE, types); \ types[0] == TYPE_MYSTERY && types[1] == TYPE_MYSTERY && types[2] == TYPE_MYSTERY; \ }) @@ -851,11 +857,11 @@ static inline bool32 IsBattleMoveStatus(u32 move) gBattleMons[battler].types[2] = TYPE_MYSTERY; \ } -#define RESTORE_BATTLER_TYPE(battler) \ -{ \ - gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; \ - gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; \ - gBattleMons[battler].types[2] = TYPE_MYSTERY; \ +#define RESTORE_BATTLER_TYPE(battler) \ +{ \ + gBattleMons[battler].types[0] = GetSpeciesType(gBattleMons[battler].species, 0); \ + gBattleMons[battler].types[1] = GetSpeciesType(gBattleMons[battler].species, 1); \ + gBattleMons[battler].types[2] = TYPE_MYSTERY; \ } #define GET_STAT_BUFF_ID(n) ((n & 7)) // first three bits 0x1, 0x2, 0x4 @@ -868,8 +874,6 @@ static inline bool32 IsBattleMoveStatus(u32 move) #define SET_STATCHANGER(statId, stage, goesDown) (gBattleScripting.statChanger = (statId) + ((stage) << 3) + (goesDown << 7)) #define SET_STATCHANGER2(dst, statId, stage, goesDown)(dst = (statId) + ((stage) << 3) + (goesDown << 7)) -#define DO_ACCURACY_CHECK 2 // Don't skip the accuracy check before the move might be absorbed - // NOTE: The members of this struct have hard-coded offsets // in include/constants/battle_script_commands.h struct BattleScripting @@ -903,9 +907,9 @@ struct BattleScripting u8 specialTrainerBattleType; bool8 monCaught; s32 savedDmg; - u16 savedMoveEffect; // For moves hitting multiple targets. + u16 unused_0x2c; u16 moveEffect; - u16 multihitMoveEffect; + u16 unused_0x30; u8 illusionNickHack; // To properly display nick in STRINGID_ENEMYABOUTTOSWITCHPKMN. bool8 fixedPopup; // Force ability popup to stick until manually called back u16 abilityPopupOverwrite; @@ -1052,7 +1056,7 @@ extern u16 gChosenMove; extern u16 gCalledMove; extern s32 gBideDmg[MAX_BATTLERS_COUNT]; extern u16 gLastUsedItem; -extern u16 gLastUsedAbility; +extern enum Ability gLastUsedAbility; extern u8 gBattlerAttacker; extern u8 gBattlerTarget; extern u8 gBattlerFainted; @@ -1078,8 +1082,6 @@ extern u32 gHitMarker; extern u8 gBideTarget[MAX_BATTLERS_COUNT]; extern u32 gSideStatuses[NUM_BATTLE_SIDES]; extern struct SideTimer gSideTimers[NUM_BATTLE_SIDES]; -extern u32 gStatuses3[MAX_BATTLERS_COUNT]; -extern u32 gStatuses4[MAX_BATTLERS_COUNT]; extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT]; extern u16 gPauseCounterBattle; extern u16 gPaydayMoney; @@ -1120,7 +1122,7 @@ extern u16 gBattleTurnCounter; extern u8 gBattlerAbility; extern struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT]; -extern void (*gPreBattleCallback1)(void); +extern MainCallback gPreBattleCallback1; extern void (*gBattleMainFunc)(void); extern struct BattleResults gBattleResults; extern u8 gLeveledUpInBattle; @@ -1128,7 +1130,7 @@ extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; extern u8 gMultiUsePlayerCursor; extern u8 gNumberOfMovesToChoose; extern bool8 gHasFetchedBall; -extern u8 gLastUsedBall; +extern u16 gLastUsedBall; extern u16 gLastThrownBall; extern u16 gBallToDisplay; extern bool8 gLastUsedBallMenuPresent; @@ -1190,7 +1192,7 @@ static inline u32 GetBattlerSide(u32 battler) return GetBattlerPosition(battler) & BIT_SIDE; } -static inline u32 IsOnPlayerSide(u32 battler) +static inline bool32 IsOnPlayerSide(u32 battler) { return GetBattlerSide(battler) == B_SIDE_PLAYER; } @@ -1211,7 +1213,7 @@ static inline struct Pokemon* GetBattlerMon(u32 battler) return !IsOnPlayerSide(battler) ? &gEnemyParty[index] : &gPlayerParty[index]; } -static inline struct Pokemon *GetSideParty(u32 side) +static inline struct Pokemon *GetSideParty(enum BattleSide side) { return side == B_SIDE_PLAYER ? gPlayerParty : gEnemyParty; } @@ -1221,9 +1223,14 @@ static inline struct Pokemon *GetBattlerParty(u32 battler) return GetSideParty(GetBattlerSide(battler)); } +static inline struct PartyState *GetBattlerPartyState(u32 battler) +{ + return &gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]]; +} + static inline bool32 IsDoubleBattle(void) { - return gBattleTypeFlags & BATTLE_TYPE_DOUBLE; + return (gBattleTypeFlags & BATTLE_TYPE_MORE_THAN_TWO_BATTLERS); } static inline bool32 IsSpreadMove(u32 moveTarget) @@ -1234,7 +1241,7 @@ static inline bool32 IsSpreadMove(u32 moveTarget) static inline bool32 IsDoubleSpreadMove(void) { return gBattleStruct->numSpreadTargets > 1 - && !(gHitMarker & (HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_UNABLE_TO_USE_MOVE)) + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && IsSpreadMove(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove)); } @@ -1245,4 +1252,23 @@ static inline bool32 IsBattlerInvalidForSpreadMove(u32 battlerAtk, u32 battlerDe || (battlerDef == BATTLE_PARTNER(battlerAtk) && (moveTarget == MOVE_TARGET_BOTH)); } +static inline u32 GetChosenMoveFromPosition(u32 battler) +{ + return gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; +} + +static inline void SetPassiveDamageAmount(u32 battler, s32 value) +{ + if (value == 0) + value = 1; + gBattleStruct->passiveHpUpdate[battler] = value; +} + +static inline void SetHealAmount(u32 battler, s32 value) +{ + if (value == 0) + value = 1; + gBattleStruct->passiveHpUpdate[battler] = -1 * value; +} + #endif // GUARD_BATTLE_H diff --git a/include/battle_ai_field_statuses.h b/include/battle_ai_field_statuses.h new file mode 100644 index 000000000000..64608f637065 --- /dev/null +++ b/include/battle_ai_field_statuses.h @@ -0,0 +1,18 @@ +#ifndef GUARD_BATTLE_AI_FIELD_STATUSES_H +#define GUARD_BATTLE_AI_FIELD_STATUSES_H + +#include "battle_ai_main.h" +#include "battle_ai_util.h" + +enum FieldEffectOutcome +{ + FIELD_EFFECT_POSITIVE, + FIELD_EFFECT_NEUTRAL, + FIELD_EFFECT_NEGATIVE, + FIELD_EFFECT_BLOCKED, +}; + +bool32 WeatherChecker(u32 battler, u32 weather, enum FieldEffectOutcome desiredResult); +bool32 FieldStatusChecker(u32 battler, u32 fieldStatus, enum FieldEffectOutcome desiredResult); + +#endif //GUARD_BATTLE_AI_FIELD_STATUSES_H diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index 31d6437b9747..4330f9d2bca0 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -23,6 +23,11 @@ enum StatChange STAT_CHANGE_SPEED_2, STAT_CHANGE_SPATK_2, STAT_CHANGE_SPDEF_2, + STAT_CHANGE_ATK_3, + STAT_CHANGE_DEF_3, + STAT_CHANGE_SPEED_3, + STAT_CHANGE_SPATK_3, + STAT_CHANGE_SPDEF_3, STAT_CHANGE_ACC, STAT_CHANGE_EVASION }; @@ -38,7 +43,18 @@ enum AIScore WEAK_EFFECT = 1, DECENT_EFFECT = 2, GOOD_EFFECT = 3, - BEST_EFFECT = 4 + BEST_EFFECT = 4, + PERFECT_EFFECT = 10, + BAD_EFFECT = -1, + AWFUL_EFFECT = -3, + WORST_EFFECT = -10 +}; + +enum MoveComparisonResult +{ + MOVE_NEUTRAL_COMPARISON, + MOVE_WON_COMPARISON, + MOVE_LOST_COMPARISON, }; // AI_TryToFaint diff --git a/include/battle_ai_script_commands.h b/include/battle_ai_script_commands.h deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index b91d452097a7..7612d2084af7 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -38,14 +38,15 @@ enum ShouldSwitchScenario enum SwitchType { SWITCH_AFTER_KO, - SWITCH_MID_BATTLE, + SWITCH_MID_BATTLE_FORCED, + SWITCH_MID_BATTLE_OPTIONAL, }; void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(u32 battler); u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType); bool32 ShouldSwitch(u32 battler); -bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2); +bool32 IsMonGrounded(enum HoldEffect heldItemEffect, enum Ability ability, enum Type type1, enum Type type2); void ModifySwitchAfterMoveScoring(u32 battler); #endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 66fe8d550d04..2c8760893560 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -2,8 +2,7 @@ #define GUARD_BATTLE_AI_UTIL_H #include "battle_ai_main.h" - -#define FOE(battler) ((BATTLE_OPPOSITE(battler)) & BIT_SIDE) +#include "battle_ai_field_statuses.h" // Roll boundaries used by AI when scoring. Doesn't affect actual damage dealt. #define MAX_ROLL_PERCENTAGE DMG_ROLL_PERCENT_HI @@ -23,6 +22,17 @@ enum DamageCalcContext AI_ATTACKING, }; +// Higher priority at the bottom; note that these are used in the formula MAX_MON_MOVES ^ AiCompareMovesPriority, which must fit within a u32. +// In expansion where MAX_MON_MOVES is 4, this means that AiCompareMovesPriority can range from 0 - 15 inclusive. +enum AiCompareMovesPriority +{ + PRIORITY_EFFECT, + PRIORITY_GUARANTEE, + PRIORITY_ACCURACY, + PRIORITY_NOT_CHARGING, + PRIORITY_SPEED, +}; + enum AIPivot { DONT_PIVOT, @@ -38,6 +48,18 @@ enum WeatherState WEATHER_INACTIVE_AND_BLOCKED, }; +enum AIConsiderGimmick +{ + NO_GIMMICK, + USE_GIMMICK, +}; + +enum ConsiderPriority +{ + DONT_CONSIDER_PRIORITY, + CONSIDER_PRIORITY, +}; + static inline bool32 IsMoveUnusable(u32 moveIndex, u32 move, u32 moveLimitations) { return move == MOVE_NONE @@ -47,20 +69,27 @@ static inline bool32 IsMoveUnusable(u32 moveIndex, u32 move, u32 moveLimitations typedef bool32 (*MoveFlag)(u32 move); -bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move); -bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move); +bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 aiMove, u32 playerMove, enum ConsiderPriority considerPriority); +bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 aiMove, u32 playerMove, enum ConsiderPriority considerPriority); +bool32 AI_IsPartyMonFaster(u32 battlerAi, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 aiMove, u32 playerMove, enum ConsiderPriority considerPriority); +bool32 AI_IsPartyMonSlower(u32 battlerAi, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 aiMove, u32 playerMove, enum ConsiderPriority considerPriority); bool32 AI_RandLessThan(u32 val); +bool32 AI_IsBattlerGrounded(u32 battler); u32 AI_GetDamage(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext, struct AiLogicData *aiData); bool32 IsAiVsAiBattle(void); bool32 BattlerHasAi(u32 battlerId); bool32 IsAiBattlerAware(u32 battlerId); +bool32 CanAiPredictMove(void); +bool32 IsAiBattlerAssumingStab(void); +bool32 IsAiBattlerAssumingStatusMoves(void); +bool32 ShouldRecordStatusMove(u32 move); void ClearBattlerMoveHistory(u32 battlerId); void RecordLastUsedMoveBy(u32 battlerId, u32 move); void RecordAllMoves(u32 battler); void RecordKnownMove(u32 battlerId, u32 move); -void RecordAbilityBattle(u32 battlerId, u32 abilityId); +void RecordAbilityBattle(u32 battlerId, enum Ability abilityId); void ClearBattlerAbilityHistory(u32 battlerId); -void RecordItemEffectBattle(u32 battlerId, u32 itemEffect); +void RecordItemEffectBattle(u32 battlerId, enum HoldEffect itemEffect); void ClearBattlerItemEffectHistory(u32 battlerId); void SaveBattlerData(u32 battlerId); void SetBattlerData(u32 battlerId); @@ -73,149 +102,166 @@ bool32 AI_BattlerAtMaxHp(u32 battler); u32 GetHealthPercentage(u32 battler); bool32 AI_CanBattlerEscape(u32 battler); bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef); -s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered); +s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 aiMoveConsidered, u32 playerMoveConsidered, enum ConsiderPriority considerPriority); bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk); -u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk); +u32 NoOfHitsForTargetToFaintBattler(u32 battlerDef, u32 battlerAtk); u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext); u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget, enum DamageCalcContext calcContext); bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits); bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod); -s32 AI_DecideKnownAbilityForTurn(u32 battlerId); -enum ItemHoldEffect AI_DecideHoldEffectForTurn(u32 battlerId); -bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, u32 atkAbility, u32 move); +enum Ability AI_DecideKnownAbilityForTurn(u32 battlerId); +enum HoldEffect AI_DecideHoldEffectForTurn(u32 battlerId); +bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, enum Ability atkAbility, u32 move); u32 AI_GetWeather(void); +u32 AI_GetSwitchinWeather(struct BattlePokemon battleMon); enum WeatherState IsWeatherActive(u32 flags); bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits); bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, enum DamageCalcContext calcContext); -bool32 CanIndexMoveGuaranteeFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index); -bool32 HasDamagingMove(u32 battlerId); -bool32 HasDamagingMoveOfType(u32 battlerId, u32 type); +bool32 HasDamagingMove(u32 battler); +bool32 HasDamagingMoveOfType(u32 battler, enum Type type); u32 GetBattlerSecondaryDamage(u32 battlerId); -bool32 BattlerWillFaintFromWeather(u32 battler, u32 ability); -bool32 BattlerWillFaintFromSecondaryDamage(u32 battler, u32 ability); -bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move); +bool32 BattlerWillFaintFromWeather(u32 battler, enum Ability ability); +bool32 BattlerWillFaintFromSecondaryDamage(u32 battler, enum Ability ability); +bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, enum Ability atkAbility, enum Ability defAbility, u32 move); bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 moveIndex); -u32 GetBattlerSideSpeedAverage(u32 battler); bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage); -bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent, enum DamageCalcContext calcContext); +bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent); bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect); -enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex); +bool32 ShouldCureStatus(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData); +bool32 ShouldCureStatusWithItem(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData); +enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 move, u32 moveIndex); bool32 IsRecycleEncouragedItem(u32 item); bool32 ShouldRestoreHpBerry(u32 battlerAtk, u32 item); bool32 IsStatBoostingBerry(u32 item); bool32 CanKnockOffItem(u32 battler, u32 item); -bool32 IsAbilityOfRating(u32 ability, s8 rating); -bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); -bool32 AI_MoveMakesContact(u32 ability, enum ItemHoldEffect holdEffect, u32 move); +bool32 IsAbilityOfRating(enum Ability ability, s8 rating); +bool32 AI_IsAbilityOnSide(u32 battlerId, enum Ability ability); +bool32 AI_MoveMakesContact(enum Ability ability, enum HoldEffect holdEffect, u32 move); +bool32 IsConsideringZMove(u32 battlerAtk, u32 battlerDef, u32 move); bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove); -u32 AI_GetBattlerAbility(u32 battler); +void SetAIUsingGimmick(u32 battler, enum AIConsiderGimmick use); +bool32 IsAIUsingGimmick(u32 battler); +void DecideTerastal(u32 battler); +bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move); // stat stage checks bool32 AnyStatIsRaised(u32 battlerId); -bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 stat); -bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat); +bool32 CanLowerStat(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData, enum Stat stat); +bool32 BattlerStatCanRise(u32 battler, enum Ability battlerAbility, enum Stat stat); bool32 AreBattlersStatsMaxed(u32 battler); u32 CountPositiveStatStages(u32 battlerId); u32 CountNegativeStatStages(u32 battlerId); -bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility); -bool32 ShouldLowerDefense(u32 battlerAtk, u32 battlerDef, u32 defAbility); -bool32 ShouldLowerSpeed(u32 battlerAtk, u32 battlerDef, u32 defAbility); -bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility); -bool32 ShouldLowerSpDef(u32 battlerAtk, u32 battlerDef, u32 defAbility); -bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility); -bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility); // move checks -bool32 IsAffectedByPowder(u32 battler, u32 ability, enum ItemHoldEffect holdEffect); -bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category); -s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo); -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower); -struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather); +bool32 Ai_IsPriorityBlocked(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData); +bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, enum DamageCategory category); +enum MoveComparisonResult AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo); +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, enum AIConsiderGimmick considerGimmickAtk, enum AIConsiderGimmick considerGimmickDef); +bool32 IsAdditionalEffectBlocked(u32 battlerAtk, u32 abilityAtk, u32 battlerDef, u32 abilityDef); +struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, enum AIConsiderGimmick considerGimmickAtk, enum AIConsiderGimmick considerGimmickDef, u32 weather); bool32 AI_IsDamagedByRecoil(u32 battler); u32 GetNoOfHitsToKO(u32 dmg, s32 hp); u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef); u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext); +u32 GetBestNoOfHitsToKO(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext); u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext); uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); u16 *GetMovesArray(u32 battler); bool32 IsConfusionMoveEffect(enum BattleMoveEffects moveEffect); bool32 HasMove(u32 battlerId, u32 move); -bool32 HasOnlyMovesWithCategory(u32 battlerId, u32 category, bool32 onlyOffensive); -bool32 HasMoveWithCategory(u32 battler, u32 category); -bool32 HasMoveWithType(u32 battler, u32 type); -bool32 HasMoveWithEffect(u32 battlerId, enum BattleMoveEffects moveEffect); +u32 GetIndexInMoveArray(u32 battler, u32 move); +bool32 HasOnlyMovesWithCategory(u32 battlerId, enum DamageCategory category, bool32 onlyOffensive); +bool32 HasMoveWithCategory(u32 battler, enum DamageCategory category); +bool32 HasMoveWithType(u32 battler, enum Type type); +bool32 HasMoveWithEffect(u32 battler, enum BattleMoveEffects moveEffect); +bool32 HasMoveWithAIEffect(u32 battler, u32 aiEffect); +bool32 HasBattlerSideMoveWithEffect(u32 battler, u32 effect); +bool32 HasBattlerSideMoveWithAIEffect(u32 battler, u32 effect); +bool32 HasBattlerSideUsedMoveWithEffect(u32 battler, u32 effect); bool32 HasNonVolatileMoveEffect(u32 battlerId, u32 effect); bool32 IsPowerBasedOnStatus(u32 battlerId, enum BattleMoveEffects effect, u32 argument); bool32 HasMoveWithAdditionalEffect(u32 battlerId, u32 moveEffect); +bool32 HasBattlerSideMoveWithAdditionalEffect(u32 battler, u32 moveEffect); bool32 HasMoveWithCriticalHitChance(u32 battlerId); bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, enum BattleMoveEffects exception); bool32 HasMoveThatLowersOwnStats(u32 battlerId); -bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); +bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus); bool32 HasAnyKnownMove(u32 battlerId); bool32 IsAromaVeilProtectedEffect(enum BattleMoveEffects moveEffect); bool32 IsNonVolatileStatusMove(u32 moveEffect); -bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility); -bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move); +bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, enum Ability atkAbility); bool32 IsHazardMove(u32 move); bool32 IsTwoTurnNotSemiInvulnerableMove(u32 battlerAtk, u32 move); -void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, s32 *score); -bool32 ShouldSetSandstorm(u32 battler, u32 ability, enum ItemHoldEffect holdEffect); -bool32 ShouldSetHail(u32 battler, u32 ability, enum ItemHoldEffect holdEffect); -bool32 ShouldSetSnow(u32 battler, u32 ability, enum ItemHoldEffect holdEffect); -bool32 ShouldSetRain(u32 battlerAtk, u32 ability, enum ItemHoldEffect holdEffect); -bool32 ShouldSetSun(u32 battlerAtk, u32 atkAbility, enum ItemHoldEffect holdEffect); +bool32 IsBattlerDamagedByStatus(u32 battler); +s32 ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove); +bool32 ShouldRaiseAnyStat(u32 battlerAtk, u32 battlerDef); +bool32 ShouldSetWeather(u32 battler, u32 weather); +bool32 ShouldClearWeather(u32 battler, u32 weather); +bool32 ShouldSetFieldStatus(u32 battler, u32 fieldStatus); +bool32 ShouldClearFieldStatus(u32 battler, u32 fieldStatus); bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef); bool32 IsHealingMove(u32 move); bool32 HasHealingEffect(u32 battler); bool32 IsTrappingMove(u32 move); bool32 HasTrappingMoveEffect(u32 battler); -bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move); +bool32 IsFlinchGuaranteed(u32 battlerAtk, u32 battlerDef, u32 move); +bool32 HasChoiceEffect(u32 battler); bool32 HasThawingMove(u32 battler); bool32 IsStatRaisingEffect(enum BattleMoveEffects effect); bool32 IsStatLoweringEffect(enum BattleMoveEffects effect); -bool32 IsSelfStatLoweringEffect(enum BattleMoveEffects effect); +bool32 IsSelfStatLoweringEffect(enum MoveEffect effect); +bool32 IsSelfStatRaisingEffect(enum MoveEffect effect); bool32 IsSwitchOutEffect(enum BattleMoveEffects effect); bool32 IsChaseEffect(enum BattleMoveEffects effect); bool32 IsAttackBoostMoveEffect(enum BattleMoveEffects effect); bool32 IsUngroundingEffect(enum BattleMoveEffects effect); -bool32 IsSemiInvulnerable(u32 battlerDef, u32 move); bool32 HasMoveWithFlag(u32 battler, MoveFlag getFlag); bool32 IsHazardClearingMove(u32 move); bool32 IsSubstituteEffect(enum BattleMoveEffects effect); // status checks -bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability); -bool32 IsBattlerIncapacitated(u32 battler, u32 ability); -bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove); +bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, enum Ability ability); +bool32 IsBattlerIncapacitated(u32 battler, enum Ability ability); +bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 move, u32 partnerMove); bool32 ShouldPoison(u32 battlerAtk, u32 battlerDef); -bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove); -bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove); -bool32 AI_CanConfuse(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove); -bool32 ShouldBurn(u32 battlerAtk, u32 battlerDef, u32 abilityDef); -bool32 ShouldFreezeOrFrostbite(u32 battlerAtk, u32 battlerDef, u32 abilityDef); -bool32 ShouldParalyze(u32 battlerAtk, u32 battlerDef, u32 abilityDef); -bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove); -bool32 AI_CanGiveFrostbite(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove); -bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, u32 defAbility); +bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 move, u32 partnerMove); +bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 move, u32 partnerMove); +bool32 AI_CanConfuse(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove); +bool32 ShouldBurn(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef); +bool32 ShouldFreezeOrFrostbite(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef); +bool32 ShouldParalyze(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef); +bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove); +bool32 AI_CanGiveFrostbite(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove); +bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, enum Ability defAbility); bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof); -u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move); +u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, enum Ability atkAbility, enum Ability defAbility, u32 move); bool32 ShouldTrap(u32 battlerAtk, u32 battlerDef, u32 move); bool32 IsWakeupTurn(u32 battler); bool32 AI_IsBattlerAsleepOrComatose(u32 battlerId); // ability logic -bool32 IsMoxieTypeAbility(u32 ability); -bool32 ShouldTriggerAbility(u32 battler, u32 ability); +bool32 IsMoxieTypeAbility(enum Ability ability); +bool32 DoesAbilityRaiseStatsWhenLowered(enum Ability ability); +bool32 ShouldTriggerAbility(u32 battlerAtk, u32 battlerDef, enum Ability ability); +bool32 CanEffectChangeAbility(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData); +void AbilityChangeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score, struct AiLogicData *aiData); +s32 BattlerBenefitsFromAbilityScore(u32 battler, enum Ability ability, struct AiLogicData *aiData); // partner logic -#define IS_TARGETING_PARTNER(battlerAtk, battlerDef)((battlerAtk) == (battlerDef ^ BIT_FLANK)) +bool32 IsTargetingPartner(u32 battlerAtk, u32 battlerDef); +// IsTargetingPartner includes a check to make sure the adjacent pokemon is truly a partner. u32 GetAllyChosenMove(u32 battlerId); -bool32 IsValidDoubleBattle(u32 battlerAtk); +bool32 IsBattle1v1(void); +// IsBattle1v1 is distinct from !IsDoubleBattle. If the player is fighting Maxie and Tabitha, with Steven as their partner, and both Tabitha and Steven have run out of Pokemon, the battle is 1v1, even though mechanically it is a Double Battle for how battlers and flags are set. +// Most AI checks should be using IsBattle1v1; most engine checks should be using !IsDoubleBattle +bool32 HasTwoOpponents(u32 battler); +// HasTwoOpponents checks if the opposing side has two pokemon. Partner state is irrelevant. e.g., Dragon Darts hits one time with two opponents and twice with one opponent. +bool32 HasPartner(u32 battler); +bool32 HasPartnerIgnoreFlags(u32 battler); +// HasPartner respects the Attacks Partner AI flag; HasPartnerIgnoreFlags checks only if a live pokemon is adjacent. +bool32 AreMovesEquivalent(u32 battlerAtk, u32 battlerAtkPartner, u32 move, u32 partnerMove); bool32 DoesPartnerHaveSameMoveEffect(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove); -bool32 PartnerHasSameMoveEffectWithoutTarget(u32 battlerAtkPartner, u32 move, u32 partnerMove); bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef, u32 partnerMove); -bool32 IsMoveEffectWeather(u32 move); -bool32 PartnerMoveEffectIsTerrain(u32 battlerAtkPartner, u32 partnerMove); bool32 PartnerMoveEffectIs(u32 battlerAtkPartner, u32 partnerMove, enum BattleMoveEffects effectCheck); bool32 PartnerMoveIs(u32 battlerAtkPartner, u32 partnerMove, u32 moveCheck); bool32 PartnerMoveIsSameAsAttacker(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove); @@ -230,12 +276,13 @@ struct BattlePokemon *AllocSaveBattleMons(void); void FreeRestoreBattleMons(struct BattlePokemon *savedBattleMons); s32 CountUsablePartyMons(u32 battlerId); bool32 IsPartyFullyHealedExceptBattler(u32 battler); -bool32 PartyHasMoveCategory(u32 battlerId, u32 category); -bool32 SideHasMoveCategory(u32 battlerId, u32 category); +bool32 PartyHasMoveCategory(u32 battlerId, enum DamageCategory category); +bool32 SideHasMoveCategory(u32 battlerId, enum DamageCategory category); // score increases u32 IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, enum StatChange statId); u32 IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, enum StatChange statId); +u32 IncreaseStatDownScore(u32 battlerAtk, u32 battlerDef, enum Stat stat); void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); @@ -243,19 +290,36 @@ void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); -s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, enum DamageCalcContext calcContext); -u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 moveConsidered); +s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, uq4_12_t *effectiveness, enum DamageCalcContext calcContext); +u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 aiMoveConsidered, u32 playerMoveConsidered, enum ConsiderPriority ConsiderPriority); s32 AI_TryToClearStats(u32 battlerAtk, u32 battlerDef, bool32 isDoubleBattle); bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef); -bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData); +bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData); void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, struct AiLogicData *aiData); u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move); bool32 IsBattlerItemEnabled(u32 battler); bool32 IsBattlerPredictedToSwitch(u32 battler); u32 GetIncomingMove(u32 battler, u32 opposingBattler, struct AiLogicData *aiData); -bool32 HasLowAccuracyMove(u32 battlerAtk, u32 battlerDef); -bool32 HasBattlerSideAbility(u32 battlerDef, u32 ability, struct AiLogicData *aiData); -u32 GetThinkingBattler(u32 battler); +u32 GetIncomingMoveSpeedCheck(u32 battler, u32 opposingBattler, struct AiLogicData *aiData); +bool32 IsNaturalEnemy(u32 speciesAttacker, u32 speciesTarget); + +// These are for the purpose of not doubling up on moves during double battles. +// Used in GetAIEffectGroup for move effects and GetAIEffectGroupFromMove for additional effects +#define AI_EFFECT_NONE 0 +#define AI_EFFECT_WEATHER (1 << 0) +#define AI_EFFECT_TERRAIN (1 << 1) +#define AI_EFFECT_CLEAR_HAZARDS (1 << 2) +#define AI_EFFECT_BREAK_SCREENS (1 << 3) +#define AI_EFFECT_RESET_STATS (1 << 4) +#define AI_EFFECT_FORCE_SWITCH (1 << 5) +#define AI_EFFECT_TORMENT (1 << 6) +#define AI_EFFECT_LIGHT_SCREEN (1 << 7) +#define AI_EFFECT_REFLECT (1 << 8) +#define AI_EFFECT_GRAVITY (1 << 9) +#define AI_EFFECT_CHANGE_ABILITY (1 << 10) + +// As Aurora Veil should almost never be used alongside the other screens, we save the bit. +#define AI_EFFECT_AURORA_VEIL (AI_EFFECT_LIGHT_SCREEN | AI_EFFECT_REFLECT) #endif //GUARD_BATTLE_AI_UTIL_H diff --git a/include/battle_anim.h b/include/battle_anim.h index e62c170cc051..2c8631e8997c 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -93,6 +93,7 @@ void AnimWeatherBallUp(struct Sprite *sprite); void AnimWeatherBallDown(struct Sprite *sprite); void AnimSpinningSparkle(struct Sprite *sprite); void SetAverageBattlerPositions(u8 battler, bool8 respectMonPicOffsets, s16 *x, s16 *y); +void SetToPartnerPositions(u8 battler, bool8 respectMonPicOffsets, s16 *x, s16 *y); void DestroySpriteAndMatrix(struct Sprite *sprite); void TranslateSpriteLinearFixedPoint(struct Sprite *sprite); void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets); @@ -210,7 +211,8 @@ u8 GetSubstituteSpriteDefault_Y(u8 battler); #define STAT_ANIM_MULTIPLE_MINUS1 57 #define STAT_ANIM_MULTIPLE_MINUS2 58 -enum { +enum StatAnimPal +{ STAT_ANIM_PAL_ATK, STAT_ANIM_PAL_DEF, STAT_ANIM_PAL_ACC, @@ -230,6 +232,8 @@ void AnimMudSportDirt(struct Sprite *sprite); void AnimDirtScatter(struct Sprite *sprite); void AnimMudSportDirtRising(struct Sprite *sprite); void AnimDirtPlumeParticle(struct Sprite *); +void AnimBoneHitProjectile(struct Sprite *sprite); +extern const union AnimCmd *const sAnims_MudSlapMud[]; extern const union AffineAnimCmd *const gAffineAnims_SpinningBone[]; // battle_anim_throw.c @@ -268,6 +272,7 @@ void AnimTranslateLinearSingleSineWave(struct Sprite *sprite); void AnimTeraStarstormStars(struct Sprite *sprite); void AnimGrantingStars(struct Sprite *sprite); void AnimFollowMeFinger(struct Sprite *sprite); +void AnimPoisonJabProjectile(struct Sprite *sprite); extern const union AnimCmd *const gRazorLeafParticleAnimTable[]; extern const union AnimCmd *const gPowerAbsorptionOrbAnimTable[]; extern const union AffineAnimCmd *const gPowerAbsorptionOrbAffineAnimTable[]; @@ -466,6 +471,7 @@ void AnimElectricity(struct Sprite *); void AnimTask_VoltSwitch(struct Sprite* sprite); extern const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb[]; extern const union AffineAnimCmd *const gAffineAnims_FlashingSpark[]; +extern const union AnimCmd *const sAnims_CirclingElectricShock[]; extern const union AnimCmd *const gAnims_ThunderboltOrb[]; extern const union AnimCmd *const gAnims_ElectricPuff[]; extern const union AnimCmd *const gAnims_ElectricChargingParticles[]; @@ -490,6 +496,8 @@ extern const union AnimCmd *const gAnims_FlyingRock[]; extern const union AffineAnimCmd *const gAffineAnims_Whirlpool[]; extern const union AffineAnimCmd *const gAffineAnims_BasicRock[]; extern const union AnimCmd *const gAnims_FlyingRock[]; +extern const union AnimCmd *const sAnims_BasicRock[]; +void AnimRockTomb(struct Sprite *sprite); void AnimParticleInVortex(struct Sprite *sprite); void AnimFallingRock(struct Sprite *sprite); void AnimRaiseSprite(struct Sprite *sprite); @@ -557,6 +565,9 @@ void InitSpritePosToAnimTargetsCentre(struct Sprite *sprite, bool32 respectMonPi extern const union AffineAnimCmd *const gSpriteAffineAnimTable_PrimalSymbol[]; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_MegaSymbol[]; +// battle_anim_ice.c +void AnimIceBeamParticle(struct Sprite *sprite); + // battle_anim_bug.c void AnimTranslateStinger(struct Sprite *sprite); diff --git a/include/battle_anim_scripts.h b/include/battle_anim_scripts.h index 0bffbda8ead2..febbfe9a2c9e 100644 --- a/include/battle_anim_scripts.h +++ b/include/battle_anim_scripts.h @@ -948,6 +948,7 @@ extern const u8 gBattleAnimStatus_Paralysis[]; extern const u8 gBattleAnimStatus_Freeze[]; extern const u8 gBattleAnimStatus_Curse[]; extern const u8 gBattleAnimStatus_Nightmare[]; +extern const u8 gBattleAnimStatus_Frostbite[]; // general animations extern const u8 gBattleAnimGeneral_StatsChange[]; @@ -1004,6 +1005,8 @@ extern const u8 gBattleAnimGeneral_TeraCharge[]; extern const u8 gBattleAnimGeneral_TeraActivate[]; extern const u8 gBattleAnimGeneral_SimpleHeal[]; extern const u8 gBattleAnimGeneral_PowerConstruct[]; +extern const u8 gBattleAnimGeneral_SwapToSubstitute[]; +extern const u8 gBattleAnimGeneral_SwapFromSubstitute[]; // special animations extern const u8 gBattleAnimSpecial_LevelUp[]; diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 2ce28ca60924..c3b5fff97f49 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_CONTROLLERS_H #define GUARD_BATTLE_CONTROLLERS_H +typedef void (*BattleControllerFunc)(u32 battler); + enum { REQUEST_ALL_BATTLE, REQUEST_SPECIES_BATTLE, @@ -201,7 +203,7 @@ struct ChooseMoveStruct u8 currentPp[MAX_MON_MOVES]; u8 maxPp[MAX_MON_MOVES]; u16 species; - u8 monTypes[3]; + enum Type monTypes[3]; struct ZMoveData zmove; }; @@ -277,6 +279,7 @@ void InitBattleControllers(void); bool32 IsValidForBattle(struct Pokemon *mon); void TryReceiveLinkBattleData(void); void PrepareBufferDataTransferLink(u32 battler, u32 bufferId, u16 size, u8 *data); +void UpdateFriendshipFromXItem(u32 battler); // emitters void BtlController_EmitGetMonData(u32 battler, u32 bufferId, u8 requestId, u8 monToCheck); @@ -296,11 +299,11 @@ void BtlController_EmitChooseAction(u32 battler, u32 bufferId, u8 action, u16 it void BtlController_EmitYesNoBox(u32 battler, u32 bufferId); void BtlController_EmitChooseMove(u32 battler, u32 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData); void BtlController_EmitChooseItem(u32 battler, u32 bufferId, u8 *battlePartyOrder); -void BtlController_EmitChoosePokemon(u32 battler, u32 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 *data); +void BtlController_EmitChoosePokemon(u32 battler, u32 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 battlerPreventingSwitchout, u8 *data); void BtlController_EmitHealthBarUpdate(u32 battler, u32 bufferId, u16 hpValue); void BtlController_EmitExpUpdate(u32 battler, u32 bufferId, u8 partyId, s32 expPoints); -void BtlController_EmitStatusIconUpdate(u32 battler, u32 bufferId, u32 status1, u32 status2); -void BtlController_EmitStatusAnimation(u32 battler, u32 bufferId, bool8 status2, u32 status); +void BtlController_EmitStatusIconUpdate(u32 battler, u32 bufferId, u32 status); +void BtlController_EmitStatusAnimation(u32 battler, u32 bufferId, bool8 isVolatile, u32 status); void BtlController_EmitDataTransfer(u32 battler, u32 bufferId, u16 size, void *data); void BtlController_EmitTwoReturnValues(u32 battler, u32 bufferId, u8 ret8, u32 ret32); void BtlController_EmitChosenMonReturnValue(u32 battler, u32 bufferId, u8 partyId, u8 *battlePartyOrder); @@ -323,7 +326,7 @@ void BtlController_EmitResetActionMoveSelection(u32 battler, u32 bufferId, u8 ca void BtlController_EmitEndLinkBattle(u32 battler, u32 bufferId, u8 battleOutcome); void BtlController_EmitDebugMenu(u32 battler, u32 bufferId); -void BattleControllerComplete(u32 battler); // Can be used for all the controllers. +void BtlController_Complete(u32 battler); // Can be used for all the controllers. void BtlController_Empty(u32 battler); // Empty command, does nothing, only completes the execution. void BtlController_TerminatorNop(u32 battler); // Dummy function at the end of the table. void BattleControllerDummy(u32 battler); @@ -336,8 +339,8 @@ void BtlController_HandleGetMonData(u32 battler); void BtlController_HandleGetRawMonData(u32 battler); void BtlController_HandleSetMonData(u32 battler); void BtlController_HandleSetRawMonData(u32 battler); -void BtlController_HandleLoadMonSprite(u32 battler, void (*controllerCallback)(u32 battler)); -void BtlController_HandleSwitchInAnim(u32 battler, bool32 isPlayerSide, void (*controllerCallback)(u32 battler)); +void BtlController_HandleLoadMonSprite(u32 battler); +void BtlController_HandleSwitchInAnim(u32 battler); void BtlController_HandleReturnMonToBall(u32 battler); void BtlController_HandleDrawTrainerPic(u32 battlerId, u32 trainerPicId, bool32 isFrontPic, s16 xPos, s16 yPos, s32 subpriority); void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId); @@ -345,9 +348,10 @@ void BtlController_HandleTrainerSlideBack(u32 battlerId, s16 data0, bool32 start void BtlController_HandleFaintAnimation(u32 battler); void BtlController_HandleSuccessBallThrowAnim(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture); void BtlController_HandleBallThrowAnim(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture); -void BtlController_HandleMoveAnimation(u32 battler, bool32 updateTvData); -void BtlController_HandlePrintString(u32 battler, bool32 updateTvData, bool32 arenaPtsDeduct); -void BtlController_HandleHealthBarUpdate(u32 battler, bool32 updateHpText); +void BtlController_HandleMoveAnimation(u32 battler); +void BtlController_HandlePrintString(u32 battler); +void BtlController_HandlePrintStringPlayerOnly(u32 battler); +void BtlController_HandleHealthBarUpdate(u32 battler); void DoStatusIconUpdate(u32 battler); void BtlController_HandleStatusIconUpdate(u32 battler); void BtlController_HandleStatusAnimation(u32 battler); @@ -360,12 +364,13 @@ void BtlController_HandleSpriteInvisibility(u32 battler); bool32 TwoPlayerIntroMons(u32 battlerId); // Double battle with both player pokemon active. bool32 TwoOpponentIntroMons(u32 battlerId); // Double battle with both opponent pokemon active. void BtlController_HandleIntroTrainerBallThrow(u32 battler, u16 tagTrainerPal, const u16 *trainerPal, s16 framesToWait, void (*controllerCallback)(u32 battler)); -void BtlController_HandleDrawPartyStatusSummary(u32 battler, u32 side, bool32 considerDelay); +void BtlController_HandleDrawPartyStatusSummary(u32 battler, enum BattleSide side, bool32 considerDelay); void BtlController_HandleHidePartyStatusSummary(u32 battler); -void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 updateTvData); +void BtlController_HandleBattleAnimation(u32 battler); // player controller void SetControllerToPlayer(u32 battler); +void PlayerBufferExecCompleted(u32 battler); void SetBattleEndCallbacks(u32 battler); void PlayerHandleBallThrowAnim(u32 battler); void PlayerHandleExpUpdate(u32 battler); @@ -388,37 +393,55 @@ void HandleChooseMoveAfterDma3(u32 battler); // recorded player controller void SetControllerToRecordedPlayer(u32 battler); +void RecordedPlayerBufferExecCompleted(u32 battler); + +// recorded partner controller +void SetControllerToRecordedPartner(u32 battler); +void RecordedPartnerBufferExecCompleted(u32 battler); // opponent controller void SetControllerToOpponent(u32 battler); +void OpponentBufferExecCompleted(u32 battler); void OpponentHandleTrainerSlide(u32 battler); // player partner controller void Controller_PlayerPartnerShowIntroHealthbox(u32 battler); // Also used by the link partner. void SetControllerToPlayerPartner(u32 battler); +void PlayerPartnerBufferExecCompleted(u32 battler); // safari controller void SetControllerToSafari(u32 battler); +void SafariBufferExecCompleted(u32 battler); // wally controller void SetControllerToWally(u32 battler); +void WallyBufferExecCompleted(u32 battler); // recorded opponent controller void SetControllerToRecordedOpponent(u32 battler); +void RecordedOpponentBufferExecCompleted(u32 battler); // link opponent void SetControllerToLinkOpponent(u32 battler); +void LinkOpponentBufferExecCompleted(u32 battler); // link partner void SetControllerToLinkPartner(u32 battler); +void LinkPartnerBufferExecCompleted(u32 battler); void TrySetBattlerShadowSpriteCallback(u32 battler); -bool32 TryShinyAnimAfterMonAnimUtil(u32 battler); -bool32 SwitchIn_ShowSubstituteUtil(u32 battler); -bool32 SwitchIn_WaitAndEndUtil(u32 battler); -bool32 SwitchIn_HandleSoundAndEndUtil(u32 battler); -bool32 SwitchIn_ShowHealthboxUtil(u32 battler); -bool32 SwitchIn_TryShinyAnimUtil(u32 battler); +void AnimateMonAfterPokeBallFail(u32 battler); +void TryShinyAnimAfterMonAnim(u32 battler); +void WaitForMonAnimAfterLoad(u32 battler); +void BtlController_HandleSwitchInWaitAndEnd(u32 battler); +void BtlController_Intro_DelayAndEnd(u32 battler); +void BtlController_HandleSwitchInShowHealthbox(u32 battler); +void BtlController_HandleSwitchInTryShinyAnim(u32 battler); +void BtlController_HandleSwitchInSoundAndEnd(u32 battler); +void BtlController_HandleSwitchInShowSubstitute(u32 battler); + +bool32 ShouldBattleRestrictionsApply(u32 battler); +void FreeShinyStars(void); #endif // GUARD_BATTLE_CONTROLLERS_H diff --git a/include/battle_dynamax.h b/include/battle_dynamax.h index ed295bb1e6df..d9fa48706d92 100644 --- a/include/battle_dynamax.h +++ b/include/battle_dynamax.h @@ -5,18 +5,17 @@ bool32 CanDynamax(u32 battler); bool32 IsGigantamaxed(u32 battler); -void ApplyDynamaxHPMultiplier(struct Pokemon* mon); +void ApplyDynamaxHPMultiplier(struct Pokemon *mon); void ActivateDynamax(u32 battler); u16 GetNonDynamaxHP(u32 battler); u16 GetNonDynamaxMaxHP(u32 battler); void UndoDynamax(u32 battler); bool32 IsMoveBlockedByMaxGuard(u32 move); -bool32 IsMoveBlockedByDynamax(u32 move); u16 GetMaxMove(u32 battler, u32 baseMove); u32 GetMaxMovePower(u32 move); bool32 IsMaxMove(u32 move); -void ChooseDamageNonTypesString(u8 type); +void ChooseDamageNonTypesString(enum Type type); void BS_UpdateDynamax(void); void BS_SetSteelsurge(void); diff --git a/include/battle_environment.h b/include/battle_environment.h new file mode 100644 index 000000000000..f4870f795c64 --- /dev/null +++ b/include/battle_environment.h @@ -0,0 +1,17 @@ +#ifndef GUARD_BATTLE_ENVIRONMENT_H +#define GUARD_BATTLE_ENVIRONMENT_H + +#include "constants/battle.h" +#include "battle_bg.h" + +struct BattleEnvironment +{ + u16 naturePower; + u16 secretPowerEffect; + enum Type camouflageType; + struct BattleBackground background; +}; + +extern const struct BattleEnvironment gBattleEnvironmentInfo[BATTLE_ENVIRONMENT_COUNT]; + +#endif // GUARD_BATTLE_ENVIRONMENT_H diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h index c2cc9011713f..eb713779c23a 100644 --- a/include/battle_gfx_sfx_util.h +++ b/include/battle_gfx_sfx_util.h @@ -7,7 +7,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler); void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite); void SpriteCB_TrainerSlideIn(struct Sprite *sprite); void SpriteCB_TrainerSpawn(struct Sprite *sprite); -void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isStatus2, u32 status); +void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isVolatile, u32 status); bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument); void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId); bool8 IsBattleSEPlaying(u8 battler); @@ -22,7 +22,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battler); void ClearSpritesHealthboxAnimData(void); void CopyAllBattleSpritesInvisibilities(void); void CopyBattleSpriteInvisibility(u8 battler); -void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bool8 trackEnemyPersonality); +void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 changeType); void BattleLoadSubstituteOrMonSpriteGfx(u8 battler, bool8 loadMonSprite); void LoadBattleMonGfxAndAnimate(u8 battler, bool8 loadMonSprite, u8 spriteId); void TrySetBehindSubstituteSpriteBit(u8 battler, u16 move); diff --git a/include/battle_gimmick.h b/include/battle_gimmick.h index 42b8c7255aa1..84b1d6b26a55 100644 --- a/include/battle_gimmick.h +++ b/include/battle_gimmick.h @@ -35,6 +35,7 @@ void SetGimmickAsActivated(u32 battler, enum Gimmick gimmick); void ChangeGimmickTriggerSprite(u32 spriteId, u32 animId); void CreateGimmickTriggerSprite(u32 battler); bool32 IsGimmickTriggerSpriteActive(void); +bool32 IsGimmickTriggerSpriteMatchingBattler(u32 battler); void HideGimmickTriggerSprite(void); void DestroyGimmickTriggerSprite(void); diff --git a/include/battle_hold_effects.h b/include/battle_hold_effects.h new file mode 100644 index 000000000000..51e63ea20a02 --- /dev/null +++ b/include/battle_hold_effects.h @@ -0,0 +1,52 @@ +#ifndef GUARD_BATTLE_HOLD_EFFECTS +#define GUARD_BATTLE_HOLD_EFFECTS + +struct HoldEffectInfo +{ + u32 onSwitchIn:1; + u32 onSwitchInFirstTurn:1; + u32 mirrorHerb:1; + u32 mirrorHerbFirstTurn:1; + u32 whiteHerb:1; + u32 whiteHerbFirstTurn:1; + u32 whiteHerbEndTurn:1; + u32 onStatusChange:1; + u32 onHpThreshold:1; + u32 keeMarangaBerry:1; + u32 MentalHerb:1; + u32 onTargetAfterHit:1; + u32 onAttackerAfterHit:1; + u32 lifeOrbShellBell:1; + u32 leftovers:1; + u32 orbs:1; + u32 onEffect:1; + u32 onFling:1; + u32 padding:14; +}; + +extern const struct HoldEffectInfo gHoldEffectsInfo[]; + +typedef bool32 (*ActivationTiming)(enum HoldEffect holdEffect); +enum ItemEffect ItemBattleEffects(u32 primaryBattler, u32 secondaryBattler, enum HoldEffect holdEffect, ActivationTiming timing); + +bool32 IsOnSwitchInActivation(enum HoldEffect holdEffect); +bool32 IsOnSwitchInFirstTurnActivation(enum HoldEffect holdEffect); +bool32 IsMirrorHerbActivation(enum HoldEffect holdEffect); +bool32 IsMirrorHerbFirstTurnActivation(enum HoldEffect holdEffect); +bool32 IsWhiteHerbActivation(enum HoldEffect holdEffect); +bool32 IsWhiteHerbFirstTurnActivation(enum HoldEffect holdEffect); +bool32 IsWhiteHerbEndTurnActivation(enum HoldEffect holdEffect); +bool32 IsOnStatusChangeActivation(enum HoldEffect holdEffect); +bool32 IsOnHpThresholdActivation(enum HoldEffect holdEffect); +bool32 IsKeeMarangaBerryActivation(enum HoldEffect holdEffect); +bool32 IsOnTargetHitActivation(enum HoldEffect holdEffect); +bool32 IsOnAttackerAfterHitActivation(enum HoldEffect holdEffect); +bool32 IsLifeOrbShellBellActivation(enum HoldEffect holdEffect); +bool32 IsLeftoversActivation(enum HoldEffect holdEffect); +bool32 IsOrbsActivation(enum HoldEffect holdEffect); +bool32 IsOnEffectActivation(enum HoldEffect holdEffect); +bool32 IsForceTriggerItemActivation(enum HoldEffect holdEffect); +bool32 IsOnBerryActivation(enum HoldEffect holdEffect); +bool32 IsOnFlingActivation(enum HoldEffect holdEffect); + +#endif // GUARD_BATTLE_HOLD_EFFECTS diff --git a/include/battle_interface.h b/include/battle_interface.h index 5bc1e10aa7c5..ea5559d16545 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -126,7 +126,7 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 unused); u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); u8 GetHPBarLevel(s16 hp, s16 maxhp); -void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle); +void CreateAbilityPopUp(u8 battlerId, enum Ability ability, bool32 isDoubleBattle); void DestroyAbilityPopUp(u8 battlerId); bool32 CanThrowLastUsedBall(void); void TryHideLastUsedBall(void); diff --git a/include/battle_main.h b/include/battle_main.h index 42c2dc2b3230..c08da1d9caeb 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -1,6 +1,7 @@ #ifndef GUARD_BATTLE_MAIN_H #define GUARD_BATTLE_MAIN_H +#include "battle_util.h" #include "pokemon.h" #include "data.h" #include "constants/hold_effects.h" @@ -57,9 +58,11 @@ enum FirstTurnEventsStates FIRST_TURN_EVENTS_TOTEM_BOOST, FIRST_TURN_EVENTS_NEUTRALIZING_GAS, FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES, - FIRST_TURN_EVENTS_OPPORTUNIST_1, FIRST_TURN_EVENTS_ITEM_EFFECTS, - FIRST_TURN_EVENTS_OPPORTUNIST_2, + FIRST_TURN_EVENTS_WHITE_HERB, + FIRST_TURN_EVENTS_OPPORTUNIST, + FIRST_TURN_EVENTS_MIRROR_HERB, + FIRST_TURN_EVENTS_EJECT_PACK, FIRST_TURN_EVENTS_END, }; @@ -88,25 +91,22 @@ void SpriteCB_TrainerThrowObject(struct Sprite *sprite); void AnimSetCenterToCornerVecX(struct Sprite *sprite); void BeginBattleIntroDummy(void); void BeginBattleIntro(void); -void SwitchInClearSetData(u32 battler); +void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy); const u8* FaintClearSetData(u32 battler); void BattleTurnPassed(void); u8 IsRunningFromBattleImpossible(u32 battler); void SwitchTwoBattlersInParty(u32 battler, u32 battler2); void SwitchPartyOrder(u32 battler); void SwapTurnOrder(u8 id1, u8 id2); -u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, enum ItemHoldEffect holdEffect); -u32 GetBattlerTotalSpeedStat(u32 battler); -s32 GetChosenMovePriority(u32 battler, u32 ability); -s32 GetBattleMovePriority(u32 battler, u32 ability, u32 move); -s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMoves, u32 ability1, u32 ability2, - enum ItemHoldEffect holdEffectBattler1, enum ItemHoldEffect holdEffectBattler2, u32 speedBattler1, u32 speedBattler2, s32 priority1, s32 priority2); -s32 GetWhichBattlerFasterOrTies(u32 battler1, u32 battler2, bool32 ignoreChosenMoves); -s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves); +u32 GetBattlerTotalSpeedStat(u32 battler, enum Ability ability, enum HoldEffect holdEffect); +s32 GetChosenMovePriority(u32 battler, enum Ability ability); +s32 GetBattleMovePriority(u32 battler, enum Ability ability, u32 move); +s32 GetWhichBattlerFasterArgs(struct BattleContext *ctx, bool32 ignoreChosenMoves, u32 speedBattler1, u32 speedBattler2, s32 priority1, s32 priority2); +s32 GetWhichBattlerFasterOrTies(struct BattleContext *ctx, bool32 ignoreChosenMoves); +s32 GetWhichBattlerFaster(struct BattleContext *ctx, bool32 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands(void); -void SpecialStatusesClear(void); -u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState monInBattle); +enum Type GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState monInBattle); void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk); bool32 IsWildMonSmart(void); u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags); @@ -115,6 +115,7 @@ u32 GeneratePersonalityForGender(u32 gender, u32 species); void CustomTrainerPartyAssignMoves(struct Pokemon *mon, const struct TrainerMon *partyEntry); bool32 CanPlayerForfeitNormalTrainerBattle(void); bool32 DidPlayerForfeitNormalTrainerBattle(void); +void BattleDebug_WonBattle(void); extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/include/battle_message.h b/include/battle_message.h index e9b133b656c5..9809589243cc 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,6 +1,7 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H +#include "constants/abilities.h" #include "constants/battle.h" #include "constants/battle_string_ids.h" @@ -84,8 +85,8 @@ #define B_TXT_TRAINER2_NAME_WITH_CLASS 0x43 #define B_TXT_PARTNER_NAME_WITH_CLASS 0x44 #define B_TXT_ATK_TRAINER_NAME_WITH_CLASS 0x45 -#define B_TXT_SCR_TEAM1 0x46 -#define B_TXT_SCR_TEAM2 0x47 +#define B_TXT_EFF_TEAM1 0x46 +#define B_TXT_EFF_TEAM2 0x47 #define B_BUFF_STRING 0 #define B_BUFF_NUMBER 1 @@ -238,13 +239,13 @@ struct BattleMsgData u16 currentMove; u16 originallyUsedMove; u16 lastItem; - u16 lastAbility; + enum Ability lastAbility; u8 scrActive; u8 bakScriptPartyIdx; u8 hpScale; u8 itemEffectBattler; - u8 moveType; - u16 abilities[MAX_BATTLERS_COUNT]; + enum Type moveType; + enum Ability abilities[MAX_BATTLERS_COUNT]; u8 textBuffs[3][TEXT_BUFF_ARRAY_COUNT]; }; @@ -334,5 +335,6 @@ extern const u8 gText_BattleTourney[]; extern const u16 gMissStringIds[]; extern const u16 gStatUpStringIds[]; +extern const u16 gStatDownStringIds[]; #endif // GUARD_BATTLE_MESSAGE_H diff --git a/include/battle_pyramid.h b/include/battle_pyramid.h index ec80fdeed3a5..d55d8d2e9399 100644 --- a/include/battle_pyramid.h +++ b/include/battle_pyramid.h @@ -1,13 +1,15 @@ #ifndef GUARD_BATTLE_PYRAMID_H #define GUARD_BATTLE_PYRAMID_H +#include "constants/battle_pyramid.h" + void CallBattlePyramidFunction(void); u16 LocalIdToPyramidTrainerId(u8 localId); bool8 GetBattlePyramidTrainerFlag(u8 eventId); void MarkApproachingPyramidTrainersAsBattled(void); void GenerateBattlePyramidWildMon(void); u8 GetPyramidRunMultiplier(void); -u8 InBattlePyramid(void); +u8 CurrentBattlePyramidLocation(void); bool8 InBattlePyramid_(void); void PausePyramidChallenge(void); void SoftResetInBattlePyramid(void); diff --git a/include/battle_pyramid_bag.h b/include/battle_pyramid_bag.h index 258ca56b215d..4d8b87506ea3 100644 --- a/include/battle_pyramid_bag.h +++ b/include/battle_pyramid_bag.h @@ -2,6 +2,8 @@ #define GUARD_BATTLE_PYRAMID_BAG_H #include "list_menu.h" +#include "main.h" +#include "task.h" enum { PYRAMIDBAG_LOC_FIELD, @@ -29,7 +31,7 @@ enum { struct PyramidBagMenu { - void (*newScreenCallback)(void); + MainCallback newScreenCallback; u8 tilemapBuffer[BG_SCREEN_SIZE]; u8 spriteIds[PBAG_SPRITE_COUNT]; u8 windowIds[5]; @@ -49,7 +51,7 @@ struct PyramidBagMenu struct PyramidBagMenuState { - void (*exitCallback)(void); + MainCallback exitCallback; u8 location; u16 cursorPosition; u16 scrollPosition; @@ -63,11 +65,11 @@ void CB2_PyramidBagMenuFromStartMenu(void); void CB2_ReturnToPyramidBagMenu(void); void UpdatePyramidBagList(void); void UpdatePyramidBagCursorPos(void); -void GoToBattlePyramidBagMenu(u8 location, void (*exitCallback)(void)); +void GoToBattlePyramidBagMenu(u8 location, MainCallback exitCallback); void Task_CloseBattlePyramidBagMessage(u8 taskId); void TryStoreHeldItemsInPyramidBag(void); void ChooseItemsToTossFromPyramidBag(void); void CloseBattlePyramidBag(u8 taskId); -void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback)(u8 taskId)); +void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, TaskFunc callback); #endif // GUARD_BATTLE_PYRAMID_BAG_H diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index c0d47436fd5f..d011b509477d 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -22,15 +22,33 @@ struct PickupItem u8 percentage[10]; }; -s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, enum ItemHoldEffect holdEffectAtk); -s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, enum ItemHoldEffect holdEffectAtk); +union TRANSPARENT StatChangeFlags +{ + int raw; + u32 raw_u32; + u16 raw_u16; + u8 raw_u8; + struct { + bool32 allowPtr:1; // STAT_CHANGE_ALLOW_PTR + bool32 mirrorArmored:1; // STAT_CHANGE_MIRROR_ARMOR + bool32 onlyChecking:1; // STAT_CHANGE_ONLY_CHECKING + bool32 notProtectAffected:1; // STAT_CHANGE_NOT_PROTECT_AFFECTED + bool32 updateMoveEffect:1; // STAT_CHANGE_UPDATE_MOVE_EFFECT + bool32 statDropPrevention:1; // STAT_CHANGE_CHECK_PREVENTION + bool32 certain:1; // STAT_CHANGE_CERTAIN + bool32 padding:25; + }; +}; + +s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, enum Ability abilityAtk, enum Ability abilityDef, enum HoldEffect holdEffectAtk); +s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, enum Ability abilityAtk, enum Ability abilityDef, enum HoldEffect holdEffectAtk); s32 GetCritHitOdds(s32 critChanceIndex); -u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); -u8 GetBattlerTurnOrderNum(u8 battler); +bool32 HasBattlerActedThisTurn(u32 battler); +u32 GetBattlerTurnOrderNum(u32 battler); bool32 NoAliveMonsForBattlerSide(u32 battler); bool32 NoAliveMonsForPlayer(void); bool32 NoAliveMonsForEitherParty(void); -void SetMoveEffect(bool32 primary, bool32 certain); +void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, const u8 *battleScript, enum SetMoveEffectFlags effectFlags); bool32 CanBattlerSwitch(u32 battlerId); void BattleDestroyYesNoCursorAt(u8 cursorPosition); void BattleCreateYesNoCursorAt(u8 cursorPosition); @@ -41,16 +59,14 @@ bool32 DoesSubstituteBlockMove(u32 battlerAtk, u32 battlerDef, u32 move); bool32 DoesDisguiseBlockMove(u32 battler, u32 move); bool32 CanUseLastResort(u8 battlerId); u32 IsFlowerVeilProtected(u32 battler); -u32 IsLeafGuardProtected(u32 battler, u32 ability); -bool32 IsShieldsDownProtected(u32 battler, u32 ability); -u32 IsAbilityStatusProtected(u32 battler, u32 ability); +u32 IsLeafGuardProtected(u32 battler, enum Ability ability); +bool32 IsShieldsDownProtected(u32 battler, enum Ability ability); +u32 IsAbilityStatusProtected(u32 battler, enum Ability ability); bool32 TryResetBattlerStatChanges(u8 battler); bool32 CanCamouflage(u8 battlerId); -u32 GetNaturePowerMove(u32 battler); void StealTargetItem(u8 battlerStealer, u8 battlerItem); u8 GetCatchingBattler(void); -u32 GetHighestStatId(u32 battlerId); -bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType); +bool32 ProteanTryChangeType(u32 battler, enum Ability ability, u32 move, enum Type moveType); bool32 IsMoveNotAllowedInSkyBattles(u32 move); bool32 DoSwitchInAbilities(u32 battlerId); u8 GetFirstFaintedPartyIndex(u8 battlerId); @@ -58,7 +74,7 @@ bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler); void SaveBattlerTarget(u32 battler); void SaveBattlerAttacker(u32 battler); bool32 CanBurnHitThaw(u16 move); -void SetNonVolatileStatusCondition(u32 target, enum MoveEffects effect); +bool32 EmergencyExitCanBeTriggered(u32 battler); extern void (*const gBattleScriptingCommandsTable[])(void); extern const struct StatFractions gAccuracyStageRatios[]; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index de3e876aa242..e2f9f1636ca4 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -3,17 +3,18 @@ extern const u8 BattleScript_SupersweetSyrupActivates[]; extern const u8 BattleScript_OpportunistCopyStatChange[]; +extern const u8 BattleScript_OpportunistCopyStatChangeEnd3[]; extern const u8 BattleScript_MirrorHerbCopyStatChange[]; extern const u8 BattleScript_MirrorHerbCopyStatChangeEnd2[]; extern const u8 BattleScript_NotAffected[]; extern const u8 BattleScript_HitFromCritCalc[]; extern const u8 BattleScript_MoveEnd[]; extern const u8 BattleScript_MakeMoveMissed[]; -extern const u8 BattleScript_PrintMoveMissed[]; +extern const u8 BattleScript_MoveMissedPause[]; extern const u8 BattleScript_MoveMissedPause[]; extern const u8 BattleScript_MoveMissed[]; extern const u8 BattleScript_FlingFailConsumeItem[]; -extern const u8 BattleScript_FailedFromAtkString[]; +extern const u8 BattleScript_FlingBlockedByShieldDust[]; extern const u8 BattleScript_FailedFromAtkCanceler[]; extern const u8 BattleScript_ButItFailed[]; extern const u8 BattleScript_StatUp[]; @@ -21,8 +22,7 @@ extern const u8 BattleScript_StatDown[]; extern const u8 BattleScript_AlreadyAtFullHp[]; extern const u8 BattleScript_PresentHealTarget[]; extern const u8 BattleScript_MoveUsedMustRecharge[]; -extern const u8 BattleScript_FaintAttacker[]; -extern const u8 BattleScript_FaintTarget[]; +extern const u8 BattleScript_FaintBattler[]; extern const u8 BattleScript_GiveExp[]; extern const u8 BattleScript_HandleFaintedMon[]; extern const u8 BattleScript_LocalTrainerBattleWon[]; @@ -72,6 +72,8 @@ extern const u8 BattleScript_RoarSuccessSwitch[]; extern const u8 BattleScript_RoarSuccessEndBattle[]; extern const u8 BattleScript_MistProtected[]; extern const u8 BattleScript_RageIsBuilding[]; +extern const u8 BattleScript_EncoredMoveInPalace[]; +extern const u8 BattleScript_EncoredMove[]; extern const u8 BattleScript_MoveUsedIsDisabled[]; extern const u8 BattleScript_SelectingDisabledMove[]; extern const u8 BattleScript_DisabledNoMore[]; @@ -90,7 +92,7 @@ extern const u8 BattleScript_AllStatsUp[]; extern const u8 BattleScript_RapidSpinAway[]; extern const u8 BattleScript_WrapFree[]; extern const u8 BattleScript_LeechSeedFree[]; -extern const u8 BattleScript_SpikesFree[]; +extern const u8 BattleScript_SpinHazardsAway[]; extern const u8 BattleScript_MonTookFutureAttack[]; extern const u8 BattleScript_NoMovesLeft[]; extern const u8 BattleScript_SelectingMoveWithNoPP[]; @@ -148,7 +150,7 @@ extern const u8 BattleScript_TargetWokeUp[]; extern const u8 BattleScript_TargetBurnHeal[]; extern const u8 BattleScript_TargetPoisonHealed[]; extern const u8 BattleScript_MoveEffectSleep[]; -extern const u8 BattleScript_YawnMakesAsleep[]; +extern const u8 BattleScript_YawnMakesAsleepEnd2[]; extern const u8 BattleScript_MoveEffectPoison[]; extern const u8 BattleScript_MoveEffectBurn[]; extern const u8 BattleScript_MoveEffectFrostbite[]; @@ -166,7 +168,6 @@ extern const u8 BattleScript_DoRecoil33[]; extern const u8 BattleScript_Recoil33End[]; extern const u8 BattleScript_ItemSteal[]; extern const u8 BattleScript_DrizzleActivates[]; -extern const u8 BattleScript_SpeedBoostActivates[]; extern const u8 BattleScript_TraceActivates[]; extern const u8 BattleScript_RainDishActivates[]; extern const u8 BattleScript_SandstreamActivates[]; @@ -178,11 +179,8 @@ extern const u8 BattleScript_DroughtActivates[]; extern const u8 BattleScript_TookAttack[]; extern const u8 BattleScript_SturdyPreventsOHKO[]; extern const u8 BattleScript_DampStopsExplosion[]; -extern const u8 BattleScript_MoveHPDrain_PPLoss[]; extern const u8 BattleScript_MoveHPDrain[]; -extern const u8 BattleScript_MonMadeMoveUseless_PPLoss[]; extern const u8 BattleScript_MonMadeMoveUseless[]; -extern const u8 BattleScript_FlashFireBoost_PPLoss[]; extern const u8 BattleScript_FlashFireBoost[]; extern const u8 BattleScript_AbilityNoStatLoss[]; extern const u8 BattleScript_ItemNoStatLoss[]; @@ -193,6 +191,7 @@ extern const u8 BattleScript_OwnTempoPrevents[]; extern const u8 BattleScript_SoundproofProtected[]; extern const u8 BattleScript_AbilityNoSpecificStatLoss[]; extern const u8 BattleScript_StickyHoldActivates[]; +extern const u8 BattleScript_StickyHoldActivatesRet[]; extern const u8 BattleScript_ColorChangeActivates[]; extern const u8 BattleScript_RoughSkinActivates[]; extern const u8 BattleScript_CuteCharmActivates[]; @@ -200,6 +199,7 @@ extern const u8 BattleScript_AbilityStatusEffect[]; extern const u8 BattleScript_SynchronizeActivates[]; extern const u8 BattleScript_NoItemSteal[]; extern const u8 BattleScript_AbilityCuredStatus[]; +extern const u8 BattleScript_AbilityCuredStatusEnd3[]; extern const u8 BattleScript_IgnoresWhileAsleep[]; extern const u8 BattleScript_IgnoresAndUsesRandomMove[]; extern const u8 BattleScript_MoveUsedLoafingAround[]; @@ -207,22 +207,10 @@ extern const u8 BattleScript_TruantLoafingAround[]; extern const u8 BattleScript_IgnoresAndFallsAsleep[]; extern const u8 BattleScript_IgnoresAndHitsItself[]; extern const u8 BattleScript_SubstituteFade[]; -extern const u8 BattleScript_BerryCurePrlzEnd2[]; -extern const u8 BattleScript_BerryCureParRet[]; -extern const u8 BattleScript_BerryCurePsnEnd2[]; -extern const u8 BattleScript_BerryCurePsnRet[]; -extern const u8 BattleScript_BerryCureBrnEnd2[]; -extern const u8 BattleScript_BerryCureBrnRet[]; -extern const u8 BattleScript_BerryCureFrzEnd2[]; -extern const u8 BattleScript_BerryCureFrzRet[]; -extern const u8 BattleScript_BerryCureFrbEnd2[]; -extern const u8 BattleScript_BerryCureFrbRet[]; -extern const u8 BattleScript_BerryCureSlpEnd2[]; -extern const u8 BattleScript_BerryCureSlpRet[]; +extern const u8 BattleScript_BerryCureStatusEnd2[]; +extern const u8 BattleScript_BerryCureStatusRet[]; extern const u8 BattleScript_BerryCureConfusionEnd2[]; extern const u8 BattleScript_BerryCureConfusionRet[]; -extern const u8 BattleScript_BerryCureChosenStatusEnd2[]; -extern const u8 BattleScript_BerryCureChosenStatusRet[]; extern const u8 BattleScript_WhiteHerbEnd2[]; extern const u8 BattleScript_WhiteHerbRet[]; extern const u8 BattleScript_ItemHealHP_RemoveItemRet[]; @@ -241,6 +229,8 @@ extern const u8 BattleScript_ConsumableStatRaiseRet[]; extern const u8 BattleScript_BerryFocusEnergyRet[]; extern const u8 BattleScript_BerryFocusEnergyEnd2[]; extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[]; +extern const u8 BattleScript_AbilityAvoidsDamage[]; +extern const u8 BattleScript_AbilityShieldProtects[]; extern const u8 BattleScript_ArenaTurnBeginning[]; extern const u8 BattleScript_PalacePrintFlavorText[]; extern const u8 BattleScript_ArenaDoJudgment[]; @@ -275,10 +265,10 @@ extern const u8 BattleScript_WaterSportEnds[]; extern const u8 BattleScript_SturdiedMsg[]; extern const u8 BattleScript_GravityEnds[]; extern const u8 BattleScript_MoveStatDrain[]; -extern const u8 BattleScript_MoveStatDrain_PPLoss[]; extern const u8 BattleScript_TargetsStatWasMaxedOut[]; extern const u8 BattleScript_AttackerAbilityStatRaise[]; extern const u8 BattleScript_AttackerAbilityStatRaiseEnd3[]; +extern const u8 BattleScript_AttackerAbilityStatRaiseEnd2[]; extern const u8 BattleScript_PoisonHealActivates[]; extern const u8 BattleScript_BadDreamsActivates[]; extern const u8 BattleScript_SwitchInAbilityMsg[]; @@ -292,6 +282,7 @@ extern const u8 BattleScript_CursedBodyActivates[]; extern const u8 BattleScript_MummyActivates[]; extern const u8 BattleScript_WeakArmorActivates[]; extern const u8 BattleScript_FellStingerRaisesStat[]; +extern const u8 BattleScript_RemoveTerrain[]; extern const u8 BattleScript_SnowWarningActivatesHail[]; extern const u8 BattleScript_SnowWarningActivatesSnow[]; extern const u8 BattleScript_PickupActivates[]; @@ -307,13 +298,7 @@ extern const u8 BattleScript_SelectingNotAllowedMoveGravityInPalace[]; extern const u8 BattleScript_SelectingNotAllowedMoveHealBlock[]; extern const u8 BattleScript_MoveUsedHealBlockPrevents[]; extern const u8 BattleScript_SelectingNotAllowedMoveHealBlockInPalace[]; -extern const u8 BattleScript_ToxicSpikesFree[]; -extern const u8 BattleScript_StickyWebFree[]; -extern const u8 BattleScript_StealthRockFree[]; -extern const u8 BattleScript_SpikesDefog[]; -extern const u8 BattleScript_ToxicSpikesDefog[]; -extern const u8 BattleScript_StickyWebDefog[]; -extern const u8 BattleScript_StealthRockDefog[]; +extern const u8 BattleScript_DefogClearHazards[]; extern const u8 BattleScript_MegaEvolution[]; extern const u8 BattleScript_WishMegaEvolution[]; extern const u8 BattleScript_MoveEffectClearSmog[]; @@ -329,7 +314,6 @@ extern const u8 BattleScript_ProteanActivates[]; extern const u8 BattleScript_DazzlingProtected[]; extern const u8 BattleScript_MoveUsedPsychicTerrainPrevents[]; extern const u8 BattleScript_MoveUsedPowder[]; -extern const u8 BattleScript_ZMoveActivatePowder[]; extern const u8 BattleScript_SelectingNotAllowedStuffCheeks[]; extern const u8 BattleScript_SelectingNotAllowedStuffCheeksInPalace[]; extern const u8 BattleScript_SelectingNotAllowedBelch[]; @@ -339,7 +323,7 @@ extern const u8 BattleScript_GrassySurgeActivates[]; extern const u8 BattleScript_MistySurgeActivates[]; extern const u8 BattleScript_ElectricSurgeActivates[]; extern const u8 BattleScript_EffectSpectralThief[]; -extern const u8 BattleScript_StatUpMsg[]; +extern const u8 BattleScript_EffectLifeDew[]; extern const u8 BattleScript_AbilityRaisesDefenderStat[]; extern const u8 BattleScript_PowderMoveNoEffect[]; extern const u8 BattleScript_GrassyTerrainHeals[]; @@ -360,8 +344,9 @@ extern const u8 BattleScript_WeaknessPolicy[]; extern const u8 BattleScript_TargetItemStatRaise[]; extern const u8 BattleScript_RockyHelmetActivates[]; extern const u8 BattleScript_ItemHurtEnd2[]; -extern const u8 BattleScript_AirBaloonMsgIn[]; -extern const u8 BattleScript_AirBaloonMsgPop[]; +extern const u8 BattleScript_AirBalloonMsgIn[]; +extern const u8 BattleScript_AirBalloonMsgInRet[]; +extern const u8 BattleScript_AirBalloonMsgPop[]; extern const u8 BattleScript_ItemHurtRet[]; extern const u8 BattleScript_ToxicOrb[]; extern const u8 BattleScript_FlameOrb[]; @@ -372,10 +357,11 @@ extern const u8 BattleScript_IllusionOffEnd3[]; extern const u8 BattleScript_IllusionOffAndTerastallization[]; extern const u8 BattleScript_DancerActivates[]; extern const u8 BattleScript_AftermathDmg[]; -extern const u8 BattleScript_AttackerFormChange[]; -extern const u8 BattleScript_AttackerFormChangeEnd3[]; +extern const u8 BattleScript_BattlerFormChange[]; +extern const u8 BattleScript_BattlerFormChangeEnd2[]; +extern const u8 BattleScript_BattlerFormChangeEnd3[]; extern const u8 BattleScript_AttackerFormChangeWithString[]; -extern const u8 BattleScript_AttackerFormChangeWithStringEnd3[]; +extern const u8 BattleScript_BattlerFormChangeWithStringEnd3[]; extern const u8 BattleScript_TargetFormChange[]; extern const u8 BattleScript_AnticipationActivates[]; extern const u8 BattleScript_SlowStartEnds[]; @@ -419,13 +405,15 @@ extern const u8 BattleScript_RedCardActivates[]; extern const u8 BattleScript_EjectButtonActivates[]; extern const u8 BattleScript_EjectPackActivate_Ret[]; extern const u8 BattleScript_EjectPackActivate_End2[]; +extern const u8 BattleScript_EjectPackActivate_End3[]; extern const u8 BattleScript_EjectPackActivates[]; extern const u8 BattleScript_MentalHerbCureRet[]; extern const u8 BattleScript_MentalHerbCureEnd2[]; extern const u8 BattleScript_TerrainPreventsEnd2[]; +extern const u8 BattleScript_ImmunityProtectedEnd2[]; extern const u8 BattleScript_MistyTerrainPrevents[]; extern const u8 BattleScript_ElectricTerrainPrevents[]; -extern const u8 BattleScript_DarkTypePreventsPrankster[]; +extern const u8 BattleScript_DoesntAffectTargetAtkString[]; extern const u8 BattleScript_GulpMissileGorging[]; extern const u8 BattleScript_GulpMissileGulping[]; extern const u8 BattleScript_GulpMissileFormChange[]; @@ -447,8 +435,7 @@ extern const u8 BattleScript_WanderingSpiritActivates[]; extern const u8 BattleScript_MirrorArmorReflect[]; extern const u8 BattleScript_GooeyActivates[]; extern const u8 BattleScript_PastelVeilActivates[]; -extern const u8 BattleScript_AttackerFormChangeEnd3NoPopup[]; -extern const u8 BattleScript_AttackerFormChangeWithStringEnd3NoPopup[]; +extern const u8 BattleScript_BattlerFormChangeEnd3NoPopup[]; extern const u8 BattleScript_AttackerFormChangeMoveEffect[]; extern const u8 BattleScript_BothCanNoLongerEscape[]; extern const u8 BattleScript_OctolockEndTurn[]; @@ -466,6 +453,7 @@ extern const u8 BattleScript_RemoveFireType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; extern const u8 BattleScript_RemoveElectricType[]; extern const u8 BattleScript_SeedSowerActivates[]; +extern const u8 BattleScript_BerserkActivates[]; extern const u8 BattleScript_AngerShellActivates[]; extern const u8 BattleScript_WellBakedBodyActivates[]; extern const u8 BattleScript_WindRiderActivatesMoveEnd[]; @@ -518,9 +506,8 @@ extern const u8 BattleScript_BoosterEnergyEnd2[]; extern const u8 BattleScript_BoosterEnergyRet[]; extern const u8 BattleScript_TeraShellDistortingTypeMatchups[]; extern const u8 BattleScript_TeraFormChange[]; -extern const u8 BattleScript_SleepClausePreventsEnd[]; +extern const u8 BattleScript_SleepClausePreventsEnd2[]; extern const u8 BattleScript_PowerConstruct[]; - extern const u8 BattleScript_AbilityProtectsDoesntAffect[]; extern const u8 BattleScript_ImmunityProtected[]; extern const u8 BattleScript_SafeguardProtected[]; @@ -532,6 +519,7 @@ extern const u8 BattleScript_AlreadyPoisoned[]; extern const u8 BattleScript_AlreadyParalyzed[]; extern const u8 BattleScript_AlreadyBurned[]; extern const u8 BattleScript_PrintAbilityMadeIneffective[]; +extern const u8 BattleScript_ItDoesntAffectFoe[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; @@ -549,14 +537,12 @@ extern const u8 BattleScript_EffectSetWeather[]; extern const u8 BattleScript_EffectSetTerrain[]; extern const u8 BattleScript_EffectStonesurge[]; extern const u8 BattleScript_EffectSteelsurge[]; -extern const u8 BattleScript_SteelsurgeFree[]; -extern const u8 BattleScript_SteelsurgeDefog[]; extern const u8 BattleScript_DamageNonTypesStarts[]; extern const u8 BattleScript_DamageNonTypesContinues[]; -extern const u8 BattleScript_DefogTryHazards[]; -extern const u8 BattleScript_EffectAuroraVeilSuccess[]; +extern const u8 BattleScript_MoveEffectDefog[]; +extern const u8 BattleScript_MoveEffectAuroraVeil[]; extern const u8 BattleScript_EffectGravitySuccess[]; -extern const u8 BattleScript_EffectYawnSuccess[]; +extern const u8 BattleScript_MoveEffectYawnSide[]; extern const u8 BattleScript_EffectTryReducePP[]; extern const u8 BattleScript_EffectParalyzeSide[]; extern const u8 BattleScript_EffectPoisonSide[]; @@ -583,7 +569,6 @@ extern const u8 BattleScript_EffectAbsorb[]; extern const u8 BattleScript_EffectAbsorbLiquidOoze[]; extern const u8 BattleScript_EffectExplosion[]; extern const u8 BattleScript_EffectDreamEater[]; -extern const u8 BattleScript_EffectMirrorMove[]; extern const u8 BattleScript_EffectAttackUp[]; extern const u8 BattleScript_EffectDefenseUp[]; extern const u8 BattleScript_EffectSpeedUp[]; @@ -607,6 +592,8 @@ extern const u8 BattleScript_EffectConversion[]; extern const u8 BattleScript_EffectRestoreHp[]; extern const u8 BattleScript_EffectLightScreen[]; extern const u8 BattleScript_EffectRest[]; +extern const u8 BattleScript_RestIsAlreadyAsleep[]; +extern const u8 BattleScript_InsomniaProtects[]; extern const u8 BattleScript_EffectOHKO[]; extern const u8 BattleScript_EffectHealBlock[]; extern const u8 BattleScript_RecoilIfMiss[]; @@ -633,7 +620,6 @@ extern const u8 BattleScript_EffectTwoTurnsAttack[]; extern const u8 BattleScript_EffectSubstitute[]; extern const u8 BattleScript_EffectRage[]; extern const u8 BattleScript_EffectMimic[]; -extern const u8 BattleScript_EffectMetronome[]; extern const u8 BattleScript_EffectLeechSeed[]; extern const u8 BattleScript_EffectDoNothing[]; extern const u8 BattleScript_EffectHoldHands[]; @@ -647,11 +633,10 @@ extern const u8 BattleScript_EffectSnore[]; extern const u8 BattleScript_EffectConversion2[]; extern const u8 BattleScript_EffectLockOn[]; extern const u8 BattleScript_EffectSketch[]; -extern const u8 BattleScript_EffectSleepTalk[]; extern const u8 BattleScript_EffectDestinyBond[]; extern const u8 BattleScript_EffectSpite[]; extern const u8 BattleScript_EffectHealBell[]; -extern const u8 BattleScript_EffectHealBell_FromHeal[]; +extern const u8 BattleScript_MoveEffectAromatherapy[]; extern const u8 BattleScript_EffectMeanLook[]; extern const u8 BattleScript_EffectNightmare[]; extern const u8 BattleScript_EffectMinimize[]; @@ -689,12 +674,10 @@ extern const u8 BattleScript_EffectBeatUp[]; extern const u8 BattleScript_EffectSemiInvulnerable[]; extern const u8 BattleScript_EffectDefenseCurl[]; extern const u8 BattleScript_EffectSoftboiled[]; -extern const u8 BattleScript_EffectFirstTurnOnly[]; -extern const u8 BattleScript_EffectUproar[]; extern const u8 BattleScript_EffectStockpile[]; extern const u8 BattleScript_EffectSpitUp[]; extern const u8 BattleScript_EffectSwallow[]; -extern const u8 BattleScript_EffectWorrySeed[]; +extern const u8 BattleScript_EffectOverwriteAbility[]; extern const u8 BattleScript_EffectHail[]; extern const u8 BattleScript_EffectTorment[]; extern const u8 BattleScript_EffectFlatter[]; @@ -702,14 +685,12 @@ extern const u8 BattleScript_EffectNonVolatileStatus[]; extern const u8 BattleScript_EffectMemento[]; extern const u8 BattleScript_EffectFocusPunch[]; extern const u8 BattleScript_EffectFollowMe[]; -extern const u8 BattleScript_EffectNaturePower[]; extern const u8 BattleScript_EffectCharge[]; extern const u8 BattleScript_EffectTaunt[]; extern const u8 BattleScript_EffectHelpingHand[]; extern const u8 BattleScript_EffectTrick[]; extern const u8 BattleScript_EffectRolePlay[]; extern const u8 BattleScript_EffectWish[]; -extern const u8 BattleScript_EffectAssist[]; extern const u8 BattleScript_EffectIngrain[]; extern const u8 BattleScript_EffectMagicCoat[]; extern const u8 BattleScript_EffectRecycle[]; @@ -757,8 +738,6 @@ extern const u8 BattleScript_EffectGuardSplit[]; extern const u8 BattleScript_EffectStickyWeb[]; extern const u8 BattleScript_EffectMetalBurst[]; extern const u8 BattleScript_EffectLuckyChant[]; -extern const u8 BattleScript_EffectSuckerPunch[]; -extern const u8 BattleScript_EffectSimpleBeam[]; extern const u8 BattleScript_EffectEntrainment[]; extern const u8 BattleScript_EffectHealPulse[]; extern const u8 BattleScript_EffectQuash[]; @@ -770,14 +749,12 @@ extern const u8 BattleScript_EffectElectricTerrain[]; extern const u8 BattleScript_EffectPsychicTerrain[]; extern const u8 BattleScript_EffectAttackAccUp[]; extern const u8 BattleScript_EffectAttackSpAttackUp[]; -extern const u8 BattleScript_EffectMeFirst[]; extern const u8 BattleScript_EffectQuiverDance[]; extern const u8 BattleScript_EffectCoil[]; extern const u8 BattleScript_EffectElectrify[]; extern const u8 BattleScript_EffectReflectType[]; extern const u8 BattleScript_EffectSoak[]; extern const u8 BattleScript_EffectGrowth[]; -extern const u8 BattleScript_EffectLastResort[]; extern const u8 BattleScript_EffectShellSmash[]; extern const u8 BattleScript_EffectShiftGear[]; extern const u8 BattleScript_EffectDefenseUp3[]; @@ -788,9 +765,8 @@ extern const u8 BattleScript_TryHitSwitchTarget[]; extern const u8 BattleScript_HitSwitchTargetDynamaxed[]; extern const u8 BattleScript_AbilityPreventsPhasingOutRet[]; extern const u8 BattleScript_PrintMonIsRootedRet[]; -extern const u8 BattleScript_EffectFinalGambit[]; +extern const u8 BattleScript_FinalGambit[]; extern const u8 BattleScript_EffectAutotomize[]; -extern const u8 BattleScript_EffectCopycat[]; extern const u8 BattleScript_EffectDefog[]; extern const u8 BattleScript_EffectHitEnemyHealAlly[]; extern const u8 BattleScript_EffectSynchronoise[]; @@ -807,19 +783,16 @@ extern const u8 BattleScript_EffectAcupressure[]; extern const u8 BattleScript_EffectAromaticMist[]; extern const u8 BattleScript_EffectPowder[]; extern const u8 BattleScript_EffectPartingShot[]; -extern const u8 BattleScript_EffectMatBlock[]; extern const u8 BattleScript_EffectInstruct[]; extern const u8 BattleScript_EffectLaserFocus[]; extern const u8 BattleScript_EffectMagneticFlux[]; extern const u8 BattleScript_EffectGearUp[]; extern const u8 BattleScript_EffectStrengthSap[]; extern const u8 BattleScript_EffectPurify[]; -extern const u8 BattleScript_FailIfNotArgType[]; extern const u8 BattleScript_EffectShoreUp[]; extern const u8 BattleScript_EffectGeomancy[]; extern const u8 BattleScript_EffectFairyLock[]; extern const u8 BattleScript_EffectAllySwitch[]; -extern const u8 BattleScript_EffectRelicSong[]; extern const u8 BattleScript_MoveEffectEerieSpell[]; extern const u8 BattleScript_EffectJungleHealing[]; extern const u8 BattleScript_EffectCoaching[]; @@ -832,7 +805,6 @@ extern const u8 BattleScript_MoveEffectLeechSeed[]; extern const u8 BattleScript_MoveEffectHaze[]; extern const u8 BattleScript_MoveEffectIonDeluge[]; extern const u8 BattleScript_EffectHyperspaceFury[]; -extern const u8 BattleScript_EffectAuraWheel[]; extern const u8 BattleScript_EffectNoRetreat[]; extern const u8 BattleScript_EffectTarShot[]; extern const u8 BattleScript_EffectPoltergeist[]; @@ -842,7 +814,6 @@ extern const u8 BattleScript_EffectSkyDrop[]; extern const u8 BattleScript_EffectMeteorBeam[]; extern const u8 BattleScript_EffectCourtChange[]; extern const u8 BattleScript_EffectExtremeEvoboost[]; -extern const u8 BattleScript_EffectHitSetRemoveTerrain[]; extern const u8 BattleScript_EffectDarkVoid[]; extern const u8 BattleScript_EffectVictoryDance[]; extern const u8 BattleScript_EffectTeatime[]; @@ -860,14 +831,18 @@ extern const u8 BattleScript_EffectBrickBreak[]; extern const u8 BattleScript_EffectDoodle[]; extern const u8 BattleScript_EffectFilletAway[]; extern const u8 BattleScript_EffectShedTail[]; -extern const u8 BattleScript_EffectUpperHand[]; extern const u8 BattleScript_EffectTidyUp[]; extern const u8 BattleScript_EffectSpicyExtract[]; -extern const u8 BattleScript_DamageToQuarterTargetHP[]; extern const u8 BattleScript_EffectFickleBeam[]; extern const u8 BattleScript_FickleBeamDoubled[]; extern const u8 BattleScript_QuestionForfeitBattle[]; extern const u8 BattleScript_ForfeitBattleGaveMoney[]; extern const u8 BattleScript_AbilityPopUp[]; +extern const u8 BattleScript_Attackstring[]; +extern const u8 BattleScript_SubmoveAttackstring[]; +extern const u8 BattleScript_MetronomeAttackstring[]; +extern const u8 BattleScript_SleepTalkAttackstring[]; +extern const u8 BattleScript_NaturePowerAttackstring[]; +extern const u8 BattleScript_PokemonCantUseTheMove[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/battle_setup.h b/include/battle_setup.h index 278ca6d9ce2f..689d1636965b 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -1,6 +1,7 @@ #ifndef GUARD_BATTLE_SETUP_H #define GUARD_BATTLE_SETUP_H +#include "battle_transition.h" #include "gym_leader_rematch.h" #define REMATCHES_COUNT 5 @@ -60,10 +61,10 @@ void BattleSetup_StartLatiBattle(void); void BattleSetup_StartLegendaryBattle(void); void StartGroudonKyogreBattle(void); void StartRegiBattle(void); -u8 BattleSetup_GetEnvironmentId(void); -u8 GetWildBattleTransition(void); -u8 GetTrainerBattleTransition(void); -u8 GetSpecialBattleTransition(s32 id); +enum BattleEnvironments BattleSetup_GetEnvironmentId(void); +enum BattleTransition GetWildBattleTransition(void); +enum BattleTransition GetTrainerBattleTransition(void); +enum BattleTransition GetSpecialBattleTransition(enum BattleTransitionGroup id); void ChooseStarter(void); void ResetTrainerOpponentIds(void); void SetMapVarsToTrainerA(void); @@ -73,6 +74,7 @@ void ConfigureAndSetUpOneTrainerBattle(u8 trainerObjEventId, const u8 *trainerSc void ConfigureTwoTrainersBattle(u8 trainerObjEventId, const u8 *trainerScript); void SetUpTwoTrainersBattle(void); bool32 GetTrainerFlagFromScriptPointer(const u8 *data); +bool32 GetRematchFromScriptPointer(const u8 *data); void SetTrainerFacingDirection(void); u8 GetTrainerBattleMode(void); bool8 GetTrainerFlag(void); @@ -90,12 +92,14 @@ const u8 *GetTrainerALoseText(void); const u8 *GetTrainerBLoseText(void); const u8 *GetTrainerWonSpeech(void); void UpdateRematchIfDefeated(s32 rematchTableId); +void ClearCurrentTrainerWantRematchVsSeeker(void); void IncrementRematchStepCounter(void); void TryUpdateRandomTrainerRematches(u16 mapGroup, u16 mapNum); bool32 DoesSomeoneWantRematchIn(u16 mapGroup, u16 mapNum); bool32 IsRematchTrainerIn(u16 mapGroup, u16 mapNum); u16 GetLastBeatenRematchTrainerId(u16 trainerId); bool8 ShouldTryRematchBattle(void); +bool8 ShouldTryRematchBattleForTrainerId(u16 trainerId); bool8 IsTrainerReadyForRematch(void); void ShouldTryGetTrainerScript(void); u16 CountBattledRematchTeams(u16 trainerId); diff --git a/include/battle_terastal.h b/include/battle_terastal.h index 6b5c38546346..6bfb74986a9f 100644 --- a/include/battle_terastal.h +++ b/include/battle_terastal.h @@ -4,11 +4,11 @@ void ActivateTera(u32 battler); void ApplyBattlerVisualsForTeraAnim(u32 battler); bool32 CanTerastallize(u32 battler); -u32 GetBattlerTeraType(u32 battler); -void ExpendTypeStellarBoost(u32 battler, u32 type); -bool32 IsTypeStellarBoosted(u32 battler, u32 type); -uq4_12_t GetTeraMultiplier(u32 battler, u32 type); +enum Type GetBattlerTeraType(u32 battler); +void ExpendTypeStellarBoost(u32 battler, enum Type type); +bool32 IsTypeStellarBoosted(u32 battler, enum Type type); +uq4_12_t GetTeraMultiplier(struct DamageContext *ctx); -u16 GetTeraTypeRGB(u32 type); +u16 GetTeraTypeRGB(enum Type type); #endif diff --git a/include/battle_tower.h b/include/battle_tower.h index dc118d0f2172..5887c07d9bc9 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -49,7 +49,7 @@ void SetEReaderTrainerGfxId(void); u16 GetBattleFacilityTrainerGfxId(u16 trainerId); void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm); u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); -u8 GetFrontierOpponentClass(u16 trainerId); +enum TrainerClassID GetFrontierOpponentClass(u16 trainerId); void GetFrontierTrainerName(u8 *dst, u16 trainerId); void FillFrontierTrainerParty(u8 monsCount); void FillFrontierTrainersParties(u8 monsCount); @@ -60,7 +60,7 @@ void CalcEmeraldBattleTowerChecksum(struct EmeraldBattleTowerRecord *record); void CalcRubyBattleTowerChecksum(struct RSBattleTowerRecord *record); u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode); u8 GetEreaderTrainerFrontSpriteId(void); -u8 GetEreaderTrainerClassId(void); +enum TrainerClassID GetEreaderTrainerClassId(void); void GetEreaderTrainerName(u8 *dst); void ValidateEReaderTrainer(void); void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer); diff --git a/include/battle_transition.h b/include/battle_transition.h index 8bc80dc642ba..fcfe42fde84a 100644 --- a/include/battle_transition.h +++ b/include/battle_transition.h @@ -10,7 +10,8 @@ void GetBg0TilesDst(u16 **tilemap, u16 **tileset); extern const struct SpritePalette gSpritePalette_Pokeball; -enum { +enum MugshotColor +{ MUGSHOT_COLOR_NONE, MUGSHOT_COLOR_PURPLE, MUGSHOT_COLOR_GREEN, @@ -20,7 +21,8 @@ enum { MUGSHOT_COLOR_COUNT }; -enum { +enum BattleTransition +{ B_TRANSITION_BLUR, B_TRANSITION_SWIRL, B_TRANSITION_SHUFFLE, @@ -63,7 +65,8 @@ enum { }; // IDs for GetSpecialBattleTransition -enum { +enum BattleTransitionGroup +{ B_TRANSITION_GROUP_B_TOWER, B_TRANSITION_GROUP_B_DOME = 3, B_TRANSITION_GROUP_B_PALACE, diff --git a/include/battle_util.h b/include/battle_util.h index 2ce91c3f254a..9ebc83795279 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -3,6 +3,7 @@ #include "move.h" #include "constants/battle_string_ids.h" +#include "constants/hold_effects.h" #define MOVE_LIMITATION_ZEROMOVE (1 << 0) #define MOVE_LIMITATION_PP (1 << 1) @@ -23,17 +24,12 @@ #define MOVE_LIMITATION_PLACEHOLDER (1 << 15) #define MOVE_LIMITATIONS_ALL 0xFFFF -enum NonVolatileStatus +// Switches between simulated battle calc and actual battle combat +enum FunctionCallOption { - STATUS_CHECK_TRIGGER, - STATUS_RUN_SCRIPT, -}; - -enum AbilityEffectOptions -{ - ABILITY_CHECK_TRIGGER, - ABILITY_CHECK_TRIGGER_AI, - ABILITY_RUN_SCRIPT, + CHECK_TRIGGER, // Check the function without running scripts / setting any flags. + AI_CHECK, // Check the function without running scripts / setting any flags. Same as CHECK_TRIGGER but only used when additional data has to be fetched during ai calcs + RUN_SCRIPT, // Used during actual combat where a script has to be run / flags need to be set }; enum MoveAbsorbed @@ -44,44 +40,31 @@ enum MoveAbsorbed MOVE_ABSORBED_BY_BOOST_FLASH_FIRE, }; -enum { +enum FieldEffectCases +{ + FIELD_EFFECT_TRAINER_STATUSES, + FIELD_EFFECT_OVERWORLD_TERRAIN, + FIELD_EFFECT_OVERWORLD_WEATHER, +}; + +enum AbilityEffect +{ ABILITYEFFECT_ON_SWITCHIN, ABILITYEFFECT_ENDTURN, ABILITYEFFECT_MOVE_END_ATTACKER, + ABILITYEFFECT_COLOR_CHANGE, // Color Change, Berserk, Anger Shell ABILITYEFFECT_MOVE_END, ABILITYEFFECT_IMMUNITY, ABILITYEFFECT_SYNCHRONIZE, ABILITYEFFECT_ATK_SYNCHRONIZE, ABILITYEFFECT_MOVE_END_OTHER, ABILITYEFFECT_NEUTRALIZINGGAS, - ABILITYEFFECT_FIELD_SPORT, // Only used if B_SPORT_TURNS >= GEN_6 + ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN, ABILITYEFFECT_ON_WEATHER, ABILITYEFFECT_ON_TERRAIN, - ABILITYEFFECT_SWITCH_IN_TERRAIN, - ABILITYEFFECT_SWITCH_IN_WEATHER, ABILITYEFFECT_OPPORTUNIST, - ABILITYEFFECT_SWITCH_IN_STATUSES, -}; - -// Special cases -#define ABILITYEFFECT_MUD_SPORT 252 // Only used if B_SPORT_TURNS >= GEN_6 -#define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS >= GEN_6 - -// For the first argument of ItemBattleEffects, to deteremine which block of item effects to try -enum ItemCaseId -{ - ITEMEFFECT_NONE, - ITEMEFFECT_ON_SWITCH_IN, - ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN, - ITEMEFFECT_NORMAL, - ITEMEFFECT_TRY_HEALING, - ITEMEFFECT_MOVE_END, - ITEMEFFECT_KINGSROCK, - ITEMEFFECT_TARGET, - ITEMEFFECT_ORBS, - ITEMEFFECT_LIFEORB_SHELLBELL, - ITEMEFFECT_USE_LAST_ITEM, // move end effects for just the battler, not whole field - ITEMEFFECT_STATS_CHANGED, // For White Herb and Eject Pack + ABILITYEFFECT_OPPORTUNIST_FIRST_TURN, + ABILITYEFFECT_ON_SWITCHIN_IMMUNITIES, }; enum ItemEffect @@ -108,47 +91,50 @@ enum ItemEffect // for Natural Gift and Fling struct TypePower { - u8 type; + enum Type type; u8 power; u16 effect; }; -enum +enum MoveSuccessOrder { - CANCELLER_FLAGS, - CANCELLER_STANCE_CHANGE_1, - CANCELLER_SKY_DROP, - CANCELLER_RECHARGE, - CANCELLER_ASLEEP, - CANCELLER_FROZEN, - CANCELLER_OBEDIENCE, - CANCELLER_TRUANT, - CANCELLER_FLINCH, - CANCELLER_IN_LOVE, - CANCELLER_DISABLED, - CANCELLER_HEAL_BLOCKED, - CANCELLER_GRAVITY, - CANCELLER_THROAT_CHOP, - CANCELLER_TAUNTED, - CANCELLER_IMPRISONED, - CANCELLER_CONFUSED, - CANCELLER_PARALYSED, - CANCELLER_BIDE, - CANCELLER_THAW, - CANCELLER_STANCE_CHANGE_2, - CANCELLER_WEATHER_PRIMAL, - CANCELLER_DYNAMAX_BLOCKED, - CANCELLER_POWDER_STATUS, - CANCELLER_PROTEAN, - CANCELLER_PSYCHIC_TERRAIN, - CANCELLER_EXPLODING_DAMP, - CANCELLER_MULTIHIT_MOVES, - CANCELLER_Z_MOVES, - CANCELLER_MULTI_TARGET_MOVES, - CANCELLER_END, + CANCELER_STANCE_CHANGE_1, + CANCELER_CLEAR_FLAGS, + CANCELER_SKY_DROP, + CANCELER_RECHARGE, + CANCELER_ASLEEP_OR_FROZEN, + CANCELER_POWER_POINTS, + CANCELER_OBEDIENCE, + CANCELER_TRUANT, + CANCELER_FLINCH, + CANCELER_DISABLED, + CANCELER_VOLATILE_BLOCKED, // Gravity / Heal Block / Throat Chop + CANCELER_TAUNTED, + CANCELER_IMPRISONED, + CANCELER_CONFUSED, + CANCELER_PARALYZED, + CANCELER_INFATUATION, + CANCELER_BIDE, + CANCELER_Z_MOVES, + CANCELER_CHOICE_LOCK, + CANCELER_CALLSUBMOVE, + CANCELER_THAW, + CANCELER_STANCE_CHANGE_2, + CANCELER_ATTACKSTRING, + CANCELER_PPDEDUCTION, + CANCELER_WEATHER_PRIMAL, + CANCELER_MOVE_FAILURE, + CANCELER_POWDER_STATUS, + CANCELER_PRIORITY_BLOCK, + CANCELER_PROTEAN, + CANCELER_EXPLODING_DAMP, + CANCELER_MULTIHIT_MOVES, + CANCELER_MULTI_TARGET_MOVES, + CANCELER_END, }; -enum { +enum Obedience +{ OBEYS, DISOBEYS_LOAFS, DISOBEYS_HITS_SELF, @@ -157,20 +143,48 @@ enum { DISOBEYS_RANDOM_MOVE, }; +enum MoveCanceler +{ + MOVE_STEP_SUCCESS, + MOVE_STEP_BREAK, // Breaks out of the function to run a script + MOVE_STEP_FAILURE, // Same as break but breaks out of it due to move failure and jumps to script that handles the failure + MOVE_STEP_REMOVES_STATUS, +}; + extern const struct TypePower gNaturalGiftTable[]; -struct DamageCalculationData +struct DamageContext { u32 battlerAtk:3; u32 battlerDef:3; u32 move:16; - u32 moveType:5; + enum Type moveType:5; u32 isCrit:1; u32 randomFactor:1; u32 updateFlags:1; - u32 padding:2; + u32 isAnticipation:1; + u32 isSelfInflicted:1; + u32 weather:16; + u32 fixedBasePower:8; + u32 padding2:8; + u32 chosenMove:16; // May be different to 'move', e.g. for Z moves. + u32 padding3:16; + uq4_12_t typeEffectivenessModifier; + enum Ability abilityAtk; + enum Ability abilityDef; + enum HoldEffect holdEffectAtk; + enum HoldEffect holdEffectDef; +}; + +struct BattleContext +{ + u32 battlerAtk:3; + u32 battlerDef:3; + u32 currentMove:16; + u32 padding:10; + enum Ability abilities[MAX_BATTLERS_COUNT]; + enum HoldEffect holdEffects[MAX_BATTLERS_COUNT]; }; -STATIC_ASSERT(sizeof(struct DamageCalculationData) <= 4, StructExceedsFourBytes); enum SleepClauseBlock { @@ -181,7 +195,7 @@ enum SleepClauseBlock enum SkyDropState { SKY_DROP_IGNORE, - SKY_DROP_ATTACKCANCELLER_CHECK, + SKY_DROP_ATTACKCANCELER_CHECK, SKY_DROP_GRAVITY_ON_AIRBORNE, SKY_DROP_CANCEL_MULTI_TURN_MOVES, SKY_DROP_STATUS_YAWN, @@ -191,9 +205,17 @@ enum SkyDropState #define SKY_DROP_NO_TARGET 0xFF #define SKY_DROP_RELEASED_TARGET 0xFE +enum EjectPackTiming +{ + FIRST_TURN, + END_TURN, + OTHER, +}; + void HandleAction_ThrowBall(void); u32 GetCurrentBattleWeather(void); bool32 EndOrContinueWeather(void); +bool32 IsUnnerveBlocked(u32 battler, u32 itemId); bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move); bool32 HandleMoveTargetRedirection(void); void HandleAction_UseMove(void); @@ -216,70 +238,78 @@ void MarkBattlerForControllerExec(u32 battler); void MarkBattlerReceivedLinkData(u32 battler); const u8 *CancelMultiTurnMoves(u32 battler, enum SkyDropState skyDropState); bool32 WasUnableToUseMove(u32 battler); +bool32 IsLastMonToMove(u32 battler); +bool32 ShouldDefiantCompetitiveActivate(u32 battler, enum Ability ability); void PrepareStringBattle(enum StringID stringId, u32 battler); void ResetSentPokesToOpponentValue(void); void OpponentSwitchInResetSentPokesToOpponentValue(u32 battler); void UpdateSentPokesToOpponentValue(u32 battler); void BattleScriptPush(const u8 *bsPtr); void BattleScriptPushCursor(void); +void BattleScriptCall(const u8 *bsPtr); void BattleScriptPop(void); u32 TrySetCantSelectMoveBattleScript(u32 battler); -u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check); +u32 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check); bool32 AreAllMovesUnusable(u32 battler); u8 GetImprisonedMovesCount(u32 battler, u16 move); s32 GetDrainedBigRootHp(u32 battler, s32 hp); -bool32 IsMagicGuardProtected(u32 battler, u32 ability); +bool32 IsAbilityAndRecord(u32 battler, enum Ability battlerAbility, enum Ability abilityToCheck); u32 DoEndTurnEffects(void); bool32 HandleFaintedMonActions(void); void TryClearRageAndFuryCutter(void); -u32 AtkCanceller_MoveSuccessOrder(void); -void SetAtkCancellerForCalledMove(void); +enum MoveCanceler AtkCanceler_MoveSuccessOrder(struct BattleContext *ctx); bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2); -bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbility); -bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 abilityDef, u32 move, enum AbilityEffectOptions option); -bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType, enum AbilityEffectOptions option); -u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg); +bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, u32 ability); +bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag); +bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, u32 move, enum FunctionCallOption option); +bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef, u32 move, enum Type moveType, enum FunctionCallOption option); +bool32 TryFieldEffects(enum FieldEffectCases caseId); +u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ability, u32 special, u32 moveArg); bool32 TryPrimalReversion(u32 battler); bool32 IsNeutralizingGasOnField(void); -bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability); -u32 GetBattlerAbility(u32 battler); -u32 IsAbilityOnSide(u32 battler, u32 ability); -u32 IsAbilityOnOpposingSide(u32 battler, u32 ability); -u32 IsAbilityOnField(u32 ability); -u32 IsAbilityOnFieldExcept(u32 battler, u32 ability); +bool32 IsMoldBreakerTypeAbility(u32 battler, enum Ability ability); +u32 GetBattlerAbilityIgnoreMoldBreaker(u32 battler); +u32 GetBattlerAbilityNoAbilityShield(u32 battler); +u32 GetBattlerAbilityInternal(u32 battler, u32 ignoreMoldBreaker, u32 noAbilityShield); +enum Ability GetBattlerAbility(u32 battler); +u32 IsAbilityOnSide(u32 battler, enum Ability ability); +u32 IsAbilityOnOpposingSide(u32 battler, enum Ability ability); +u32 IsAbilityOnField(enum Ability ability); +u32 IsAbilityOnFieldExcept(u32 battler, enum Ability ability); u32 IsAbilityPreventingEscape(u32 battler); bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move); u32 GetProtectType(enum ProtectMethod method); bool32 CanBattlerEscape(u32 battler); // no ability check void BattleScriptExecute(const u8 *BS_ptr); void BattleScriptPushCursorAndCallback(const u8 *BS_ptr); -u32 ItemBattleEffects(enum ItemCaseId, u32 battler, bool32 moveTurn); void ClearVariousBattlerFlags(u32 battler); void HandleAction_RunBattleScript(void); u32 SetRandomTarget(u32 battler); u32 GetBattleMoveTarget(u16 move, u8 setTarget); u8 GetAttackerObedienceForAction(); -enum ItemHoldEffect GetBattlerHoldEffect(u32 battler, bool32 checkNegating); -enum ItemHoldEffect GetBattlerHoldEffectIgnoreAbility(u32 battler, bool32 checkNegating); -enum ItemHoldEffect GetBattlerHoldEffectInternal(u32 battler, bool32 checkNegating, bool32 checkAbility); +enum HoldEffect GetBattlerHoldEffect(u32 battler); +enum HoldEffect GetBattlerHoldEffectIgnoreAbility(u32 battler); +enum HoldEffect GetBattlerHoldEffectIgnoreNegation(u32 battler); +enum HoldEffect GetBattlerHoldEffectInternal(u32 battler, u32 ability); u32 GetBattlerHoldEffectParam(u32 battler); -bool32 IsMoveMakingContact(u32 move, u32 battlerAtk); -bool32 IsBattlerGrounded(u32 battler); +bool32 CanBattlerAvoidContactEffects(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum HoldEffect holdEffectAtk, u32 move); +bool32 IsMoveMakingContact(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum HoldEffect holdEffectAtk, u32 move); +bool32 IsBattlerGrounded(u32 battler, enum Ability ability, enum HoldEffect holdEffect); u32 GetMoveSlot(u16 *moves, u32 move); u32 GetBattlerWeight(u32 battler); u32 CalcRolloutBasePower(u32 battlerAtk, u32 basePower, u32 rolloutTimer); u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter); -s32 CalculateMoveDamage(struct DamageCalculationData *damageCalcData, u32 fixedBasePower); -s32 CalculateMoveDamageVars(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, - u32 weather, enum ItemHoldEffect holdEffectAtk, enum ItemHoldEffect holdEffectDef, u32 abilityAtk, u32 abilityDef); -s32 ApplyModifiersAfterDmgRoll(s32 dmg, struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityAtk, u32 abilityDef, enum ItemHoldEffect holdEffectAtk, enum ItemHoldEffect holdEffectDef); -uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u32 defAbility, bool32 recordAbilities); -uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); -uq4_12_t GetTypeModifier(u32 atkType, u32 defType); -uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, u8 moveType); +s32 CalculateMoveDamage(struct DamageContext *ctx); +s32 CalculateMoveDamageVars(struct DamageContext *ctx); +s32 DoFixedDamageMoveCalc(struct DamageContext *ctx); +s32 ApplyModifiersAfterDmgRoll(struct DamageContext *ctx, s32 dmg); +uq4_12_t CalcTypeEffectivenessMultiplier(struct DamageContext *ctx); +uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, enum Ability abilityDef); +uq4_12_t GetTypeModifier(enum Type atkType, enum Type defType); +uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, enum Type moveType); void UpdateMoveResultFlags(uq4_12_t modifier, u16 *resultFlags); s32 GetStealthHazardDamage(enum TypeSideHazard hazardType, u32 battler); -s32 GetStealthHazardDamageByTypesAndHP(enum TypeSideHazard hazardType, u8 type1, u8 type2, u32 maxHp); +s32 GetStealthHazardDamageByTypesAndHP(enum TypeSideHazard hazardType, enum Type type1, enum Type type2, u32 maxHp); bool32 CanMegaEvolve(u32 battler); bool32 CanUltraBurst(u32 battler); void ActivateMegaEvolution(u32 battler); @@ -288,41 +318,40 @@ bool32 IsBattlerMegaEvolved(u32 battler); bool32 IsBattlerPrimalReverted(u32 battler); bool32 IsBattlerUltraBursted(u32 battler); u16 GetBattleFormChangeTargetSpecies(u32 battler, enum FormChanges method); +bool32 TryRevertPartyMonFormChange(u32 partyIndex); bool32 TryBattleFormChange(u32 battler, enum FormChanges method); bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId); u32 GetBattlerVisualSpecies(u32 battler); -bool32 TryClearIllusion(u32 battler, u32 caseID); +bool32 TryClearIllusion(u32 battler, enum AbilityEffect caseID); u32 GetIllusionMonSpecies(u32 battler); struct Pokemon *GetIllusionMonPtr(u32 battler); void ClearIllusionMon(u32 battler); -u32 GetIllusionMonPartyId(struct Pokemon *party, struct Pokemon *mon, struct Pokemon *partnerMon); +u32 GetIllusionMonPartyId(struct Pokemon *party, struct Pokemon *mon, struct Pokemon *partnerMon, u32 battler); bool32 SetIllusionMon(struct Pokemon *mon, u32 battler); +u32 TryImmunityAbilityHealStatus(u32 battler, enum AbilityEffect caseID); bool32 ShouldGetStatBadgeBoost(u16 flagId, u32 battler); -u32 GetBattleMoveCategory(u32 move); +uq4_12_t GetBadgeBoostModifier(void); +enum DamageCategory GetBattleMoveCategory(u32 move); void SetDynamicMoveCategory(u32 battlerAtk, u32 battlerDef, u32 move); bool32 CanFling(u32 battler); bool32 IsTelekinesisBannedSpecies(u16 species); bool32 IsHealBlockPreventingMove(u32 battler, u32 move); bool32 IsBelchPreventingMove(u32 battler, u32 move); -bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId); +bool32 HasEnoughHpToEatBerry(u32 battler, enum Ability ability, u32 hpFraction, u32 itemId); bool32 IsPartnerMonFromSameTrainer(u32 battler); -u8 GetCategoryBasedOnStats(u32 battler); +enum DamageCategory GetCategoryBasedOnStats(u32 battler); void SetShellSideArmCategory(void); bool32 MoveIsAffectedBySheerForce(u32 move); -bool32 TestIfSheerForceAffected(u32 battler, u16 move); +bool32 IsSheerForceAffected(u16 move, enum Ability ability); void TryRestoreHeldItems(void); bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item); void TrySaveExchangedItem(u32 battler, u16 stolenItem); bool32 IsPartnerMonFromSameTrainer(u32 battler); -enum ItemEffect TryHandleSeed(u32 battler, u32 terrainFlag, u32 statId, u32 itemId, enum ItemCaseId caseID); bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes); void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast); -bool32 CompareStat(u32 battler, u8 statId, u8 cmpTo, u8 cmpKind); -bool32 TryRoomService(u32 battler); -void BufferStatChange(u32 battler, u8 statId, enum StringID stringId); +bool32 CompareStat(u32 battler, enum Stat statId, u8 cmpTo, u8 cmpKind, enum Ability ability); bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget); -u16 GetUsedHeldItem(u32 battler); bool32 PickupHasValidTarget(u32 battler); bool32 CantPickupItem(u32 battler); bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags); @@ -341,48 +370,74 @@ bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef); bool32 TargetFullyImmuneToCurrMove(u32 battlerAtk, u32 battlerDef); bool32 MoodyCantRaiseStat(u32 stat); bool32 MoodyCantLowerStat(u32 stat); +bool32 IsBattlerTerrainAffected(u32 battler, enum Ability ability, enum HoldEffect holdEffect, u32 terrainFlag); +u32 GetHighestStatId(u32 battler); +u32 GetParadoxHighestStatId(u32 battler); +u32 GetParadoxBoostedStatId(u32 battler); -bool32 CanBeSlept(u32 battlerAtk, u32 battlerDef, u32 abilityDef, enum SleepClauseBlock isBlockedBySleepClause); -bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 abilityDef); -bool32 CanBeBurned(u32 battlerAtk, u32 battlerDef, u32 ability); -bool32 CanBeParalyzed(u32 battlerAtk, u32 battlerDef, u32 abilityDef); -bool32 CanBeFrozen(u32 battlerAtk, u32 battlerDef, u32 abilityDef); -bool32 CanGetFrostbite(u32 battlerAtk, u32 battlerDef, u32 abilityDef); -bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 abilityDef, enum MoveEffects secondaryMoveEffect, enum NonVolatileStatus option); +bool32 CanBeSlept(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef, enum SleepClauseBlock isBlockedBySleepClause); +bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef); +bool32 CanBeBurned(u32 battlerAtk, u32 battlerDef, enum Ability ability); +bool32 CanBeParalyzed(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef); +bool32 CanBeFrozen(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef); +bool32 CanGetFrostbite(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef); +bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, enum MoveEffect secondaryMoveEffect, enum FunctionCallOption option); bool32 CanBeConfused(u32 battler); -bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag); u32 GetBattlerAffectionHearts(u32 battler); void TryToRevertMimicryAndFlags(void); bool32 BattleArenaTurnEnd(void); u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc); +bool32 BattlerHasCopyableChanges(u32 battler); bool32 ChangeTypeBasedOnTerrain(u32 battler); void RemoveConfusionStatus(u32 battler); u8 GetBattlerGender(u32 battler); bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2); bool32 AreBattlersOfSameGender(u32 battler1, u32 battler2); -u32 CalcSecondaryEffectChance(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect); -bool32 MoveEffectIsGuaranteed(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect); -void GetBattlerTypes(u32 battler, bool32 ignoreTera, u32 types[static 3]); -u32 GetBattlerType(u32 battler, u32 typeIndex, bool32 ignoreTera); +u32 CalcSecondaryEffectChance(u32 battler, enum Ability battlerAbility, const struct AdditionalEffect *additionalEffect); +bool32 MoveEffectIsGuaranteed(u32 battler, enum Ability battlerAbility, const struct AdditionalEffect *additionalEffect); +void GetBattlerTypes(u32 battler, bool32 ignoreTera, enum Type types[static 3]); +enum Type GetBattlerType(u32 battler, u32 typeIndex, bool32 ignoreTera); bool8 CanMonParticipateInSkyBattle(struct Pokemon *mon); bool8 IsMonBannedFromSkyBattles(u16 species); -void RemoveBattlerType(u32 battler, u8 type); -u32 GetBattleMoveType(u32 move); +void RemoveBattlerType(u32 battler, enum Type type); +enum Type GetBattleMoveType(u32 move); void TryActivateSleepClause(u32 battler, u32 indexInParty); void TryDeactivateSleepClause(u32 battlerSide, u32 indexInParty); bool32 IsSleepClauseActiveForSide(u32 battlerSide); bool32 IsSleepClauseEnabled(); void ClearDamageCalcResults(void); u32 DoesDestinyBondFail(u32 battler); -bool32 IsMoveEffectBlockedByTarget(u32 ability); +bool32 IsMoveEffectBlockedByTarget(enum Ability ability); bool32 IsPursuitTargetSet(void); void ClearPursuitValuesIfSet(u32 battler); void ClearPursuitValues(void); bool32 HasWeatherEffect(void); -u32 RestoreWhiteHerbStats(u32 battler); bool32 IsFutureSightAttackerInParty(u32 battlerAtk, u32 battlerDef, u32 move); bool32 HadMoreThanHalfHpNowDoesnt(u32 battler); +void ChooseStatBoostAnimation(u32 battler); void UpdateStallMons(void); -bool32 TryRestoreHPBerries(u32 battler, enum ItemCaseId caseId); +bool32 TrySwitchInEjectPack(enum EjectPackTiming timing); +u32 GetBattlerVolatile(u32 battler, enum Volatile _volatile); +void SetMonVolatile(u32 battler, enum Volatile _volatile, u32 newValue); +bool32 ItemHealMonVolatile(u32 battler, u16 itemId); +void PushHazardTypeToQueue(u32 side, enum Hazards hazardType); +bool32 IsHazardOnSide(u32 side, enum Hazards hazardType); +bool32 AreAnyHazardsOnSide(u32 side); +void RemoveAllHazardsFromField(u32 side); +bool32 IsHazardOnSideAndClear(u32 side, enum Hazards hazardType); +void RemoveHazardFromField(u32 side, enum Hazards hazardType); +bool32 CanMoveSkipAccuracyCalc(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, u32 move, enum FunctionCallOption option); +u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, enum Ability atkAbility, enum Ability defAbility, enum HoldEffect atkHoldEffect, enum HoldEffect defHoldEffect); +bool32 IsSemiInvulnerable(u32 battler, enum SemiInvulnerableExclusion excludeCommander); +bool32 BreaksThroughSemiInvulnerablity(u32 battler, u32 move); +bool32 HasPartnerTrainer(u32 battler); +bool32 IsAffectedByPowderMove(u32 battler, u32 ability, enum HoldEffect holdEffect); +u32 GetNaturePowerMove(u32 battler); +u32 GetNaturePowerMove(u32 battler); +void RemoveAbilityFlags(u32 battler); +bool32 IsDazzlingAbility(enum Ability ability); +bool32 IsAllowedToUseBag(void); +bool32 IsAnyTargetTurnDamaged(u32 battlerAtk); +bool32 IsMimikyuDisguised(u32 battler); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/config/ai.h b/include/config/ai.h index db98f72ee91c..5a7ce4078312 100644 --- a/include/config/ai.h +++ b/include/config/ai.h @@ -13,8 +13,9 @@ // AI smart switching chances; if you want more complex behaviour, modify GetSwitchChance #define SHOULD_SWITCH_ABSORBS_MOVE_PERCENTAGE 100 +#define SHOULD_SWITCH_ABSORBS_HIDDEN_POWER_PERCENTAGE 50 #define SHOULD_SWITCH_TRAPPER_PERCENTAGE 100 -#define SHOULD_SWITCH_FREE_TURN_PERCENTAGE 100 +#define SHOULD_SWITCH_FREE_TURN_PERCENTAGE 50 #define STAY_IN_ABSORBING_PERCENTAGE 66 // Chance to stay in if outgoing mon has super effective move against player, will prevent switching out for an absorber with this likelihood #define SHOULD_SWITCH_HASBADODDS_PERCENTAGE 50 #define SHOULD_SWITCH_ENCORE_STATUS_PERCENTAGE 100 @@ -51,10 +52,16 @@ #define AI_GOOD_SCORE_THRESHOLD 100 // Move scores above this threshold are considered "good" when deciding switching // AI held item-based move scoring -#define LOW_ACCURACY_THRESHOLD 75 // Moves with accuracy equal OR below this value are considered low accuracy +#define LOW_ACCURACY_THRESHOLD 75 // Moves with accuracy equal OR below this value are considered low accuracy // AI move scoring #define STATUS_MOVE_FOCUS_PUNCH_CHANCE 50 // Chance the AI will use a status move if the player's best move is Focus Punch +#define BOOST_INTO_HAZE_CHANCE 0 // Chance the AI will use a stat boosting move if the player has used Haze +#define SHOULD_RECOVER_CHANCE 50 // Chance the AI will give recovery moves score increase if less than ENABLE_RECOVERY_THRESHOLD and in no immediate danger +#define ENABLE_RECOVERY_THRESHOLD 60 // HP percentage beneath which SHOULD_RECOVER_CHANCE is active +#define SUCKER_PUNCH_CHANCE 50 // Chance for the AI to not use Sucker Punch if the player has a status move +#define SUCKER_PUNCH_PREDICTION_CHANCE 50 // Additional chance for the AI to not use Sucker Punch if actively predicting a status move if SUCKER_PUNCH_CHANCE fails +#define PRIORITIZE_LAST_CHANCE_CHANCE 50 // Chance the AI will prioritize Last Chance (priority move in the face of being outsped and KO'd) over Slow KO // AI damage calc considerations #define RISKY_AI_CRIT_STAGE_THRESHOLD 2 // Stat stages at which Risky will assume it gets a crit @@ -64,14 +71,48 @@ #define PREDICT_SWITCH_CHANCE 50 #define PREDICT_MOVE_CHANCE 100 -// AI PP Stall detection chance per roll -#define PP_STALL_DISREGARD_MOVE_PERCENTAGE 50 -// Score reduction if any roll for PP stall detection passes -#define PP_STALL_SCORE_REDUCTION 20 +// AI Terastalization chances +#define AI_CONSERVE_TERA_CHANCE_PER_MON 10 // Chance for AI with smart tera flag to decide not to tera before considering defensive benefit is this*(X-1), where X is the number of alive pokemon that could tera +#define AI_TERA_PREDICT_CHANCE 40 // Chance for AI with smart tera flag to tera in the situation where tera would save it from a KO, but could be punished by a KO from a different move. -// AI's acceptable number of hits to KO the partner via friendly fire in a double battle. -#define FRIENDLY_FIRE_RISKY_THRESHOLD 2 -#define FRIENDLY_FIRE_NORMAL_THRESHOLD 3 -#define FRIENDLY_FIRE_CONSERVATIVE_THRESHOLD 4 +// AI_FLAG_PP_STALL_PREVENTION settings +#define PP_STALL_DISREGARD_MOVE_PERCENTAGE 50 // Detection chance per roll +#define PP_STALL_SCORE_REDUCTION 20 // Score reduction if any roll for PP stall detection passes + +// AI_FLAG_ASSUME_STAB settings +#define ASSUME_STAB_SEES_ABILITY FALSE // Flag also gives omniscience for player's ability. Can use AI_FLAG_WEIGH_ABILITY_PREDICTION instead for smarter prediction without omniscience. + +// AI_FLAG_ASSUME_STATUS_MOVES settings +#define ASSUME_STATUS_MOVES_HAS_TUNING TRUE // Flag has varying rates for different kinds of status move. + // Setting to false also means it will not alert on Fake Out or Super Fang. +#define ASSUME_STATUS_HIGH_ODDS 90 // Chance for AI to see extremely likely moves for a pokemon to have, like Spore +#define ASSUME_STATUS_MEDIUM_ODDS 70 // Chance for AI to see moderately likely moves for a pokemon to have, like Protect +#define ASSUME_STATUS_LOW_ODDS 40 // Chance for AI to see niche moves a pokemon may have but probably won't, like Entrainment +#define ASSUME_ALL_STATUS_ODDS 25 // Chance for the AI to see any kind of status move. + +// AI_FLAG_SMART_SWITCHING settings +#define SMART_SWITCHING_OMNISCIENT FALSE // AI will use omniscience for switching calcs, regardless of omniscience setting otherwise + +// Configurations specifically for AI_FLAG_DOUBLE_BATTLE. +#define FRIENDLY_FIRE_RISKY_THRESHOLD 2 // AI_FLAG_RISKY acceptable number of hits to KO the partner via friendly fire +#define FRIENDLY_FIRE_NORMAL_THRESHOLD 3 // typical acceptable number of hits to KO the partner via friendly fire +#define FRIENDLY_FIRE_CONSERVATIVE_THRESHOLD 4 // AI_FLAG_CONSERVATIVE acceptable number of hits to KO the partner via friendly fire +// Counterplay on the assumption of opponents Protecting. +#define DOUBLE_TRICK_ROOM_ON_LAST_TURN_CHANCE 35 // both pokemon use Trick Room on turn Trick Room expires in the hopes both opponents used Protect to stall, getting a free refresh on the timer +#define TAILWIND_IN_TRICK_ROOM_CHANCE 35 // use Tailwind on turn Trick Room expires in the hopes both opponents used Protect to stall + +#define AI_FLAG_ATTACKS_PARTNER_FOCUSES_PARTNER FALSE // if TRUE, AI_FLAG_ATTACKS_PARTNER prefers attacking the partner over the ally. + // This is treated as true regardless during wild battles with AI. + +// AI's desired stat changes for Guard Split and Power Split, treated as % +#define GUARD_SPLIT_ALLY_PERCENTAGE 200 +#define GUARD_SPLIT_ENEMY_PERCENTAGE 50 +#define POWER_SPLIT_ALLY_PERCENTAGE 150 +#define POWER_SPLIT_ENEMY_PERCENTAGE 50 + +// HP thresholds to use a status z-move. +#define Z_EFFECT_FOLLOW_ME_THRESHOLD 30 +#define Z_EFFECT_RESTORE_HP_LOWER_THRESHOLD ENABLE_RECOVERY_THRESHOLD // threshold used for moves you could conceivably use more than once +#define Z_EFFECT_RESTORE_HP_HIGHER_THRESHOLD 90 // these moves are one-time use or drop your HP #endif // GUARD_CONFIG_AI_H diff --git a/include/config/battle.h b/include/config/battle.h index f4a14f4df461..dd72cdbf1b3f 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -19,7 +19,7 @@ #define B_LEVEL_UP_NOTIFICATION GEN_LATEST // In Gen9+, if the PokΓ©mon gets enough experience to level up multiple times, the message is only displayed once. // Stat settings -#define B_BADGE_BOOST GEN_LATEST // In Gen4+, Gym Badges no longer boost a PokΓ©mon's stats. +#define B_BADGE_BOOST GEN_LATEST // In Gen4+, Gym Badges no longer boost a PokΓ©mon's stats. (Gen2 does not include the additional boost to the type matching the gym the badge is from) #define B_FRIENDSHIP_BOOST FALSE // In LGPE only, all stats except HP are boosted up to 10% based on Friendship. Unlike B_BADGE_BOOST, these boosts are accounted when calculating base stats. #define B_MAX_LEVEL_EV_GAINS GEN_LATEST // In Gen5+, Lv100 PokΓ©mon can obtain Effort Values normally. #define B_RECALCULATE_STATS GEN_LATEST // In Gen5+, the stats of the PokΓ©mon who participate in battle are recalculated at the end of each battle. @@ -28,7 +28,7 @@ #define B_BURN_DAMAGE GEN_LATEST // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th. Also applies to Frostbite. #define B_BURN_FACADE_DMG GEN_LATEST // In Gen6+, burn's effect of lowering the Attack stat no longer applies to Facade. #define B_BINDING_DAMAGE GEN_LATEST // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.) -#define B_PSYWAVE_DMG GEN_LATEST // Psywave's damage formula. See Cmd_psywavedamageeffect. +#define B_PSYWAVE_DMG GEN_LATEST // Psywave's damage formula. See DoFixedDamageMoveCalc for details. #define B_PAYBACK_SWITCH_BOOST GEN_LATEST // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled. #define B_HIDDEN_POWER_DMG GEN_LATEST // In Gen6+, Hidden Power's base power was set to always be 60. Before, it was determined by the mon's IVs. #define B_ROUGH_SKIN_DMG GEN_LATEST // In Gen4+, Rough Skin contact damage is 1/8th of max HP instead of 1/16th. This will also affect Iron Barbs. @@ -111,7 +111,7 @@ #define B_BURN_HIT_THAW GEN_LATEST // In Gen6+, damaging moves with a chance of burn will thaw the target, regardless if they're fire-type moves or not. #define B_HEALING_WISH_SWITCH GEN_LATEST // In Gen5+, the mon receiving Healing Wish is sent out at the end of the turn. // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. -#define B_DEFOG_EFFECT_CLEARING GEN_LATEST // In Gen6+, Defog clears Spikes, Toxic Spikes, Stealth Rock and Sticky Web from both sides. In Gen8+, Defog also clears active Terrain. +#define B_DEFOG_EFFECT_CLEARING GEN_LATEST // In Gen5+, Defog does not lower Evasion of target behind Subsitute. In Gen6+, Defog clears Spikes, Toxic Spikes, Stealth Rock and Sticky Web from both sides. In Gen8+, Defog also clears active Terrain. #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. #define B_TRANSFORM_SHINY GEN_LATEST // In Gen4+, Transform will copy the shiny state of the opponent instead of maintaining its own shiny state. #define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms. @@ -129,6 +129,11 @@ #define B_DESTINY_BOND_FAIL GEN_LATEST // In Gen7+, Destiny Bond fails if used repeatedly. #define B_PURSUIT_TARGET GEN_LATEST // In Gen4+, Pursuit attacks a switching opponent even if they weren't targeting them. Before Gen4, Pursuit only attacks a switching opponent that it originally targeted. #define B_SKIP_RECHARGE GEN_LATEST // In Gen1, recharging moves such as Hyper Beam skip the recharge if the target gets KO'd +#define B_ENCORE_TARGET GEN_LATEST // In Gen5+, encored moves are allowed to choose a target +#define B_TIME_OF_DAY_HEALING_MOVES GEN_LATEST // In Gen2, Morning Sun, Moonlight, and Synthesis heal twice as much HP based off the time of day. Also changes how much they heal. Evening affects Moonlight. + // If OW_TIMES_OF_DAY is set to Gen 3, then Morning Sun is boosted during the day. +#define B_DREAM_EATER_LIQUID_OOZE GEN_LATEST // In Gen5+, Dream Eater is affected by Liquid Ooze. +#define B_DREAM_EATER_SUBSTITUTE GEN_LATEST // In Gen5+, Dream Eater can successfully hit and drain from a Substitute. // Ability settings #define B_GALE_WINGS GEN_LATEST // In Gen7+ requires full HP to trigger. @@ -161,10 +166,10 @@ #define B_MAGIC_GUARD GEN_LATEST // In Gen4 only, Magic Guard ignores immobilization caused by paralysis #define B_BATTLE_BOND GEN_LATEST // In Gen9+, Battle Bond increases Atk, SpAtk and Speed by one stage, once per battle #define B_ATE_MULTIPLIER GEN_LATEST // In Gen7+, -ate abilities (Aerilate, Galvanize, Normalize, Pixilate, Refrigerate) multiply damage by 1.2. Otherwise, it's 1.3, except Normalize which has no multiplier. +#define B_DEFIANT_STICKY_WEB GEN_LATEST // In Gen9+, Defiant activates on Sticky Web regardless of who set it up. In Gen8, Defiant does not activate on Sticky Web set up by an ally after Court Change swaps its side. +#define B_POWDER_OVERCOAT GEN_LATEST // In Gen6+, Overcoat blocks powder and spore moves from affecting the user. // Item settings -#define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore HP activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. -#define B_BERRIES_INSTANT GEN_LATEST // In Gen4+, most berries activate on battle start/switch-in if applicable. In Gen3, they only activate either at the move end or turn end. #define B_CONFUSE_BERRIES_HEAL GEN_LATEST // Before Gen7, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP. #define B_X_ITEMS_BUFF GEN_LATEST // In Gen7+, the X Items raise a stat by 2 stages instead of 1. #define B_MENTAL_HERB GEN_LATEST // In Gen5+, the Mental Herb cures Taunt, Encore, Torment, Heal Block, and Disable in addition to Infatuation from before. @@ -203,7 +208,6 @@ #define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water. #define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles. #define B_SMART_WILD_AI_FLAG 0 // If this flag is set, wild PokΓ©mon will become smart, with all AI flags enabled. -#define B_FLAG_NO_BAG_USE 0 // If this flag is set, the ability to use the bag in battle is disabled. #define B_FLAG_NO_CATCHING 0 // If this flag is set, the ability to catch wild PokΓ©mon is disabled. #define B_FLAG_NO_RUNNING 0 // If this flag is set, the ability to escape from wild battles is disabled. Also makes Roar/Whirlwind and Teleport (under Gen8) fail. #define B_FLAG_AI_VS_AI_BATTLE 0 // If this flag is set, the player's mons will be controlled by the ai next battles. @@ -225,6 +229,13 @@ #define B_VAR_DIFFICULTY 0 // If not 0, you can use this var to control which difficulty version of a Trainer is loaded. This should be manually set by the developer using Script_SetDifficulty AFTER NewGameInitData has run. +// No bag settings +#define NO_BAG_RESTRICTION 0 +#define NO_BAG_AGAINST_TRAINER 1 +#define NO_BAG_IN_BATTLE 2 + +#define B_VAR_NO_BAG_USE 0 // If 1, the ability to use the bag in battle is disabled in trainer battles. If 2, it is also disabled in wild battles. + // Sky Battles #define B_FLAG_SKY_BATTLE 0 // If this flag has a value, the player will be able to engage in scripted Sky Battles. #define B_VAR_SKY_BATTLE 0 // If this var has a value, the game will remember the positions of PokΓ©mon used in Sky Battles. @@ -258,32 +269,33 @@ #define B_TERRAIN_TYPE_BOOST GEN_LATEST // In Gen8, damage is boosted by 30% instead of 50%. #define B_SECRET_POWER_EFFECT GEN_LATEST // Secret Power's effects change depending on terrain and generation. See MOVE_EFFECT_SECRET_POWER's case in `SetMoveEffect`. #define B_SECRET_POWER_ANIMATION GEN_LATEST // Secret Power's animations change depending on terrain and generation. -#define B_NATURE_POWER_MOVES GEN_LATEST // Nature Power calls different moves depending on terrain and generation. See sNaturePowerMoves. +#define B_NATURE_POWER_MOVES GEN_LATEST // Nature Power calls different moves depending on terrain and generation. See gBattleEnvironmentInfo. #define B_CAMOUFLAGE_TYPES GEN_LATEST // Camouflage changes the user to different types depending on terrain and generation. See sTerrainToType. #define B_NEW_TERRAIN_BACKGROUNDS FALSE // If set to TRUE, uses new terrain backgrounds for Electric, Misty, Grassy and Psychic Terrain. // Interface settings -#define B_ABILITY_POP_UP TRUE // In Gen5+, the PokΓ©mon abilities are displayed in a pop-up, when they activate in battle. -#define B_FAST_INTRO_PKMN_TEXT TRUE // If set to TRUE, battle intro texts print at the same time as animation of a PokΓ©mon, as opposing to waiting for the animation to end. -#define B_FAST_INTRO_NO_SLIDE FALSE // If set to TRUE, the slide animation that happens at the beginning of the battle is skipped. -#define B_FAST_HP_DRAIN TRUE // If set to TRUE, HP bars will move faster. -#define B_FAST_EXP_GROW TRUE // If set to TRUE, EXP bars will move faster. -#define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 PokΓ©mon, will be shown before selecting a move. -#define B_SHOW_CATEGORY_ICON TRUE // If set to TRUE, it will show an icon in the summary and move relearner showing the move's category. -#define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations. -#define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles. -#define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option -#define B_RUN_TRAINER_BATTLE TRUE // If set to TRUE, players can run from Trainer battles. This is treated as a whiteout. -#define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu -#define B_SHOW_USELESS_Z_MOVE_INFO FALSE // If set to TRUE, Z-moves without additional effects like newer gen status moves will say "no additional effect" -#define B_ANIMATE_MON_AFTER_KO TRUE // If set to TRUE, if a PokΓ©mon on the opposite site faints, the non-fainted Pokemon will display a victory animation. -#define B_SHOW_DYNAMAX_MESSAGE FALSE // If set to TRUE, an additional battle message is shown after completing Dynamaxing/Gigantamaxing. +#define B_FAST_INTRO_PKMN_TEXT TRUE // If set to TRUE, battle intro texts print at the same time as animation of a PokΓ©mon, as opposing to waiting for the animation to end. +#define B_FAST_INTRO_NO_SLIDE FALSE // If set to TRUE, the slide animation that happens at the beginning of the battle is skipped. +#define B_FAST_HP_DRAIN TRUE // If set to TRUE, HP bars will move faster. +#define B_FAST_EXP_GROW TRUE // If set to TRUE, EXP bars will move faster. +#define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 PokΓ©mon, will be shown before selecting a move. +#define B_SHOW_CATEGORY_ICON TRUE // If set to TRUE, it will show an icon in the summary and move relearner showing the move's category. +#define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations. +#define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles. +#define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option +#define B_RUN_TRAINER_BATTLE TRUE // If set to TRUE, players can run from Trainer battles. This is treated as a whiteout. +#define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu +#define B_SHOW_USELESS_Z_MOVE_INFO FALSE // If set to TRUE, Z-moves without additional effects like newer gen status moves will say "no additional effect" +#define B_ANIMATE_MON_AFTER_KO TRUE // If set to TRUE, if a PokΓ©mon on the opposite site faints, the non-fainted Pokemon will display a victory animation. +#define B_ANIMATE_MON_AFTER_FAILED_POKEBALL TRUE // If set to TRUE, if a PokΓ©mon on the opposite side breaks out of a thrown PokΓ© Ball, the wild PokΓ©mon will display its animation. +#define B_SHOW_DYNAMAX_MESSAGE FALSE // If set to TRUE, an additional battle message is shown after completing Dynamaxing/Gigantamaxing. // Catching settings #define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc) -#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm. +#define B_CATCHING_CHARM_BOOST 100 // % boost in Critical Capture odds if player has the Catching Charm. #define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled. #define B_CRITICAL_CAPTURE_LOCAL_DEX TRUE // If set to FALSE, Critical Capture % is based off of the National Pokedex estimated by enabled generations. +#define B_CRITICAL_CAPTURE_IF_OWNED GEN_LATEST // In Gen9, a capture appear critical if the pokemon you are trying to catch already has a dex entry (has already been caught) #define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented #define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball. @@ -305,6 +317,7 @@ #define B_TOXIC_REVERSAL GEN_LATEST // In Gen5+, bad poison will change to regular poison at the end of battles. #define B_TRY_CATCH_TRAINER_BALL GEN_LATEST // In Gen4+, trying to catch a Trainer's PokΓ©mon does not consume the PokΓ© Ball. #define B_SLEEP_CLAUSE FALSE // Enables Sleep Clause all the time in every case, overriding B_FLAG_SLEEP_CLAUSE. Use that for modularity. +#define B_PARTNER_MONS_MARKED_SEEN FALSE // If TRUE, if your double battle partner sends out a PokΓ©mon you haven't encountered yet, it will be marked as SEEN in your PokΓ©dex. #define NUM_BEEPS_GEN_LATEST 4 // Loops 4 times #define NUM_BEEPS_GEN_3 -1 // Loops infinitely @@ -359,5 +372,7 @@ #define B_POOL_RULE_EXCLUDE_FORMS FALSE // Exclude different forms from the Species Clause #define B_POOL_RULE_ITEM_CLAUSE FALSE // Only allow each item to be picked once #define B_POOL_RULES_USE_ITEM_EXCLUSIONS FALSE // Exclude items listed in poolItemClauseExclusions +#define B_POOL_RULE_MEGA_STONE_CLAUSE FALSE // Pick only 1 mon with mega stone +#define B_POOL_RULE_Z_CRYSTAL_CLAUSE FALSE // Pick only 1 mon with Z-crystal #endif // GUARD_CONFIG_BATTLE_H diff --git a/include/config/contest.h b/include/config/contest.h new file mode 100644 index 000000000000..1307acc06faa --- /dev/null +++ b/include/config/contest.h @@ -0,0 +1,8 @@ +#ifndef GUARD_CONFIG_CONTEST_H +#define GUARD_CONFIG_CONTEST_H + +// Move data settings +#define C_UPDATED_MOVE_CATEGORIES GEN_LATEST // Updates contest category. +#define C_UPDATED_MOVE_EFFECTS GEN_LATEST // Updates contest effects. + +#endif // GUARD_CONFIG_CONTEST_H diff --git a/include/config/debug.h b/include/config/debug.h index 2446b9360c0b..7e28d335049a 100644 --- a/include/config/debug.h +++ b/include/config/debug.h @@ -2,16 +2,16 @@ #define GUARD_CONFIG_DEBUG_H // Overworld Debug -#define DEBUG_OVERWORLD_MENU TRUE // Enables an overworld debug menu to change flags, variables, giving pokemon and more, accessed by holding R and pressing START while in the overworld by default. +#define DEBUG_OVERWORLD_MENU DISABLED_ON_RELEASE // Enables an overworld debug menu to change flags, variables, giving pokemon and more, accessed by holding R and pressing START while in the overworld by default. #define DEBUG_OVERWORLD_HELD_KEYS (R_BUTTON) // The keys required to be held to open the debug menu. #define DEBUG_OVERWORLD_TRIGGER_EVENT pressedStartButton // The event that opens the menu when holding the key(s) defined in DEBUG_OVERWORLD_HELD_KEYS. #define DEBUG_OVERWORLD_IN_MENU FALSE // Replaces the overworld debug menu button combination with a start menu entry (above PokΓ©dex). // Battle Debug Menu -#define DEBUG_BATTLE_MENU TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button. +#define DEBUG_BATTLE_MENU DISABLED_ON_RELEASE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button. #define DEBUG_AI_DELAY_TIMER FALSE // If set to TRUE, displays the number of frames it takes for the AI to choose a move. Replaces the "What will PKMN do" text. Useful for devs or anyone who modifies the AI code and wants to see if it doesn't take too long to run. // PokΓ©mon Debug -#define DEBUG_POKEMON_SPRITE_VISUALIZER TRUE // Enables a debug menu for PokΓ©mon sprites and icons, accessed by pressing Select in the summary screen. +#define DEBUG_POKEMON_SPRITE_VISUALIZER DISABLED_ON_RELEASE // Enables a debug menu for PokΓ©mon sprites and icons, accessed by pressing Select in the summary screen. #endif // GUARD_CONFIG_DEBUG_H diff --git a/include/config/fishing.h b/include/config/fishing.h new file mode 100644 index 000000000000..0cbf666a5406 --- /dev/null +++ b/include/config/fishing.h @@ -0,0 +1,13 @@ +#ifndef GUARD_CONFIG_FISHING_H +#define GUARD_CONFIG_FISHING_H + +#define I_FISHING_BITE_ODDS GEN_LATEST // In Gen 1 and Gen 2, the Old Rod has a 100% chance for a bite, Good Rod has a 66% chance for a bite, and Super Rod has a 50% chance for a bite. In Gen 3, all rods have a base 50% chance for a bite. In Gen 4 onwards, the Old Rod has a base 25% chance for a bite, Good Rod has a 50% chance for a bite, and Super Rod has a 75% chance for a bite. +#define I_FISHING_MINIGAME GEN_3 // Each generation uses a variation of reeling in PokΓ©mon once they have been hooked. NOTE: Only the Gen 1/2 and Gen 3 minigames are implemented right now! +#define I_FISHING_ENVIRONMENT GEN_LATEST // In Gen 3, the battle environment when fighting a hooked PokΓ©mon is based on the tile the player is standing on. In Gen 4 onwards, the environment is based on tile that is being fished in, resulting in it usually being a water environment. +#define I_FISHING_STICKY_BOOST GEN_LATEST // In Gen 3, a Pokemon with Suction Cups or Sticky Hold in the first slot of the party causes the chance for a bite to increase by about 35%. In Gen 4 onwards, it doubles the base bite chance. +#define I_FISHING_FOLLOWER_BOOST FALSE // In HGSS, fishing bite odds are increased depending on the friendship of the current following PokΓ©mon. +#define I_FISHING_CHAIN FALSE // Introduced in XY, hooking the same PokΓ©mon repeatedly will increase the odds of that mon being shiny. NOTE: This implementation is an approximation of the actual feature, as XY have not been throughoutly documented or datamined. +#define I_FISHING_PROXIMITY FALSE // In XY, bite chance is boosted by the number of adjacent non-surfable tiles next to your fishing line +#define I_FISHING_TIME_OF_DAY_BOOST FALSE // In XY, bite chance is boosted during morning and evening + +#endif // GUARD_CONFIG_FISHING_H diff --git a/include/config/general.h b/include/config/general.h index 1bb70ce00dde..6b7d3e6b79f6 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -6,11 +6,16 @@ // still has them in the ROM. This is because the developers forgot // to define NDEBUG before release, however this has been changed as // Ruby's actual debug build does not use the AGBPrint features. +// +// Use `make release` to automatically enable NDEBUG. +#ifdef RELEASE #define NDEBUG +#endif -// To enable printf debugging, comment out "#define NDEBUG". This allows +// printf debugging is now enabled by default. This allows // the various AGBPrint functions to be used. (See include/gba/isagbprint.h). // See below for enabling different pretty printing versions. +// To disable printf debugging, build a release build using `make release`. #ifndef NDEBUG @@ -63,16 +68,14 @@ #define GEN_7 6 #define GEN_8 7 #define GEN_9 8 +#define GEN_COUNT 9 // Changing GEN_LATEST's value to a different Generation will change every default setting that uses it at once. #define GEN_LATEST GEN_9 // General settings #define EXPANSION_INTRO TRUE // If TRUE, a custom RHH intro will play after the vanilla copyright screen. -#define SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen. #define HQ_RANDOM TRUE // If TRUE, replaces the default RNG with an implementation of SFC32 RNG. May break code that relies on RNG. -#define COMPETITIVE_PARTY_SYNTAX TRUE // If TRUE, parties are defined in "competitive syntax". -#define AUTO_SCROLL_TEXT FALSE // If TRUE, text will automatically scroll to the next line after NUM_FRAMES_AUTO_SCROLL_DELAY. Players can still press A_BUTTON or B_BUTTON to scroll on their own. -#define NUM_FRAMES_AUTO_SCROLL_DELAY 49 +#define PHONEMES_SHARED FALSE // If TRUE, bard phonemes all reference the same sound (sound/direct_sound_samples/phonemes/shared.bin) to save ROM space. // Measurement system constants to be used for UNITS #define UNITS_IMPERIAL 0 // Inches, feet, pounds @@ -84,5 +87,4 @@ // Naming Screen #define AUTO_LOWERCASE_KEYBOARD GEN_LATEST // Starting in GEN_6, after entering the first uppercase character, the keyboard switches to lowercase letters. -#define SAVE_TYPE_ERROR_SCREEN FALSE // When enabled, this shows an error message when the game is loaded on a cart without a flash chip or on an emulator with the wrong save type setting instead of crashing. #endif // GUARD_CONFIG_GENERAL_H diff --git a/include/config/item.h b/include/config/item.h index 96156b0db814..8a5a0009dd60 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -36,15 +36,17 @@ #define I_REPEL_LURE_MENU TRUE // If TRUE, the player is able to choose which Repel/Lure to use once the previous one runs out. Cursor position is saved by VAR_LAST_REPEL_LURE_USED if not 0. // Vs. Seeker -#define I_VS_SEEKER_CHARGING 0 // If this flag is assigned, the Vs Seeker functionality will be enabled. When the player has the Vs. Seeker, Match Call rematch functions will stop working. +#define I_VS_SEEKER_CHARGING 0 // If this flag is assigned, the Vs Seeker functionality will be enabled. When the player has the Vs. Seeker, Match Call rematch functions will stop working. Documentation for the Vs. Seeker can be found in docs/tutorials/vs_seeker.md. -// Fishing -#define I_FISHING_BITE_ODDS GEN_LATEST // In Gen 1 and Gen 2, the Old Rod has a 100% chance for a bite, Good Rod has a 66% chance for a bite, and Super Rod has a 50% chance for a bite. In Gen 3, all rods have a base 50% chance for a bite. In Gen 4 onwards, the Old Rod has a base 25% chance for a bite, Good Rod has a 50% chance for a bite, and Super Rod has a 75% chance for a bite. -#define I_FISHING_MINIGAME GEN_3 // Each generation uses a variation of reeling in PokΓ©mon once they have been hooked. NOTE: Only the Gen 1/2 and Gen 3 minigames are implemented right now! -#define I_FISHING_ENVIRONMENT GEN_LATEST // In Gen 3, the battle environment when fighting a hooked PokΓ©mon is based on the tile the player is standing on. In Gen 4 onwards, the environment is based on tile that is being fished in, resulting in it usually being a water environment. -#define I_FISHING_STICKY_BOOST GEN_LATEST // In Gen 3, a Pokemon with Suction Cups or Sticky Hold in the first slot of the party causes the chance for a bite to increase by about 35%. In Gen 4 onwards, it doubles the base bite chance. -#define I_FISHING_FOLLOWER_BOOST FALSE // In HGSS, fishing bite odds are increased depending on the friendship of the current following PokΓ©mon. -#define I_FISHING_CHAIN FALSE // Introduced in XY, hooking the same PokΓ©mon repeatedly will increase the odds of that mon being shiny. NOTE: This implementation is an approximation of the actual feature, as XY have not been throughoutly documented or datamined. -#define I_FISHING_PROXIMITY FALSE // Introduced in XY, fishing away from other people in enclosed areas will increase the chances of a PokΓ©mon being hooked. NOTE: This implementation is an approximation of the actual feature, as XY have not been throughoutly documented or datamined. +// ORAS Dowsing Machine +#define I_ORAS_DOWSING_FLAG 0 // Replace 0 with an unused flag to enable the Dowsing Machine mechanic from ORAS. +#define I_ORAS_DOWSING_SOUNDS TRUE // If TRUE, the Dowsing Machine will make sounds based on how far away the hidden item is. +#define I_ORAS_DOWSING_COLOR_PAL 15 // The color within the palette that will change based on proximity to the item. +// Color values for the ORAS dowsing distances/anims +#define I_ORAS_DOWSING_COLOR_NONE RGB_GRAY +#define I_ORAS_DOWSING_COLOR_SLOW RGB2GBA(56, 120, 255) +#define I_ORAS_DOWSING_COLOR_NORMAL RGB2GBA(24, 216, 24) +#define I_ORAS_DOWSING_COLOR_FAST RGB2GBA(255, 255, 40) +#define I_ORAS_DOWSING_COLOR_FASTER RGB_RED #endif // GUARD_CONFIG_ITEM_H diff --git a/include/config/name_box.h b/include/config/name_box.h new file mode 100644 index 000000000000..715b33cad9c0 --- /dev/null +++ b/include/config/name_box.h @@ -0,0 +1,17 @@ +#ifndef GUARD_CONFIG_NAME_BOX_H +#define GUARD_CONFIG_NAME_BOX_H + +#define OW_FLAG_SUPPRESS_NAME_BOX 0 // If this flag is set, any namebox (whether its from a macro or a code) will not show up until this flag is unset. + +// Namebox Speaker configs +#define OW_NAME_BOX_USE_DYNAMIC_WIDTH TRUE // When TRUE, the namebox window can use different width depending on the length of the speaker's name. +#define OW_NAME_BOX_NPC_TRAINER FALSE // When TRUE, any approaching NPC trainers will have a namebox shown automagically. The name will be taken from their trainer data. +#define OW_NAME_BOX_DEFAULT_WIDTH 8 // Maximum width of what OW_NAME_BOX_USE_DYNAMIC_WIDTH can set. Also the default width when the config above is set to FALSE (or the dynamic width exceeds this value). +#define OW_NAME_BOX_DEFAULT_HEIGHT 2 // Maximum height of the namebox window. + +// Text colors of Namebox. The numbers corresponds to the palette index. +// The BG color is not provided as it always needs to be 0. +#define OW_NAME_BOX_FOREGROUND_COLOR 1 +#define OW_NAME_BOX_SHADOW_COLOR 2 + +#endif // GUARD_CONFIG_NAME_BOX_H diff --git a/include/config/overworld.h b/include/config/overworld.h index fa87da4d83cb..b441862c2a9c 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -9,8 +9,9 @@ #define OW_POISON_DAMAGE GEN_LATEST // In Gen4, PokΓ©mon no longer faint from Poison in the overworld. In Gen5+, they no longer take damage at all. #define OW_DOUBLE_APPROACH_WITH_ONE_MON FALSE // If enabled, you can be spotted by two trainers at the same time even if you only have one eligible PokΓ©mon in your party. #define OW_HIDE_REPEAT_MAP_POPUP FALSE // If enabled, map popups will not appear if entering a map with the same Map Section Id as the last. -#define OW_FRLG_WHITEOUT FALSE // If enabled, shows an additional whiteout message and post whiteout event script with healing NPC. +#define OW_WHITEOUT_CUTSCENE GEN_LATEST // In Gen4+, whiting out shows an additional message and post whiteout event script cutscene with a healing NPC. (While this change was also in FRLG, for the sake of simplicity, setting this to GEN_3 will result in RSE behavior.) #define OW_DEFOG_FIELD_MOVE FALSE // If enabled, Defog can be used as a Field Move as seen in DPPt. +#define OW_ROCK_CLIMB_FIELD_MOVE FALSE // If enabled, Rock Climb can be used as a Field Move as seen in DPPt. // Item Obtain Description Box #define OW_ITEM_DESCRIPTIONS_OFF 0 // never show descriptions @@ -20,7 +21,7 @@ // These generational defines only make a distinction for Berries and the OW_PC_MOVE_ORDER #define GEN_6_XY GEN_6 -#define GEN_6_ORAS GEN_LATEST + 1 +#define GEN_6_ORAS GEN_COUNT + 1 // PC settings #define OW_PC_PRESS_B GEN_LATEST // In Gen4, pressing B when holding a PokΓ©mon is equivalent to placing it. In Gen3, it gives the "You're holding a PokΓ©mon!" error. @@ -82,16 +83,16 @@ #define OW_FLASH_FIRE GEN_LATEST // In Gen8+, if a PokΓ©mon with Flash Fire is leading the party, there is a 50% chance to encounter a Fire-type PokΓ©mon. // These defines only make a distinction for OW_ALTERED_TIME_RATIO -#define GEN_8_PLA GEN_LATEST + 2 -#define TIME_DEBUG GEN_LATEST + 3 +#define GEN_8_PLA GEN_COUNT + 2 +#define TIME_DEBUG GEN_COUNT + 3 -//Time +// Time #define OW_TIMES_OF_DAY GEN_LATEST // Different generations have the times of day change at different times. #define OW_USE_FAKE_RTC FALSE // When TRUE, seconds on the in-game clock will only advance once every 60 playTimeVBlanks (every 60 frames). #define OW_ALTERED_TIME_RATIO GEN_LATEST // In GEN_8_PLA, the time in game moves forward 60 seconds for every second in the RTC. In GEN_9, it is 20 seconds. TIME_DEBUG is 1:1, and meant for debugging purposes. This has no effect if OW_USE_FAKE_RTC is FALSE. #define OW_TIME_OF_DAY_ENCOUNTERS FALSE // If TRUE, will allow the user to define and use different encounter tables based on the time of day. #define OW_TIME_OF_DAY_DISABLE_FALLBACK FALSE // If TRUE, if the encounter table for a specific map and time is empty, the area will have no encounters instead of falling back to the vanilla map and time. -#define OW_TIME_OF_DAY_FALLBACK TIME_MORNING // The time of day that encounter tables fall back to. +#define OW_TIME_OF_DAY_FALLBACK TIME_MORNING // The time of day that encounter tables fall back to. If you set OW_TIMES_OF_DAY to GEN_3, change this to TIME_DAY or you won't have any encounters! // Lighting #define OW_SHADOW_INTENSITY 4 // Ranges from 0 to 16, where 0 is fully transparent and 16 is black. @@ -132,6 +133,7 @@ #define OW_POPUP_BW_TIME_MODE OW_POPUP_BW_TIME_NONE // Determines what type of time is shown. #define OW_POPUP_BW_ALPHA_BLEND FALSE // Enables alpha blending/transparency for the pop-ups. Mainly intended to be used with the black color option. // Setting this to TRUE will cause graphical errors with the Day Night System enabled. + // It will also cause minor visual glitches of shadow and reflection sprites adjusting their transparency when the pop-up disappear // PokΓ©mon Center #define OW_IGNORE_EGGS_ON_HEAL GEN_LATEST // In Gen 4+, the nurse in the PokΓ©mon Center does not heal Eggs on healing machine. @@ -141,4 +143,7 @@ // Berry Blender #define BERRY_BLENDER_THROW_ALL_BERRIES_AT_ONCE TRUE // This is a small little addition, that basically speeds up the animation where all players' berries are thrown into the blender. Self-explanatory I hope! +// Trainer Rematches +#define OW_REMATCH_BADGE_COUNT 5 // Number of badges necessary before the match call or vs seeker features allow rematches + #endif // GUARD_CONFIG_OVERWORLD_H diff --git a/include/config/pokedex_plus_hgss.h b/include/config/pokedex_plus_hgss.h index 667a4bad5076..15abb590f03e 100644 --- a/include/config/pokedex_plus_hgss.h +++ b/include/config/pokedex_plus_hgss.h @@ -1,11 +1,12 @@ #ifndef GUARD_CONFIG_POKEDEX_PLUS_HGSS_H #define GUARD_CONFIG_POKEDEX_PLUS_HGSS_H -#define POKEDEX_PLUS_HGSS FALSE // If TRUE, enables the custom HGSS style Pokedex. -#define HGSS_DECAPPED FALSE // If TRUE, uses decapped gfx and strings. -#define HGSS_DARK_MODE FALSE // If TRUE, enables dark mode. -#define HGSS_HIDE_UNSEEN_EVOLUTION_NAMES FALSE // If TRUE, hides evolution mon names. -#define HGSS_SORT_TMS_BY_NUM FALSE // If TRUE, sorts the TMS in HGSS Dex by TM number, rather than alphabetically. -#define HGSS_SHOW_EGG_MOVES_FOR_EVOS FALSE // If TRUE, shows Egg Moves for evolved PokΓ©mon too. +#define POKEDEX_PLUS_HGSS FALSE // If TRUE, enables the custom HGSS style Pokedex. +#define HGSS_DECAPPED FALSE // If TRUE, uses decapped gfx and strings. +#define HGSS_DARK_MODE FALSE // If TRUE, enables dark mode. +#define HGSS_HIDE_UNSEEN_EVOLUTION_NAMES FALSE // If TRUE, hides evolution mon names. +#define HGSS_HIDE_UNOWNED_EVOLUTION_METHODS FALSE // If TRUE, hides evolution methods. +#define HGSS_SORT_TMS_BY_NUM FALSE // If TRUE, sorts the TMS in HGSS Dex by TM number, rather than alphabetically. +#define HGSS_SHOW_EGG_MOVES_FOR_EVOS FALSE // If TRUE, shows Egg Moves for evolved PokΓ©mon too. #endif // GUARD_CONFIG_POKEDEX_PLUS_HGSS_H diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 2345cc3f3678..fdee4e8ad26f 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -56,8 +56,9 @@ #define P_SHOW_TERA_TYPE GEN_8 // Since Gen 9, the Tera Type is shown on the summary screen. #define P_TM_LITERACY GEN_LATEST // Since Gen 6, TM illiterate PokΓ©mon can learn TMs that teach moves that are in their level-up learnsets. #define P_CAN_FORGET_HIDDEN_MOVE FALSE // If TRUE, PokΓ©mon can forget any move, even if it is a Hidden Move. +#define P_ASK_MOVE_CONFIRMATION FALSE // If FALSE, when a player decides not to learn a Move, the game does not ask the player for confirmation. #define P_EGG_CYCLE_LENGTH GEN_LATEST // Since Gen 8, egg cycles take half as many steps as before. Previous Gens have some varied step counts around 255. -#define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, PokΓ©mon encountered in the Battle Pyramid won't be shiny. +#define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, PokΓ©mon encountered in the Battle Pyramid or while catching is disabled won't be shiny. #define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, PokΓ©mon encountered when the player is out of PokΓ© Balls won't be shiny #define P_SHOW_DYNAMIC_TYPES FALSE // If TRUE, all moves with dynamic type changes will be reflected as their current type in battle/summary screens instead of just select ones like in vanilla. diff --git a/include/config/species_enabled.h b/include/config/species_enabled.h index 23bb6d9d54f6..5866d243991d 100644 --- a/include/config/species_enabled.h +++ b/include/config/species_enabled.h @@ -1,9 +1,6 @@ #ifndef GUARD_CONFIG_SPECIES_ENABLED_H #define GUARD_CONFIG_SPECIES_ENABLED_H -// WARNING: For some reason, using 1/0 instead of TRUE/FALSE causes cry IDs to be shifted. -// Please use TRUE/FALSE when using the family toggles. - // Modifying the latest generation WILL change the saveblock due to Dex flags and will require a new save file. // Generations of PokΓ©mon are defined by the first member introduced, // so Pikachu depends on the Gen 1 setting despite Pichu being the lowest member of the evolution tree. @@ -29,6 +26,8 @@ #define P_GIGANTAMAX_FORMS TRUE #define P_TERA_FORMS TRUE +#define P_GEN_9_MEGA_EVOLUTIONS P_MEGA_EVOLUTIONS // Mega Evolutions introduced in Z-A and its DLC + // Fusion forms #define P_FUSION_FORMS TRUE diff --git a/include/config/summary_screen.h b/include/config/summary_screen.h index 9407d93c7e33..e76cd478b631 100644 --- a/include/config/summary_screen.h +++ b/include/config/summary_screen.h @@ -2,14 +2,16 @@ #define GUARD_CONFIG_SUMMARY_SCREEN_H // Settings -#define P_SUMMARY_SCREEN_MOVE_RELEARNER TRUE // If TRUE, shows an option for PokΓ©mon to relearn moves on the summary screen moves page. -#define P_SUMMARY_MOVE_RELEARNER_FULL_PP TRUE // If TRUE, the move relearner in the summary screen restores relearned moves' PP to full. +#define P_SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen. #define P_SUMMARY_SCREEN_RENAME TRUE // If TRUE, an option to change PokΓ©mon nicknames replaces the cancel prompt on the summary screen info page. + +// IV/EV settings #define P_SUMMARY_SCREEN_IV_EV_INFO FALSE // If TRUE, will allow player to cycle through the Stats, IVs, and EVs in the summary screen skills page. #define P_SUMMARY_SCREEN_IV_EV_BOX_ONLY FALSE // If TRUE, will allow player to cycle through the Stats, IVs, and EVs in the summary screen skills page, but only in the PC storage box. +#define P_SUMMARY_SCREEN_IV_HYPERTRAIN TRUE // If TRUE, stats that have been hyper trained will show as 31/S when viewing them in the summary screen #define P_SUMMARY_SCREEN_IV_EV_TILESET FALSE // If TRUE, loads an alternate tileset to allow changing the "STATS" label in the summary screen skills page. Note: if it's still loading the alternate tileset after changing this and recompiling, you may need a `make clean` before compilation. #define P_SUMMARY_SCREEN_IV_EV_VALUES FALSE // If TRUE, will show the actual IV value instead of the letter grade. -/* +/* LETTER GRADE GUIDE: F = 0 @@ -24,7 +26,32 @@ Info taken from https://bulbapedia.bulbagarden.net/wiki/Stats_judge. #define P_SUMMARY_SCREEN_IV_ONLY FALSE // If TRUE, will only show IV info in the summary screen. #define P_SUMMARY_SCREEN_EV_ONLY FALSE // If TRUE, will only show EV info in the summary screen. -// Flags +// IV/EV flags #define P_FLAG_SUMMARY_SCREEN_IV_EV_INFO 0 // If this flag is set, will allow player to cycle through the Stats, IVs, and EVs in the summary screen skills page. Note: if P_SUMMARY_SCREEN_IV_EV_INFO is TRUE, this flag does nothing. +// Move Relearner settings +#define P_ENABLE_MOVE_RELEARNERS FALSE // If TRUE, it enables move relearners for egg, TM and tutor. (see below for specific configs /flags) +#define P_SORT_MOVES FALSE // If TRUE, sorts all moves alphabetically in the relearner's list. + +// Level up Relearner +#define P_PRE_EVO_MOVES FALSE // If TRUE, it enables the PokΓ©mon to learn moves from it's pre evolution. +#define P_ENABLE_ALL_LEVEL_UP_MOVES FALSE // If TRUE, it enables the PokΓ©mon to learn all level up moves, regardless of its level. + +// TM Relearner +#define P_TM_MOVES_RELEARNER TRUE // If TRUE, enables machine move relearner. +#define P_ENABLE_ALL_TM_MOVES FALSE // If TRUE, it enables the PokΓ©mon to learn all TMs its compatible with, regardless of it being in the bag. + +// Relearner flags - Redundant if P_ENABLE_MOVE_RELEARNERS is TRUE, but still added here incase you don't want all relearners unlocked at the same time. +// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. +// Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. +#define P_FLAG_EGG_MOVES 0 // If this flag is set, enables egg move relearner. +#define P_FLAG_TUTOR_MOVES 0 // If this flag is set, enables tutor move relearner. + +// Move Relearner summary screen +#define P_SUMMARY_SCREEN_MOVE_RELEARNER TRUE // If TRUE, shows an option for PokΓ©mon to relearn moves on the summary screen moves page. +#define P_SUMMARY_MOVE_RELEARNER_FULL_PP TRUE // If TRUE, the move relearner in the summary screen restores relearned moves' PP to full. + +// Move Relearner party menu +#define P_PARTY_MOVE_RELEARNER FALSE // If TRUE, it enables the move relearner in the party menu. + #endif // GUARD_CONFIG_SUMMARY_SCREEN_H diff --git a/include/config/test.h b/include/config/test.h index 6122d14aa186..46dbe17a997d 100644 --- a/include/config/test.h +++ b/include/config/test.h @@ -1132,6 +1132,10 @@ // Vars #undef B_VAR_DIFFICULTY #define B_VAR_DIFFICULTY TESTING_VAR_DIFFICULTY +#undef B_VAR_STARTING_STATUS +#define B_VAR_STARTING_STATUS TESTING_VAR_STARTING_STATUS +#undef B_VAR_STARTING_STATUS_TIMER +#define B_VAR_STARTING_STATUS_TIMER TESTING_VAR_STARTING_STATUS_TIMER // Flags #undef B_FLAG_SLEEP_CLAUSE @@ -1139,6 +1143,9 @@ #undef B_FLAG_INVERSE_BATTLE #define B_FLAG_INVERSE_BATTLE TESTING_FLAG_INVERSE_BATTLE +// Compression DebugPrintf switch +#define T_COMPRESSION_SHOULD_PRINT FALSE + // Move animation testing #define T_SHOULD_RUN_MOVE_ANIM FALSE // If TRUE, enables the move animation tests, these are very computationally heavy and takes a long time to run. diff --git a/include/config/text.h b/include/config/text.h new file mode 100644 index 000000000000..81438055a138 --- /dev/null +++ b/include/config/text.h @@ -0,0 +1,19 @@ +#ifndef GUARD_CONFIG_TEXT_H +#define GUARD_CONFIG_TEXT_H + +// Text settings: +#define AUTO_SCROLL_TEXT FALSE // If TRUE, text will automatically scroll to the next line after NUM_FRAMES_AUTO_SCROLL_DELAY. Players can still press A_BUTTON or B_BUTTON to scroll on their own. +#define NUM_FRAMES_AUTO_SCROLL_DELAY 49 + +// A note on the modifiers: they are roughly multiplicative, so having them set at 1 is vanilla speed. They also are used to calculate frame delays for the speed of the scroll effect and the animated down arrow, so to that end, they are capped at 31 to prevent the text printing from desyncing with A/B button inputs. +// From testing, a value of 18 to 20 is essentially equivalent to instant text. +#define TEXT_SPEED_SLOW_MODIFIER 1 // How fast the SLOW text speed option prints +#define TEXT_SPEED_MEDIUM_MODIFIER 1 // How fast the MID text speed option prints +#define TEXT_SPEED_FAST_MODIFIER 1 // How fast the FAST text speed option prints +#define TEXT_SPEED_INSTANT_MODIFIER 12 // Needed only for the animation delays +#define TEXT_SPEED_INSTANT FALSE // Renders all text as fast as it can, basically instant. Overrides FLAG_TEXT_SPEED_INSTANT and in-game player options menu setting. + +// Text speed flag: +#define FLAG_TEXT_SPEED_INSTANT 0 // Use this if you want to toggle instant text speed + +#endif // GUARD_CONFIG_TEXT_H diff --git a/include/constants/abilities.h b/include/constants/abilities.h index 856820613718..7e17fd528784 100644 --- a/include/constants/abilities.h +++ b/include/constants/abilities.h @@ -1,344 +1,339 @@ #ifndef GUARD_CONSTANTS_ABILITIES_H #define GUARD_CONSTANTS_ABILITIES_H -#define ABILITY_NONE 0 -#define ABILITY_STENCH 1 -#define ABILITY_DRIZZLE 2 -#define ABILITY_SPEED_BOOST 3 -#define ABILITY_BATTLE_ARMOR 4 -#define ABILITY_STURDY 5 -#define ABILITY_DAMP 6 -#define ABILITY_LIMBER 7 -#define ABILITY_SAND_VEIL 8 -#define ABILITY_STATIC 9 -#define ABILITY_VOLT_ABSORB 10 -#define ABILITY_WATER_ABSORB 11 -#define ABILITY_OBLIVIOUS 12 -#define ABILITY_CLOUD_NINE 13 -#define ABILITY_COMPOUND_EYES 14 -#define ABILITY_INSOMNIA 15 -#define ABILITY_COLOR_CHANGE 16 -#define ABILITY_IMMUNITY 17 -#define ABILITY_FLASH_FIRE 18 -#define ABILITY_SHIELD_DUST 19 -#define ABILITY_OWN_TEMPO 20 -#define ABILITY_SUCTION_CUPS 21 -#define ABILITY_INTIMIDATE 22 -#define ABILITY_SHADOW_TAG 23 -#define ABILITY_ROUGH_SKIN 24 -#define ABILITY_WONDER_GUARD 25 -#define ABILITY_LEVITATE 26 -#define ABILITY_EFFECT_SPORE 27 -#define ABILITY_SYNCHRONIZE 28 -#define ABILITY_CLEAR_BODY 29 -#define ABILITY_NATURAL_CURE 30 -#define ABILITY_LIGHTNING_ROD 31 -#define ABILITY_SERENE_GRACE 32 -#define ABILITY_SWIFT_SWIM 33 -#define ABILITY_CHLOROPHYLL 34 -#define ABILITY_ILLUMINATE 35 -#define ABILITY_TRACE 36 -#define ABILITY_HUGE_POWER 37 -#define ABILITY_POISON_POINT 38 -#define ABILITY_INNER_FOCUS 39 -#define ABILITY_MAGMA_ARMOR 40 -#define ABILITY_WATER_VEIL 41 -#define ABILITY_MAGNET_PULL 42 -#define ABILITY_SOUNDPROOF 43 -#define ABILITY_RAIN_DISH 44 -#define ABILITY_SAND_STREAM 45 -#define ABILITY_PRESSURE 46 -#define ABILITY_THICK_FAT 47 -#define ABILITY_EARLY_BIRD 48 -#define ABILITY_FLAME_BODY 49 -#define ABILITY_RUN_AWAY 50 -#define ABILITY_KEEN_EYE 51 -#define ABILITY_HYPER_CUTTER 52 -#define ABILITY_PICKUP 53 -#define ABILITY_TRUANT 54 -#define ABILITY_HUSTLE 55 -#define ABILITY_CUTE_CHARM 56 -#define ABILITY_PLUS 57 -#define ABILITY_MINUS 58 -#define ABILITY_FORECAST 59 -#define ABILITY_STICKY_HOLD 60 -#define ABILITY_SHED_SKIN 61 -#define ABILITY_GUTS 62 -#define ABILITY_MARVEL_SCALE 63 -#define ABILITY_LIQUID_OOZE 64 -#define ABILITY_OVERGROW 65 -#define ABILITY_BLAZE 66 -#define ABILITY_TORRENT 67 -#define ABILITY_SWARM 68 -#define ABILITY_ROCK_HEAD 69 -#define ABILITY_DROUGHT 70 -#define ABILITY_ARENA_TRAP 71 -#define ABILITY_VITAL_SPIRIT 72 -#define ABILITY_WHITE_SMOKE 73 -#define ABILITY_PURE_POWER 74 -#define ABILITY_SHELL_ARMOR 75 -#define ABILITY_AIR_LOCK 76 +enum __attribute__((packed)) Ability +{ + ABILITY_NONE = 0, + ABILITY_STENCH = 1, + ABILITY_DRIZZLE = 2, + ABILITY_SPEED_BOOST = 3, + ABILITY_BATTLE_ARMOR = 4, + ABILITY_STURDY = 5, + ABILITY_DAMP = 6, + ABILITY_LIMBER = 7, + ABILITY_SAND_VEIL = 8, + ABILITY_STATIC = 9, + ABILITY_VOLT_ABSORB = 10, + ABILITY_WATER_ABSORB = 11, + ABILITY_OBLIVIOUS = 12, + ABILITY_CLOUD_NINE = 13, + ABILITY_COMPOUND_EYES = 14, + ABILITY_INSOMNIA = 15, + ABILITY_COLOR_CHANGE = 16, + ABILITY_IMMUNITY = 17, + ABILITY_FLASH_FIRE = 18, + ABILITY_SHIELD_DUST = 19, + ABILITY_OWN_TEMPO = 20, + ABILITY_SUCTION_CUPS = 21, + ABILITY_INTIMIDATE = 22, + ABILITY_SHADOW_TAG = 23, + ABILITY_ROUGH_SKIN = 24, + ABILITY_WONDER_GUARD = 25, + ABILITY_LEVITATE = 26, + ABILITY_EFFECT_SPORE = 27, + ABILITY_SYNCHRONIZE = 28, + ABILITY_CLEAR_BODY = 29, + ABILITY_NATURAL_CURE = 30, + ABILITY_LIGHTNING_ROD = 31, + ABILITY_SERENE_GRACE = 32, + ABILITY_SWIFT_SWIM = 33, + ABILITY_CHLOROPHYLL = 34, + ABILITY_ILLUMINATE = 35, + ABILITY_TRACE = 36, + ABILITY_HUGE_POWER = 37, + ABILITY_POISON_POINT = 38, + ABILITY_INNER_FOCUS = 39, + ABILITY_MAGMA_ARMOR = 40, + ABILITY_WATER_VEIL = 41, + ABILITY_MAGNET_PULL = 42, + ABILITY_SOUNDPROOF = 43, + ABILITY_RAIN_DISH = 44, + ABILITY_SAND_STREAM = 45, + ABILITY_PRESSURE = 46, + ABILITY_THICK_FAT = 47, + ABILITY_EARLY_BIRD = 48, + ABILITY_FLAME_BODY = 49, + ABILITY_RUN_AWAY = 50, + ABILITY_KEEN_EYE = 51, + ABILITY_HYPER_CUTTER = 52, + ABILITY_PICKUP = 53, + ABILITY_TRUANT = 54, + ABILITY_HUSTLE = 55, + ABILITY_CUTE_CHARM = 56, + ABILITY_PLUS = 57, + ABILITY_MINUS = 58, + ABILITY_FORECAST = 59, + ABILITY_STICKY_HOLD = 60, + ABILITY_SHED_SKIN = 61, + ABILITY_GUTS = 62, + ABILITY_MARVEL_SCALE = 63, + ABILITY_LIQUID_OOZE = 64, + ABILITY_OVERGROW = 65, + ABILITY_BLAZE = 66, + ABILITY_TORRENT = 67, + ABILITY_SWARM = 68, + ABILITY_ROCK_HEAD = 69, + ABILITY_DROUGHT = 70, + ABILITY_ARENA_TRAP = 71, + ABILITY_VITAL_SPIRIT = 72, + ABILITY_WHITE_SMOKE = 73, + ABILITY_PURE_POWER = 74, + ABILITY_SHELL_ARMOR = 75, + ABILITY_AIR_LOCK = 76, + ABILITIES_COUNT_GEN3, -#define ABILITIES_COUNT_GEN3 77 + // Gen 4 + ABILITY_TANGLED_FEET = ABILITIES_COUNT_GEN3, + ABILITY_MOTOR_DRIVE = 78, + ABILITY_RIVALRY = 79, + ABILITY_STEADFAST = 80, + ABILITY_SNOW_CLOAK = 81, + ABILITY_GLUTTONY = 82, + ABILITY_ANGER_POINT = 83, + ABILITY_UNBURDEN = 84, + ABILITY_HEATPROOF = 85, + ABILITY_SIMPLE = 86, + ABILITY_DRY_SKIN = 87, + ABILITY_DOWNLOAD = 88, + ABILITY_IRON_FIST = 89, + ABILITY_POISON_HEAL = 90, + ABILITY_ADAPTABILITY = 91, + ABILITY_SKILL_LINK = 92, + ABILITY_HYDRATION = 93, + ABILITY_SOLAR_POWER = 94, + ABILITY_QUICK_FEET = 95, + ABILITY_NORMALIZE = 96, + ABILITY_SNIPER = 97, + ABILITY_MAGIC_GUARD = 98, + ABILITY_NO_GUARD = 99, + ABILITY_STALL = 100, + ABILITY_TECHNICIAN = 101, + ABILITY_LEAF_GUARD = 102, + ABILITY_KLUTZ = 103, + ABILITY_MOLD_BREAKER = 104, + ABILITY_SUPER_LUCK = 105, + ABILITY_AFTERMATH = 106, + ABILITY_ANTICIPATION = 107, + ABILITY_FOREWARN = 108, + ABILITY_UNAWARE = 109, + ABILITY_TINTED_LENS = 110, + ABILITY_FILTER = 111, + ABILITY_SLOW_START = 112, + ABILITY_SCRAPPY = 113, + ABILITY_STORM_DRAIN = 114, + ABILITY_ICE_BODY = 115, + ABILITY_SOLID_ROCK = 116, + ABILITY_SNOW_WARNING = 117, + ABILITY_HONEY_GATHER = 118, + ABILITY_FRISK = 119, + ABILITY_RECKLESS = 120, + ABILITY_MULTITYPE = 121, + ABILITY_FLOWER_GIFT = 122, + ABILITY_BAD_DREAMS = 123, + ABILITIES_COUNT_GEN4, -// Gen 4 -#define ABILITY_TANGLED_FEET 77 -#define ABILITY_MOTOR_DRIVE 78 -#define ABILITY_RIVALRY 79 -#define ABILITY_STEADFAST 80 -#define ABILITY_SNOW_CLOAK 81 -#define ABILITY_GLUTTONY 82 -#define ABILITY_ANGER_POINT 83 -#define ABILITY_UNBURDEN 84 -#define ABILITY_HEATPROOF 85 -#define ABILITY_SIMPLE 86 -#define ABILITY_DRY_SKIN 87 -#define ABILITY_DOWNLOAD 88 -#define ABILITY_IRON_FIST 89 -#define ABILITY_POISON_HEAL 90 -#define ABILITY_ADAPTABILITY 91 -#define ABILITY_SKILL_LINK 92 -#define ABILITY_HYDRATION 93 -#define ABILITY_SOLAR_POWER 94 -#define ABILITY_QUICK_FEET 95 -#define ABILITY_NORMALIZE 96 -#define ABILITY_SNIPER 97 -#define ABILITY_MAGIC_GUARD 98 -#define ABILITY_NO_GUARD 99 -#define ABILITY_STALL 100 -#define ABILITY_TECHNICIAN 101 -#define ABILITY_LEAF_GUARD 102 -#define ABILITY_KLUTZ 103 -#define ABILITY_MOLD_BREAKER 104 -#define ABILITY_SUPER_LUCK 105 -#define ABILITY_AFTERMATH 106 -#define ABILITY_ANTICIPATION 107 -#define ABILITY_FOREWARN 108 -#define ABILITY_UNAWARE 109 -#define ABILITY_TINTED_LENS 110 -#define ABILITY_FILTER 111 -#define ABILITY_SLOW_START 112 -#define ABILITY_SCRAPPY 113 -#define ABILITY_STORM_DRAIN 114 -#define ABILITY_ICE_BODY 115 -#define ABILITY_SOLID_ROCK 116 -#define ABILITY_SNOW_WARNING 117 -#define ABILITY_HONEY_GATHER 118 -#define ABILITY_FRISK 119 -#define ABILITY_RECKLESS 120 -#define ABILITY_MULTITYPE 121 -#define ABILITY_FLOWER_GIFT 122 -#define ABILITY_BAD_DREAMS 123 + // Gen 5 + ABILITY_PICKPOCKET = ABILITIES_COUNT_GEN4, + ABILITY_SHEER_FORCE = 125, + ABILITY_CONTRARY = 126, + ABILITY_UNNERVE = 127, + ABILITY_DEFIANT = 128, + ABILITY_DEFEATIST = 129, + ABILITY_CURSED_BODY = 130, + ABILITY_HEALER = 131, + ABILITY_FRIEND_GUARD = 132, + ABILITY_WEAK_ARMOR = 133, + ABILITY_HEAVY_METAL = 134, + ABILITY_LIGHT_METAL = 135, + ABILITY_MULTISCALE = 136, + ABILITY_TOXIC_BOOST = 137, + ABILITY_FLARE_BOOST = 138, + ABILITY_HARVEST = 139, + ABILITY_TELEPATHY = 140, + ABILITY_MOODY = 141, + ABILITY_OVERCOAT = 142, + ABILITY_POISON_TOUCH = 143, + ABILITY_REGENERATOR = 144, + ABILITY_BIG_PECKS = 145, + ABILITY_SAND_RUSH = 146, + ABILITY_WONDER_SKIN = 147, + ABILITY_ANALYTIC = 148, + ABILITY_ILLUSION = 149, + ABILITY_IMPOSTER = 150, + ABILITY_INFILTRATOR = 151, + ABILITY_MUMMY = 152, + ABILITY_MOXIE = 153, + ABILITY_JUSTIFIED = 154, + ABILITY_RATTLED = 155, + ABILITY_MAGIC_BOUNCE = 156, + ABILITY_SAP_SIPPER = 157, + ABILITY_PRANKSTER = 158, + ABILITY_SAND_FORCE = 159, + ABILITY_IRON_BARBS = 160, + ABILITY_ZEN_MODE = 161, + ABILITY_VICTORY_STAR = 162, + ABILITY_TURBOBLAZE = 163, + ABILITY_TERAVOLT = 164, + ABILITIES_COUNT_GEN5, -#define ABILITIES_COUNT_GEN4 124 + // Gen 6 + ABILITY_AROMA_VEIL = ABILITIES_COUNT_GEN5, + ABILITY_FLOWER_VEIL = 166, + ABILITY_CHEEK_POUCH = 167, + ABILITY_PROTEAN = 168, + ABILITY_FUR_COAT = 169, + ABILITY_MAGICIAN = 170, + ABILITY_BULLETPROOF = 171, + ABILITY_COMPETITIVE = 172, + ABILITY_STRONG_JAW = 173, + ABILITY_REFRIGERATE = 174, + ABILITY_SWEET_VEIL = 175, + ABILITY_STANCE_CHANGE = 176, + ABILITY_GALE_WINGS = 177, + ABILITY_MEGA_LAUNCHER = 178, + ABILITY_GRASS_PELT = 179, + ABILITY_SYMBIOSIS = 180, + ABILITY_TOUGH_CLAWS = 181, + ABILITY_PIXILATE = 182, + ABILITY_GOOEY = 183, + ABILITY_AERILATE = 184, + ABILITY_PARENTAL_BOND = 185, + ABILITY_DARK_AURA = 186, + ABILITY_FAIRY_AURA = 187, + ABILITY_AURA_BREAK = 188, + ABILITY_PRIMORDIAL_SEA = 189, + ABILITY_DESOLATE_LAND = 190, + ABILITY_DELTA_STREAM = 191, + ABILITIES_COUNT_GEN6, -// Gen 5 -#define ABILITY_PICKPOCKET 124 -#define ABILITY_SHEER_FORCE 125 -#define ABILITY_CONTRARY 126 -#define ABILITY_UNNERVE 127 -#define ABILITY_DEFIANT 128 -#define ABILITY_DEFEATIST 129 -#define ABILITY_CURSED_BODY 130 -#define ABILITY_HEALER 131 -#define ABILITY_FRIEND_GUARD 132 -#define ABILITY_WEAK_ARMOR 133 -#define ABILITY_HEAVY_METAL 134 -#define ABILITY_LIGHT_METAL 135 -#define ABILITY_MULTISCALE 136 -#define ABILITY_TOXIC_BOOST 137 -#define ABILITY_FLARE_BOOST 138 -#define ABILITY_HARVEST 139 -#define ABILITY_TELEPATHY 140 -#define ABILITY_MOODY 141 -#define ABILITY_OVERCOAT 142 -#define ABILITY_POISON_TOUCH 143 -#define ABILITY_REGENERATOR 144 -#define ABILITY_BIG_PECKS 145 -#define ABILITY_SAND_RUSH 146 -#define ABILITY_WONDER_SKIN 147 -#define ABILITY_ANALYTIC 148 -#define ABILITY_ILLUSION 149 -#define ABILITY_IMPOSTER 150 -#define ABILITY_INFILTRATOR 151 -#define ABILITY_MUMMY 152 -#define ABILITY_MOXIE 153 -#define ABILITY_JUSTIFIED 154 -#define ABILITY_RATTLED 155 -#define ABILITY_MAGIC_BOUNCE 156 -#define ABILITY_SAP_SIPPER 157 -#define ABILITY_PRANKSTER 158 -#define ABILITY_SAND_FORCE 159 -#define ABILITY_IRON_BARBS 160 -#define ABILITY_ZEN_MODE 161 -#define ABILITY_VICTORY_STAR 162 -#define ABILITY_TURBOBLAZE 163 -#define ABILITY_TERAVOLT 164 + // Gen 7 + ABILITY_STAMINA = ABILITIES_COUNT_GEN6, + ABILITY_WIMP_OUT = 193, + ABILITY_EMERGENCY_EXIT = 194, + ABILITY_WATER_COMPACTION = 195, + ABILITY_MERCILESS = 196, + ABILITY_SHIELDS_DOWN = 197, + ABILITY_STAKEOUT = 198, + ABILITY_WATER_BUBBLE = 199, + ABILITY_STEELWORKER = 200, + ABILITY_BERSERK = 201, + ABILITY_SLUSH_RUSH = 202, + ABILITY_LONG_REACH = 203, + ABILITY_LIQUID_VOICE = 204, + ABILITY_TRIAGE = 205, + ABILITY_GALVANIZE = 206, + ABILITY_SURGE_SURFER = 207, + ABILITY_SCHOOLING = 208, + ABILITY_DISGUISE = 209, + ABILITY_BATTLE_BOND = 210, + ABILITY_POWER_CONSTRUCT = 211, + ABILITY_CORROSION = 212, + ABILITY_COMATOSE = 213, + ABILITY_QUEENLY_MAJESTY = 214, + ABILITY_INNARDS_OUT = 215, + ABILITY_DANCER = 216, + ABILITY_BATTERY = 217, + ABILITY_FLUFFY = 218, + ABILITY_DAZZLING = 219, + ABILITY_SOUL_HEART = 220, + ABILITY_TANGLING_HAIR = 221, + ABILITY_RECEIVER = 222, + ABILITY_POWER_OF_ALCHEMY = 223, + ABILITY_BEAST_BOOST = 224, + ABILITY_RKS_SYSTEM = 225, + ABILITY_ELECTRIC_SURGE = 226, + ABILITY_PSYCHIC_SURGE = 227, + ABILITY_MISTY_SURGE = 228, + ABILITY_GRASSY_SURGE = 229, + ABILITY_FULL_METAL_BODY = 230, + ABILITY_SHADOW_SHIELD = 231, + ABILITY_PRISM_ARMOR = 232, + ABILITY_NEUROFORCE = 233, + ABILITIES_COUNT_GEN7, -#define ABILITIES_COUNT_GEN5 165 + // Gen 8 + ABILITY_INTREPID_SWORD = ABILITIES_COUNT_GEN7, + ABILITY_DAUNTLESS_SHIELD = 235, + ABILITY_LIBERO = 236, + ABILITY_BALL_FETCH = 237, + ABILITY_COTTON_DOWN = 238, + ABILITY_PROPELLER_TAIL = 239, + ABILITY_MIRROR_ARMOR = 240, + ABILITY_GULP_MISSILE = 241, + ABILITY_STALWART = 242, + ABILITY_STEAM_ENGINE = 243, + ABILITY_PUNK_ROCK = 244, + ABILITY_SAND_SPIT = 245, + ABILITY_ICE_SCALES = 246, + ABILITY_RIPEN = 247, + ABILITY_ICE_FACE = 248, + ABILITY_POWER_SPOT = 249, + ABILITY_MIMICRY = 250, + ABILITY_SCREEN_CLEANER = 251, + ABILITY_STEELY_SPIRIT = 252, + ABILITY_PERISH_BODY = 253, + ABILITY_WANDERING_SPIRIT = 254, + ABILITY_GORILLA_TACTICS = 255, + ABILITY_NEUTRALIZING_GAS = 256, + ABILITY_PASTEL_VEIL = 257, + ABILITY_HUNGER_SWITCH = 258, + ABILITY_QUICK_DRAW = 259, + ABILITY_UNSEEN_FIST = 260, + ABILITY_CURIOUS_MEDICINE = 261, + ABILITY_TRANSISTOR = 262, + ABILITY_DRAGONS_MAW = 263, + ABILITY_CHILLING_NEIGH = 264, + ABILITY_GRIM_NEIGH = 265, + ABILITY_AS_ONE_ICE_RIDER = 266, + ABILITY_AS_ONE_SHADOW_RIDER = 267, + ABILITIES_COUNT_GEN8, -// Gen 6 -#define ABILITY_AROMA_VEIL 165 -#define ABILITY_FLOWER_VEIL 166 -#define ABILITY_CHEEK_POUCH 167 -#define ABILITY_PROTEAN 168 -#define ABILITY_FUR_COAT 169 -#define ABILITY_MAGICIAN 170 -#define ABILITY_BULLETPROOF 171 -#define ABILITY_COMPETITIVE 172 -#define ABILITY_STRONG_JAW 173 -#define ABILITY_REFRIGERATE 174 -#define ABILITY_SWEET_VEIL 175 -#define ABILITY_STANCE_CHANGE 176 -#define ABILITY_GALE_WINGS 177 -#define ABILITY_MEGA_LAUNCHER 178 -#define ABILITY_GRASS_PELT 179 -#define ABILITY_SYMBIOSIS 180 -#define ABILITY_TOUGH_CLAWS 181 -#define ABILITY_PIXILATE 182 -#define ABILITY_GOOEY 183 -#define ABILITY_AERILATE 184 -#define ABILITY_PARENTAL_BOND 185 -#define ABILITY_DARK_AURA 186 -#define ABILITY_FAIRY_AURA 187 -#define ABILITY_AURA_BREAK 188 -#define ABILITY_PRIMORDIAL_SEA 189 -#define ABILITY_DESOLATE_LAND 190 -#define ABILITY_DELTA_STREAM 191 - -#define ABILITIES_COUNT_GEN6 192 - -// Gen 7 -#define ABILITY_STAMINA 192 -#define ABILITY_WIMP_OUT 193 -#define ABILITY_EMERGENCY_EXIT 194 -#define ABILITY_WATER_COMPACTION 195 -#define ABILITY_MERCILESS 196 -#define ABILITY_SHIELDS_DOWN 197 -#define ABILITY_STAKEOUT 198 -#define ABILITY_WATER_BUBBLE 199 -#define ABILITY_STEELWORKER 200 -#define ABILITY_BERSERK 201 -#define ABILITY_SLUSH_RUSH 202 -#define ABILITY_LONG_REACH 203 -#define ABILITY_LIQUID_VOICE 204 -#define ABILITY_TRIAGE 205 -#define ABILITY_GALVANIZE 206 -#define ABILITY_SURGE_SURFER 207 -#define ABILITY_SCHOOLING 208 -#define ABILITY_DISGUISE 209 -#define ABILITY_BATTLE_BOND 210 -#define ABILITY_POWER_CONSTRUCT 211 -#define ABILITY_CORROSION 212 -#define ABILITY_COMATOSE 213 -#define ABILITY_QUEENLY_MAJESTY 214 -#define ABILITY_INNARDS_OUT 215 -#define ABILITY_DANCER 216 -#define ABILITY_BATTERY 217 -#define ABILITY_FLUFFY 218 -#define ABILITY_DAZZLING 219 -#define ABILITY_SOUL_HEART 220 -#define ABILITY_TANGLING_HAIR 221 -#define ABILITY_RECEIVER 222 -#define ABILITY_POWER_OF_ALCHEMY 223 -#define ABILITY_BEAST_BOOST 224 -#define ABILITY_RKS_SYSTEM 225 -#define ABILITY_ELECTRIC_SURGE 226 -#define ABILITY_PSYCHIC_SURGE 227 -#define ABILITY_MISTY_SURGE 228 -#define ABILITY_GRASSY_SURGE 229 -#define ABILITY_FULL_METAL_BODY 230 -#define ABILITY_SHADOW_SHIELD 231 -#define ABILITY_PRISM_ARMOR 232 -#define ABILITY_NEUROFORCE 233 - -#define ABILITIES_COUNT_GEN7 234 - -// Gen 8 -#define ABILITY_INTREPID_SWORD 234 -#define ABILITY_DAUNTLESS_SHIELD 235 -#define ABILITY_LIBERO 236 -#define ABILITY_BALL_FETCH 237 -#define ABILITY_COTTON_DOWN 238 -#define ABILITY_PROPELLER_TAIL 239 -#define ABILITY_MIRROR_ARMOR 240 -#define ABILITY_GULP_MISSILE 241 -#define ABILITY_STALWART 242 -#define ABILITY_STEAM_ENGINE 243 -#define ABILITY_PUNK_ROCK 244 -#define ABILITY_SAND_SPIT 245 -#define ABILITY_ICE_SCALES 246 -#define ABILITY_RIPEN 247 -#define ABILITY_ICE_FACE 248 -#define ABILITY_POWER_SPOT 249 -#define ABILITY_MIMICRY 250 -#define ABILITY_SCREEN_CLEANER 251 -#define ABILITY_STEELY_SPIRIT 252 -#define ABILITY_PERISH_BODY 253 -#define ABILITY_WANDERING_SPIRIT 254 -#define ABILITY_GORILLA_TACTICS 255 -#define ABILITY_NEUTRALIZING_GAS 256 -#define ABILITY_PASTEL_VEIL 257 -#define ABILITY_HUNGER_SWITCH 258 -#define ABILITY_QUICK_DRAW 259 -#define ABILITY_UNSEEN_FIST 260 -#define ABILITY_CURIOUS_MEDICINE 261 -#define ABILITY_TRANSISTOR 262 -#define ABILITY_DRAGONS_MAW 263 -#define ABILITY_CHILLING_NEIGH 264 -#define ABILITY_GRIM_NEIGH 265 -#define ABILITY_AS_ONE_ICE_RIDER 266 -#define ABILITY_AS_ONE_SHADOW_RIDER 267 - -#define ABILITIES_COUNT_GEN8 268 - -// Gen 9 -#define ABILITY_LINGERING_AROMA 268 -#define ABILITY_SEED_SOWER 269 -#define ABILITY_THERMAL_EXCHANGE 270 -#define ABILITY_ANGER_SHELL 271 -#define ABILITY_PURIFYING_SALT 272 -#define ABILITY_WELL_BAKED_BODY 273 -#define ABILITY_WIND_RIDER 274 -#define ABILITY_GUARD_DOG 275 -#define ABILITY_ROCKY_PAYLOAD 276 -#define ABILITY_WIND_POWER 277 -#define ABILITY_ZERO_TO_HERO 278 -#define ABILITY_COMMANDER 279 -#define ABILITY_ELECTROMORPHOSIS 280 -#define ABILITY_PROTOSYNTHESIS 281 -#define ABILITY_QUARK_DRIVE 282 -#define ABILITY_GOOD_AS_GOLD 283 -#define ABILITY_VESSEL_OF_RUIN 284 -#define ABILITY_SWORD_OF_RUIN 285 -#define ABILITY_TABLETS_OF_RUIN 286 -#define ABILITY_BEADS_OF_RUIN 287 -#define ABILITY_ORICHALCUM_PULSE 288 -#define ABILITY_HADRON_ENGINE 289 -#define ABILITY_OPPORTUNIST 290 -#define ABILITY_CUD_CHEW 291 -#define ABILITY_SHARPNESS 292 -#define ABILITY_SUPREME_OVERLORD 293 -#define ABILITY_COSTAR 294 -#define ABILITY_TOXIC_DEBRIS 295 -#define ABILITY_ARMOR_TAIL 296 -#define ABILITY_EARTH_EATER 297 -#define ABILITY_MYCELIUM_MIGHT 298 -#define ABILITY_HOSPITALITY 299 -#define ABILITY_MINDS_EYE 300 -#define ABILITY_EMBODY_ASPECT_TEAL_MASK 301 -#define ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK 302 -#define ABILITY_EMBODY_ASPECT_WELLSPRING_MASK 303 -#define ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK 304 -#define ABILITY_TOXIC_CHAIN 305 -#define ABILITY_SUPERSWEET_SYRUP 306 -#define ABILITY_TERA_SHIFT 307 -#define ABILITY_TERA_SHELL 308 -#define ABILITY_TERAFORM_ZERO 309 -#define ABILITY_POISON_PUPPETEER 310 - -#define ABILITIES_COUNT_GEN9 311 - -#define ABILITIES_COUNT ABILITIES_COUNT_GEN9 + // Gen 9 + ABILITY_LINGERING_AROMA = ABILITIES_COUNT_GEN8, + ABILITY_SEED_SOWER = 269, + ABILITY_THERMAL_EXCHANGE = 270, + ABILITY_ANGER_SHELL = 271, + ABILITY_PURIFYING_SALT = 272, + ABILITY_WELL_BAKED_BODY = 273, + ABILITY_WIND_RIDER = 274, + ABILITY_GUARD_DOG = 275, + ABILITY_ROCKY_PAYLOAD = 276, + ABILITY_WIND_POWER = 277, + ABILITY_ZERO_TO_HERO = 278, + ABILITY_COMMANDER = 279, + ABILITY_ELECTROMORPHOSIS = 280, + ABILITY_PROTOSYNTHESIS = 281, + ABILITY_QUARK_DRIVE = 282, + ABILITY_GOOD_AS_GOLD = 283, + ABILITY_VESSEL_OF_RUIN = 284, + ABILITY_SWORD_OF_RUIN = 285, + ABILITY_TABLETS_OF_RUIN = 286, + ABILITY_BEADS_OF_RUIN = 287, + ABILITY_ORICHALCUM_PULSE = 288, + ABILITY_HADRON_ENGINE = 289, + ABILITY_OPPORTUNIST = 290, + ABILITY_CUD_CHEW = 291, + ABILITY_SHARPNESS = 292, + ABILITY_SUPREME_OVERLORD = 293, + ABILITY_COSTAR = 294, + ABILITY_TOXIC_DEBRIS = 295, + ABILITY_ARMOR_TAIL = 296, + ABILITY_EARTH_EATER = 297, + ABILITY_MYCELIUM_MIGHT = 298, + ABILITY_HOSPITALITY = 299, + ABILITY_MINDS_EYE = 300, + ABILITY_EMBODY_ASPECT_TEAL_MASK = 301, + ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK = 302, + ABILITY_EMBODY_ASPECT_WELLSPRING_MASK = 303, + ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK = 304, + ABILITY_TOXIC_CHAIN = 305, + ABILITY_SUPERSWEET_SYRUP = 306, + ABILITY_TERA_SHIFT = 307, + ABILITY_TERA_SHELL = 308, + ABILITY_TERAFORM_ZERO = 309, + ABILITY_POISON_PUPPETEER = 310, + ABILITIES_COUNT_GEN9, + ABILITIES_COUNT = ABILITIES_COUNT_GEN9, +}; #endif // GUARD_CONSTANTS_ABILITIES_H diff --git a/include/constants/apricorn_tree.h b/include/constants/apricorn_tree.h new file mode 100644 index 000000000000..14b111adbd81 --- /dev/null +++ b/include/constants/apricorn_tree.h @@ -0,0 +1,90 @@ +#ifndef GUARD_CONSTANTS_APRICORN_TREE_H +#define GUARD_CONSTANTS_APRICORN_TREE_H + +#include "constants/items.h" + +// Apricorn lookup table, added to allow adding new apricorns without being forced to rearrange the item constants. +enum ApricornType +{ + APRICORN_RED = ITEM_RED_APRICORN, + APRICORN_BLUE = ITEM_BLUE_APRICORN, + APRICORN_YELLOW = ITEM_YELLOW_APRICORN, + APRICORN_GREEN = ITEM_GREEN_APRICORN, + APRICORN_PINK = ITEM_PINK_APRICORN, + APRICORN_WHITE = ITEM_WHITE_APRICORN, + APRICORN_BLACK = ITEM_BLACK_APRICORN, + APRICORN_BERRY_CHERI = ITEM_CHERI_BERRY, + APRICORN_BERRY_CHESTO = ITEM_CHESTO_BERRY, + APRICORN_BERRY_PECHA = ITEM_PECHA_BERRY, + APRICORN_BERRY_RAWST = ITEM_RAWST_BERRY, + APRICORN_BERRY_ASPEAR = ITEM_ASPEAR_BERRY, + APRICORN_BERRY_LEPPA = ITEM_LEPPA_BERRY, + APRICORN_BERRY_ORAN = ITEM_ORAN_BERRY, + APRICORN_BERRY_PERSIM = ITEM_PERSIM_BERRY, + APRICORN_BERRY_LUM = ITEM_LUM_BERRY, + APRICORN_BERRY_SITRUS = ITEM_SITRUS_BERRY, + APRICORN_BERRY_FIGY = ITEM_FIGY_BERRY, + APRICORN_BERRY_WIKI = ITEM_WIKI_BERRY, + APRICORN_BERRY_MAGO = ITEM_MAGO_BERRY, + APRICORN_BERRY_AGUAV = ITEM_AGUAV_BERRY, + APRICORN_BERRY_IAPAPA = ITEM_IAPAPA_BERRY, + APRICORN_BERRY_RAZZ = ITEM_RAZZ_BERRY, + APRICORN_BERRY_BLUK = ITEM_BLUK_BERRY, + APRICORN_BERRY_NANAB = ITEM_NANAB_BERRY, + APRICORN_BERRY_WEPEAR = ITEM_WEPEAR_BERRY, + APRICORN_BERRY_PINAP = ITEM_PINAP_BERRY, + APRICORN_BERRY_POMEG = ITEM_POMEG_BERRY, + APRICORN_BERRY_KELPSY = ITEM_KELPSY_BERRY, + APRICORN_BERRY_QUALOT = ITEM_QUALOT_BERRY, + APRICORN_BERRY_HONDEW = ITEM_HONDEW_BERRY, + APRICORN_BERRY_GREPA = ITEM_GREPA_BERRY, + APRICORN_BERRY_TAMATO = ITEM_TAMATO_BERRY, + APRICORN_BERRY_CORNN = ITEM_CORNN_BERRY, + APRICORN_BERRY_MAGOST = ITEM_MAGOST_BERRY, + APRICORN_BERRY_RABUTA = ITEM_RABUTA_BERRY, + APRICORN_BERRY_NOMEL = ITEM_NOMEL_BERRY, + APRICORN_BERRY_SPELON = ITEM_SPELON_BERRY, + APRICORN_BERRY_PAMTRE = ITEM_PAMTRE_BERRY, + APRICORN_BERRY_WATMEL = ITEM_WATMEL_BERRY, + APRICORN_BERRY_DURIN = ITEM_DURIN_BERRY, + APRICORN_BERRY_BELUE = ITEM_BELUE_BERRY, + APRICORN_BERRY_OCCA = ITEM_OCCA_BERRY, + APRICORN_BERRY_PASSHO = ITEM_PASSHO_BERRY, + APRICORN_BERRY_WACAN = ITEM_WACAN_BERRY, + APRICORN_BERRY_RINDO = ITEM_RINDO_BERRY, + APRICORN_BERRY_YACHE = ITEM_YACHE_BERRY, + APRICORN_BERRY_CHOPLE = ITEM_CHOPLE_BERRY, + APRICORN_BERRY_KEBIA = ITEM_KEBIA_BERRY, + APRICORN_BERRY_SHUCA = ITEM_SHUCA_BERRY, + APRICORN_BERRY_COBA = ITEM_COBA_BERRY, + APRICORN_BERRY_PAYAPA = ITEM_PAYAPA_BERRY, + APRICORN_BERRY_TANGA = ITEM_TANGA_BERRY, + APRICORN_BERRY_CHARTI = ITEM_CHARTI_BERRY, + APRICORN_BERRY_KASIB = ITEM_KASIB_BERRY, + APRICORN_BERRY_HABAN = ITEM_HABAN_BERRY, + APRICORN_BERRY_COLBUR = ITEM_COLBUR_BERRY, + APRICORN_BERRY_BABIRI = ITEM_BABIRI_BERRY, + APRICORN_BERRY_CHILAN = ITEM_CHILAN_BERRY, + APRICORN_BERRY_LIECHI = ITEM_LIECHI_BERRY, + APRICORN_BERRY_GANLON = ITEM_GANLON_BERRY, + APRICORN_BERRY_SALAC = ITEM_SALAC_BERRY, + APRICORN_BERRY_PETAYA = ITEM_PETAYA_BERRY, + APRICORN_BERRY_APICOT = ITEM_APICOT_BERRY, + APRICORN_BERRY_LANSAT = ITEM_LANSAT_BERRY, + APRICORN_BERRY_STARF = ITEM_STARF_BERRY, + APRICORN_BERRY_ENIGMA = ITEM_ENIGMA_BERRY, + APRICORN_BERRY_MICLE = ITEM_MICLE_BERRY, + APRICORN_BERRY_CUSTAP = ITEM_CUSTAP_BERRY, + APRICORN_BERRY_JABOCA = ITEM_JABOCA_BERRY, + APRICORN_BERRY_ROWAP = ITEM_ROWAP_BERRY, + APRICORN_BERRY_ROSELI = ITEM_ROSELI_BERRY, + APRICORN_BERRY_KEE = ITEM_KEE_BERRY, + APRICORN_BERRY_MARANGA = ITEM_MARANGA_BERRY, +}; + +// Trees +#define APRICORN_TREE_NONE 0 + +#define APRICORN_TREE_COUNT 0 + +#endif //GUARD_CONSTANTS_APRICORN_TREE_H diff --git a/include/constants/battle.h b/include/constants/battle.h index 39f2dbd236bf..97639edfd154 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_BATTLE_H #define GUARD_CONSTANTS_BATTLE_H +#include "constants/moves.h" + /* * A battler may be in one of four positions on the field. The first bit determines * what side the battler is on, either the player's side or the opponent's side. @@ -45,9 +47,17 @@ enum BattlerId #define BATTLE_OPPOSITE(id) ((id) ^ BIT_SIDE) #define BATTLE_PARTNER(id) ((id) ^ BIT_FLANK) -#define B_SIDE_PLAYER 0 -#define B_SIDE_OPPONENT 1 -#define NUM_BATTLE_SIDES 2 +// Left and right are determined by how they're referred to in tests and everywhere else. +// Left is battlers 0 and 1, right 2 and 3; if you assume the battler referencing them is south, left is to the northeast and right to the northwest. +#define LEFT_FOE(battler) ((BATTLE_OPPOSITE(battler)) & BIT_SIDE) +#define RIGHT_FOE(battler) (((BATTLE_OPPOSITE(battler)) & BIT_SIDE) | BIT_FLANK) + +enum BattleSide +{ + B_SIDE_PLAYER = 0, + B_SIDE_OPPONENT = 1, + NUM_BATTLE_SIDES = 2, +}; #define B_FLANK_LEFT 0 #define B_FLANK_RIGHT 1 @@ -95,10 +105,16 @@ enum BattlerId | BATTLE_TYPE_LEGENDARY \ | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE)) -#define WILD_DOUBLE_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER)))) -#define RECORDED_WILD_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_RECORDED) && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER))) -#define BATTLE_TWO_VS_ONE_OPPONENT ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && TRAINER_BATTLE_PARAM.opponentB == 0xFFFF)) -#define BATTLE_TYPE_HAS_AI (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER | BATTLE_TYPE_INGAME_PARTNER) +#define WILD_DOUBLE_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER)))) +#define RECORDED_WILD_BATTLE ((gBattleTypeFlags & BATTLE_TYPE_RECORDED) && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER))) +#define BATTLE_TWO_VS_ONE_OPPONENT ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && TRAINER_BATTLE_PARAM.opponentB == 0xFFFF)) +#define BATTLE_TYPE_HAS_AI (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER | BATTLE_TYPE_INGAME_PARTNER) +#define BATTLE_TYPE_MORE_THAN_TWO_BATTLERS (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_TWO_OPPONENTS) +#define BATTLE_TYPE_PLAYER_HAS_PARTNER (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_TOWER_LINK_MULTI) + +// Multibattle test composite flags +#define BATTLE_MULTI_TEST (BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) +#define BATTLE_TWO_VS_ONE_TEST (BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_MULTI) // Battle Outcome defines #define B_OUTCOME_WON 1 @@ -132,133 +148,167 @@ enum BattlerId #define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON) #define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE) -#define STATUS1_REFRESH (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE) - -// Volatile status ailments -// These are removed after exiting the battle or switching out -#define STATUS2_CONFUSION (1 << 0 | 1 << 1 | 1 << 2) -#define STATUS2_CONFUSION_TURN(num) ((num) << 0) -#define STATUS2_FLINCHED (1 << 3) -#define STATUS2_UPROAR (1 << 4 | 1 << 5 | 1 << 6) -#define STATUS2_UPROAR_TURN(num) ((num) << 4) -#define STATUS2_TORMENT (1 << 7) -#define STATUS2_BIDE (1 << 8 | 1 << 9) -#define STATUS2_BIDE_TURN(num) (((num) << 8) & STATUS2_BIDE) -#define STATUS2_LOCK_CONFUSE (1 << 10 | 1 << 11) // e.g. Thrash -#define STATUS2_LOCK_CONFUSE_TURN(num)((num) << 10) -#define STATUS2_MULTIPLETURNS (1 << 12) -#define STATUS2_WRAPPED (1 << 13) -#define STATUS2_POWDER (1 << 14) -#define STATUS2_INFATUATION (1 << 16 | 1 << 17 | 1 << 18 | 1 << 19) // 4 bits, one for every battler -#define STATUS2_INFATUATED_WITH(battler) (1u << (battler + 16)) -#define STATUS2_DEFENSE_CURL (1 << 20) -#define STATUS2_TRANSFORMED (1 << 21) -#define STATUS2_RECHARGE (1 << 22) -#define STATUS2_RAGE (1 << 23) -#define STATUS2_SUBSTITUTE (1 << 24) -#define STATUS2_DESTINY_BOND (1 << 25) -#define STATUS2_ESCAPE_PREVENTION (1 << 26) -#define STATUS2_NIGHTMARE (1 << 27) -#define STATUS2_CURSED (1 << 28) -#define STATUS2_FORESIGHT (1 << 29) -#define STATUS2_DRAGON_CHEER (1 << 30) -#define STATUS2_FOCUS_ENERGY (1 << 31) -#define STATUS2_FOCUS_ENERGY_ANY (STATUS2_DRAGON_CHEER | STATUS2_FOCUS_ENERGY) - -#define STATUS3_LEECHSEED_BATTLER (1 << 0 | 1 << 1) // The battler to receive HP from Leech Seed -#define STATUS3_LEECHSEED (1 << 2) -#define STATUS3_ALWAYS_HITS (1 << 3 | 1 << 4) -#define STATUS3_ALWAYS_HITS_TURN(num) (((num) << 3) & STATUS3_ALWAYS_HITS) // "Always Hits" is set as a 2 turn timer, i.e. next turn is the last turn when it's active -#define STATUS3_PERISH_SONG (1 << 5) -#define STATUS3_ON_AIR (1 << 6) -#define STATUS3_UNDERGROUND (1 << 7) -#define STATUS3_MINIMIZED (1 << 8) -#define STATUS3_CHARGED_UP (1 << 9) -#define STATUS3_ROOTED (1 << 10) -#define STATUS3_YAWN (1 << 11 | 1 << 12) // Number of turns to sleep -#define STATUS3_YAWN_TURN(num) (((num) << 11) & STATUS3_YAWN) -#define STATUS3_IMPRISONED_OTHERS (1 << 13) -#define STATUS3_GRUDGE (1 << 14) -#define STATUS3_COMMANDER (1 << 15) -#define STATUS3_GASTRO_ACID (1 << 16) -#define STATUS3_EMBARGO (1 << 17) -#define STATUS3_UNDERWATER (1 << 18) -#define STATUS3_UNUSED_19 (1 << 19) -#define STATUS3_UNUSED_20 (1 << 20) -#define STATUS3_SMACKED_DOWN (1 << 21) -#define STATUS3_UNUSED_22 (1 << 22) -#define STATUS3_TELEKINESIS (1 << 23) -#define STATUS3_PHANTOM_FORCE (1 << 24) -#define STATUS3_MIRACLE_EYED (1 << 25) -#define STATUS3_MAGNET_RISE (1 << 26) -#define STATUS3_HEAL_BLOCK (1 << 27) -#define STATUS3_AQUA_RING (1 << 28) -#define STATUS3_LASER_FOCUS (1 << 29) -#define STATUS3_POWER_TRICK (1 << 30) -#define STATUS3_SKY_DROPPED (1 << 31) // Target of Sky Drop -#define STATUS3_SEMI_INVULNERABLE_NO_COMMANDER (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER | STATUS3_PHANTOM_FORCE) // Exception for Transform / Imposter -#define STATUS3_SEMI_INVULNERABLE (STATUS3_SEMI_INVULNERABLE_NO_COMMANDER | STATUS3_COMMANDER) - -#define STATUS4_ELECTRIFIED (1 << 0) -#define STATUS4_MUD_SPORT (1 << 1) // Only used if B_SPORT_TURNS < GEN_6 -#define STATUS4_WATER_SPORT (1 << 2) // Only used if B_SPORT_TURNS < GEN_6 -#define STATUS4_INFINITE_CONFUSION (1 << 3) // Used for Berserk Gene -#define STATUS4_SALT_CURE (1 << 4) -#define STATUS4_SYRUP_BOMB (1 << 5) -#define STATUS4_GLAIVE_RUSH (1 << 6) - -#define HITMARKER_UNUSED_1 (1 << 4) -#define HITMARKER_IGNORE_BIDE (1 << 5) -#define HITMARKER_DESTINYBOND (1 << 6) +#define STATUS1_CAN_MOVE (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE) +#define STATUS1_INCAPACITATED (STATUS1_SLEEP | STATUS1_FREEZE) +#define STATUS1_ICY_ANY (STATUS1_FREEZE | STATUS1_FROSTBITE) +#define STATUS1_DAMAGING (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_FROSTBITE) + +enum VolatileFlags +{ + V_BATON_PASSABLE = (1 << 0), +}; + +/* Volatile status ailments + * These are removed after exiting the battle or switching + * Enum, Type Type, max value, flags */ +#define VOLATILE_DEFINITIONS(F) \ + F(VOLATILE_CONFUSION, confusionTurns, (u32, 6), V_BATON_PASSABLE) \ + F(VOLATILE_FLINCHED, flinched, (u32, 1)) \ + F(VOLATILE_UPROAR, uproarTurns, (u32, 5)) \ + F(VOLATILE_TORMENT, torment, (u32, 1)) \ + F(VOLATILE_BIDE, bideTurns, (u32, 3)) \ + F(VOLATILE_LOCK_CONFUSE, lockConfusionTurns, (u32, 3)) \ + F(VOLATILE_MULTIPLETURNS, multipleTurns, (u32, 1)) \ + F(VOLATILE_WRAPPED, wrapped, (u32, 1)) \ + F(VOLATILE_WRAPPED_BY, wrappedBy, (enum BattlerId, MAX_BITS(4))) \ + F(VOLATILE_WRAPPED_MOVE, wrappedMove, (u32, MOVES_COUNT_ALL - 1)) \ + F(VOLATILE_POWDER, powder, (u32, 1)) \ + F(VOLATILE_UNUSED, padding, (u32, 1)) \ + F(VOLATILE_INFATUATION, infatuation, (enum BattlerId, MAX_BITS(4))) \ + F(VOLATILE_DEFENSE_CURL, defenseCurl, (u32, 1)) \ + F(VOLATILE_TRANSFORMED, transformed, (u32, 1)) \ + F(VOLATILE_RAGE, rage, (u32, 1)) \ + F(VOLATILE_SUBSTITUTE, substitute, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_DESTINY_BOND, destinyBond, (u32, 2)) \ + F(VOLATILE_ESCAPE_PREVENTION, escapePrevention, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_NIGHTMARE, nightmare, (u32, 1)) \ + F(VOLATILE_CURSED, cursed, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_FORESIGHT, foresight, (u32, 1)) \ + F(VOLATILE_DRAGON_CHEER, dragonCheer, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_FOCUS_ENERGY, focusEnergy, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_BONUS_CRIT_STAGES, bonusCritStages, (u32, 3)) \ + F(VOLATILE_SEMI_INVULNERABLE, semiInvulnerable, (u32, SEMI_INVULNERABLE_COUNT - 1)) \ + F(VOLATILE_ELECTRIFIED, electrified, (u32, 1)) \ + F(VOLATILE_MUD_SPORT, mudSport, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_WATER_SPORT, waterSport, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_INFINITE_CONFUSION, infiniteConfusion, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_SALT_CURE, saltCure, (u32, 1)) \ + F(VOLATILE_SYRUP_BOMB, syrupBomb, (u32, 1)) \ + F(VOLATILE_STICKY_SYRUPED_BY, stickySyrupedBy, (enum BattlerId, MAX_BITS(4))) \ + F(VOLATILE_GLAIVE_RUSH, glaiveRush, (u32, 1)) \ + F(VOLATILE_LEECH_SEED, leechSeed, (enum BattlerId, MAX_BITS(4)), V_BATON_PASSABLE) \ + F(VOLATILE_LOCK_ON, lockOn, (u32, 2), V_BATON_PASSABLE) \ + F(VOLATILE_PERISH_SONG, perishSong, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_MINIMIZE, minimize, (u32, 1)) \ + F(VOLATILE_CHARGE_TIMER, chargeTimer, (u32, 2)) \ + F(VOLATILE_ROOT, root, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_YAWN, yawn, (u32, 2)) \ + F(VOLATILE_IMPRISON, imprison, (u32, 1)) \ + F(VOLATILE_GRUDGE, grudge, (u32, 1)) \ + F(VOLATILE_GASTRO_ACID, gastroAcid, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_EMBARGO, embargo, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_SMACK_DOWN, smackDown, (u32, 1)) \ + F(VOLATILE_TELEKINESIS, telekinesis, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_MIRACLE_EYE, miracleEye, (u32, 1)) \ + F(VOLATILE_MAGNET_RISE, magnetRise, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_HEAL_BLOCK, healBlock, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_AQUA_RING, aquaRing, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_LASER_FOCUS, laserFocus, (u32, 1)) \ + F(VOLATILE_POWER_TRICK, powerTrick, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_NO_RETREAT, noRetreat, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_VESSEL_OF_RUIN, vesselOfRuin, (u32, 1)) \ + F(VOLATILE_SWORD_OF_RUIN, swordOfRuin, (u32, 1)) \ + F(VOLATILE_TABLETS_OF_RUIN, tabletsOfRuin, (u32, 1)) \ + F(VOLATILE_BEADS_OF_RUIN, beadsOfRuin, (u32, 1)) + + +/* Use within a macro to get the maximum allowed value for a volatile. Requires _typeMaxValue as input. */ +#define GET_VOLATILE_MAXIMUM(_typeMaxValue, ...) INVOKE_WITH_B(GET_VOLATILE_MAXIMUM_, _typeMaxValue) +#define GET_VOLATILE_MAXIMUM_(_type, ...) FIRST(__VA_OPT__(FIRST(__VA_ARGS__),) MAX_BITS((sizeof(_type) * 8))) + +#define UNPACK_VOLATILE_ENUMS(_enum, ...) _enum, + +enum Volatile +{ + VOLATILE_NONE, + VOLATILE_DEFINITIONS(UNPACK_VOLATILE_ENUMS) + /* Expands to VOLATILE_CONFUSION, VOLATILE_FLINCHED, etc. */ +}; + +// Helper macros +#define INFATUATED_WITH(battler) (battler + 1) +#define LEECHSEEDED_BY(battler) (battler + 1) + +enum SemiInvulnerableState +{ + STATE_NONE, + STATE_UNDERGROUND, + STATE_UNDERWATER, + STATE_ON_AIR, + STATE_PHANTOM_FORCE, + STATE_SKY_DROP, + STATE_COMMANDER, + SEMI_INVULNERABLE_COUNT, +}; + +enum SemiInvulnerableExclusion +{ + CHECK_ALL, + EXCLUDE_COMMANDER, +}; + #define HITMARKER_NO_ANIMATIONS (1 << 7) // set from battleSceneOff. Never changed during battle -#define HITMARKER_IGNORE_SUBSTITUTE (1 << 8) -#define HITMARKER_NO_ATTACKSTRING (1 << 9) -#define HITMARKER_ATTACKSTRING_PRINTED (1 << 10) -#define HITMARKER_NO_PPDEDUCT (1 << 11) -#define HITMARKER_UNUSED_2 (1 << 12) -#define HITMARKER_STATUS_ABILITY_EFFECT (1 << 13) -#define HITMARKER_SYNCHRONIZE_EFFECT (1 << 14) +#define HITMARKER_UNUSED_8 (1 << 8) +#define HITMARKER_UNUSED_9 (1 << 9) +#define HITMARKER_UNUSED_10 (1 << 10) +#define HITMARKER_UNUSED_11 (1 << 11) +#define HITMARKER_UNUSED_12 (1 << 12) +#define HITMARKER_UNUSED_13 (1 << 13) +#define HITMARKER_UNUSED_14 (1 << 14) #define HITMARKER_RUN (1 << 15) -#define HITMARKER_IGNORE_DISGUISE (1 << 16) +#define HITMARKER_UNUSED_16 (1 << 16) #define HITMARKER_DISABLE_ANIMATION (1 << 17) // disable animations during battle scripts, e.g. for Bug Bite -#define HITMARKER_UNUSED_3 (1 << 18) +#define HITMARKER_UNUSED_18 (1 << 18) #define HITMARKER_UNABLE_TO_USE_MOVE (1 << 19) -#define HITMARKER_PASSIVE_DAMAGE (1 << 20) -#define HITMARKER_UNUSED_4 (1 << 21) +#define HITMARKER_UNUSED_20 (1 << 20) +#define HITMARKER_UNUSED_21 (1 << 21) #define HITMARKER_PLAYER_FAINTED (1 << 22) -#define HITMARKER_ALLOW_NO_PP (1 << 23) -#define HITMARKER_GRUDGE (1 << 24) +#define HITMARKER_UNUSED_23 (1 << 23) +#define HITMARKER_UNUSED_24 (1 << 24) #define HITMARKER_OBEYS (1 << 25) -#define HITMARKER_UNUSED_5 (1 << 26) -#define HITMARKER_CHARGING (1 << 27) -#define HITMARKER_FAINTED(battler) (1u << (battler + 28)) -#define HITMARKER_FAINTED2(battler) HITMARKER_FAINTED(battler) -#define HITMARKER_STRING_PRINTED (1 << 29) +#define HITMARKER_UNUSED_26 (1 << 26) +#define HITMARKER_UNUSED_27 (1 << 27) +#define HITMARKER_FAINTED(battler) (1u << (battler + 28)) // Also uses bits 29, 30 and 31 // Per-side statuses that affect an entire party #define SIDE_STATUS_REFLECT (1 << 0) #define SIDE_STATUS_LIGHTSCREEN (1 << 1) -#define SIDE_STATUS_STICKY_WEB (1 << 2) -#define SIDE_STATUS_SPIKES (1 << 4) -#define SIDE_STATUS_SAFEGUARD (1 << 5) -#define SIDE_STATUS_FUTUREATTACK (1 << 6) -#define SIDE_STATUS_MIST (1 << 8) -// (1 << 9) previously was SIDE_STATUS_SPIKES_DAMAGED -#define SIDE_STATUS_TAILWIND (1 << 10) -#define SIDE_STATUS_AURORA_VEIL (1 << 11) -#define SIDE_STATUS_LUCKY_CHANT (1 << 12) -#define SIDE_STATUS_TOXIC_SPIKES (1 << 13) -#define SIDE_STATUS_STEALTH_ROCK (1 << 14) -// Missing flags previously were SIDE_STATUS_TOXIC_SPIKES_DAMAGED, SIDE_STATUS_STEALTH_ROCK_DAMAGED, SIDE_STATUS_STICKY_WEB_DAMAGED -#define SIDE_STATUS_STEELSURGE (1 << 18) -#define SIDE_STATUS_DAMAGE_NON_TYPES (1 << 19) -#define SIDE_STATUS_RAINBOW (1 << 20) -#define SIDE_STATUS_SEA_OF_FIRE (1 << 21) -#define SIDE_STATUS_SWAMP (1 << 22) - -#define SIDE_STATUS_HAZARDS_ANY (SIDE_STATUS_SPIKES | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STEELSURGE) +#define SIDE_STATUS_SAFEGUARD (1 << 2) +#define SIDE_STATUS_MIST (1 << 3) +#define SIDE_STATUS_TAILWIND (1 << 4) +#define SIDE_STATUS_AURORA_VEIL (1 << 5) +#define SIDE_STATUS_LUCKY_CHANT (1 << 6) +#define SIDE_STATUS_DAMAGE_NON_TYPES (1 << 7) +#define SIDE_STATUS_RAINBOW (1 << 8) +#define SIDE_STATUS_SEA_OF_FIRE (1 << 9) +#define SIDE_STATUS_SWAMP (1 << 10) + #define SIDE_STATUS_SCREEN_ANY (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL) #define SIDE_STATUS_PLEDGE_ANY (SIDE_STATUS_RAINBOW | SIDE_STATUS_SEA_OF_FIRE | SIDE_STATUS_SWAMP) +#define SIDE_STATUS_GOOD_FOG (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST) +#define SIDE_STATUS_GOOD_COURT (SIDE_STATUS_GOOD_FOG | SIDE_STATUS_TAILWIND | SIDE_STATUS_LUCKY_CHANT | SIDE_STATUS_RAINBOW) +#define SIDE_STATUS_BAD_COURT (SIDE_STATUS_DAMAGE_NON_TYPES | SIDE_STATUS_SEA_OF_FIRE | SIDE_STATUS_SWAMP) + +enum Hazards +{ + HAZARDS_NONE, + HAZARDS_SPIKES, + HAZARDS_STICKY_WEB, + HAZARDS_TOXIC_SPIKES, + HAZARDS_STEALTH_ROCK, + HAZARDS_STEELSURGE, + HAZARDS_MAX_COUNT, +}; // Used for damaging entry hazards based on type enum TypeSideHazard @@ -294,6 +344,7 @@ enum TypeSideHazard #define MOVE_RESULT_FOE_HUNG_ON (1 << 7) #define MOVE_RESULT_STURDIED (1 << 8) #define MOVE_RESULT_FOE_ENDURED_AFFECTION (1 << 9) +#define MOVE_RESULT_SYNCHRONOISE_AFFECTED (1 << 10) #define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED) enum BattleWeather @@ -327,24 +378,27 @@ enum BattleWeather #define B_WEATHER_STRONG_WINDS (1 << BATTLE_WEATHER_STRONG_WINDS) #define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW | B_WEATHER_FOG) +#define B_WEATHER_DAMAGING_ANY (B_WEATHER_HAIL | B_WEATHER_SANDSTORM) +#define B_WEATHER_ICY_ANY (B_WEATHER_HAIL | B_WEATHER_SNOW) +#define B_WEATHER_LOW_LIGHT (B_WEATHER_FOG | B_WEATHER_ICY_ANY | B_WEATHER_RAIN | B_WEATHER_SANDSTORM) #define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS) -enum MoveEffects +// Explicit numbers until frostbite because those shouldn't be shifted +enum __attribute__((packed)) MoveEffect { - MOVE_EFFECT_NONE, - MOVE_EFFECT_SLEEP, - MOVE_EFFECT_POISON, - MOVE_EFFECT_BURN, - MOVE_EFFECT_FREEZE, - MOVE_EFFECT_PARALYSIS, - MOVE_EFFECT_TOXIC, - MOVE_EFFECT_FROSTBITE, + MOVE_EFFECT_NONE = 0, + MOVE_EFFECT_SLEEP = 1, + MOVE_EFFECT_POISON = 2, + MOVE_EFFECT_BURN = 3, + MOVE_EFFECT_FREEZE = 4, + MOVE_EFFECT_PARALYSIS = 5, + MOVE_EFFECT_TOXIC = 6, + MOVE_EFFECT_FROSTBITE = 7, MOVE_EFFECT_CONFUSION, MOVE_EFFECT_FLINCH, MOVE_EFFECT_TRI_ATTACK, MOVE_EFFECT_UPROAR, MOVE_EFFECT_PAYDAY, - MOVE_EFFECT_CHARGING, MOVE_EFFECT_WRAP, MOVE_EFFECT_ATK_PLUS_1, MOVE_EFFECT_DEF_PLUS_1, @@ -363,7 +417,6 @@ enum MoveEffects MOVE_EFFECT_REMOVE_ARG_TYPE, MOVE_EFFECT_RECHARGE, MOVE_EFFECT_RAGE, - MOVE_EFFECT_STEAL_ITEM, MOVE_EFFECT_PREVENT_ESCAPE, MOVE_EFFECT_NIGHTMARE, MOVE_EFFECT_ALL_STATS_UP, @@ -399,8 +452,6 @@ enum MoveEffects MOVE_EFFECT_TRAP_BOTH, MOVE_EFFECT_ROUND, MOVE_EFFECT_DIRE_CLAW, - MOVE_EFFECT_STEALTH_ROCK, - MOVE_EFFECT_SPIKES, MOVE_EFFECT_SYRUP_BOMB, MOVE_EFFECT_FLORAL_HEALING, MOVE_EFFECT_SECRET_POWER, @@ -414,6 +465,11 @@ enum MoveEffects MOVE_EFFECT_LIGHT_SCREEN, MOVE_EFFECT_SALT_CURE, MOVE_EFFECT_EERIE_SPELL, + + // Max move effects happen earlier in the execution chain. + // For example stealth rock from G-Max Stonesurge is set up before abilities but from Stone Axe after. + // Stone Axe can also fail to set up rocks if user faints where as Stonesurge will always go up. + // This means we need to be careful if we want to re-use those effects for (new) vanilla moves MOVE_EFFECT_RAISE_TEAM_ATTACK, MOVE_EFFECT_RAISE_TEAM_DEFENSE, MOVE_EFFECT_RAISE_TEAM_SPEED, @@ -455,51 +511,66 @@ enum MoveEffects MOVE_EFFECT_LOWER_EVASIVENESS_SIDE, MOVE_EFFECT_AROMATHERAPY, MOVE_EFFECT_CONFUSE_SIDE, - MOVE_EFFECT_STEELSURGE, + MOVE_EFFECT_STEELSURGE, // Steel type rocks + MOVE_EFFECT_STEALTH_ROCK, // Max Move rocks, not to be confused for rocks set up from Ceasless Edge (same but differ in execution order) MOVE_EFFECT_TORMENT_SIDE, MOVE_EFFECT_LOWER_SPEED_2_SIDE, MOVE_EFFECT_FIRE_SPIN_SIDE, MOVE_EFFECT_FIXED_POWER, + // Max move effects end. They can be used for (custom) normal moves. + NUM_MOVE_EFFECTS }; -#define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_FROSTBITE // All above move effects apply primary status #if B_USE_FROSTBITE == TRUE #define MOVE_EFFECT_FREEZE_OR_FROSTBITE MOVE_EFFECT_FROSTBITE #else #define MOVE_EFFECT_FREEZE_OR_FROSTBITE MOVE_EFFECT_FREEZE #endif -#define MOVE_EFFECT_AFFECTS_USER 0x2000 -#define MOVE_EFFECT_CERTAIN 0x4000 #define MOVE_EFFECT_CONTINUE 0x8000 // Battle environment defines for gBattleEnvironment. -#define BATTLE_ENVIRONMENT_GRASS 0 -#define BATTLE_ENVIRONMENT_LONG_GRASS 1 -#define BATTLE_ENVIRONMENT_SAND 2 -#define BATTLE_ENVIRONMENT_UNDERWATER 3 -#define BATTLE_ENVIRONMENT_WATER 4 -#define BATTLE_ENVIRONMENT_POND 5 -#define BATTLE_ENVIRONMENT_MOUNTAIN 6 -#define BATTLE_ENVIRONMENT_CAVE 7 -#define BATTLE_ENVIRONMENT_BUILDING 8 -#define BATTLE_ENVIRONMENT_PLAIN 9 -// New battle environments are used for Secret Power but not fully implemented. -#define BATTLE_ENVIRONMENT_SOARING 10 -#define BATTLE_ENVIRONMENT_SKY_PILLAR 11 -#define BATTLE_ENVIRONMENT_BURIAL_GROUND 12 -#define BATTLE_ENVIRONMENT_PUDDLE 13 -#define BATTLE_ENVIRONMENT_MARSH 14 -#define BATTLE_ENVIRONMENT_SWAMP 15 -#define BATTLE_ENVIRONMENT_SNOW 16 -#define BATTLE_ENVIRONMENT_ICE 17 -#define BATTLE_ENVIRONMENT_VOLCANO 18 -#define BATTLE_ENVIRONMENT_DISTORTION_WORLD 19 -#define BATTLE_ENVIRONMENT_SPACE 20 -#define BATTLE_ENVIRONMENT_ULTRA_SPACE 21 - -#define BATTLE_ENVIRONMENT_COUNT 22 +enum BattleEnvironments +{ + BATTLE_ENVIRONMENT_GRASS, + BATTLE_ENVIRONMENT_LONG_GRASS, + BATTLE_ENVIRONMENT_SAND, + BATTLE_ENVIRONMENT_UNDERWATER, + BATTLE_ENVIRONMENT_WATER, + BATTLE_ENVIRONMENT_POND, + BATTLE_ENVIRONMENT_MOUNTAIN, + BATTLE_ENVIRONMENT_CAVE, + BATTLE_ENVIRONMENT_BUILDING, + BATTLE_ENVIRONMENT_PLAIN, + BATTLE_ENVIRONMENT_FRONTIER, + BATTLE_ENVIRONMENT_GYM, + BATTLE_ENVIRONMENT_LEADER, + BATTLE_ENVIRONMENT_MAGMA, + BATTLE_ENVIRONMENT_AQUA, + BATTLE_ENVIRONMENT_SIDNEY, + BATTLE_ENVIRONMENT_PHOEBE, + BATTLE_ENVIRONMENT_GLACIA, + BATTLE_ENVIRONMENT_DRAKE, + BATTLE_ENVIRONMENT_CHAMPION, + BATTLE_ENVIRONMENT_GROUDON, + BATTLE_ENVIRONMENT_KYOGRE, + BATTLE_ENVIRONMENT_RAYQUAZA, + // New battle environments are used for Secret Power but not fully implemented. + BATTLE_ENVIRONMENT_SOARING, + BATTLE_ENVIRONMENT_SKY_PILLAR, + BATTLE_ENVIRONMENT_BURIAL_GROUND, + BATTLE_ENVIRONMENT_PUDDLE, + BATTLE_ENVIRONMENT_MARSH, + BATTLE_ENVIRONMENT_SWAMP, + BATTLE_ENVIRONMENT_SNOW, + BATTLE_ENVIRONMENT_ICE, + BATTLE_ENVIRONMENT_VOLCANO, + BATTLE_ENVIRONMENT_DISTORTION_WORLD, + BATTLE_ENVIRONMENT_SPACE, + BATTLE_ENVIRONMENT_ULTRA_SPACE, + BATTLE_ENVIRONMENT_COUNT, +}; #define B_WAIT_TIME_LONG (B_WAIT_TIME_MULTIPLIER * 4) #define B_WAIT_TIME_MED (B_WAIT_TIME_MULTIPLIER * 3) @@ -587,6 +658,17 @@ enum MoveEffects // Constants for Torment #define PERMANENT_TORMENT 0xF +enum FaintedActions +{ + FAINTED_ACTIONS_NO_MONS_TO_SWITCH, + FAINTED_ACTIONS_GIVE_EXP, + FAINTED_ACTIONS_SET_ABSENT_FLAGS, + FAINTED_ACTIONS_WAIT_STATE, + FAINTED_ACTIONS_HANDLE_FAINTED_MON, + FAINTED_ACTIONS_HANDLE_NEXT_BATTLER, + FAINTED_ACTIONS_MAX_CASE, +}; + // Constants for B_VAR_STARTING_STATUS // Timer value controlled by B_VAR_STARTING_STATUS_TIMER enum StartingStatus @@ -621,4 +703,18 @@ enum MonState MON_OUTSIDE_BATTLE, }; +enum __attribute__((packed)) CalcDamageState +{ + CAN_DAMAGE, + WILL_FAIL, + CHECK_ACCURACY, +}; + +enum SubmoveState +{ + SUBMOVE_NO_EFFECT, + SUBMOVE_SUCCESS, + SUBMOVE_FAILURE, +}; + #endif // GUARD_CONSTANTS_BATTLE_H diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 2f97ab22342b..89cfd08ed014 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -3,52 +3,54 @@ // AI Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts // See docs/ai_flags.md for more details. -#define AI_FLAG_CHECK_BAD_MOVE (1 << 0) // AI will avoid using moves that are likely to fail or be ineffective in the current situation. -#define AI_FLAG_TRY_TO_FAINT (1 << 1) // AI will prioritize KOing the player's mon if able. -#define AI_FLAG_CHECK_VIABILITY (1 << 2) // AI damaging moves and move effects to determine the best available move in the current situation. -#define AI_FLAG_FORCE_SETUP_FIRST_TURN (1 << 3) // AI will prioritize using setup moves on the first turn at the expensve of all else. AI_FLAG_CHECK_VIABILITY will instead do this when the AI determines it makes sense. -#define AI_FLAG_RISKY (1 << 4) // AI will generally behave more recklessly, prioritizing damage over accuracy, explosions, etc. -#define AI_FLAG_TRY_TO_2HKO (1 << 5) // AI adds score bonus to any move the AI has that either OHKOs or 2HKOs the player. -#define AI_FLAG_PREFER_BATON_PASS (1 << 6) // AI prefers raising its own stats and setting for / using Baton Pass. -#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // Automatically set for double battles, handles AI behaviour with partner. -#define AI_FLAG_HP_AWARE (1 << 8) // AI will favour certain move effects based on how much remaining HP it and the player's mon have. -#define AI_FLAG_POWERFUL_STATUS (1 << 9) // AI prefers moves that set up field effects or side statuses, even if the user can faint the target. +#define AI_FLAG(x) ((u64)1 << x) + +#define AI_FLAG_CHECK_BAD_MOVE AI_FLAG(0) // AI will avoid using moves that are likely to fail or be ineffective in the current situation. +#define AI_FLAG_TRY_TO_FAINT AI_FLAG(1) // AI will prioritize KOing the player's mon if able. +#define AI_FLAG_CHECK_VIABILITY AI_FLAG(2) // AI damaging moves and move effects to determine the best available move in the current situation. +#define AI_FLAG_FORCE_SETUP_FIRST_TURN AI_FLAG(3) // AI will prioritize using setup moves on the first turn at the expensve of all else. AI_FLAG_CHECK_VIABILITY will instead do this when the AI determines it makes sense. +#define AI_FLAG_RISKY AI_FLAG(4) // AI will generally behave more recklessly, prioritizing damage over accuracy, explosions, etc. +#define AI_FLAG_TRY_TO_2HKO AI_FLAG(5) // AI adds score bonus to any move the AI has that either OHKOs or 2HKOs the player. +#define AI_FLAG_PREFER_BATON_PASS AI_FLAG(6) // AI prefers raising its own stats and setting for / using Baton Pass. +#define AI_FLAG_DOUBLE_BATTLE AI_FLAG(7) // Automatically set for double battles, handles AI behaviour with partner. +#define AI_FLAG_HP_AWARE AI_FLAG(8) // AI will favour certain move effects based on how much remaining HP it and the player's mon have. +#define AI_FLAG_POWERFUL_STATUS AI_FLAG(9) // AI prefers moves that set up field effects or side statuses, even if the user can faint the target. // New, Trainer Handicap Flags -#define AI_FLAG_NEGATE_UNAWARE (1 << 10) // AI is NOT aware of negating effects like wonder room, mold breaker, etc. -#define AI_FLAG_WILL_SUICIDE (1 << 11) // AI will use explosion / self destruct / final gambit / etc. +#define AI_FLAG_NEGATE_UNAWARE AI_FLAG(10) // AI is NOT aware of negating effects like wonder room, mold breaker, etc. +#define AI_FLAG_WILL_SUICIDE AI_FLAG(11) // AI will use explosion / self destruct / final gambit / etc. // New, Trainer Strategy Flags -#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves. -#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished. -#define AI_FLAG_SMART_SWITCHING (1 << 14) // AI includes a lot more switching checks. Automatically includes AI_FLAG_SMART_MON_CHOICES. -#define AI_FLAG_ACE_POKEMON (1 << 15) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining. -#define AI_FLAG_OMNISCIENT (1 << 16) // AI has full knowledge of player moves, abilities, hold items. -#define AI_FLAG_SMART_MON_CHOICES (1 << 17) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING. -#define AI_FLAG_CONSERVATIVE (1 << 18) // AI assumes all moves will low roll damage. -#define AI_FLAG_SEQUENCE_SWITCHING (1 << 19) // AI switches in mons in exactly party order, and never switches mid-battle. -#define AI_FLAG_DOUBLE_ACE_POKEMON (1 << 20) // AI has *two* Ace PokΓ©mon. The last two PokΓ©mons in the party won't be used unless they're the last ones remaining. Goes well in battles where the trainer ID equals to twins, couples, etc. -#define AI_FLAG_WEIGH_ABILITY_PREDICTION (1 << 21) // AI will predict player's ability based on aiRating -#define AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE (1 << 22) // AI adds score to highest damage move regardless of accuracy or secondary effect -#define AI_FLAG_PREDICT_SWITCH (1 << 23) // AI will predict the player's switches and switchins based on how it would handle the situation. Recommend using AI_FLAG_OMNISCIENT -#define AI_FLAG_PREDICT_INCOMING_MON (1 << 24) // AI will score against the predicting incoming mon if it predicts the player to switch. Requires AI_FLAG_PREDICT_SWITCH -#define AI_FLAG_PP_STALL_PREVENTION (1 << 25) // AI keeps track of the player's switches where the incoming mon is immune to the chosen move -#define AI_FLAG_PREDICT_MOVE (1 << 26) // AI will predict the player's move based on what move it would use in the same situation. Recommend using AI_FLAG_OMNISCIENT - -// Flags at and after 32 need different formatting, as in -// #define AI_FLAG_PLACEHOLDER ((u64)1 << 32) - - -#define AI_FLAG_COUNT 27 +#define AI_FLAG_PREFER_STATUS_MOVES AI_FLAG(12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves. +#define AI_FLAG_STALL AI_FLAG(13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished. +#define AI_FLAG_SMART_SWITCHING AI_FLAG(14) // AI includes a lot more switching checks. Automatically includes AI_FLAG_SMART_MON_CHOICES. +#define AI_FLAG_ACE_POKEMON AI_FLAG(15) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining. +#define AI_FLAG_OMNISCIENT AI_FLAG(16) // AI has full knowledge of player moves, abilities, hold items. +#define AI_FLAG_SMART_MON_CHOICES AI_FLAG(17) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING. +#define AI_FLAG_CONSERVATIVE AI_FLAG(18) // AI assumes all moves will low roll damage. +#define AI_FLAG_SEQUENCE_SWITCHING AI_FLAG(19) // AI switches in mons in exactly party order, and never switches mid-battle. +#define AI_FLAG_DOUBLE_ACE_POKEMON AI_FLAG(20) // AI has *two* Ace PokΓ©mon. The last two PokΓ©mons in the party won't be used unless they're the last ones remaining. Goes well in battles where the trainer ID equals to twins, couples, etc. +#define AI_FLAG_WEIGH_ABILITY_PREDICTION AI_FLAG(21) // AI will predict player's ability based on aiRating +#define AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE AI_FLAG(22) // AI adds score to highest damage move regardless of accuracy or secondary effect +#define AI_FLAG_PREDICT_SWITCH AI_FLAG(23) // AI will predict the player's switches and switchins based on how it would handle the situation. Recommend using AI_FLAG_OMNISCIENT +#define AI_FLAG_PREDICT_INCOMING_MON AI_FLAG(24) // AI will score against the predicting incoming mon if it predicts the player to switch. Requires AI_FLAG_PREDICT_SWITCH +#define AI_FLAG_PP_STALL_PREVENTION AI_FLAG(25) // AI keeps track of the player's switches where the incoming mon is immune to the chosen move +#define AI_FLAG_PREDICT_MOVE AI_FLAG(26) // AI will predict the player's move based on what move it would use in the same situation. Recommend using AI_FLAG_OMNISCIENT +#define AI_FLAG_SMART_TERA AI_FLAG(27) // AI will make smarter decisions when choosing whether to terrastalize (default is to always tera whenever available). +#define AI_FLAG_ASSUME_STAB AI_FLAG(28) // AI knows player's STAB moves, but nothing else. Restricted version of AI_FLAG_OMNISCIENT. +#define AI_FLAG_ASSUME_STATUS_MOVES AI_FLAG(29) // AI has a chance to know certain non-damaging moves, and also Fake Out and Super Fang. Restricted version of AI_FLAG_OMNISCIENT. +#define AI_FLAG_ATTACKS_PARTNER AI_FLAG(30) // AI specific to double battles; AI can deliberately attack its 'partner.' +#define AI_FLAG_KNOW_OPPONENT_PARTY AI_FLAG(31) // AI knows all the species in the player's party, but not moves/items/abilities unless they've been seen. // The following options are enough to have a basic/smart trainer. Any other addtion could make the trainer worse/better depending on the flag #define AI_FLAG_BASIC_TRAINER (AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY) -#define AI_FLAG_SMART_TRAINER (AI_FLAG_BASIC_TRAINER | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION) +#define AI_FLAG_SMART_TRAINER (AI_FLAG_BASIC_TRAINER | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION | AI_FLAG_SMART_TERA) #define AI_FLAG_PREDICTION (AI_FLAG_PREDICT_SWITCH | AI_FLAG_PREDICT_INCOMING_MON | AI_FLAG_PREDICT_MOVE) +#define AI_FLAG_ASSUMPTIONS (AI_FLAG_ASSUME_STAB | AI_FLAG_ASSUME_STATUS_MOVES | AI_FLAG_WEIGH_ABILITY_PREDICTION) // 'other' ai logic flags -#define AI_FLAG_DYNAMIC_FUNC ((u64)1 << 60) // Create custom AI functions for specific battles via "setdynamicaifunc" cmd -#define AI_FLAG_ROAMING ((u64)1 << 61) -#define AI_FLAG_SAFARI ((u64)1 << 62) -#define AI_FLAG_FIRST_BATTLE ((u64)1 << 63) +#define AI_FLAG_DYNAMIC_FUNC AI_FLAG(60) // Create custom AI functions for specific battles via "setdynamicaifunc" cmd +#define AI_FLAG_ROAMING AI_FLAG(61) +#define AI_FLAG_SAFARI AI_FLAG(62) +#define AI_FLAG_FIRST_BATTLE AI_FLAG(63) #define AI_SCORE_DEFAULT 100 // Default score for all AI moves. diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index c85dcc9fe79e..6ac604798f57 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -419,6 +419,10 @@ #define ANIM_TAG_PINKVIO_ORB (ANIM_SPRITES_START + 405) #define ANIM_TAG_STARSTORM (ANIM_SPRITES_START + 406) #define ANIM_TAG_SALT_PARTICLE (ANIM_SPRITES_START + 407) +#define ANIM_TAG_TERA_SYMBOL (ANIM_SPRITES_START + 408) +#define ANIM_TAG_TATSUGIRI_CURLY (ANIM_SPRITES_START + 409) +#define ANIM_TAG_TATSUGIRI_DROOPY (ANIM_SPRITES_START + 410) +#define ANIM_TAG_TATSUGIRI_STRETCHY (ANIM_SPRITES_START + 411) // battlers #define ANIM_ATTACKER 0 @@ -529,8 +533,9 @@ #define BG_STEEL_BEAM_OPPONENT 78 #define BG_STEEL_BEAM_PLAYER 79 #define BG_CHLOROBLAST 80 -#define BG_RAINBOW 81 -#define BG_SWAMP 82 +#define BG_RAINBOW_PLAYER 81 +#define BG_RAINBOW_OPPONENT 82 +#define BG_SWAMP 83 // table ids for general animations (sBattleAnims_General) #define B_ANIM_STATS_CHANGE 0 @@ -587,8 +592,9 @@ #define B_ANIM_TERA_ACTIVATE 51 #define B_ANIM_SIMPLE_HEAL 52 #define B_ANIM_POWER_CONSTRUCT 53 - -#define NUM_B_ANIMS_GENERAL 54 +#define B_ANIM_SWAP_TO_SUBSTITUTE 54 +#define B_ANIM_SWAP_FROM_SUBSTITUTE 55 +#define NUM_B_ANIMS_GENERAL 56 // special animations table (sBattleAnims_Special) #define B_ANIM_LVL_UP 0 @@ -612,8 +618,9 @@ #define B_ANIM_STATUS_FRZ 6 #define B_ANIM_STATUS_CURSED 7 #define B_ANIM_STATUS_NIGHTMARE 8 +#define B_ANIM_STATUS_FRB 9 -#define NUM_B_ANIMS_STATUS 9 +#define NUM_B_ANIMS_STATUS 10 // Tasks with return values often assign them to gBattleAnimArgs[7]. #define ARG_RET_ID 7 @@ -657,6 +664,20 @@ #define ANIM_SURF_PAL_MUDDY_WATER 1 #define ANIM_SURF_PAL_SLUDGE_WAVE 2 +// Order Up palettes for Commander +#define ANIM_ORDER_UP_NONE 0 +#define ANIM_ORDER_UP_CURLY 1 +#define ANIM_ORDER_UP_DROOPY 2 +#define ANIM_ORDER_UP_STRETCHY 3 + +// AnimTask_TransformMon variations +enum SpeciesGfxChange +{ + SPECIES_GFX_CHANGE_TRANSFORM, + SPECIES_GFX_CHANGE_FORM_CHANGE, + SPECIES_GFX_CHANGE_ILLUSION_OFF, +}; + // Flags given to various functions to indicate which palettes to consider. // Handled by UnpackSelectedBattlePalettes #define F_PAL_BG (1 << 0) diff --git a/include/constants/battle_end_turn.h b/include/constants/battle_end_turn.h new file mode 100644 index 000000000000..81c0409ecda8 --- /dev/null +++ b/include/constants/battle_end_turn.h @@ -0,0 +1,92 @@ +#ifndef GUARD_CONSTANTS_BATTLE_END_TURN_H +#define GUARD_CONSTANTS_BATTLE_END_TURN_H + +// General End Turn Effects based on research from smogon from vanilla games: +// https://www.smogon.com/forums/threads/sword-shield-battle-mechanics-research.3655528/page-64#post-9244179 +enum EndTurnResolutionOrder +{ + ENDTURN_ORDER, + ENDTURN_VARIOUS, + ENDTURN_WEATHER, + ENDTURN_WEATHER_DAMAGE, + ENDTURN_EMERGENCY_EXIT_1, + ENDTURN_AFFECTION, + ENDTURN_FUTURE_SIGHT, + ENDTURN_WISH, + ENDTURN_FIRST_EVENT_BLOCK, + ENDTURN_EMERGENCY_EXIT_2, + ENDTURN_AQUA_RING, + ENDTURN_INGRAIN, + ENDTURN_LEECH_SEED, + ENDTURN_POISON, + ENDTURN_BURN, + ENDTURN_FROSTBITE, + ENDTURN_NIGHTMARE, + ENDTURN_CURSE, + ENDTURN_WRAP, + ENDTURN_SALT_CURE, + ENDTURN_OCTOLOCK, + ENDTURN_SYRUP_BOMB, + ENDTURN_TAUNT, + ENDTURN_TORMENT, + ENDTURN_ENCORE, + ENDTURN_DISABLE, + ENDTURN_MAGNET_RISE, + ENDTURN_TELEKINESIS, + ENDTURN_HEAL_BLOCK, + ENDTURN_EMBARGO, + ENDTURN_YAWN, + ENDTURN_PERISH_SONG, + ENDTURN_ROOST, + ENDTURN_EMERGENCY_EXIT_3, + ENDTURN_SECOND_EVENT_BLOCK, + ENDTURN_TRICK_ROOM, + ENDTURN_GRAVITY, + ENDTURN_WATER_SPORT, + ENDTURN_MUD_SPORT, + ENDTURN_WONDER_ROOM, + ENDTURN_MAGIC_ROOM, + ENDTURN_TERRAIN, + ENDTURN_THIRD_EVENT_BLOCK, + ENDTURN_EMERGENCY_EXIT_4, + ENDTURN_FORM_CHANGE_ABILITIES, + ENDTURN_EJECT_PACK, + ENDTURN_DYNAMAX, + ENDTURN_COUNT, +}; + +// Block that handles effects for each individual battler on the field (eg residual damage) +enum FirstEventBlock +{ + FIRST_EVENT_BLOCK_GMAX_MOVE_RESIDUAL, // Needs to be split + FIRST_EVENT_BLOCK_SEA_OF_FIRE_DAMAGE, + FIRST_EVENT_BLOCK_THRASH, // Thrash isn't handled here in vanilla but for now it is that best place for it. + FIRST_EVENT_BLOCK_GRASSY_TERRAIN_HEAL, + FIRST_EVENT_BLOCK_ABILITIES, + FIRST_EVENT_BLOCK_HEAL_ITEMS, +}; + +// Block that tries to remove side statuses +enum SecondEventBlock +{ + SECOND_EVENT_BLOCK_REFLECT, + SECOND_EVENT_BLOCK_LIGHT_SCREEN, + SECOND_EVENT_BLOCK_SAFEGUARD, + SECOND_EVENT_BLOCK_MIST, + SECOND_EVENT_BLOCK_TAILWIND, + SECOND_EVENT_BLOCK_LUCKY_CHANT, + SECOND_EVENT_BLOCK_RAINBOW, + SECOND_EVENT_BLOCK_SEA_OF_FIRE, + SECOND_EVENT_BLOCK_SWAMP, + SECOND_EVENT_BLOCK_AURORA_VEIL, +}; + +// Block that handles Uproar, items and non-form changing abilities +enum ThirdEventBlock +{ + THIRD_EVENT_BLOCK_UPROAR, + THIRD_EVENT_BLOCK_ABILITIES, + THIRD_EVENT_BLOCK_ITEMS, +}; + +#endif // GUARD_CONSTANTS_BATTLE_END_TURN_H diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index d081d3a16302..d1d76756031e 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -1,14 +1,15 @@ #ifndef GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H #define GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H -enum BattleMoveEffects +enum __attribute__((packed)) BattleMoveEffects { EFFECT_PLACEHOLDER, EFFECT_HIT, EFFECT_NON_VOLATILE_STATUS, EFFECT_ABSORB, EFFECT_EXPLOSION, - EFFECT_DREAM_EATER, + EFFECT_MISTY_EXPLOSION, // Same as EFFECT_EXPLOSION but it's boosted on Misty Terrain + EFFECT_DREAM_EATER, // Same as EFFECT_ABSORB but it can only be used on sleeping targets EFFECT_MIRROR_MOVE, EFFECT_ATTACK_UP, EFFECT_DEFENSE_UP, @@ -34,9 +35,10 @@ enum BattleMoveEffects EFFECT_LIGHT_SCREEN, EFFECT_REST, EFFECT_OHKO, + EFFECT_SHEER_COLD, // Same as EFFECT_OHKO but Ice-types are immune to it and has decreased accuracy for non Ice-type users. EFFECT_FUSION_COMBO, - EFFECT_SUPER_FANG, - EFFECT_FIXED_DAMAGE_ARG, + EFFECT_FIXED_PERCENT_DAMAGE, + EFFECT_FIXED_HP_DAMAGE, EFFECT_HEAL_BLOCK, EFFECT_RECOIL_IF_MISS, EFFECT_MIST, @@ -90,6 +92,7 @@ enum BattleMoveEffects EFFECT_MINIMIZE, EFFECT_CURSE, EFFECT_HEALING_WISH, + EFFECT_LUNAR_DANCE, // Same as EFFECT_HEALING_WISH, but also heals PP. EFFECT_PROTECT, EFFECT_SPIKES, EFFECT_FORESIGHT, @@ -131,7 +134,7 @@ enum BattleMoveEffects EFFECT_STOCKPILE, EFFECT_SPIT_UP, EFFECT_SWALLOW, - EFFECT_WORRY_SEED, + EFFECT_OVERWRITE_ABILITY, EFFECT_HAIL, EFFECT_TORMENT, EFFECT_FLATTER, @@ -155,6 +158,7 @@ enum BattleMoveEffects EFFECT_BRICK_BREAK, EFFECT_YAWN, EFFECT_KNOCK_OFF, + EFFECT_STEAL_ITEM, EFFECT_ENDEAVOR, EFFECT_POWER_BASED_ON_USER_HP, EFFECT_SKILL_SWAP, @@ -215,7 +219,6 @@ enum BattleMoveEffects EFFECT_METAL_BURST, EFFECT_LUCKY_CHANT, EFFECT_SUCKER_PUNCH, - EFFECT_SIMPLE_BEAM, EFFECT_ENTRAINMENT, EFFECT_HEAL_PULSE, EFFECT_QUASH, @@ -279,7 +282,6 @@ enum BattleMoveEffects EFFECT_GEOMANCY, EFFECT_FAIRY_LOCK, EFFECT_ALLY_SWITCH, - EFFECT_RELIC_SONG, EFFECT_BODY_PRESS, EFFECT_JUNGLE_HEALING, EFFECT_COACHING, @@ -307,10 +309,8 @@ enum BattleMoveEffects EFFECT_BEAK_BLAST, EFFECT_COURT_CHANGE, EFFECT_MAX_HP_50_RECOIL, - EFFECT_MIND_BLOWN, // Same as EFFECT_MAX_HP_50_RECOIL but is cancelled by Damp EFFECT_CHLOROBLAST, // Same effect as EFFECT_MAX_HP_50_RECOIL but follows the same rules as EFFECT_RECOIL EFFECT_EXTREME_EVOBOOST, - EFFECT_HIT_SET_REMOVE_TERRAIN, EFFECT_DARK_VOID, EFFECT_VICTORY_DANCE, EFFECT_TEATIME, @@ -342,13 +342,17 @@ enum BattleMoveEffects EFFECT_TERA_BLAST, EFFECT_TERA_STARSTORM, EFFECT_DRAGON_DARTS, - EFFECT_GUARDIAN_OF_ALOLA, EFFECT_SHELL_SIDE_ARM, EFFECT_ORDER_UP, EFFECT_RAPID_SPIN, EFFECT_SPECTRAL_THIEF, EFFECT_RECOIL, EFFECT_SMACK_DOWN, + EFFECT_LIFE_DEW, + EFFECT_ICE_SPINNER, // Removes terrain unless attacker is removed from field either by fainting or ejected out + EFFECT_STEEL_ROLLER, // Will fail if there is no terrain up but removes it regardless if attacker is removed from field or not + EFFECT_STONE_AXE, // Not to be confused with MOVE_EFFECT_STEALTH_ROCK. They have two different activation timings. + EFFECT_CEASELESS_EDGE, // Same applies to spikes NUM_BATTLE_MOVE_EFFECTS, }; diff --git a/include/constants/battle_pyramid.h b/include/constants/battle_pyramid.h index ac80a2d7d399..08fa695cf298 100644 --- a/include/constants/battle_pyramid.h +++ b/include/constants/battle_pyramid.h @@ -43,7 +43,7 @@ #define BATTLE_PYRAMID_FUNC_SET_TRAINERS 9 #define BATTLE_PYRAMID_FUNC_SHOW_HINT_TEXT 10 #define BATTLE_PYRAMID_FUNC_UPDATE_STREAK 11 // unused -#define BATTLE_PYRAMID_FUNC_IS_IN 12 +#define BATTLE_PYRAMID_FUNC_CURRENT_LOCATION 12 #define BATTLE_PYRAMID_FUNC_UPDATE_LIGHT 13 #define BATTLE_PYRAMID_FUNC_CLEAR_HELD_ITEMS 14 #define BATTLE_PYRAMID_FUNC_SET_FLOOR_PALETTE 15 @@ -62,4 +62,8 @@ #define PYRAMID_LIGHT_SET_RADIUS 0 #define PYRAMID_LIGHT_INCR_RADIUS 1 +#define PYRAMID_LOCATION_NONE 0 // Not in the Pyramid +#define PYRAMID_LOCATION_FLOOR 1 +#define PYRAMID_LOCATION_TOP 2 + #endif // GUARD_CONSTANTS_BATTLE_PYRAMID_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 2b0287be40ea..234ebad0b21b 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -31,9 +31,9 @@ #define sSPECIAL_TRAINER_BATTLE_TYPE (gBattleScripting + 0x26) // specialTrainerBattleType #define sMON_CAUGHT (gBattleScripting + 0x27) // monCaught #define sSAVED_DMG (gBattleScripting + 0x28) // savedDmg -#define sSAVED_MOVE_EFFECT (gBattleScripting + 0x2C) // savedMoveEffect +#define sUNUSED_0x2C (gBattleScripting + 0x2C) // unused_0x2c #define sMOVE_EFFECT (gBattleScripting + 0x2E) // moveEffect -#define sMULTIHIT_EFFECT (gBattleScripting + 0x30) // multihitMoveEffect +#define sUNUSED_0x30 (gBattleScripting + 0x30) // unused_0x30 #define sILLUSION_NICK_HACK (gBattleScripting + 0x32) // illusionNickHack #define sFIXED_ABILITY_POPUP (gBattleScripting + 0x33) // fixedPopup #define sABILITY_OVERWRITE (gBattleScripting + 0x34) // abilityPopupOverwrite @@ -88,150 +88,31 @@ #define CMP_COMMON_BITS 4 #define CMP_NO_COMMON_BITS 5 +// Veriouses have been deprecated but the enum and function will be supported for one more release cycle enum CmdVarious { - VARIOUS_CANCEL_MULTI_TURN_MOVES, - VARIOUS_IS_RUNNING_IMPOSSIBLE, - VARIOUS_GET_MOVE_TARGET, - VARIOUS_GET_BATTLER_FAINTED, - VARIOUS_RESET_SWITCH_IN_ABILITY_BITS, - VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP, - VARIOUS_RESET_PLAYER_FAINTED, - VARIOUS_PALACE_FLAVOR_TEXT, - VARIOUS_ARENA_JUDGMENT_WINDOW, - VARIOUS_ARENA_OPPONENT_MON_LOST, - VARIOUS_ARENA_PLAYER_MON_LOST, - VARIOUS_ARENA_BOTH_MONS_LOST, - VARIOUS_EMIT_YESNOBOX, - VARIOUS_DRAW_ARENA_REF_TEXT_BOX, - VARIOUS_ERASE_ARENA_REF_TEXT_BOX, - VARIOUS_ARENA_JUDGMENT_STRING, - VARIOUS_ARENA_WAIT_STRING, - VARIOUS_WAIT_CRY, - VARIOUS_RETURN_OPPONENT_MON1, - VARIOUS_RETURN_OPPONENT_MON2, - VARIOUS_VOLUME_DOWN, - VARIOUS_VOLUME_UP, - VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT, - VARIOUS_PALACE_TRY_ESCAPE_STATUS, - VARIOUS_SET_TELEPORT_OUTCOME, - VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC, - VARIOUS_STAT_TEXT_BUFFER, - VARIOUS_SWITCHIN_ABILITIES, - VARIOUS_INSTANT_HP_DROP, - VARIOUS_CLEAR_STATUS, - VARIOUS_RESTORE_PP, - VARIOUS_PLAY_MOVE_ANIMATION, - VARIOUS_SET_LUCKY_CHANT, - VARIOUS_SUCKER_PUNCH_CHECK, - VARIOUS_SET_SIMPLE_BEAM, - VARIOUS_TRY_ENTRAINMENT, - VARIOUS_SET_LAST_USED_ABILITY, - VARIOUS_INVERT_STAT_STAGES, - VARIOUS_TRY_ME_FIRST, - VARIOUS_JUMP_IF_BATTLE_END, - VARIOUS_TRY_ELECTRIFY, - VARIOUS_TRY_SOAK, - VARIOUS_TRY_LAST_RESORT, - VARIOUS_TRY_AUTOTOMIZE, - VARIOUS_ABILITY_POPUP, - VARIOUS_JUMP_IF_TARGET_ALLY, - VARIOUS_TRY_SYNCHRONOISE, - VARIOUS_PSYCHO_SHIFT, - VARIOUS_CURE_STATUS, - VARIOUS_POWER_TRICK, - VARIOUS_AFTER_YOU, - VARIOUS_BESTOW, - VARIOUS_JUMP_IF_NOT_GROUNDED, - VARIOUS_HANDLE_TRAINER_SLIDE_MSG, - VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF, - VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON, - VARIOUS_SET_AURORA_VEIL, - VARIOUS_TRY_THIRD_TYPE, - VARIOUS_ACUPRESSURE, - VARIOUS_SET_POWDER, - VARIOUS_GRAVITY_ON_AIRBORNE_MONS, - VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS, - VARIOUS_JUMP_IF_ROAR_FAILS, - VARIOUS_TRY_INSTRUCT, - VARIOUS_JUMP_IF_NOT_BERRY, - VARIOUS_TRACE_ABILITY, - VARIOUS_UPDATE_NICK, - VARIOUS_TRY_ILLUSION_OFF, - VARIOUS_SET_SPRITEIGNORE0HP, - VARIOUS_HANDLE_FORM_CHANGE, - VARIOUS_GET_STAT_VALUE, - VARIOUS_JUMP_IF_FULL_HP, - VARIOUS_LOSE_TYPE, - VARIOUS_TRY_ACTIVATE_SOULHEART, - VARIOUS_TRY_ACTIVATE_RECEIVER, - VARIOUS_TRY_FRISK, - VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED, - VARIOUS_TRY_FAIRY_LOCK, - VARIOUS_JUMP_IF_NO_ALLY, - VARIOUS_JUMP_IF_HOLD_EFFECT, - VARIOUS_INFATUATE_WITH_BATTLER, - VARIOUS_SET_LAST_USED_ITEM, - VARIOUS_JUMP_IF_ABSENT, - VARIOUS_DESTROY_ABILITY_POPUP, - VARIOUS_TOTEM_BOOST, - VARIOUS_MOVEEND_ITEM_EFFECTS, - VARIOUS_TERRAIN_SEED, - VARIOUS_MAKE_INVISIBLE, - VARIOUS_ROOM_SERVICE, - VARIOUS_JUMP_IF_TEAM_HEALTHY, - VARIOUS_TRY_HEAL_QUARTER_HP, - VARIOUS_JUMP_IF_PRANKSTER_BLOCKED, - VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER, - VARIOUS_GET_ROTOTILLER_TARGETS, - VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED, - VARIOUS_CONSUME_BERRY, - VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL, - VARIOUS_JUMP_IF_SPECIES, - VARIOUS_UPDATE_ABILITY_POPUP, - VARIOUS_JUMP_IF_WEATHER_AFFECTED, - VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED, - VARIOUS_SET_ATTACKER_STICKY_WEB_USER, - VARIOUS_TRY_NO_RETREAT, - VARIOUS_CHECK_POLTERGEIST, - VARIOUS_CUT_1_3_HP_RAISE_STATS, - VARIOUS_TRY_END_NEUTRALIZING_GAS, - VARIOUS_JUMP_IF_UNDER_200, - VARIOUS_SET_SKY_DROP, - VARIOUS_CLEAR_SKY_DROP, - VARIOUS_SKY_DROP_YAWN, - VARIOUS_CURE_CERTAIN_STATUSES, - VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES, - VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY, - VARIOUS_SAVE_BATTLER_ITEM, - VARIOUS_RESTORE_BATTLER_ITEM, - VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM, + VARIOUS_NONE, }; // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 1 -#define DMG_DOUBLED 2 -#define DMG_1_8_TARGET_HP 3 -#define DMG_FULL_ATTACKER_HP 4 -#define DMG_CURR_ATTACKER_HP 5 -#define DMG_BIG_ROOT 6 +#define DMG_1_8_TARGET_HP 2 +#define DMG_FULL_ATTACKER_HP 3 +#define DMG_BIG_ROOT 4 // Cmd_jumpifcantswitch #define SWITCH_IGNORE_ESCAPE_PREVENTION (1 << 7) // Cmd_statbuffchange -#define STAT_CHANGE_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange +#define STAT_CHANGE_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. If not set and unable to raise/lower stats, jump to failInstr. #define STAT_CHANGE_MIRROR_ARMOR (1 << 1) // Stat change redirection caused by Mirror Armor ability. -#define STAT_CHANGE_NOT_PROTECT_AFFECTED (1 << 5) -#define STAT_CHANGE_UPDATE_MOVE_EFFECT (1 << 6) +#define STAT_CHANGE_ONLY_CHECKING (1 << 2) // Checks if the stat change can occur. Does not change stats or play stat change animation. +#define STAT_CHANGE_NOT_PROTECT_AFFECTED (1 << 3) +#define STAT_CHANGE_UPDATE_MOVE_EFFECT (1 << 4) +#define STAT_CHANGE_CHECK_PREVENTION (1 << 5) +#define STAT_CHANGE_CERTAIN (1 << 6) -// stat change flags for Cmd_playstatchangeanimation -#define STAT_CHANGE_NEGATIVE (1 << 0) -#define STAT_CHANGE_BY_TWO (1 << 1) -#define STAT_CHANGE_MULTIPLE_STATS (1 << 2) -#define STAT_CHANGE_CANT_PREVENT (1 << 3) - -// stat flags for Cmd_playstatchangeanimation +// stat flags for TryPlayStatChangeAnimation #define BIT_HP (1 << 0) #define BIT_ATK (1 << 1) #define BIT_DEF (1 << 2) @@ -243,53 +124,69 @@ enum CmdVarious #define PARTY_SCREEN_OPTIONAL (1 << 7) // Flag for first argument to openpartyscreen -// cases for Cmd_moveend +enum SetMoveEffectFlags +{ + NO_FLAGS = 0, + EFFECT_PRIMARY = (1 << 0), + EFFECT_CERTAIN = (1 << 1), +}; + +// cases for Cmd_moveend - Order matters! enum MoveEndEffects { - MOVEEND_SUM_DAMAGE, + MOVEEND_SET_VALUES, MOVEEND_PROTECT_LIKE_EFFECT, + MOVEEND_GRUDGE, + MOVEEND_DESTINY_BOND, MOVEEND_ABSORB, MOVEEND_RAGE, MOVEEND_SYNCHRONIZE_TARGET, MOVEEND_ABILITIES, MOVEEND_ABILITIES_ATTACKER, - MOVEEND_STATUS_IMMUNITY_ABILITIES, + MOVEEND_STATUS_IMMUNITY_ABILITIES, // TODO: Do berries come before???? MOVEEND_SYNCHRONIZE_ATTACKER, - MOVEEND_CHOICE_MOVE, MOVEEND_ATTACKER_INVISIBLE, MOVEEND_ATTACKER_VISIBLE, MOVEEND_TARGET_VISIBLE, MOVEEND_ITEM_EFFECTS_TARGET, - MOVEEND_FIRST_MOVE_BLOCK, - MOVEEND_ITEM_EFFECTS_ALL, + MOVEEND_ITEM_EFFECTS_ATTACKER_1, MOVEEND_SYMBIOSIS, - MOVEEND_KINGSROCK, // These item effects will occur each strike of a multi-hit move MOVEEND_SUBSTITUTE, MOVEEND_SKY_DROP_CONFUSE, MOVEEND_UPDATE_LAST_MOVES, MOVEEND_MIRROR_MOVE, MOVEEND_DEFROST, MOVEEND_NEXT_TARGET, // Everything up until here is handled for each strike of a spread move + MOVEEND_HP_THRESHHOLD_ITEMS_TARGET, // Activation only during a multi hit move / ability (Parental Bond) MOVEEND_MULTIHIT_MOVE, - MOVEEND_SECOND_MOVE_BLOCK, - MOVEEND_ITEM_EFFECTS_ATTACKER, + MOVEEND_MOVE_BLOCK, + MOVEEND_ITEM_EFFECTS_ATTACKER_2, MOVEEND_ABILITY_BLOCK, - MOVEEND_SHEER_FORCE, // If move is Sheer Force affected, skip until Opportunist - MOVEEND_RED_CARD, // Red Card triggers before Eject Pack + MOVEEND_SHEER_FORCE, // If move is Sheer Force affected, skip to Hit Escape + One + MOVEEND_COLOR_CHANGE, // Color Change / Berserk / Anger Shell + MOVEEND_KEE_MARANGA_HP_THRESHOLD_ITEM_TARGET, + MOVEEND_RED_CARD, MOVEEND_EJECT_BUTTON, - MOVEEND_LIFEORB_SHELLBELL, // Includes shell bell, throat spray, etc + MOVEEND_LIFE_ORB_SHELL_BELL, + MOVEEND_FORM_CHANGE, MOVEEND_EMERGENCY_EXIT, MOVEEND_EJECT_PACK, MOVEEND_HIT_ESCAPE, - MOVEEND_OPPORTUNIST, // Occurs after other stat change items/abilities to try and copy the boosts - MOVEEND_PICKPOCKET, + MOVEEND_ITEMS_EFFECTS_ALL, MOVEEND_WHITE_HERB, + MOVEEND_OPPORTUNIST, + MOVEEND_MIRROR_HERB, + MOVEEND_PICKPOCKET, + MOVEEND_THIRD_MOVE_BLOCK, MOVEEND_CHANGED_ITEMS, MOVEEND_SAME_MOVE_TURNS, MOVEEND_CLEAR_BITS, MOVEEND_DANCER, MOVEEND_PURSUIT_NEXT_ACTION, MOVEEND_COUNT, + + // This guarantees a correct jump if new moveends are added directly after MOVEEND_HIT_ESCAPE + MOVEEND_JUMP_TO_HIT_ESCAPE_PLUS_ONE = (MOVEEND_HIT_ESCAPE + 1), }; // switch cases @@ -297,9 +194,24 @@ enum MoveEndEffects #define B_SWITCH_HIT 1 // dragon tail, circle throw #define B_SWITCH_RED_CARD 2 -// Argument labels for EFFECT_HIT_SET_REMOVE_TERRAIN -#define ARG_SET_PSYCHIC_TERRAIN 0 -#define ARG_TRY_REMOVE_TERRAIN_HIT 1 -#define ARG_TRY_REMOVE_TERRAIN_FAIL 2 +enum StatusTrigger +{ + TRIGGER_ON_MOVE, + TRIGGER_ON_ABILITY, + TRIGGER_ON_PROTECT, +}; + +enum TriggerOnFieldStatus +{ + ON_ANY, + ON_TERRAIN, + ON_WEATHER, +}; + +enum HealthUpdate +{ + PASSIVE_HP_UPDATE, + MOVE_DAMAGE_HP_UPDATE, +}; #endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 8e8503458d8d..462c64cda199 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -28,18 +28,18 @@ enum StringID STRINGID_STATSWONTINCREASE2, STRINGID_AVOIDEDDAMAGE, STRINGID_ITDOESNTAFFECT, - STRINGID_ATTACKERFAINTED, - STRINGID_TARGETFAINTED, + STRINGID_BATTLERFAINTED, STRINGID_PLAYERGOTMONEY, STRINGID_PLAYERWHITEOUT, - STRINGID_PLAYERWHITEOUT2, + STRINGID_PLAYERWHITEOUT2_WILD, + STRINGID_PLAYERWHITEOUT2_TRAINER, + STRINGID_PLAYERWHITEOUT3, STRINGID_PREVENTSESCAPE, STRINGID_HITXTIMES, STRINGID_PKMNFELLASLEEP, STRINGID_PKMNMADESLEEP, STRINGID_PKMNALREADYASLEEP, STRINGID_PKMNALREADYASLEEP2, - STRINGID_PKMNWASNTAFFECTED, STRINGID_PKMNWASPOISONED, STRINGID_PKMNPOISONEDBY, STRINGID_PKMNHURTBYPOISON, @@ -60,11 +60,8 @@ enum StringID STRINGID_PKMNISPARALYZED, STRINGID_PKMNISALREADYPARALYZED, STRINGID_PKMNHEALEDPARALYSIS, - STRINGID_PKMNDREAMEATEN, STRINGID_STATSWONTINCREASE, STRINGID_STATSWONTDECREASE, - STRINGID_TEAMSTOPPEDWORKING, - STRINGID_FOESTOPPEDWORKING, STRINGID_PKMNISCONFUSED, STRINGID_PKMNHEALEDCONFUSION, STRINGID_PKMNWASCONFUSED, @@ -72,7 +69,6 @@ enum StringID STRINGID_PKMNFELLINLOVE, STRINGID_PKMNINLOVE, STRINGID_PKMNIMMOBILIZEDBYLOVE, - STRINGID_PKMNBLOWNAWAY, STRINGID_PKMNCHANGEDTYPE, STRINGID_PKMNFLINCHED, STRINGID_PKMNREGAINEDHEALTH, @@ -116,7 +112,6 @@ enum StringID STRINGID_PKMNCALMEDDOWN, STRINGID_PKMNCANTSLEEPINUPROAR, STRINGID_PKMNSTOCKPILED, - STRINGID_PKMNCANTSTOCKPILE, STRINGID_PKMNCANTSLEEPINUPROAR2, STRINGID_UPROARKEPTPKMNAWAKE, STRINGID_PKMNSTAYEDAWAKEUSING, @@ -136,6 +131,7 @@ enum StringID STRINGID_PKMNMOVEISDISABLED, STRINGID_PKMNMOVEDISABLEDNOMORE, STRINGID_PKMNGOTENCORE, + STRINGID_PKMNGOTENCOREDMOVE, STRINGID_PKMNENCOREENDED, STRINGID_PKMNTOOKAIM, STRINGID_PKMNSKETCHEDMOVE, @@ -177,7 +173,6 @@ enum StringID STRINGID_PKMNREADYTOHELP, STRINGID_PKMNSWITCHEDITEMS, STRINGID_PKMNCOPIEDFOE, - STRINGID_PKMNMADEWISH, STRINGID_PKMNWISHCAMETRUE, STRINGID_PKMNPLANTEDROOTS, STRINGID_PKMNABSORBEDNUTRIENTS, @@ -194,14 +189,11 @@ enum StringID STRINGID_PKMNWAITSFORTARGET, STRINGID_PKMNSNATCHEDMOVE, STRINGID_PKMNMADEITRAIN, - STRINGID_PKMNRAISEDSPEED, STRINGID_PKMNPROTECTEDBY, STRINGID_PKMNPREVENTSUSAGE, STRINGID_PKMNRESTOREDHPUSING, STRINGID_PKMNCHANGEDTYPEWITH, - STRINGID_PKMNPREVENTSPARALYSISWITH, STRINGID_PKMNPREVENTSROMANCEWITH, - STRINGID_PKMNPREVENTSPOISONINGWITH, STRINGID_PKMNPREVENTSCONFUSIONWITH, STRINGID_PKMNRAISEDFIREPOWERWITH, STRINGID_PKMNANCHORSITSELFWITH, @@ -231,7 +223,6 @@ enum StringID STRINGID_BUTNOTHINGHAPPENED, STRINGID_BUTITFAILED, STRINGID_ITHURTCONFUSION, - STRINGID_MIRRORMOVEFAILED, STRINGID_STARTEDTORAIN, STRINGID_DOWNPOURSTARTED, STRINGID_RAINCONTINUES, @@ -246,9 +237,6 @@ enum StringID STRINGID_STARTEDHAIL, STRINGID_HAILCONTINUES, STRINGID_HAILSTOPPED, - STRINGID_FAILEDTOSPITUP, - STRINGID_FAILEDTOSWALLOW, - STRINGID_WINDBECAMEHEATWAVE, STRINGID_STATCHANGESGONE, STRINGID_COINSSCATTERED, STRINGID_TOOWEAKFORSUBSTITUTE, @@ -305,7 +293,6 @@ enum StringID STRINGID_ITEMALLOWSONLYYMOVE, STRINGID_PKMNHUNGONWITHX, STRINGID_EMPTYSTRING3, - STRINGID_PKMNSXPREVENTSBURNS, STRINGID_PKMNSXBLOCKSY, STRINGID_PKMNSXRESTOREDHPALITTLE2, STRINGID_PKMNSXWHIPPEDUPSANDSTORM, @@ -324,8 +311,8 @@ enum StringID STRINGID_PLAYERDEFEATEDTRAINER1, STRINGID_SOOTHINGAROMA, STRINGID_ITEMSCANTBEUSEDNOW, - STRINGID_FORXCOMMAYZ, STRINGID_USINGITEMSTATOFPKMNROSE, + STRINGID_USINGITEMSTATOFPKMNFELL, STRINGID_PKMNUSEDXTOGETPUMPED, STRINGID_PKMNSXMADEYUSELESS, STRINGID_PKMNTRAPPEDBYSANDTOMB, @@ -341,7 +328,6 @@ enum StringID STRINGID_PKMNFLEDUSINGITS, STRINGID_PKMNFLEDUSING, STRINGID_PKMNWASDRAGGEDOUT, - STRINGID_PREVENTEDFROMWORKING, STRINGID_PKMNSITEMNORMALIZEDSTATUS, STRINGID_TRAINER1USEDITEM, STRINGID_BOXISFULL, @@ -352,17 +338,13 @@ enum StringID STRINGID_STATSWONTDECREASE2, STRINGID_PKMNSXBLOCKSY2, STRINGID_PKMNSXWOREOFF, - STRINGID_PKMNRAISEDDEFALITTLE, - STRINGID_PKMNRAISEDSPDEFALITTLE, STRINGID_THEWALLSHATTERED, - STRINGID_PKMNSXPREVENTSYSZ, STRINGID_PKMNSXCUREDITSYPROBLEM, STRINGID_ATTACKERCANTESCAPE, STRINGID_PKMNOBTAINEDX, STRINGID_PKMNOBTAINEDX2, STRINGID_PKMNOBTAINEDXYOBTAINEDZ, STRINGID_BUTNOEFFECT, - STRINGID_PKMNSXHADNOEFFECTONY, STRINGID_TWOENEMIESDEFEATED, STRINGID_TRAINER2LOSETEXT, STRINGID_PKMNINCAPABLEOFPOWER, @@ -421,10 +403,8 @@ enum StringID STRINGID_FELLSTRAIGHTDOWN, STRINGID_TARGETCHANGEDTYPE, STRINGID_PKMNACQUIREDSIMPLE, - STRINGID_EMPTYSTRING5, STRINGID_KINDOFFER, STRINGID_RESETSTARGETSSTATLEVELS, - STRINGID_EMPTYSTRING6, STRINGID_ALLYSWITCHPOSITION, STRINGID_RESTORETARGETSHEALTH, STRINGID_TOOKPJMNINTOTHESKY, @@ -478,7 +458,7 @@ enum StringID STRINGID_HEALINGWISHCAMETRUE, STRINGID_HEALINGWISHHEALED, STRINGID_LUNARDANCECAMETRUE, - STRINGID_CUSEDBODYDISABLED, + STRINGID_CURSEDBODYDISABLED, STRINGID_ATTACKERACQUIREDABILITY, STRINGID_TARGETABILITYSTATLOWER, STRINGID_TARGETSTATWONTGOHIGHER, @@ -555,10 +535,8 @@ enum StringID STRINGID_COMATOSEENTERS, STRINGID_SCREENCLEANERENTERS, STRINGID_FETCHEDPOKEBALL, - STRINGID_BATTLERABILITYRAISEDSTAT, STRINGID_ASANDSTORMKICKEDUP, STRINGID_PKMNSWILLPERISHIN3TURNS, - STRINGID_ABILITYRAISEDSTATDRASTICALLY, STRINGID_AURAFLAREDTOLIFE, STRINGID_ASONEENTERS, STRINGID_CURIOUSMEDICINEENTERS, @@ -595,7 +573,6 @@ enum StringID STRINGID_BROKETHROUGHPROTECTION, STRINGID_ABILITYALLOWSONLYMOVE, STRINGID_SWAPPEDABILITIES, - STRINGID_PASTELVEILPROTECTED, STRINGID_PASTELVEILENTERS, STRINGID_BATTLERTYPECHANGEDTO, STRINGID_BOTHCANNOLONGERESCAPE, @@ -611,8 +588,6 @@ enum StringID STRINGID_METEORBEAMCHARGING, STRINGID_HEATUPBEAK, STRINGID_COURTCHANGE, - STRINGID_PLAYERLOSTTOENEMYTRAINER, - STRINGID_PLAYERPAIDPRIZEMONEY, STRINGID_ZPOWERSURROUNDS, STRINGID_ZMOVEUNLEASHED, STRINGID_ZMOVERESETSSTATS, @@ -734,10 +709,10 @@ enum StringID STRINGID_TIMETODYNAMAX, STRINGID_TIMETOGIGANTAMAX, STRINGID_QUESTIONFORFEITBATTLE, - STRINGID_FORFEITBATTLEGAVEMONEY, STRINGID_TOXICSPIKESBADLYPOISONED, STRINGID_POWERCONSTRUCTPRESENCEOFMANY, STRINGID_POWERCONSTRUCTTRANSFORM, + STRINGID_ABILITYSHIELDPROTECTS, STRINGID_COUNT }; @@ -746,33 +721,24 @@ enum StringID // They are assigned to the MULTISTRING_CHOOSER byte of gBattleCommunication // and read when e.g. the command printfromtable is used. -// gStatUpStringIds -enum StatUpStringID +// gStatUpStringIds and gStatDownStringIds +enum StatChangedStringID { - B_MSG_ATTACKER_STAT_ROSE, - B_MSG_DEFENDER_STAT_ROSE, - B_MSG_STAT_WONT_INCREASE, - B_MSG_STAT_ROSE_EMPTY, - B_MSG_STAT_ROSE_ITEM, + B_MSG_ATTACKER_STAT_CHANGED, + B_MSG_DEFENDER_STAT_CHANGED, + B_MSG_STAT_WONT_CHANGE, + B_MSG_STAT_CHANGE_EMPTY, + B_MSG_STAT_CHANGED_ITEM, B_MSG_USED_DIRE_HIT, }; -// gStatDownStringIds -enum StatDownStringID -{ - B_MSG_ATTACKER_STAT_FELL = 0, - B_MSG_DEFENDER_STAT_FELL = 1, - B_MSG_STAT_WONT_DECREASE, - B_MSG_STAT_FELL_EMPTY, -}; - // gMissStringIds enum MissStringID { B_MSG_MISSED, B_MSG_PROTECTED, B_MSG_AVOIDED_ATK, - // Ability-related messages need to below this comment + // Ability-related messages need to be below this comment B_MSG_AVOIDED_DMG, B_MSG_GROUND_MISS, }; @@ -888,20 +854,6 @@ enum UproarOverTurnStringID B_MSG_UPROAR_ENDS, }; -// gStockpileUsedStringIds -enum StockpileUsedStringID -{ - B_MSG_STOCKPILED, - B_MSG_CANT_STOCKPILE, -}; - -// gSwallowFailStringIds -enum SwallowFailStringID -{ - B_MSG_SWALLOW_FAILED, - B_MSG_SWALLOW_FULL_HP, -}; - // gKOFailedStringIds enum KOFailedStringID { @@ -1024,9 +976,15 @@ enum FlashFireStringID B_MSG_FLASH_FIRE_NO_BOOST, }; -// gBerryEffectStringIds -enum BerryEffectStringID +// CureStatusBerryEffectStringID +enum CureStatusBerryEffectStringID { + B_MSG_CURED_PARALYSIS, + B_MSG_CURED_POISON, + B_MSG_CURED_BURN, + B_MSG_CURED_FREEEZE, + B_MSG_CURED_FROSTBITE, + B_MSG_CURED_SLEEP, B_MSG_CURED_PROBLEM, B_MSG_NORMALIZED_STATUS, }; @@ -1049,17 +1007,6 @@ enum GotStatusedStringID B_MSG_STATUSED_BY_ABILITY, }; -// gStatusPreventionStringIds -enum StatusPreventionStringID -{ - B_MSG_ABILITY_PREVENTS_MOVE_BURN, - B_MSG_ABILITY_PREVENTS_MOVE_PARALYSIS, - B_MSG_ABILITY_PREVENTS_MOVE_POISON, - B_MSG_ABILITY_PREVENTS_ABILITY_STATUS, - B_MSG_STATUS_HAD_NO_EFFECT, - B_MSG_ABILITY_PASTEL_VEIL, -}; - // gGotDefrostedStringIds enum GotDefrostedStringID { @@ -1166,8 +1113,7 @@ enum StartingStatusStringID }; // gWrappedStringIds -// These correspond in order to sTrappingMoves! -enum WrappedStringID +enum __attribute__((packed)) WrappedStringID { B_MSG_WRAPPED_BIND, B_MSG_WRAPPED_WRAP, diff --git a/include/constants/characters.h b/include/constants/characters.h index 6ac3c5224c5d..0af7b110f09b 100644 --- a/include/constants/characters.h +++ b/include/constants/characters.h @@ -232,6 +232,7 @@ #define EXT_CTRL_CODE_ENG 0x16 #define EXT_CTRL_CODE_PAUSE_MUSIC 0x17 #define EXT_CTRL_CODE_RESUME_MUSIC 0x18 +#define EXT_CTRL_CODE_SPEAKER 0x19 #define TEXT_COLOR_TRANSPARENT 0x0 #define TEXT_COLOR_WHITE 0x1 diff --git a/include/constants/contest.h b/include/constants/contest.h index 3b83d4f1c331..70531f540614 100644 --- a/include/constants/contest.h +++ b/include/constants/contest.h @@ -103,29 +103,29 @@ #define CONTEST_EFFECT_REPETITION_NOT_BORING 3 #define CONTEST_EFFECT_AVOID_STARTLE_ONCE 4 #define CONTEST_EFFECT_AVOID_STARTLE 5 -#define CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY 6 -#define CONTEST_EFFECT_USER_LESS_EASILY_STARTLED 7 -#define CONTEST_EFFECT_STARTLE_FRONT_MON 8 -#define CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS 9 +#define CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY 6 // Unused +#define CONTEST_EFFECT_USER_LESS_EASILY_STARTLED 7 // Unused +#define CONTEST_EFFECT_STARTLE_FRONT_MON 8 // Unused +#define CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS 9 // Unused #define CONTEST_EFFECT_STARTLE_PREV_MON 10 #define CONTEST_EFFECT_STARTLE_PREV_MONS 11 #define CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON 12 #define CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS 13 -#define CONTEST_EFFECT_STARTLE_PREV_MON_2 14 -#define CONTEST_EFFECT_STARTLE_PREV_MONS_2 15 +#define CONTEST_EFFECT_STARTLE_PREV_MON_2 14 // Unused +#define CONTEST_EFFECT_STARTLE_PREV_MONS_2 15 // Unused #define CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION 16 #define CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION 17 #define CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN 18 #define CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL 19 -#define CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL 20 -#define CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL 21 -#define CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL 22 -#define CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL 23 -#define CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL 24 -#define CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS 25 +#define CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL 20 // Unused +#define CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL 21 // Unused +#define CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL 22 // Unused +#define CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL 23 // Unused +#define CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL 24 // Unused +#define CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS 25 // Unused #define CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS 26 #define CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS 27 -#define CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION 28 +#define CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION 28 // Unused #define CONTEST_EFFECT_BETTER_IF_FIRST 29 #define CONTEST_EFFECT_BETTER_IF_LAST 30 #define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES 31 @@ -133,18 +133,21 @@ #define CONTEST_EFFECT_BETTER_WHEN_LATER 33 #define CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING 34 #define CONTEST_EFFECT_BETTER_IF_SAME_TYPE 35 -#define CONTEST_EFFECT_BETTER_IF_DIFF_TYPE 36 +#define CONTEST_EFFECT_BETTER_IF_DIFF_TYPE 36 // Unused #define CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL 37 #define CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS 38 #define CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION 39 #define CONTEST_EFFECT_NEXT_APPEAL_EARLIER 40 #define CONTEST_EFFECT_NEXT_APPEAL_LATER 41 -#define CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER 42 +#define CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER 42 // Unused #define CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER 43 #define CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST 44 #define CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS 45 #define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46 #define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47 +//#define CONTEST_EFFECT_QUICKLY_GROW_BORED 48 // New in Gen 6 +//#define CONTEST_EFFECT_EXCITES_AUDIENCE_MORE_IF_FIRST 49 // New in Gen 6 +//#define CONTEST_EFFECT_EXCITES_AUDIENCE_MORE_IF_LAST 50 // New in Gen 6 // Each of the above effects is grouped into one of these effect type categories // Only a few of these get checked by the AI, the rest go unused @@ -157,93 +160,127 @@ #define CONTEST_EFFECT_TYPE_TURN_ORDER 6 #define CONTEST_EFFECT_TYPE_UNKNOWN 8 -#define COMBO_STARTER_POUND 1 -#define COMBO_STARTER_FIRE_PUNCH 2 -#define COMBO_STARTER_ICE_PUNCH 3 -#define COMBO_STARTER_THUNDER_PUNCH 4 -#define COMBO_STARTER_SCRATCH 5 -#define COMBO_STARTER_VICE_GRIP 6 -#define COMBO_STARTER_SWORDS_DANCE 7 -#define COMBO_STARTER_SAND_ATTACK 8 -#define COMBO_STARTER_HORN_ATTACK 9 -#define COMBO_STARTER_LEER 10 -#define COMBO_STARTER_SING 11 -#define COMBO_STARTER_SURF 12 -#define COMBO_STARTER_PECK 13 -#define COMBO_STARTER_LEECH_SEED 14 -#define COMBO_STARTER_GROWTH 15 -#define COMBO_STARTER_STRING_SHOT 16 -#define COMBO_STARTER_DRAGON_RAGE 17 -#define COMBO_STARTER_ROCK_THROW 18 -#define COMBO_STARTER_EARTHQUAKE 19 -#define COMBO_STARTER_TOXIC 20 -#define COMBO_STARTER_CONFUSION 21 -#define COMBO_STARTER_PSYCHIC 22 -#define COMBO_STARTER_HYPNOSIS 23 -#define COMBO_STARTER_RAGE 24 -#define COMBO_STARTER_DOUBLE_TEAM 25 -#define COMBO_STARTER_HARDEN 26 -#define COMBO_STARTER_DEFENSE_CURL 27 -#define COMBO_STARTER_FOCUS_ENERGY 28 -#define COMBO_STARTER_SMOG 29 -#define COMBO_STARTER_SLUDGE 30 -#define COMBO_STARTER_BONE_CLUB 31 -#define COMBO_STARTER_KINESIS 32 -#define COMBO_STARTER_SOFT_BOILED 33 -#define COMBO_STARTER_BONEMERANG 34 -#define COMBO_STARTER_REST 35 -#define COMBO_STARTER_MIND_READER 36 -#define COMBO_STARTER_CURSE 37 -#define COMBO_STARTER_POWDER_SNOW 38 -#define COMBO_STARTER_SCARY_FACE 39 -#define COMBO_STARTER_BELLY_DRUM 40 -#define COMBO_STARTER_SLUDGE_BOMB 41 -#define COMBO_STARTER_MUD_SLAP 42 -#define COMBO_STARTER_BONE_RUSH 43 -#define COMBO_STARTER_LOCK_ON 44 -#define COMBO_STARTER_SANDSTORM 45 -#define COMBO_STARTER_ENDURE 46 -#define COMBO_STARTER_CHARM 47 -#define COMBO_STARTER_MEAN_LOOK 48 -#define COMBO_STARTER_HEAL_BELL 49 -#define COMBO_STARTER_DRAGON_BREATH 50 -#define COMBO_STARTER_SWEET_SCENT 51 -#define COMBO_STARTER_RAIN_DANCE 52 -#define COMBO_STARTER_SUNNY_DAY 53 -#define COMBO_STARTER_FAKE_OUT 54 -#define COMBO_STARTER_STOCKPILE 55 -#define COMBO_STARTER_HAIL 56 -#define COMBO_STARTER_CHARGE 57 -#define COMBO_STARTER_TAUNT 58 -#define COMBO_STARTER_REVENGE 59 -#define COMBO_STARTER_YAWN 60 -#define COMBO_STARTER_DIVE 61 -#define COMBO_STARTER_MUD_SPORT 62 -#define COMBO_STARTER_METAL_SOUND 63 -#define COMBO_STARTER_WATER_SPORT 64 -#define COMBO_STARTER_CALM_MIND 65 -#define COMBO_STARTER_DRAGON_DANCE 66 -#define COMBO_STARTER_PAYBACK 67 -#define COMBO_STARTER_LUCKY_CHANT 68 -#define COMBO_STARTER_WORRY_SEED 69 -#define COMBO_STARTER_DRAGON_RUSH 70 -#define COMBO_STARTER_BRAVE_BIRD 71 -#define COMBO_STARTER_THUNDER_FANG 72 -#define COMBO_STARTER_ICE_FANG 73 -#define COMBO_STARTER_FIRE_FANG 74 -#define COMBO_STARTER_ATTACK_ORDER 75 -#define COMBO_STARTER_DEFEND_ORDER 76 -#define COMBO_STARTER_HEAL_ORDER 77 -#define COMBO_STARTER_SCALD 78 -#define COMBO_STARTER_DRAGON_TAIL 79 -#define COMBO_STARTER_HYPERSPACE_HOLE 80 -#define COMBO_STARTER_THOUSAND_ARROWS 81 -#define COMBO_STARTER_THOUSAND_WAVES 82 -#define COMBO_STARTER_HYPERSPACE_FURY 83 -#define COMBO_STARTER_SHADOW_BONE 84 -#define COMBO_STARTER_ELECTRIC_TERRAIN 85 -#define COMBO_STARTER_MISTY_TERRAIN 86 -#define COMBO_STARTER_GRASSY_TERRAIN 87 -#define COMBO_STARTER_PSYCHIC_TERRAIN 88 +enum { + COMBO_STARTER_POUND, + COMBO_STARTER_FIRE_PUNCH, + COMBO_STARTER_ICE_PUNCH, + COMBO_STARTER_THUNDER_PUNCH, + COMBO_STARTER_SCRATCH, + COMBO_STARTER_VICE_GRIP, + COMBO_STARTER_SWORDS_DANCE, + COMBO_STARTER_SAND_ATTACK, + COMBO_STARTER_HORN_ATTACK, + COMBO_STARTER_LEER, + COMBO_STARTER_SING, + COMBO_STARTER_SURF, + COMBO_STARTER_PECK, + COMBO_STARTER_LEECH_SEED, + COMBO_STARTER_GROWTH, + COMBO_STARTER_STRING_SHOT, + COMBO_STARTER_DRAGON_RAGE, + COMBO_STARTER_ROCK_THROW, + COMBO_STARTER_EARTHQUAKE, + COMBO_STARTER_TOXIC, + COMBO_STARTER_CONFUSION, + COMBO_STARTER_PSYCHIC, + COMBO_STARTER_HYPNOSIS, + COMBO_STARTER_RAGE, + COMBO_STARTER_DOUBLE_TEAM, + COMBO_STARTER_HARDEN, + COMBO_STARTER_DEFENSE_CURL, + COMBO_STARTER_FOCUS_ENERGY, + COMBO_STARTER_SMOG, + COMBO_STARTER_SLUDGE, + COMBO_STARTER_BONE_CLUB, + COMBO_STARTER_KINESIS, + COMBO_STARTER_SOFT_BOILED, + COMBO_STARTER_BONEMERANG, + COMBO_STARTER_REST, + COMBO_STARTER_MIND_READER, + COMBO_STARTER_CURSE, + COMBO_STARTER_POWDER_SNOW, + COMBO_STARTER_SCARY_FACE, + COMBO_STARTER_BELLY_DRUM, + COMBO_STARTER_SLUDGE_BOMB, + COMBO_STARTER_MUD_SLAP, + COMBO_STARTER_BONE_RUSH, + COMBO_STARTER_LOCK_ON, + COMBO_STARTER_SANDSTORM, + COMBO_STARTER_ENDURE, + COMBO_STARTER_CHARM, + COMBO_STARTER_MEAN_LOOK, + COMBO_STARTER_HEAL_BELL, + COMBO_STARTER_DRAGON_BREATH, + COMBO_STARTER_SWEET_SCENT, + COMBO_STARTER_RAIN_DANCE, + COMBO_STARTER_SUNNY_DAY, + COMBO_STARTER_FAKE_OUT, + COMBO_STARTER_STOCKPILE, + COMBO_STARTER_HAIL, + COMBO_STARTER_CHARGE, + COMBO_STARTER_TAUNT, + COMBO_STARTER_REVENGE, + COMBO_STARTER_YAWN, + COMBO_STARTER_DIVE, + COMBO_STARTER_MUD_SPORT, + COMBO_STARTER_METAL_SOUND, + COMBO_STARTER_WATER_SPORT, + COMBO_STARTER_CALM_MIND, + COMBO_STARTER_DRAGON_DANCE, + COMBO_STARTER_PAYBACK, + COMBO_STARTER_LUCKY_CHANT, + COMBO_STARTER_WORRY_SEED, + COMBO_STARTER_DRAGON_RUSH, + COMBO_STARTER_BRAVE_BIRD, + COMBO_STARTER_THUNDER_FANG, + COMBO_STARTER_ICE_FANG, + COMBO_STARTER_FIRE_FANG, + COMBO_STARTER_ATTACK_ORDER, + COMBO_STARTER_DEFEND_ORDER, + COMBO_STARTER_HEAL_ORDER, + COMBO_STARTER_SCALD, + COMBO_STARTER_DRAGON_TAIL, + COMBO_STARTER_HYPERSPACE_HOLE, + COMBO_STARTER_THOUSAND_ARROWS, + COMBO_STARTER_THOUSAND_WAVES, + COMBO_STARTER_HYPERSPACE_FURY, + COMBO_STARTER_SHADOW_BONE, + COMBO_STARTER_ELECTRIC_TERRAIN, + COMBO_STARTER_MISTY_TERRAIN, + COMBO_STARTER_GRASSY_TERRAIN, + COMBO_STARTER_PSYCHIC_TERRAIN, + COMBO_STARTER_FORCE_PALM, + COMBO_STARTER_THUNDER_WAVE, + COMBO_STARTER_AGILITY, + COMBO_STARTER_STEALTH_ROCK, + COMBO_STARTER_INFERNO, + COMBO_STARTER_WILL_O_WISP, + COMBO_STARTER_LOVELY_KISS, + COMBO_STARTER_SPORE, + COMBO_STARTER_CELEBRATE, + COMBO_STARTER_COVET, + COMBO_STARTER_HAPPY_HOUR, + COMBO_STARTER_WISH, + COMBO_STARTER_AMNESIA, + COMBO_STARTER_HONE_CLAWS, + COMBO_STARTER_ENTRAINMENT, + COMBO_STARTER_PLAY_NICE, + COMBO_STARTER_BLOCK, + COMBO_STARTER_ENCORE, + COMBO_STARTER_DARK_VOID, + COMBO_STARTER_GRASS_WHISTLE, + COMBO_STARTER_SLEEP_POWDER, + COMBO_STARTER_POISON_GAS, + COMBO_STARTER_POISON_POWDER, + COMBO_STARTER_NASTY_PLOT, + COMBO_STARTER_PARABOLIC_CHARGE, + COMBO_STARTER_SHIFT_GEAR, + COMBO_STARTER_SPIKES, + COMBO_STARTER_TOXIC_SPIKES, + COMBO_STARTER_GLARE, + COMBO_STARTER_ROCK_POLISH, + COMBO_STARTER_ROTOTILLER, + COMBO_STARTER_TORMENT, +}; #endif // GUARD_CONSTANTS_CONTEST_H diff --git a/include/constants/cries.h b/include/constants/cries.h index 554ffafc96bd..e30973946262 100644 --- a/include/constants/cries.h +++ b/include/constants/cries.h @@ -1,7 +1,8 @@ #ifndef GUARD_CONSTANTS_CRIES_H #define GUARD_CONSTANTS_CRIES_H -enum { +enum PokemonCry +{ CRY_NONE, #if P_FAMILY_BULBASAUR CRY_BULBASAUR, diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 4e1b3a34ea1c..4f183d766740 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -259,6 +259,11 @@ #define MOVEMENT_ACTION_SURF_STILL_UP 0xAB #define MOVEMENT_ACTION_SURF_STILL_LEFT 0xAC #define MOVEMENT_ACTION_SURF_STILL_RIGHT 0xAD +//fast diagonal movement +#define MOVEMENT_ACTION_WALK_FAST_DIAGONAL_UP_LEFT 0xAE +#define MOVEMENT_ACTION_WALK_FAST_DIAGONAL_UP_RIGHT 0xAF +#define MOVEMENT_ACTION_WALK_FAST_DIAGONAL_DOWN_LEFT 0xB0 +#define MOVEMENT_ACTION_WALK_FAST_DIAGONAL_DOWN_RIGHT 0xB1 #define MOVEMENT_ACTION_STEP_END 0xFE #define MOVEMENT_ACTION_NONE 0xFF diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index a0ca0063dc73..c20c2c79c3ef 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -246,11 +246,12 @@ #define OBJ_EVENT_GFX_POKE_BALL 239 #define OBJ_EVENT_GFX_OW_MON 240 #define OBJ_EVENT_GFX_LIGHT_SPRITE 241 +#define OBJ_EVENT_GFX_APRICORN_TREE 242 // NOTE: The maximum amount of object events has been expanded from 255 to 65535. // Since dynamic graphics ids still require at least 16 free values, the actual limit // is 65519, but even considering follower PokΓ©mon, this should be more than enough :) -#define NUM_OBJ_EVENT_GFX 242 +#define NUM_OBJ_EVENT_GFX 243 // These are dynamic object gfx ids. @@ -331,11 +332,14 @@ #define LOCALID_NONE 0 #define LOCALID_CAMERA 127 #define LOCALID_BERRY_BLENDER_PLAYER_END 240 // This will use 5 (MAX_RFU_PLAYERS) IDs ending at 240, i.e. 236-240 +#define LOCALID_FOLLOWING_POKEMON 254 #define LOCALID_PLAYER 255 -#define OBJ_EVENT_ID_FOLLOWER 0xFE -#define OBJ_EVENT_ID_NPC_FOLLOWER 0xFD +#define OBJ_EVENT_ID_FOLLOWER 0xFE +#define OBJ_EVENT_ID_NPC_FOLLOWER 0xFD // Aliases for old names. "object event id" normally refers to an index into gObjectEvents, which these are not. +// Used for link player OWs in CreateLinkPlayerSprite +#define OBJ_EVENT_ID_DYNAMIC_BASE 0xF0 #define OBJ_EVENT_ID_CAMERA LOCALID_CAMERA #define OBJ_EVENT_ID_PLAYER LOCALID_PLAYER diff --git a/include/constants/expansion.h b/include/constants/expansion.h index b0e7397b5633..36a4d7c89c81 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,10 +1,10 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.12.0 +// Last version: 1.14.1 #define EXPANSION_VERSION_MAJOR 1 -#define EXPANSION_VERSION_MINOR 12 -#define EXPANSION_VERSION_PATCH 1 +#define EXPANSION_VERSION_MINOR 14 +#define EXPANSION_VERSION_PATCH 2 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index e47cc292c3a9..71978fc64fec 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -77,6 +77,9 @@ #define FLDEFF_TRACKS_BUG 72 #define FLDEFF_CAVE_DUST 73 #define FLDEFF_DEFOG 74 +#define FLDEFF_USE_ROCK_CLIMB 75 +#define FLDEFF_ROCK_CLIMB_DUST 76 +#define FLDEFF_ORAS_DOWSE 77 #define FLDEFFOBJ_SHADOW_S 0 #define FLDEFFOBJ_SHADOW_M 1 @@ -119,6 +122,10 @@ #define FLDEFFOBJ_TRACKS_SPOT 38 #define FLDEFFOBJ_TRACKS_BUG 39 #define FLDEFFOBJ_CAVE_DUST 40 +#define FLDEFFOBJ_ROCK_CLIMB_BLOB 41 +#define FLDEFFOBJ_ROCK_CLIMB_DUST 42 +#define FLDEFFOBJ_ORAS_DOWSE_BRENDAN 43 +#define FLDEFFOBJ_ORAS_DOWSE_MAY 44 #define FLDEFF_PAL_TAG_CUT_GRASS 0x1000 #define FLDEFF_PAL_TAG_SECRET_POWER_TREE 0x1003 @@ -133,6 +140,8 @@ #define FLDEFF_PAL_TAG_HOF_MONITOR 0x1010 #define FLDEFF_PAL_TAG_UNKNOWN 0x1011 #define FLDEFF_PAL_TAG_CAVE_DUST 0x1012 +#define FLDEFF_PAL_TAG_DUST_CLOUD 0x1013 +#define FLDEFF_PAL_TAG_ORAS_DOWSE 0x1014 #define FLDEFF_PAL_TAG_FIELD_MOVE_MON 0x8400 // tile tags, for field effects that may have many copies on screen at once diff --git a/include/constants/field_move.h b/include/constants/field_move.h new file mode 100644 index 000000000000..c6c49c8708a5 --- /dev/null +++ b/include/constants/field_move.h @@ -0,0 +1,31 @@ +#ifndef GUARD_CONSTANTS_FIELD_MOVE_H +#define GUARD_CONSTANTS_FIELD_MOVE_H + + +enum FieldMove +{ + FIELD_MOVE_CUT, + FIELD_MOVE_FLASH, + FIELD_MOVE_ROCK_SMASH, + FIELD_MOVE_STRENGTH, + FIELD_MOVE_SURF, + FIELD_MOVE_FLY, + FIELD_MOVE_DIVE, + FIELD_MOVE_WATERFALL, + FIELD_MOVE_TELEPORT, + FIELD_MOVE_DIG, + FIELD_MOVE_SECRET_POWER, + FIELD_MOVE_MILK_DRINK, + FIELD_MOVE_SOFT_BOILED, + FIELD_MOVE_SWEET_SCENT, +#if OW_ROCK_CLIMB_FIELD_MOVE == TRUE + FIELD_MOVE_ROCK_CLIMB, +#endif +#if OW_DEFOG_FIELD_MOVE == TRUE + FIELD_MOVE_DEFOG, +#endif + FIELD_MOVES_COUNT +}; + + +#endif //GUARD_CONSTANTS_FIELD_MOVE_H diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h index 72966adeb882..6973f9e14f56 100644 --- a/include/constants/field_specials.h +++ b/include/constants/field_specials.h @@ -2,65 +2,80 @@ #define GUARD_CONSTANTS_FIELD_SPECIALS_H // PC Locations -#define PC_LOCATION_OTHER 0 -#define PC_LOCATION_BRENDANS_HOUSE 1 -#define PC_LOCATION_MAYS_HOUSE 2 +enum PCLocation +{ + PC_LOCATION_OTHER, + PC_LOCATION_BRENDANS_HOUSE, + PC_LOCATION_MAYS_HOUSE, +}; // SS Tidal Locations -#define SS_TIDAL_LOCATION_CURRENTS 0 -#define SS_TIDAL_LOCATION_SLATEPORT 1 -#define SS_TIDAL_LOCATION_LILYCOVE 2 -#define SS_TIDAL_LOCATION_ROUTE124 3 -#define SS_TIDAL_LOCATION_ROUTE131 4 +enum SSTidalLocation +{ + SS_TIDAL_LOCATION_CURRENTS, + SS_TIDAL_LOCATION_SLATEPORT, + SS_TIDAL_LOCATION_LILYCOVE, + SS_TIDAL_LOCATION_ROUTE124, + SS_TIDAL_LOCATION_ROUTE131, +}; -#define SS_TIDAL_BOARD_SLATEPORT 1 -#define SS_TIDAL_DEPART_SLATEPORT 2 -#define SS_TIDAL_HALFWAY_LILYCOVE 3 -#define SS_TIDAL_LAND_LILYCOVE 4 -#define SS_TIDAL_BOARD_LILYCOVE 5 -#define SS_TIDAL_DEPART_LILYCOVE 6 -#define SS_TIDAL_HALFWAY_SLATEPORT 7 -#define SS_TIDAL_LAND_SLATEPORT 8 -#define SS_TIDAL_EXIT_CURRENTS_RIGHT 9 -#define SS_TIDAL_EXIT_CURRENTS_LEFT 10 +enum SSTidalState +{ + SS_TIDAL_BOARD_SLATEPORT = 1, + SS_TIDAL_DEPART_SLATEPORT, + SS_TIDAL_HALFWAY_LILYCOVE, + SS_TIDAL_LAND_LILYCOVE, + SS_TIDAL_BOARD_LILYCOVE, + SS_TIDAL_DEPART_LILYCOVE, + SS_TIDAL_HALFWAY_SLATEPORT, + SS_TIDAL_LAND_SLATEPORT, + SS_TIDAL_EXIT_CURRENTS_RIGHT, + SS_TIDAL_EXIT_CURRENTS_LEFT, +}; #define SS_TIDAL_MAX_STEPS 205 // Scrollable Multichoice Menus -#define SCROLL_MULTI_NONE 0 -#define SCROLL_MULTI_GLASS_WORKSHOP_VENDOR 1 -#define SCROLL_MULTI_POKEMON_FAN_CLUB_RATER 2 -#define SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1 3 -#define SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2 4 -#define SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR 5 -#define SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR 6 -#define SCROLL_MULTI_BERRY_POWDER_VENDOR 7 -#define SCROLL_MULTI_BF_RECEPTIONIST 8 -#define SCROLL_MULTI_BF_MOVE_TUTOR_1 9 -#define SCROLL_MULTI_BF_MOVE_TUTOR_2 10 -#define SCROLL_MULTI_SS_TIDAL_DESTINATION 11 -#define SCROLL_MULTI_BATTLE_TENT_RULES 12 +enum ScrollMulti +{ + SCROLL_MULTI_NONE, + SCROLL_MULTI_GLASS_WORKSHOP_VENDOR, + SCROLL_MULTI_POKEMON_FAN_CLUB_RATER, + SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1, + SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2, + SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR, + SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR, + SCROLL_MULTI_BERRY_POWDER_VENDOR, + SCROLL_MULTI_BF_RECEPTIONIST, + SCROLL_MULTI_BF_MOVE_TUTOR_1, + SCROLL_MULTI_BF_MOVE_TUTOR_2, + SCROLL_MULTI_SS_TIDAL_DESTINATION, + SCROLL_MULTI_BATTLE_TENT_RULES, +}; #define MAX_SCROLL_MULTI_ON_SCREEN 6 #define MAX_SCROLL_MULTI_LENGTH 16 // Dept Store Floor Numbers -#define DEPT_STORE_FLOORNUM_B4F 0 -#define DEPT_STORE_FLOORNUM_B3F 1 -#define DEPT_STORE_FLOORNUM_B2F 2 -#define DEPT_STORE_FLOORNUM_B1F 3 -#define DEPT_STORE_FLOORNUM_1F 4 -#define DEPT_STORE_FLOORNUM_2F 5 -#define DEPT_STORE_FLOORNUM_3F 6 -#define DEPT_STORE_FLOORNUM_4F 7 -#define DEPT_STORE_FLOORNUM_5F 8 -#define DEPT_STORE_FLOORNUM_6F 9 -#define DEPT_STORE_FLOORNUM_7F 10 -#define DEPT_STORE_FLOORNUM_8F 11 -#define DEPT_STORE_FLOORNUM_9F 12 -#define DEPT_STORE_FLOORNUM_10F 13 -#define DEPT_STORE_FLOORNUM_11F 14 -#define DEPT_STORE_FLOORNUM_ROOFTOP 15 +enum DeptStoreFloorNumber +{ + DEPT_STORE_FLOORNUM_B4F, + DEPT_STORE_FLOORNUM_B3F, + DEPT_STORE_FLOORNUM_B2F, + DEPT_STORE_FLOORNUM_B1F, + DEPT_STORE_FLOORNUM_1F, + DEPT_STORE_FLOORNUM_2F, + DEPT_STORE_FLOORNUM_3F, + DEPT_STORE_FLOORNUM_4F, + DEPT_STORE_FLOORNUM_5F, + DEPT_STORE_FLOORNUM_6F, + DEPT_STORE_FLOORNUM_7F, + DEPT_STORE_FLOORNUM_8F, + DEPT_STORE_FLOORNUM_9F, + DEPT_STORE_FLOORNUM_10F, + DEPT_STORE_FLOORNUM_11F, + DEPT_STORE_FLOORNUM_ROOFTOP, +}; // Lilycove PokΓ©mon Trainer Fan Club #define NUM_TRAINER_FAN_CLUB_MEMBERS 8 @@ -81,10 +96,13 @@ #define FANCOUNTER_USED_BATTLE_TOWER 3 // Return values for DoDeoxysRockInteraction -#define DEOXYS_ROCK_FAILED 0 -#define DEOXYS_ROCK_PROGRESSED 1 -#define DEOXYS_ROCK_SOLVED 2 -#define DEOXYS_ROCK_COMPLETE 3 +enum DeoxysRockResult +{ + DEOXYS_ROCK_FAILED, + DEOXYS_ROCK_PROGRESSED, + DEOXYS_ROCK_SOLVED, + DEOXYS_ROCK_COMPLETE, +}; enum { OPEN_PARTY_SCREEN, diff --git a/include/constants/flags.h b/include/constants/flags.h index 71a9116728fa..47a3b245e192 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1397,6 +1397,7 @@ #define FLAG_SYS_USE_FLASH (SYSTEM_FLAGS + 0x28) #define FLAG_SYS_USE_STRENGTH (SYSTEM_FLAGS + 0x29) +// Sets abnormal weather on maps that check for it #define FLAG_SYS_WEATHER_CTRL (SYSTEM_FLAGS + 0x2A) #define FLAG_SYS_CYCLING_ROAD (SYSTEM_FLAGS + 0x2B) #define FLAG_SYS_SAFARI_MODE (SYSTEM_FLAGS + 0x2C) diff --git a/include/constants/follower_npc.h b/include/constants/follower_npc.h index e1c84b05a4f9..989aab72b4b1 100644 --- a/include/constants/follower_npc.h +++ b/include/constants/follower_npc.h @@ -2,7 +2,6 @@ #define GUARD_CONSTANTS_FOLLOWER_NPC_H // NPC Follower Flags -#define FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES 0x1 // Only use this if the NPC has running anim frames. Part of FOLLOWER_NPC_FLAG_ALL_LAND. #define FOLLOWER_NPC_FLAG_CAN_BIKE 0x2 // Player is allowed to use the Bike. Part of FOLLOWER_NPC_FLAG_ALL_LAND. #define FOLLOWER_NPC_FLAG_CAN_LEAVE_ROUTE 0x4 // Player is allowed to use Fly/Teleport/EscapeRope/etc. Part of FOLLOWER_NPC_FLAG_ALL_LAND. #define FOLLOWER_NPC_FLAG_CAN_SURF 0x8 // Player is allowed to Surf. Part of FOLLOWER_NPC_FLAG_ALL_WATER. @@ -10,12 +9,11 @@ #define FOLLOWER_NPC_FLAG_CAN_DIVE 0x20 // Player is allowed to use Dive. Part of FOLLOWER_NPC_FLAG_ALL_WATER. #define FOLLOWER_NPC_FLAG_CLEAR_ON_WHITE_OUT 0x80 // The NPC follower will be destroyed if the player whites out. -#define FOLLOWER_NPC_FLAG_ALL_LAND FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES | FOLLOWER_NPC_FLAG_CAN_BIKE | FOLLOWER_NPC_FLAG_CAN_LEAVE_ROUTE +#define FOLLOWER_NPC_FLAG_ALL_LAND FOLLOWER_NPC_FLAG_CAN_BIKE | FOLLOWER_NPC_FLAG_CAN_LEAVE_ROUTE #define FOLLOWER_NPC_FLAG_ALL_WATER FOLLOWER_NPC_FLAG_CAN_SURF | FOLLOWER_NPC_FLAG_CAN_WATERFALL | FOLLOWER_NPC_FLAG_CAN_DIVE #define FOLLOWER_NPC_FLAG_ALL FOLLOWER_NPC_FLAG_ALL_LAND | FOLLOWER_NPC_FLAG_ALL_WATER | FOLLOWER_NPC_FLAG_CLEAR_ON_WHITE_OUT // Shorter flag names for ease of use in setfollowernpc script macro -#define FNPC_RUNNING FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES #define FNPC_BIKE FOLLOWER_NPC_FLAG_CAN_BIKE #define FNPC_LEAVE_ROUTE FOLLOWER_NPC_FLAG_CAN_LEAVE_ROUTE #define FNPC_SURF FOLLOWER_NPC_FLAG_CAN_SURF @@ -27,8 +25,4 @@ #define FNPC_ALL_WATER FOLLOWER_NPC_FLAG_ALL_WATER #define FNPC_ALL FOLLOWER_NPC_FLAG_ALL - -#define FNPC_NONE 0 -#define FNPC_ALWAYS 2 - #endif // GUARD_CONSTANTS_FOLLOWER_NPC_H diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 0670e9564545..f43f3bddc68f 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -48,7 +48,7 @@ enum FormChanges FORM_CHANGE_WITHDRAW, // Form change that activates when the PokΓ©mon faints, either in battle or in the overworld by poison. // If species is not specified and it's on the player's side, it will try to use the value - // saved in gBattleStruct->changedSpecies from a previous form change. + // saved in gBattleStruct->partyState[x][y].changedSpecies from a previous form change. // - No parameters. FORM_CHANGE_FAINT, // Form change that activates when the PokΓ©mon is sent out at the beginning of a battle @@ -56,14 +56,14 @@ enum FormChanges // param2: a move that will be replaced, optional // param3: a new move to replace it with, optional FORM_CHANGE_BEGIN_BATTLE, - // Form change that activates at the end of a battle. If species is not specified and it's on the player's side, it will try to use the value saved in gBattleStruct->changedSpecies from a previous form change. + // Form change that activates at the end of a battle. If species is not specified and it's on the player's side, it will try to use the value saved in gBattleStruct->partyState[x][y].changedSpecies from a previous form change. // param1: item to hold, optional // param2: a move that will be replaced, optional // param3: a new move to replace it with, optional FORM_CHANGE_END_BATTLE, - // Form change that activates at the end of a battle based on the terrain if it participated in the battle and hasn't fainted. Takes priority over FORM_CHANGE_END_BATTLE. - // param1: battle terrain to check. - FORM_CHANGE_END_BATTLE_TERRAIN, + // Form change that activates at the end of a battle based on the environment if it participated in the battle and hasn't fainted. Takes priority over FORM_CHANGE_END_BATTLE. + // param1: battle environment to check. + FORM_CHANGE_END_BATTLE_ENVIRONMENT, // Form change that activates when the PokΓ©mon is switched out in battle. // param1: ability to check, optional FORM_CHANGE_BATTLE_SWITCH, @@ -125,6 +125,9 @@ enum FormChanges // param1: move to check // param2: ability to check, optional FORM_CHANGE_BATTLE_BEFORE_MOVE, + // Form change that activates after using a move. + // param1: move to check + FORM_CHANGE_BATTLE_AFTER_MOVE, // Form change that activates before using a specific move category. // param1: move category to check // param2: ability to check, optional diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h index 060d4167eff2..755a4d118634 100644 --- a/include/constants/generational_changes.h +++ b/include/constants/generational_changes.h @@ -1,23 +1,211 @@ #ifndef GUARD_CONSTANTS_GENERATIONAL_CHANGES_H #define GUARD_CONSTANTS_GENERATIONAL_CHANGES_H -enum GenConfigTag +/* Config definitions */ +#define CONFIG_DEFINITIONS(F) \ + /* Calculation settings */ \ + F(CRIT_CHANCE, critChance, (u32, GEN_COUNT - 1)) \ + F(CRIT_MULTIPLIER, critMultiplier, (u32, GEN_COUNT - 1)) \ + F(PARALYSIS_SPEED, paralysisSpeed, (u32, GEN_COUNT - 1)) \ + F(CONFUSION_SELF_DMG_CHANCE, confusionSelfDmgChance, (u32, GEN_COUNT - 1)) \ + F(MULTI_HIT_CHANCE, multiHitChance, (u32, GEN_COUNT - 1)) \ + F(WHITEOUT_MONEY, whiteoutMoney, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(LIGHT_BALL_ATTACK_BOOST, lightBallAttackBoost, (u32, GEN_COUNT - 1)) \ + /* Experience settings */ \ + F(EXP_CATCH, expCatch, (u32, GEN_COUNT - 1)) \ + F(TRAINER_EXP_MULTIPLIER, trainerExpMultiplier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SPLIT_EXP, splitExp, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SCALED_EXP, scaledExp, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(UNEVOLVED_EXP_MULTIPLIER, unevolvedExpMultiplier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(LEVEL_UP_NOTIFICATION, levelUpNotification, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Stat settings */ \ + F(BADGE_BOOST, badgeBoost, (u32, GEN_COUNT - 1)) \ + F(FRIENDSHIP_BOOST, friendshipBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(MAX_LEVEL_EV_GAINS, maxLevelEvGains, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(RECALCULATE_STATS, recalculateStats, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Damage settings */ \ + F(BURN_DAMAGE, burnDamage, (u32, GEN_COUNT - 1)) \ + F(BURN_FACADE_DMG, burnFacadeDmg, (u32, GEN_COUNT - 1)) \ + F(BINDING_DAMAGE, bindingDamage, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(PSYWAVE_DMG, psywaveDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(PAYBACK_SWITCH_BOOST, paybackSwitchBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(HIDDEN_POWER_DMG, hiddenPowerDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(ROUGH_SKIN_DMG, roughSkinDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(KNOCK_OFF_DMG, knockOffDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SPORT_DMG_REDUCTION, sportDmgReduction, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(EXPLOSION_DEFENSE, explosionDefense, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(PARENTAL_BOND_DMG, parentalBondDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(MULTIPLE_TARGETS_DMG, multipleTargetsDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Type settings */ \ + F(GHOSTS_ESCAPE, ghostsEscape, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(PARALYZE_ELECTRIC, paralyzeElectric, (u32, GEN_COUNT - 1)) \ + F(POWDER_GRASS, powderGrass, (u32, GEN_COUNT - 1)) \ + F(POWDER_OVERCOAT, powderOvercoat, (u32, GEN_COUNT - 1)) \ + F(UPDATED_TYPE_MATCHUPS, updatedTypeMatchups, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(PRANKSTER_DARK_TYPES, pranksterDarkTypes, (u32, GEN_COUNT - 1)) \ + F(SHEER_COLD_IMMUNITY, sheerColdImmunity, (u32, GEN_COUNT - 1)) \ + F(ROOST_PURE_FLYING, roostPureFlying, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(STATUS_TYPE_IMMUNITY, statusTypeImmunity, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Turn settings */ \ + F(BINDING_TURNS, bindingTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(UPROAR_TURNS, uproarTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(UPROAR_IGNORE_SOUNDPROOF, uproarIgnoreSoundproof, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(DISABLE_TURNS, disableTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(TAILWIND_TURNS, tailwindTurns, (u32, GEN_COUNT - 1)) \ + F(SLEEP_TURNS, sleepTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(TAUNT_TURNS, tauntTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SPORT_TURNS, sportTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(MEGA_EVO_TURN_ORDER, megaEvoTurnOrder, (u32, GEN_COUNT - 1)) \ + F(RECALC_TURN_AFTER_ACTIONS, recalcTurnAfterActions, (u32, GEN_COUNT - 1)) \ + F(FAINT_SWITCH_IN, faintSwitchIn, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Move data settings */ \ + F(UPDATED_MOVE_DATA, updatedMoveData, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(UPDATED_MOVE_TYPES, updatedMoveTypes, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(UPDATED_MOVE_FLAGS, updatedMoveFlags, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(PHYSICAL_SPECIAL_SPLIT, physicalSpecialSplit, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(RECOIL_IF_MISS_DMG, recoilIfMissDmg, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(KLUTZ_FLING_INTERACTION, klutzFlingInteraction, (u32, GEN_COUNT - 1)) \ + F(UPDATED_CONVERSION, updatedConversion, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(UPDATED_CONVERSION_2, updatedConversion2, (u32, GEN_COUNT - 1)) \ + F(PP_REDUCED_BY_SPITE, ppReducedBySpite, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(EXTRAPOLATED_MOVE_FLAGS, extrapolatedMoveFlags, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Ability data settings */ \ + F(UPDATED_ABILITY_DATA, updatedAbilityData, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Move accuracy settings */ \ + F(TOXIC_NEVER_MISS, toxicNeverMiss, (u32, GEN_COUNT - 1)) \ + F(MINIMIZE_DMG_ACC, minimizeDmgAcc, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(BLIZZARD_HAIL, blizzardHail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SHEER_COLD_ACC, sheerColdAcc, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Move stat change settings */ \ + F(FELL_STINGER_STAT_RAISE, fellStingerStatRaise, (u32, GEN_COUNT - 1)) \ + F(KINGS_SHIELD_LOWER_ATK, kingsShieldLowerAtk, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SPEED_BUFFING_RAPID_SPIN, speedBuffingRapidSpin, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(CHARGE_SPDEF_RAISE, chargeSpDefRaise, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(MINIMIZE_EVASION, minimizeEvasion, (u32, GEN_COUNT - 1)) \ + F(GROWTH_STAT_RAISE, growthStatRaise, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(FOCUS_ENERGY_CRIT_RATIO, focusEnergyCritRatio, (u32, GEN_COUNT - 1)) \ + /* Other move settings */ \ + F(INCINERATE_GEMS, incinerateGems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(CAN_SPITE_FAIL, canSpiteFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(CRASH_IF_TARGET_IMMUNE, crashIfTargetImmune, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(MEMENTO_FAIL, mementoFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(GLARE_GHOST, glareGhost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SKILL_SWAP, skillSwap, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(BRICK_BREAK, brickBreak, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(WISH_HP_SOURCE, wishHpSource, (u32, GEN_COUNT - 1)) \ + F(RAMPAGE_CANCELLING, rampageCancelling, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(HEAL_BLOCKING, healBlocking, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(ROOTED_GROUNDING, rootedGrounding, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(METRONOME_MOVES, metronomeMoves, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(TELEPORT_BEHAVIOR, teleportBehavior, (u32, GEN_COUNT - 1)) \ + F(BEAT_UP, beatUp, (u32, GEN_COUNT - 1)) \ + F(DARK_VOID_FAIL, darkVoidFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(BURN_HIT_THAW, burnHitThaw, (u32, GEN_COUNT - 1)) \ + F(HEALING_WISH_SWITCH, healingWishSwitch, (u32, GEN_COUNT - 1)) \ + F(DEFOG_EFFECT_CLEARING, defogEffectClearing, (u32, GEN_COUNT - 1)) \ + F(STOCKPILE_RAISES_DEFS, stockpileRaisesDefs, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(TRANSFORM_SHINY, transformShiny, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(TRANSFORM_FORM_CHANGES, transformFormChanges, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(WIDE_GUARD, wideGuard, (u32, GEN_COUNT - 1)) \ + F(QUICK_GUARD, quickGuard, (u32, GEN_COUNT - 1)) \ + F(IMPRISON, imprison, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(ALLY_SWITCH_FAIL_CHANCE, allySwitchFailChance, (u32, GEN_COUNT - 1)) \ + F(SKETCH_BANS, sketchBans, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(KNOCK_OFF_REMOVAL, knockOffRemoval, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(HEAL_BELL_SOUNDPROOF, healBellSoundproof, (u32, GEN_COUNT - 1)) \ + F(CHARGE, charge, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(POWDER_RAIN, powderRain, (u32, GEN_COUNT - 1)) \ + F(AFTER_YOU_TURN_ORDER, afterYouTurnOrder, (u32, GEN_COUNT - 1)) \ + F(QUASH_TURN_ORDER, quashTurnOrder, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(DESTINY_BOND_FAIL, destinyBondFail, (u32, GEN_COUNT - 1)) \ + F(PURSUIT_TARGET, pursuitTarget, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SKIP_RECHARGE, skipRecharge, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(ENCORE_TARGET, encoreTarget, (u32, GEN_COUNT - 1)) \ + F(TIME_OF_DAY_HEALING_MOVES, timeOfDayHealingMoves, (u32, GEN_COUNT - 1)) \ + F(DREAM_EATER_LIQUID_OOZE, dreamEaterLiquidOoze, (u32, GEN_COUNT - 1)) \ + /* Ability settings */ \ + F(GALE_WINGS, galeWings, (u32, GEN_COUNT - 1)) \ + F(STANCE_CHANGE_FAIL, stanceChangeFail, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SHADOW_TAG_ESCAPE, shadowTagEscape, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(MOODY_ACC_EVASION, moodyAccEvasion, (u32, GEN_COUNT - 1)) \ + F(FLASH_FIRE_FROZEN, flashFireFrozen, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SYNCHRONIZE_TOXIC, synchronizeToxic, (u32, GEN_COUNT - 1)) \ + F(UPDATED_INTIMIDATE, updatedIntimidate, (u32, GEN_COUNT - 1)) \ + F(OBLIVIOUS_TAUNT, obliviousTaunt, (u32, GEN_COUNT - 1)) \ + F(STURDY, sturdy, (u32, GEN_COUNT - 1)) \ + F(PLUS_MINUS_INTERACTION, plusMinusInteraction, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(WEATHER_FORMS, weatherForms, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SYMBIOSIS_GEMS, symbiosisGems, (u32, GEN_COUNT - 1)) \ + F(ABSORBING_ABILITY_STRING, absorbingAbilityString, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(REDIRECT_ABILITY_IMMUNITY, redirectAbilityImmunity, (u32, GEN_COUNT - 1)) \ + F(REDIRECT_ABILITY_ALLIES, redirectAbilityAllies, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(LEAF_GUARD_PREVENTS_REST, leafGuardPreventsRest, (u32, GEN_COUNT - 1)) \ + F(TRANSISTOR_BOOST, transistorBoost, (u32, GEN_COUNT - 1)) \ + F(ILLUMINATE_EFFECT, illuminateEffect, (u32, GEN_COUNT - 1)) \ + F(WEAK_ARMOR_SPEED, weakArmorSpeed, (u32, GEN_COUNT - 1)) \ + F(PROTEAN_LIBERO, proteanLibero, (u32, GEN_COUNT - 1)) \ + F(INTREPID_SWORD, intrepidSword, (u32, GEN_COUNT - 1)) \ + F(DAUNTLESS_SHIELD, dauntlessShield, (u32, GEN_COUNT - 1)) \ + F(DISGUISE_HP_LOSS, disguiseHpLoss, (u32, GEN_COUNT - 1)) \ + F(ABILITY_TRIGGER_CHANCE, abilityTriggerChance, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(PICKUP_WILD, pickupWild, (u32, GEN_COUNT - 1)) \ + F(MAGIC_GUARD, magicGuard, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(BATTLE_BOND, battleBond, (u32, GEN_COUNT - 1)) \ + F(ATE_MULTIPLIER, ateMultiplier, (u32, GEN_COUNT - 1)) \ + F(DEFIANT_STICKY_WEB, defiantStickyWeb, (u32, GEN_COUNT - 1)) \ + /* Item settings */ \ + F(CONFUSE_BERRIES_HEAL, confuseBerriesHeal, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(X_ITEMS_BUFF, xItemsBuff, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(MENTAL_HERB, mentalHerb, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(TRAINERS_KNOCK_OFF_ITEMS, trainersKnockOffItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(RETURN_STOLEN_NPC_ITEMS, returnStolenNpcItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(STEAL_WILD_ITEMS, stealWildItems, (u32, GEN_COUNT - 1)) \ + F(RESTORE_HELD_BATTLE_ITEMS, restoreHeldBattleItems, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SOUL_DEW_BOOST, soulDewBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(NET_BALL_MODIFIER, netBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(DIVE_BALL_MODIFIER, diveBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(NEST_BALL_MODIFIER, nestBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(REPEAT_BALL_MODIFIER, repeatBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(TIMER_BALL_MODIFIER, timerBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(DUSK_BALL_MODIFIER, duskBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(QUICK_BALL_MODIFIER, quickBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(LURE_BALL_MODIFIER, lureBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(HEAVY_BALL_MODIFIER, heavyBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(DREAM_BALL_MODIFIER, dreamBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SPORT_BALL_MODIFIER, sportBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SAFARI_BALL_MODIFIER, safariBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(FRIEND_BALL_MODIFIER, friendBallModifier, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SERENE_GRACE_BOOST, sereneGraceBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(IRON_BALL, ironBall, (u32, GEN_COUNT - 1)) \ + /* Weather settings */ \ + F(ABILITY_WEATHER, abilityWeather, (u32, GEN_COUNT - 1)) \ + F(SANDSTORM_SPDEF_BOOST, sandstormSpDefBoost, (u32, GEN_COUNT - 1)) \ + F(OVERWORLD_FOG, overworldFog, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(OVERWORLD_SNOW, overworldSnow, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SNOW_WARNING, snowWarning, (u32, GEN_COUNT - 1)) \ + F(PREFERRED_ICE_WEATHER, preferredIceWeather, (u32, B_ICE_WEATHER_SNOW)) /* TODO: use in tests */ \ + /* Terrain settings */ \ + F(TERRAIN_TYPE_BOOST, terrainTypeBoost, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SECRET_POWER_EFFECT, secretPowerEffect, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(SECRET_POWER_ANIMATION, secretPowerAnimation, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(NATURE_POWER_MOVES, naturePowerMoves, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(CAMOUFLAGE_TYPES, camouflageTypes, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + /* Other settings */ \ + F(WILD_NATURAL_ENEMIES, wildNaturalEnemies, (u32, TRUE)) /* TODO: use in tests */ \ + F(AFFECTION_MECHANICS, affectionMechanics, (u32, TRUE)) /* TODO: use in tests */ \ + F(OBEDIENCE_MECHANICS, obedienceMechanics, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(USE_FROSTBITE, useFrostbite, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + + +#define GET_CONFIG_MAXIMUM(_typeMaxValue, ...) INVOKE_WITH_B(GET_CONFIG_MAXIMUM_, _typeMaxValue) +#define GET_CONFIG_MAXIMUM_(_type, ...) FIRST(__VA_OPT__(FIRST(__VA_ARGS__),) MAX_BITS((sizeof(_type) * 8))) + +#define UNPACK_CONFIG_ENUMS(_name, ...) CONFIG_##_name, + +enum ConfigTag { - GEN_CONFIG_CRIT_CHANCE, - GEN_CONFIG_CRIT_MULTIPLIER, - GEN_CONFIG_FOCUS_ENERGY_CRIT_RATIO, - GEN_CONFIG_PARALYSIS_SPEED, - GEN_CONFIG_CONFUSION_SELF_DMG_CHANCE, - GEN_CONFIG_MULTI_HIT_CHANCE, - GEN_CONFIG_GALE_WINGS, - GEN_CONFIG_HEAL_BELL_SOUNDPROOF, - GEN_CONFIG_TELEPORT_BEHAVIOR, - GEN_CONFIG_ABILITY_WEATHER, - GEN_CONFIG_MOODY_STATS, - GEN_CONFIG_BATTLE_BOND, - GEN_CONFIG_ATE_MULTIPLIER, - GEN_CONFIG_FELL_STINGER_STAT_RAISE, - GEN_CONFIG_COUNT + CONFIG_DEFINITIONS(UNPACK_CONFIG_ENUMS) + CONFIG_COUNT }; #endif // GUARD_CONSTANTS_GENERATIONAL_CHANGES_H diff --git a/include/constants/global.h b/include/constants/global.h index 4698dbc3b457..fa0ebbcc0fb2 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -1,17 +1,33 @@ #ifndef GUARD_CONSTANTS_GLOBAL_H #define GUARD_CONSTANTS_GLOBAL_H -#include "config/general.h" +// You can use the ENABLED_ON_RELEASE and DISABLED_ON_RELEASE macros to +// control whether a feature is enabled or disabled when making a release build. +// +// For example, the overworld debug menu is enabled by default, but when using +// `make release`, it will be automatically disabled. +// +// #define DEBUG_OVERWORLD_MENU DISABLED_ON_RELEASE +#ifdef RELEASE +#define ENABLED_ON_RELEASE TRUE +#define DISABLED_ON_RELEASE FALSE +#else +#define ENABLED_ON_RELEASE FALSE +#define DISABLED_ON_RELEASE TRUE +#endif + +#include "config/ai.h" #include "config/battle.h" +#include "config/caps.h" +#include "config/contest.h" #include "config/debug.h" +#include "config/dexnav.h" +#include "config/follower_npc.h" +#include "config/general.h" #include "config/item.h" -#include "config/caps.h" -#include "config/pokemon.h" #include "config/overworld.h" -#include "config/dexnav.h" +#include "config/pokemon.h" #include "config/summary_screen.h" -#include "config/ai.h" -#include "config/follower_npc.h" // Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen. // In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen. @@ -63,11 +79,6 @@ #define SECRET_BASES_COUNT 20 #define POKE_NEWS_COUNT 16 #define PC_ITEMS_COUNT 50 -#define BAG_ITEMS_COUNT 30 -#define BAG_KEYITEMS_COUNT 30 -#define BAG_POKEBALLS_COUNT 16 -#define BAG_TMHM_COUNT 64 -#define BAG_BERRIES_COUNT 46 #define OBJECT_EVENT_TEMPLATES_COUNT 64 #define DECOR_MAX_SECRET_BASE 16 #define DECOR_MAX_PLAYERS_HOUSE 12 @@ -81,6 +92,13 @@ #define PYRAMID_BAG_ITEMS_COUNT 10 #define ROAMER_COUNT 1 // Number of maximum concurrent active roamers +// Bag constants +#define BAG_ITEMS_COUNT 30 +#define BAG_KEYITEMS_COUNT 30 +#define BAG_POKEBALLS_COUNT 16 +#define BAG_TMHM_COUNT 64 +#define BAG_BERRIES_COUNT 46 + // Number of facilities for Ranking Hall. // 7 facilities for single mode + tower double mode + tower multi mode. // Excludes link modes. See RANKING_HALL_* in include/constants/battle_frontier.h @@ -99,12 +117,14 @@ #define ALL_MOVES_MASK ((1 << MAX_MON_MOVES) - 1) #define CONTESTANT_COUNT 4 -#define CONTEST_CATEGORY_COOL 0 -#define CONTEST_CATEGORY_BEAUTY 1 -#define CONTEST_CATEGORY_CUTE 2 -#define CONTEST_CATEGORY_SMART 3 -#define CONTEST_CATEGORY_TOUGH 4 -#define CONTEST_CATEGORIES_COUNT 5 +#define CONTEST_CATEGORY_COOL 0 +#define CONTEST_CATEGORY_BEAUTIFUL 1 +#define CONTEST_CATEGORY_BEAUTY CONTEST_CATEGORY_BEAUTIFUL +#define CONTEST_CATEGORY_CUTE 2 +#define CONTEST_CATEGORY_CLEVER 3 +#define CONTEST_CATEGORY_SMART CONTEST_CATEGORY_CLEVER +#define CONTEST_CATEGORY_TOUGH 4 +#define CONTEST_CATEGORIES_COUNT 5 // string lengths #define ITEM_NAME_LENGTH 20 @@ -146,6 +166,7 @@ #define OPTIONS_TEXT_SPEED_SLOW 0 #define OPTIONS_TEXT_SPEED_MID 1 #define OPTIONS_TEXT_SPEED_FAST 2 +#define OPTIONS_TEXT_SPEED_INSTANT 3 #define OPTIONS_SOUND_MONO 0 #define OPTIONS_SOUND_STEREO 1 diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index c7ed811601a0..32dacc36d34d 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -1,7 +1,7 @@ #ifndef GUARD_HOLD_EFFECTS_H #define GUARD_HOLD_EFFECTS_H -enum ItemHoldEffect +enum __attribute__((packed)) HoldEffect { HOLD_EFFECT_NONE, HOLD_EFFECT_RESTORE_HP, @@ -120,7 +120,7 @@ enum ItemHoldEffect // Gen7 hold effects HOLD_EFFECT_PROTECTIVE_PADS, HOLD_EFFECT_TERRAIN_EXTENDER, - HOLD_EFFECT_SEEDS, + HOLD_EFFECT_TERRAIN_SEED, HOLD_EFFECT_ADRENALINE_ORB, HOLD_EFFECT_MEMORY, HOLD_EFFECT_Z_CRYSTAL, @@ -142,14 +142,21 @@ enum ItemHoldEffect HOLD_EFFECT_OGERPON_MASK, // Gen2 hold effect HOLD_EFFECT_BERSERK_GENE, + HOLD_EFFECT_COUNT }; -#define HOLD_EFFECT_CHOICE(holdEffect) ((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) - // Terrain seed params #define HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN 0 #define HOLD_EFFECT_PARAM_GRASSY_TERRAIN 1 #define HOLD_EFFECT_PARAM_MISTY_TERRAIN 2 #define HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN 3 +enum ItemActivationState +{ + ACTIVATION_ON_USABLE_AGAIN, + ACTIVATION_ON_PICK_UP, + ACTIVATION_ON_HARVEST, + ACTIVATION_ON_HP_THRESHOLD, +}; + #endif // GUARD_HOLD_EFFECTS_H diff --git a/include/constants/item.h b/include/constants/item.h index 587270e0e9a5..2d8c3f9419cb 100644 --- a/include/constants/item.h +++ b/include/constants/item.h @@ -1,20 +1,16 @@ #ifndef GUARD_ITEM_CONSTANTS_H #define GUARD_ITEM_CONSTANTS_H -// These constants are used in gItemsInfo -#define POCKET_NONE 0 -#define POCKET_ITEMS 1 -#define POCKET_POKE_BALLS 2 -#define POCKET_TM_HM 3 -#define POCKET_BERRIES 4 -#define POCKET_KEY_ITEMS 5 - -#define ITEMS_POCKET 0 -#define BALLS_POCKET 1 -#define TMHM_POCKET 2 -#define BERRIES_POCKET 3 -#define KEYITEMS_POCKET 4 -#define POCKETS_COUNT 5 +enum Pocket +{ + POCKET_ITEMS, + POCKET_POKE_BALLS, + POCKET_TM_HM, + POCKET_BERRIES, + POCKET_KEY_ITEMS, + POCKETS_COUNT, + POCKET_DUMMY = POCKETS_COUNT, +}; #define REPEL_LURE_MASK (1 << 15) #define IS_LAST_USED_LURE(var) (var & REPEL_LURE_MASK) diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index ac1c7d5c5b6e..037f28c4bcdd 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -93,4 +93,11 @@ #define ITEM_EFFECT_HEAL_PP 21 #define ITEM_EFFECT_NONE 22 +#define ITEM_FRIENDSHIP_MAPSEC_BONUS 1 // The amount of bonus friendship gained when an item is used on a PokΓ©mon whose met location matches the current map section. +#define ITEM_FRIENDSHIP_LUXURY_BONUS 1 // The amount of bonus friendship gained when a PokΓ©mon is in the Luxury Ball. + +// Since X item stat increases are now handled by battle scripts, the friendship increase effect is now handled by the battle controller in HandleAction_UseItem. +#define X_ITEM_FRIENDSHIP_INCREASE 1 // The amount of friendship gained by using an X item on a PokΓ©mon in battle. +#define X_ITEM_MAX_FRIENDSHIP 200 // Friendship threshold at which PokΓ©mon stop receiving a friendship increase from using X items on them in battle. + #endif // GUARD_CONSTANTS_ITEM_EFFECTS_H diff --git a/include/constants/items.h b/include/constants/items.h index 0abfc31a44d7..ca25c57c3c51 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -994,10 +994,34 @@ #define ITEM_STRANGE_BALL 828 -// HOPO BERRY -// LEGEND PLATE - -#define ITEMS_COUNT 829 +#define ITEM_CLEFABLITE 829 +#define ITEM_VICTREEBELITE 830 +#define ITEM_STARMINITE 831 +#define ITEM_DRAGONINITE 832 +#define ITEM_MEGANIUMITE 833 +#define ITEM_FERALIGITE 834 +#define ITEM_SKARMORITE 835 +#define ITEM_FROSLASSITE 836 +#define ITEM_EMBOARITE 837 +#define ITEM_EXCADRITE 838 +#define ITEM_SCOLIPITE 839 +#define ITEM_SCRAFTINITE 840 +#define ITEM_EELEKTROSSITE 841 +#define ITEM_CHANDELURITE 842 +#define ITEM_CHESNAUGHTITE 843 +#define ITEM_DELPHOXITE 844 +#define ITEM_GRENINJITE 845 +#define ITEM_PYROARITE 846 +#define ITEM_FLOETTITE 847 +#define ITEM_MALAMARITE 848 +#define ITEM_BARBARACITE 849 +#define ITEM_DRAGALGITE 850 +#define ITEM_HAWLUCHANITE 851 +#define ITEM_ZYGARDITE 852 +#define ITEM_DRAMPANITE 853 +#define ITEM_FALINKSITE 854 + +#define ITEMS_COUNT 855 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations @@ -1027,9 +1051,6 @@ #define MAIL_NONE 0xFF #define ITEM_TO_MULCH(itemId)(((itemId) - ITEM_GROWTH_MULCH) + 1) -#define NUM_TECHNICAL_MACHINES 100 -#define NUM_HIDDEN_MACHINES 8 - #define MAX_BAG_ITEM_CAPACITY 999 #define MAX_PC_ITEM_CAPACITY 999 #define MAX_PYRAMID_BAG_ITEM_CAPACITY 99 // Values higher than 255 require free SaveBlock2 space. diff --git a/include/constants/map_types.h b/include/constants/map_types.h index 03a3f0a9a07b..86571434e4a2 100755 --- a/include/constants/map_types.h +++ b/include/constants/map_types.h @@ -1,25 +1,31 @@ #ifndef GUARD_CONSTANTS_MAP_TYPES_H #define GUARD_CONSTANTS_MAP_TYPES_H -#define MAP_TYPE_NONE 0 -#define MAP_TYPE_TOWN 1 -#define MAP_TYPE_CITY 2 -#define MAP_TYPE_ROUTE 3 -#define MAP_TYPE_UNDERGROUND 4 -#define MAP_TYPE_UNDERWATER 5 -#define MAP_TYPE_OCEAN_ROUTE 6 -#define MAP_TYPE_UNKNOWN 7 // Not used by any map. -#define MAP_TYPE_INDOOR 8 -#define MAP_TYPE_SECRET_BASE 9 +enum MapType +{ + MAP_TYPE_NONE, + MAP_TYPE_TOWN, + MAP_TYPE_CITY, + MAP_TYPE_ROUTE, + MAP_TYPE_UNDERGROUND, + MAP_TYPE_UNDERWATER, + MAP_TYPE_OCEAN_ROUTE, + MAP_TYPE_UNKNOWN, // Not used by any map. + MAP_TYPE_INDOOR, + MAP_TYPE_SECRET_BASE, +}; -#define MAP_BATTLE_SCENE_NORMAL 0 -#define MAP_BATTLE_SCENE_GYM 1 -#define MAP_BATTLE_SCENE_MAGMA 2 -#define MAP_BATTLE_SCENE_AQUA 3 -#define MAP_BATTLE_SCENE_SIDNEY 4 -#define MAP_BATTLE_SCENE_PHOEBE 5 -#define MAP_BATTLE_SCENE_GLACIA 6 -#define MAP_BATTLE_SCENE_DRAKE 7 -#define MAP_BATTLE_SCENE_FRONTIER 8 +enum MapBattleScene +{ + MAP_BATTLE_SCENE_NORMAL, + MAP_BATTLE_SCENE_GYM, + MAP_BATTLE_SCENE_MAGMA, + MAP_BATTLE_SCENE_AQUA, + MAP_BATTLE_SCENE_SIDNEY, + MAP_BATTLE_SCENE_PHOEBE, + MAP_BATTLE_SCENE_GLACIA, + MAP_BATTLE_SCENE_DRAKE, + MAP_BATTLE_SCENE_FRONTIER, +}; #endif // GUARD_CONSTANTS_MAP_TYPES_H diff --git a/include/constants/maps.h b/include/constants/maps.h index d41f03c68370..36e27d78b7d1 100644 --- a/include/constants/maps.h +++ b/include/constants/maps.h @@ -3,11 +3,14 @@ #include "map_groups.h" -// Warps using this map will instead use the warp data stored in gSaveBlock1Ptr->dynamicWarp. -// Used for warps that need to change destinations, e.g. when stepping off an elevator. -#define MAP_DYNAMIC (0x7F | (0x7F << 8)) +enum +{ + // Warps using this map will instead use the warp data stored in gSaveBlock1Ptr->dynamicWarp. + // Used for warps that need to change destinations, e.g. when stepping off an elevator. + MAP_DYNAMIC = (0x7F | (0x7F << 8)), -#define MAP_UNDEFINED (0xFF | (0xFF << 8)) + MAP_UNDEFINED = (0xFF | (0xFF << 8)), +}; #define MAP_GROUP(map) (map >> 8) #define MAP_NUM(map) (map & 0xFF) diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 505f279f7340..12ced67a9f29 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -241,7 +241,7 @@ enum { MB_UP_LEFT_STAIR_WARP, MB_DOWN_RIGHT_STAIR_WARP, MB_DOWN_LEFT_STAIR_WARP, - MB_UNUSED_EF, + MB_ROCK_CLIMB, NUM_METATILE_BEHAVIORS }; diff --git a/include/constants/move_relearner.h b/include/constants/move_relearner.h new file mode 100644 index 000000000000..0229cb7f1759 --- /dev/null +++ b/include/constants/move_relearner.h @@ -0,0 +1,29 @@ +#ifndef GUARD_CONSTANTS_MOVE_RELEARNER_H +#define GUARD_CONSTANTS_MOVE_RELEARNER_H + +// Max number of moves shown by the move relearner. +// Increased from 25 to 60 so Mew can display all TMs/HMs. +// If you plan on adding more TMs, increase this number too. +#define MAX_RELEARNER_MOVES 60 + +// Move Relearner menu change constants +enum MoveRelearnerStates +{ + MOVE_RELEARNER_LEVEL_UP_MOVES, + MOVE_RELEARNER_EGG_MOVES, + MOVE_RELEARNER_TM_MOVES, + MOVE_RELEARNER_TUTOR_MOVES, + MOVE_RELEARNER_COUNT, +}; + +enum RelearnMode +{ + RELEARN_MODE_NONE = 0, + RELEARN_MODE_SCRIPT = 1, // Relearning moves through an event script + // These two must stay 2 and 3, they are tied to the summary screen pages + RELEARN_MODE_PSS_PAGE_BATTLE_MOVES = 2, // Relearning moves through the summary screen's battle moves page + RELEARN_MODE_PSS_PAGE_CONTEST_MOVES = 3, // Relearning moves through the summary screen's contest moves page (defaults to contest page on relearner screen) + RELEARN_MODE_PARTY_MENU = 4, // Relearning moves through the party menu's moves submenu +}; + +#endif // GUARD_CONSTANTS_MOVE_RELEARNER_H diff --git a/include/constants/pokedex.h b/include/constants/pokedex.h index 241198e1786b..fd5ad2eb7b7e 100644 --- a/include/constants/pokedex.h +++ b/include/constants/pokedex.h @@ -3,7 +3,8 @@ // National PokΓ©dex order // These constants are NOT disabled by P_GEN_X_POKEMON to keep pokedex_orders.h clean. -enum { +enum NationalDexOrder +{ NATIONAL_DEX_NONE, // Kanto NATIONAL_DEX_BULBASAUR, @@ -1063,7 +1064,8 @@ enum { #define POKEMON_SLOTS_NUMBER (NATIONAL_DEX_COUNT + 1) // Hoenn PokΓ©dex order -enum { +enum HoennDexOrder +{ HOENN_DEX_NONE, HOENN_DEX_TREECKO, HOENN_DEX_GROVYLE, diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 659193861c58..59bf27d8237f 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -2,28 +2,31 @@ #define GUARD_CONSTANTS_POKEMON_H // PokΓ©mon types -#define TYPE_NONE 0 -#define TYPE_NORMAL 1 -#define TYPE_FIGHTING 2 -#define TYPE_FLYING 3 -#define TYPE_POISON 4 -#define TYPE_GROUND 5 -#define TYPE_ROCK 6 -#define TYPE_BUG 7 -#define TYPE_GHOST 8 -#define TYPE_STEEL 9 -#define TYPE_MYSTERY 10 -#define TYPE_FIRE 11 -#define TYPE_WATER 12 -#define TYPE_GRASS 13 -#define TYPE_ELECTRIC 14 -#define TYPE_PSYCHIC 15 -#define TYPE_ICE 16 -#define TYPE_DRAGON 17 -#define TYPE_DARK 18 -#define TYPE_FAIRY 19 -#define TYPE_STELLAR 20 -#define NUMBER_OF_MON_TYPES 21 +enum __attribute__((packed)) Type +{ + TYPE_NONE = 0, + TYPE_NORMAL = 1, + TYPE_FIGHTING = 2, + TYPE_FLYING = 3, + TYPE_POISON = 4, + TYPE_GROUND = 5, + TYPE_ROCK = 6, + TYPE_BUG = 7, + TYPE_GHOST = 8, + TYPE_STEEL = 9, + TYPE_MYSTERY = 10, + TYPE_FIRE = 11, + TYPE_WATER = 12, + TYPE_GRASS = 13, + TYPE_ELECTRIC = 14, + TYPE_PSYCHIC = 15, + TYPE_ICE = 16, + TYPE_DRAGON = 17, + TYPE_DARK = 18, + TYPE_FAIRY = 19, + TYPE_STELLAR = 20, + NUMBER_OF_MON_TYPES +}; // PokΓ©mon egg groups #define EGG_GROUP_NONE 0 @@ -74,16 +77,18 @@ #define NUM_NATURES 25 // PokΓ©mon Stats -#define STAT_HP 0 -#define STAT_ATK 1 -#define STAT_DEF 2 -#define STAT_SPEED 3 -#define STAT_SPATK 4 -#define STAT_SPDEF 5 -#define NUM_STATS 6 - -#define STAT_ACC 6 // Only in battles. -#define STAT_EVASION 7 // Only in battles. +enum __attribute__((packed)) Stat +{ + STAT_HP, + STAT_ATK, + STAT_DEF, + STAT_SPEED, + STAT_SPATK, + STAT_SPDEF, + NUM_STATS, + STAT_ACC = NUM_STATS, // Only in battles. + STAT_EVASION, // Only in battles. +}; #define NUM_NATURE_STATS (NUM_STATS - 1) // excludes HP #define NUM_BATTLE_STATS (NUM_STATS + 2) // includes Accuracy and Evasion @@ -169,7 +174,6 @@ #define LEVEL_UP_MOVE_END 0xFFFF #define MAX_LEVEL_UP_MOVES 20 -#define MAX_RELEARNER_MOVES max(MAX_LEVEL_UP_MOVES, 25) #define MON_MALE 0x00 #define MON_FEMALE 0xFE @@ -218,29 +222,38 @@ #define EV_ITEM_RAISE_LIMIT ((I_VITAMIN_EV_CAP >= GEN_8) ? MAX_PER_STAT_EVS : 100) // Move category defines. -#define DAMAGE_CATEGORY_PHYSICAL 0 -#define DAMAGE_CATEGORY_SPECIAL 1 -#define DAMAGE_CATEGORY_STATUS 2 +enum __attribute__((packed)) DamageCategory +{ + DAMAGE_CATEGORY_PHYSICAL, + DAMAGE_CATEGORY_SPECIAL, + DAMAGE_CATEGORY_STATUS +}; // Growth rates -#define GROWTH_MEDIUM_FAST 0 -#define GROWTH_ERRATIC 1 -#define GROWTH_FLUCTUATING 2 -#define GROWTH_MEDIUM_SLOW 3 -#define GROWTH_FAST 4 -#define GROWTH_SLOW 5 +enum GrowthRate +{ + GROWTH_MEDIUM_FAST, + GROWTH_ERRATIC, + GROWTH_FLUCTUATING, + GROWTH_MEDIUM_SLOW, + GROWTH_FAST, + GROWTH_SLOW, +}; // Body colors for PokΓ©dex search -#define BODY_COLOR_RED 0 -#define BODY_COLOR_BLUE 1 -#define BODY_COLOR_YELLOW 2 -#define BODY_COLOR_GREEN 3 -#define BODY_COLOR_BLACK 4 -#define BODY_COLOR_BROWN 5 -#define BODY_COLOR_PURPLE 6 -#define BODY_COLOR_GRAY 7 -#define BODY_COLOR_WHITE 8 -#define BODY_COLOR_PINK 9 +enum BodyColor +{ + BODY_COLOR_RED, + BODY_COLOR_BLUE, + BODY_COLOR_YELLOW, + BODY_COLOR_GREEN, + BODY_COLOR_BLACK, + BODY_COLOR_BROWN, + BODY_COLOR_PURPLE, + BODY_COLOR_GRAY, + BODY_COLOR_WHITE, + BODY_COLOR_PINK, +}; #define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80 @@ -291,6 +304,8 @@ enum EvolutionConditions { IF_PID_MODULO_100_LT, // The PokΓ©mon's personality value's modulo by 100 is lower than the defined value. IF_MIN_OVERWORLD_STEPS, // The Player has taken a specific amount of steps in the overworld with the PokΓ©mon following them or in the first slot of the party. IF_BAG_ITEM_COUNT, // The Player has the specific amount of an item in the bag. It then removes those items. + IF_REGION, // The Player is in the specific region. + IF_NOT_REGION, // The Player is NOT in the specific region. CONDITIONS_END }; @@ -313,6 +328,7 @@ enum EvolutionMode { EVO_MODE_ITEM_CHECK, // If an Everstone is being held, still want to show that the stone *could* be used on that PokΓ©mon to evolve EVO_MODE_BATTLE_SPECIAL, EVO_MODE_OVERWORLD_SPECIAL, + EVO_MODE_SCRIPT_TRIGGER, EVO_MODE_BATTLE_ONLY, // This mode is only used in battles to support Tandemaus' unique requirement }; @@ -337,6 +353,12 @@ enum EvoSpinDirections { SPIN_EITHER, // Player spins either clockwise or counter-clockwise }; +enum ShinyMode { + SHINY_MODE_ALWAYS, + SHINY_MODE_RANDOM, + SHINY_MODE_NEVER +}; + #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 #define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) diff --git a/include/constants/rtc.h b/include/constants/rtc.h index 65ee9c35ed07..ea0748b50696 100644 --- a/include/constants/rtc.h +++ b/include/constants/rtc.h @@ -81,7 +81,7 @@ #define NIGHT_HOUR_END 6 #endif -// TIMES_OF_DAY_COUNT must be last +// TIMES_OF_DAY_COUNT must be last or things will break enum TimeOfDay { TIME_MORNING, @@ -91,6 +91,10 @@ enum TimeOfDay TIMES_OF_DAY_COUNT, }; +// for incrementing/decrementing +#define TIME_FIRST 0 +#define TIME_LAST (TIMES_OF_DAY_COUNT - 1) + #define TIME_OF_DAY_DEFAULT 0 #endif // GUARD_CONSTANTS_RTC_H diff --git a/include/constants/script_commands.h b/include/constants/script_commands.h new file mode 100644 index 000000000000..4adf99ccef21 --- /dev/null +++ b/include/constants/script_commands.h @@ -0,0 +1,238 @@ +// +// DO NOT MODIFY THIS FILE! It is auto-generated by tools/misc/make_scr_cmd_constants.py +// +#ifndef GUARD_SCR_CMD_CONSTANTS_H +#define GUARD_SCR_CMD_CONSTANTS_H + +#define SCR_OP_NOP 0x00 +#define SCR_OP_NOP1 0x01 +#define SCR_OP_END 0x02 +#define SCR_OP_RETURN 0x03 +#define SCR_OP_CALL 0x04 +#define SCR_OP_GOTO 0x05 +#define SCR_OP_GOTO_IF 0x06 +#define SCR_OP_CALL_IF 0x07 +#define SCR_OP_GOTO_STD 0x08 +#define SCR_OP_CALL_STD 0x09 +#define SCR_OP_GOTO_STD_IF 0x0a +#define SCR_OP_CALL_STD_IF 0x0b +#define SCR_OP_RETURNRAM 0x0c +#define SCR_OP_ENDRAM 0x0d +#define SCR_OP_SETMYSTERYEVENTSTATUS 0x0e +#define SCR_OP_LOAD_WORD 0x0f +#define SCR_OP_LOAD_BYTE 0x10 +#define SCR_OP_SETPTR 0x11 +#define SCR_OP_LOADBYTEFROMPTR 0x12 +#define SCR_OP_SETPTRBYTE 0x13 +#define SCR_OP_COPYLOCAL 0x14 +#define SCR_OP_COPYBYTE 0x15 +#define SCR_OP_SETVAR 0x16 +#define SCR_OP_ADDVAR 0x17 +#define SCR_OP_SUBVAR 0x18 +#define SCR_OP_COPYVAR 0x19 +#define SCR_OP_SETORCOPYVAR 0x1a +#define SCR_OP_COMPARE_LOCAL_TO_LOCAL 0x1b +#define SCR_OP_COMPARE_LOCAL_TO_VALUE 0x1c +#define SCR_OP_COMPARE_LOCAL_TO_PTR 0x1d +#define SCR_OP_COMPARE_PTR_TO_LOCAL 0x1e +#define SCR_OP_COMPARE_PTR_TO_VALUE 0x1f +#define SCR_OP_COMPARE_PTR_TO_PTR 0x20 +#define SCR_OP_COMPARE_VAR_TO_VALUE 0x21 +#define SCR_OP_COMPARE_VAR_TO_VAR 0x22 +#define SCR_OP_CALLNATIVE 0x23 +#define SCR_OP_GOTONATIVE 0x24 +#define SCR_OP_SPECIAL 0x25 +#define SCR_OP_SPECIALVAR 0x26 +#define SCR_OP_WAITSTATE 0x27 +#define SCR_OP_DELAY 0x28 +#define SCR_OP_SETFLAG 0x29 +#define SCR_OP_CLEARFLAG 0x2a +#define SCR_OP_CHECKFLAG 0x2b +#define SCR_OP_INITCLOCK 0x2c +#define SCR_OP_DOTIMEBASEDEVENTS 0x2d +#define SCR_OP_GETTIME 0x2e +#define SCR_OP_PLAYSE 0x2f +#define SCR_OP_WAITSE 0x30 +#define SCR_OP_PLAYFANFARE 0x31 +#define SCR_OP_WAITFANFARE 0x32 +#define SCR_OP_PLAYBGM 0x33 +#define SCR_OP_SAVEBGM 0x34 +#define SCR_OP_FADEDEFAULTBGM 0x35 +#define SCR_OP_FADENEWBGM 0x36 +#define SCR_OP_FADEOUTBGM 0x37 +#define SCR_OP_FADEINBGM 0x38 +#define SCR_OP_WARP 0x39 +#define SCR_OP_WARPSILENT 0x3a +#define SCR_OP_WARPDOOR 0x3b +#define SCR_OP_WARPHOLE 0x3c +#define SCR_OP_WARPTELEPORT 0x3d +#define SCR_OP_SETWARP 0x3e +#define SCR_OP_SETDYNAMICWARP 0x3f +#define SCR_OP_SETDIVEWARP 0x40 +#define SCR_OP_SETHOLEWARP 0x41 +#define SCR_OP_GETPLAYERXY 0x42 +#define SCR_OP_GETPARTYSIZE 0x43 +#define SCR_OP_ADDITEM 0x44 +#define SCR_OP_REMOVEITEM 0x45 +#define SCR_OP_CHECKITEMSPACE 0x46 +#define SCR_OP_CHECKITEM 0x47 +#define SCR_OP_CHECKITEMTYPE 0x48 +#define SCR_OP_ADDPCITEM 0x49 +#define SCR_OP_CHECKPCITEM 0x4a +#define SCR_OP_ADDDECORATION 0x4b +#define SCR_OP_REMOVEDECORATION 0x4c +#define SCR_OP_CHECKDECOR 0x4d +#define SCR_OP_CHECKDECORSPACE 0x4e +#define SCR_OP_APPLYMOVEMENT 0x4f +#define SCR_OP_APPLYMOVEMENTAT 0x50 +#define SCR_OP_WAITMOVEMENT 0x51 +#define SCR_OP_WAITMOVEMENTAT 0x52 +#define SCR_OP_REMOVEOBJECT 0x53 +#define SCR_OP_REMOVEOBJECTAT 0x54 +#define SCR_OP_ADDOBJECT 0x55 +#define SCR_OP_ADDOBJECTAT 0x56 +#define SCR_OP_SETOBJECTXY 0x57 +#define SCR_OP_SHOWOBJECTAT 0x58 +#define SCR_OP_HIDEOBJECTAT 0x59 +#define SCR_OP_FACEPLAYER 0x5a +#define SCR_OP_TURNOBJECT 0x5b +#define SCR_OP_TRAINERBATTLE 0x5c +#define SCR_OP_DOTRAINERBATTLE 0x5d +#define SCR_OP_GOTOPOSTBATTLESCRIPT 0x5e +#define SCR_OP_GOTOBEATENSCRIPT 0x5f +#define SCR_OP_CHECKTRAINERFLAG 0x60 +#define SCR_OP_SETTRAINERFLAG 0x61 +#define SCR_OP_CLEARTRAINERFLAG 0x62 +#define SCR_OP_SETOBJECTXYPERM 0x63 +#define SCR_OP_COPYOBJECTXYTOPERM 0x64 +#define SCR_OP_SETOBJECTMOVEMENTTYPE 0x65 +#define SCR_OP_WAITMESSAGE 0x66 +#define SCR_OP_MESSAGE 0x67 +#define SCR_OP_CLOSEMESSAGE 0x68 +#define SCR_OP_LOCKALL 0x69 +#define SCR_OP_LOCK 0x6a +#define SCR_OP_RELEASEALL 0x6b +#define SCR_OP_RELEASE 0x6c +#define SCR_OP_WAITBUTTONPRESS 0x6d +#define SCR_OP_YESNOBOX 0x6e +#define SCR_OP_MULTICHOICE 0x6f +#define SCR_OP_MULTICHOICEDEFAULT 0x70 +#define SCR_OP_MULTICHOICEGRID 0x71 +#define SCR_OP_DRAWBOX 0x72 +#define SCR_OP_ERASEBOX 0x73 +#define SCR_OP_DRAWBOXTEXT 0x74 +#define SCR_OP_SHOWMONPIC 0x75 +#define SCR_OP_HIDEMONPIC 0x76 +#define SCR_OP_SHOWCONTESTPAINTING 0x77 +#define SCR_OP_BRAILLEMESSAGE 0x78 +#define SCR_OP_GIVEMON 0x79 +#define SCR_OP_GIVEEGG 0x7a +#define SCR_OP_SETMONMOVE 0x7b +#define SCR_OP_CHECKFIELDMOVE 0x7c +#define SCR_OP_BUFFERSPECIESNAME 0x7d +#define SCR_OP_BUFFERLEADMONSPECIESNAME 0x7e +#define SCR_OP_BUFFERPARTYMONNICK 0x7f +#define SCR_OP_BUFFERITEMNAME 0x80 +#define SCR_OP_BUFFERDECORATIONNAME 0x81 +#define SCR_OP_BUFFERMOVENAME 0x82 +#define SCR_OP_BUFFERNUMBERSTRING 0x83 +#define SCR_OP_BUFFERSTDSTRING 0x84 +#define SCR_OP_BUFFERSTRING 0x85 +#define SCR_OP_POKEMART 0x86 +#define SCR_OP_POKEMARTDECORATION 0x87 +#define SCR_OP_POKEMARTDECORATION2 0x88 +#define SCR_OP_PLAYSLOTMACHINE 0x89 +#define SCR_OP_SETBERRYTREE 0x8a +#define SCR_OP_CHOOSECONTESTMON 0x8b +#define SCR_OP_STARTCONTEST 0x8c +#define SCR_OP_SHOWCONTESTRESULTS 0x8d +#define SCR_OP_CONTESTLINKTRANSFER 0x8e +#define SCR_OP_RANDOM 0x8f +#define SCR_OP_ADDMONEY 0x90 +#define SCR_OP_REMOVEMONEY 0x91 +#define SCR_OP_CHECKMONEY 0x92 +#define SCR_OP_SHOWMONEYBOX 0x93 +#define SCR_OP_HIDEMONEYBOX 0x94 +#define SCR_OP_UPDATEMONEYBOX 0x95 +#define SCR_OP_GETPOKENEWSACTIVE 0x96 +#define SCR_OP_FADESCREEN 0x97 +#define SCR_OP_FADESCREENSPEED 0x98 +#define SCR_OP_SETFLASHLEVEL 0x99 +#define SCR_OP_ANIMATEFLASH 0x9a +#define SCR_OP_MESSAGEAUTOSCROLL 0x9b +#define SCR_OP_DOFIELDEFFECT 0x9c +#define SCR_OP_SETFIELDEFFECTARGUMENT 0x9d +#define SCR_OP_WAITFIELDEFFECT 0x9e +#define SCR_OP_SETRESPAWN 0x9f +#define SCR_OP_CHECKPLAYERGENDER 0xa0 +#define SCR_OP_PLAYMONCRY 0xa1 +#define SCR_OP_SETMETATILE 0xa2 +#define SCR_OP_RESETWEATHER 0xa3 +#define SCR_OP_SETWEATHER 0xa4 +#define SCR_OP_DOWEATHER 0xa5 +#define SCR_OP_SETSTEPCALLBACK 0xa6 +#define SCR_OP_SETMAPLAYOUTINDEX 0xa7 +#define SCR_OP_SETOBJECTSUBPRIORITY 0xa8 +#define SCR_OP_RESETOBJECTSUBPRIORITY 0xa9 +#define SCR_OP_CREATEVOBJECT 0xaa +#define SCR_OP_TURNVOBJECT 0xab +#define SCR_OP_OPENDOOR 0xac +#define SCR_OP_CLOSEDOOR 0xad +#define SCR_OP_WAITDOORANIM 0xae +#define SCR_OP_SETDOOROPEN 0xaf +#define SCR_OP_SETDOORCLOSED 0xb0 +#define SCR_OP_ADDELEVMENUITEM 0xb1 +#define SCR_OP_SHOWELEVMENU 0xb2 +#define SCR_OP_CHECKCOINS 0xb3 +#define SCR_OP_ADDCOINS 0xb4 +#define SCR_OP_REMOVECOINS 0xb5 +#define SCR_OP_SETWILDBATTLE 0xb6 +#define SCR_OP_DOWILDBATTLE 0xb7 +#define SCR_OP_SETVADDRESS 0xb8 +#define SCR_OP_VGOTO 0xb9 +#define SCR_OP_VCALL 0xba +#define SCR_OP_VGOTO_IF 0xbb +#define SCR_OP_VCALL_IF 0xbc +#define SCR_OP_VMESSAGE 0xbd +#define SCR_OP_VBUFFERMESSAGE 0xbe +#define SCR_OP_VBUFFERSTRING 0xbf +#define SCR_OP_SHOWCOINSBOX 0xc0 +#define SCR_OP_HIDECOINSBOX 0xc1 +#define SCR_OP_UPDATECOINSBOX 0xc2 +#define SCR_OP_INCREMENTGAMESTAT 0xc3 +#define SCR_OP_SETESCAPEWARP 0xc4 +#define SCR_OP_WAITMONCRY 0xc5 +#define SCR_OP_BUFFERBOXNAME 0xc6 +#define SCR_OP_TEXTCOLOR 0xc7 +#define SCR_OP_LOADHELP 0xc8 +#define SCR_OP_UNLOADHELP 0xc9 +#define SCR_OP_SIGNMSG 0xca +#define SCR_OP_NORMALMSG 0xcb +#define SCR_OP_COMPAREHIDDENVAR 0xcc +#define SCR_OP_SETMODERNFATEFULENCOUNTER 0xcd +#define SCR_OP_CHECKMODERNFATEFULENCOUNTER 0xce +#define SCR_OP_TRYWONDERCARDSCRIPT 0xcf +#define SCR_OP_SETWORLDMAPFLAG 0xd0 +#define SCR_OP_WARPSPINENTER 0xd1 +#define SCR_OP_SETMONMETLOCATION 0xd2 +#define SCR_OP_MOVEROTATINGTILEOBJECTS 0xd3 +#define SCR_OP_TURNROTATINGTILEOBJECTS 0xd4 +#define SCR_OP_INITROTATINGTILEPUZZLE 0xd5 +#define SCR_OP_FREEROTATINGTILEPUZZLE 0xd6 +#define SCR_OP_WARPMOSSDEEPGYM 0xd7 +#define SCR_OP_SELECTAPPROACHINGTRAINER 0xd8 +#define SCR_OP_LOCKFORTRAINER 0xd9 +#define SCR_OP_CLOSEBRAILLEMESSAGE 0xda +#define SCR_OP_MESSAGEINSTANT 0xdb +#define SCR_OP_FADESCREENSWAPBUFFERS 0xdc +#define SCR_OP_BUFFERTRAINERCLASSNAME 0xdd +#define SCR_OP_BUFFERTRAINERNAME 0xde +#define SCR_OP_POKENAVCALL 0xdf +#define SCR_OP_WARPWHITEFADE 0xe0 +#define SCR_OP_BUFFERCONTESTNAME 0xe1 +#define SCR_OP_BUFFERITEMNAMEPLURAL 0xe2 +#define SCR_OP_DYNMULTICHOICE 0xe3 +#define SCR_OP_DYNMULTIPUSH 0xe4 +#define SCR_OP_HIDEFOLLOWER 0xe5 + +#endif // GUARD_SCR_CMD_CONSTANTS_H diff --git a/include/constants/sound.h b/include/constants/sound.h index dc434bcf8a76..c16080d1ddba 100644 --- a/include/constants/sound.h +++ b/include/constants/sound.h @@ -33,6 +33,7 @@ #define CRY_MODE_GROWL_2 10 // For 2nd cry used by the move Growl #define CRY_MODE_WEAK 11 // Used when a PokΓ©mon is unhealthy #define CRY_MODE_WEAK_DOUBLES 12 // Equivalent to CRY_MODE_DOUBLES for CRY_MODE_WEAK +#define CRY_MODE_DYNAMAX 13 // Used during Dynamax // Given to SoundTask_PlayDoubleCry to determine which cry mode to use. Values are arbitrary #define DOUBLE_CRY_ROAR 2 diff --git a/include/constants/speaker_names.h b/include/constants/speaker_names.h new file mode 100644 index 000000000000..1f4f399e7549 --- /dev/null +++ b/include/constants/speaker_names.h @@ -0,0 +1,11 @@ +#ifndef GUARD_CONSTANTS_SPEAKER_NAMES_H +#define GUARD_CONSTANTS_SPEAKER_NAMES_H + +enum SpeakerNames { + SP_NAME_NONE = 0, + SP_NAME_MOM, + SP_NAME_PLAYER, + SP_NAME_COUNT +}; + +#endif // GUARD_CONSTANTS_SPEAKER_NAMES_H diff --git a/include/constants/species.h b/include/constants/species.h index 3656d7664ec8..ed31317c36fb 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -2,7 +2,7 @@ #define GUARD_CONSTANTS_SPECIES_H // NOTE: The defines here are named in order to match PokΓ©mon Showdown's naming conventions. This is done to avoid issues with trainerproc parsing species names. If a PokΓ©mon does not have an entry on Showdown, use your best judgement. -// Additionally, we have tried to reduce down to as few defines as possible, because programs like porymap does not always properly handle having multiple defines. +// Additionally, we have tried to reduce down to as few defines as possible, because programs like porymap do not always properly handle having multiple defines. // Discussion: https://github.com/rh-hideout/pokeemerald-expansion/pull/5075#issuecomment-2384088602 // Showdown: https://github.com/smogon/Pokemon-Showdown/blob/master/data/pokedex.ts @@ -1637,8 +1637,35 @@ #define SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GMAX SPECIES_URSHIFU_RAPID_STRIKE_GMAX #define SPECIES_MIMIKYU_BUSTED_TOTEM 1523 #define SPECIES_MIMIKYU_TOTEM_BUSTED SPECIES_MIMIKYU_BUSTED_TOTEM +// Legends Z-A +#define SPECIES_CLEFABLE_MEGA 1524 +#define SPECIES_VICTREEBEL_MEGA 1525 +#define SPECIES_STARMIE_MEGA 1526 +#define SPECIES_DRAGONITE_MEGA 1527 +#define SPECIES_MEGANIUM_MEGA 1528 +#define SPECIES_FERALIGATR_MEGA 1529 +#define SPECIES_SKARMORY_MEGA 1530 +#define SPECIES_FROSLASS_MEGA 1531 +#define SPECIES_EMBOAR_MEGA 1532 +#define SPECIES_EXCADRILL_MEGA 1533 +#define SPECIES_SCOLIPEDE_MEGA 1534 +#define SPECIES_SCRAFTY_MEGA 1535 +#define SPECIES_EELEKTROSS_MEGA 1536 +#define SPECIES_CHANDELURE_MEGA 1537 +#define SPECIES_CHESNAUGHT_MEGA 1538 +#define SPECIES_DELPHOX_MEGA 1539 +#define SPECIES_GRENINJA_MEGA 1540 +#define SPECIES_PYROAR_MEGA 1541 +#define SPECIES_MALAMAR_MEGA 1542 +#define SPECIES_DRAGALGE_MEGA 1543 +#define SPECIES_HAWLUCHA_MEGA 1544 +#define SPECIES_FLOETTE_MEGA 1545 +#define SPECIES_BARBARACLE_MEGA 1546 +#define SPECIES_ZYGARDE_MEGA 1547 +#define SPECIES_DRAMPA_MEGA 1548 +#define SPECIES_FALINKS_MEGA 1549 -#define SPECIES_EGG (SPECIES_MIMIKYU_BUSTED_TOTEM + 1) +#define SPECIES_EGG (SPECIES_FALINKS_MEGA + 1) #define NUM_SPECIES SPECIES_EGG diff --git a/include/constants/trade.h b/include/constants/trade.h index e387d13cd8c1..4049a0f19aa2 100644 --- a/include/constants/trade.h +++ b/include/constants/trade.h @@ -5,10 +5,13 @@ #define TRADE_PARTNER 1 // In-game Trade IDs -#define INGAME_TRADE_SEEDOT 0 -#define INGAME_TRADE_PLUSLE 1 -#define INGAME_TRADE_HORSEA 2 -#define INGAME_TRADE_MEOWTH 3 +enum InGameTradeID +{ + INGAME_TRADE_SEEDOT, + INGAME_TRADE_PLUSLE, + INGAME_TRADE_HORSEA, + INGAME_TRADE_MEOWTH, +}; // Return values for CanTradeSelectedMon and CanSpinTradeMon #define CAN_TRADE_MON 0 diff --git a/include/constants/trainers.h b/include/constants/trainers.h index ebfc18eef0d5..4f2200841069 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -285,73 +285,76 @@ #define RS_FACILITY_CLASSES_COUNT 0x4D -#define TRAINER_CLASS_PKMN_TRAINER_1 0x0 // Unused -#define TRAINER_CLASS_PKMN_TRAINER_2 0x1 // Unused -#define TRAINER_CLASS_HIKER 0x2 -#define TRAINER_CLASS_TEAM_AQUA 0x3 -#define TRAINER_CLASS_PKMN_BREEDER 0x4 -#define TRAINER_CLASS_COOLTRAINER 0x5 -#define TRAINER_CLASS_BIRD_KEEPER 0x6 -#define TRAINER_CLASS_COLLECTOR 0x7 -#define TRAINER_CLASS_SWIMMER_M 0x8 -#define TRAINER_CLASS_TEAM_MAGMA 0x9 -#define TRAINER_CLASS_EXPERT 0xa -#define TRAINER_CLASS_AQUA_ADMIN 0xb -#define TRAINER_CLASS_BLACK_BELT 0xc -#define TRAINER_CLASS_AQUA_LEADER 0xd -#define TRAINER_CLASS_HEX_MANIAC 0xe -#define TRAINER_CLASS_AROMA_LADY 0xf -#define TRAINER_CLASS_RUIN_MANIAC 0x10 -#define TRAINER_CLASS_INTERVIEWER 0x11 -#define TRAINER_CLASS_TUBER_F 0x12 -#define TRAINER_CLASS_TUBER_M 0x13 -#define TRAINER_CLASS_LADY 0x14 -#define TRAINER_CLASS_BEAUTY 0x15 -#define TRAINER_CLASS_RICH_BOY 0x16 -#define TRAINER_CLASS_POKEMANIAC 0x17 -#define TRAINER_CLASS_GUITARIST 0x18 -#define TRAINER_CLASS_KINDLER 0x19 -#define TRAINER_CLASS_CAMPER 0x1a -#define TRAINER_CLASS_PICNICKER 0x1b -#define TRAINER_CLASS_BUG_MANIAC 0x1c -#define TRAINER_CLASS_PSYCHIC 0x1d -#define TRAINER_CLASS_GENTLEMAN 0x1e -#define TRAINER_CLASS_ELITE_FOUR 0x1f -#define TRAINER_CLASS_LEADER 0x20 -#define TRAINER_CLASS_SCHOOL_KID 0x21 -#define TRAINER_CLASS_SR_AND_JR 0x22 -#define TRAINER_CLASS_WINSTRATE 0x23 -#define TRAINER_CLASS_POKEFAN 0x24 -#define TRAINER_CLASS_YOUNGSTER 0x25 -#define TRAINER_CLASS_CHAMPION 0x26 -#define TRAINER_CLASS_FISHERMAN 0x27 -#define TRAINER_CLASS_TRIATHLETE 0x28 -#define TRAINER_CLASS_DRAGON_TAMER 0x29 -#define TRAINER_CLASS_NINJA_BOY 0x2a -#define TRAINER_CLASS_BATTLE_GIRL 0x2b -#define TRAINER_CLASS_PARASOL_LADY 0x2c -#define TRAINER_CLASS_SWIMMER_F 0x2d -#define TRAINER_CLASS_TWINS 0x2e -#define TRAINER_CLASS_SAILOR 0x2f -#define TRAINER_CLASS_COOLTRAINER_2 0x30 // Used for only one trainer. -#define TRAINER_CLASS_MAGMA_ADMIN 0x31 -#define TRAINER_CLASS_RIVAL 0x32 -#define TRAINER_CLASS_BUG_CATCHER 0x33 -#define TRAINER_CLASS_PKMN_RANGER 0x34 -#define TRAINER_CLASS_MAGMA_LEADER 0x35 -#define TRAINER_CLASS_LASS 0x36 -#define TRAINER_CLASS_YOUNG_COUPLE 0x37 -#define TRAINER_CLASS_OLD_COUPLE 0x38 -#define TRAINER_CLASS_SIS_AND_BRO 0x39 -#define TRAINER_CLASS_SALON_MAIDEN 0x3a -#define TRAINER_CLASS_DOME_ACE 0x3b -#define TRAINER_CLASS_PALACE_MAVEN 0x3c -#define TRAINER_CLASS_ARENA_TYCOON 0x3d -#define TRAINER_CLASS_FACTORY_HEAD 0x3e -#define TRAINER_CLASS_PIKE_QUEEN 0x3f -#define TRAINER_CLASS_PYRAMID_KING 0x40 -#define TRAINER_CLASS_RS_PROTAG 0x41 -#define TRAINER_CLASS_COUNT 0x42 +enum TrainerClassID +{ + TRAINER_CLASS_PKMN_TRAINER_1, // Unused + TRAINER_CLASS_PKMN_TRAINER_2, // Unused + TRAINER_CLASS_HIKER, + TRAINER_CLASS_TEAM_AQUA, + TRAINER_CLASS_PKMN_BREEDER, + TRAINER_CLASS_COOLTRAINER, + TRAINER_CLASS_BIRD_KEEPER, + TRAINER_CLASS_COLLECTOR, + TRAINER_CLASS_SWIMMER_M, + TRAINER_CLASS_TEAM_MAGMA, + TRAINER_CLASS_EXPERT, + TRAINER_CLASS_AQUA_ADMIN, + TRAINER_CLASS_BLACK_BELT, + TRAINER_CLASS_AQUA_LEADER, + TRAINER_CLASS_HEX_MANIAC, + TRAINER_CLASS_AROMA_LADY, + TRAINER_CLASS_RUIN_MANIAC, + TRAINER_CLASS_INTERVIEWER, + TRAINER_CLASS_TUBER_F, + TRAINER_CLASS_TUBER_M, + TRAINER_CLASS_LADY, + TRAINER_CLASS_BEAUTY, + TRAINER_CLASS_RICH_BOY, + TRAINER_CLASS_POKEMANIAC, + TRAINER_CLASS_GUITARIST, + TRAINER_CLASS_KINDLER, + TRAINER_CLASS_CAMPER, + TRAINER_CLASS_PICNICKER, + TRAINER_CLASS_BUG_MANIAC, + TRAINER_CLASS_PSYCHIC, + TRAINER_CLASS_GENTLEMAN, + TRAINER_CLASS_ELITE_FOUR, + TRAINER_CLASS_LEADER, + TRAINER_CLASS_SCHOOL_KID, + TRAINER_CLASS_SR_AND_JR, + TRAINER_CLASS_WINSTRATE, + TRAINER_CLASS_POKEFAN, + TRAINER_CLASS_YOUNGSTER, + TRAINER_CLASS_CHAMPION, + TRAINER_CLASS_FISHERMAN, + TRAINER_CLASS_TRIATHLETE, + TRAINER_CLASS_DRAGON_TAMER, + TRAINER_CLASS_NINJA_BOY, + TRAINER_CLASS_BATTLE_GIRL, + TRAINER_CLASS_PARASOL_LADY, + TRAINER_CLASS_SWIMMER_F, + TRAINER_CLASS_TWINS, + TRAINER_CLASS_SAILOR, + TRAINER_CLASS_COOLTRAINER_2, // Used for only one trainer. + TRAINER_CLASS_MAGMA_ADMIN, + TRAINER_CLASS_RIVAL, + TRAINER_CLASS_BUG_CATCHER, + TRAINER_CLASS_PKMN_RANGER, + TRAINER_CLASS_MAGMA_LEADER, + TRAINER_CLASS_LASS, + TRAINER_CLASS_YOUNG_COUPLE, + TRAINER_CLASS_OLD_COUPLE, + TRAINER_CLASS_SIS_AND_BRO, + TRAINER_CLASS_SALON_MAIDEN, + TRAINER_CLASS_DOME_ACE, + TRAINER_CLASS_PALACE_MAVEN, + TRAINER_CLASS_ARENA_TYCOON, + TRAINER_CLASS_FACTORY_HEAD, + TRAINER_CLASS_PIKE_QUEEN, + TRAINER_CLASS_PYRAMID_KING, + TRAINER_CLASS_RS_PROTAG, + TRAINER_CLASS_COUNT, +}; #define TRAINER_ENCOUNTER_MUSIC_MALE 0 // standard male encounter music #define TRAINER_ENCOUNTER_MUSIC_FEMALE 1 // standard female encounter music diff --git a/include/constants/vars.h b/include/constants/vars.h index aac52dec0e26..a12c2ff3a508 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -325,15 +325,15 @@ #define VAR_TEMP_TRANSFERRED_SPECIES VAR_TEMP_1 #if TESTING -#define TESTING_VARS_START 0x9000 -#define TESTING_VAR_DIFFICULTY (TESTING_VARS_START + 0x0) -#define TESTING_VAR_UNUSED_1 (TESTING_VARS_START + 0x1) -#define TESTING_VAR_UNUSED_2 (TESTING_VARS_START + 0x2) -#define TESTING_VAR_UNUSED_3 (TESTING_VARS_START + 0x3) -#define TESTING_VAR_UNUSED_4 (TESTING_VARS_START + 0x4) -#define TESTING_VAR_UNUSED_5 (TESTING_VARS_START + 0x5) -#define TESTING_VAR_UNUSED_6 (TESTING_VARS_START + 0x6) -#define TESTING_VAR_UNUSED_7 (TESTING_VARS_START + 0x7) +#define TESTING_VARS_START 0x9000 +#define TESTING_VAR_DIFFICULTY (TESTING_VARS_START + 0x0) +#define TESTING_VAR_STARTING_STATUS (TESTING_VARS_START + 0x1) +#define TESTING_VAR_STARTING_STATUS_TIMER (TESTING_VARS_START + 0x2) +#define TESTING_VAR_UNUSED_3 (TESTING_VARS_START + 0x3) +#define TESTING_VAR_UNUSED_4 (TESTING_VARS_START + 0x4) +#define TESTING_VAR_UNUSED_5 (TESTING_VARS_START + 0x5) +#define TESTING_VAR_UNUSED_6 (TESTING_VARS_START + 0x6) +#define TESTING_VAR_UNUSED_7 (TESTING_VARS_START + 0x7) #endif // TESTING #endif // GUARD_CONSTANTS_VARS_H diff --git a/include/constants/wild_encounter.h b/include/constants/wild_encounter.h index 364d18350fc4..364dc7b35a22 100644 --- a/include/constants/wild_encounter.h +++ b/include/constants/wild_encounter.h @@ -9,7 +9,4 @@ #define NUM_ALTERING_CAVE_TABLES 9 -#define FISHING_CHAIN_LENGTH_MAX 200 -#define FISHING_CHAIN_SHINY_STREAK_MAX 20 - #endif // GUARD_CONSTANTS_WILD_ENCOUNTER_H diff --git a/include/contest.h b/include/contest.h index 80a1370541de..278efaa4ac01 100644 --- a/include/contest.h +++ b/include/contest.h @@ -302,6 +302,17 @@ struct ContestResources void *animBgTileBuffer; }; +struct ContestCategory +{ + const u8 *name; + const u8 *condition; + const u8 *generic; + const u8 *negativeTrait; + u8 palette; +}; + +extern const struct ContestCategory gContestCategoryInfo[CONTEST_CATEGORIES_COUNT + 1]; + #define eContest (*gContestResources->contest) #define eContestantStatus (gContestResources->status) #define eContestAppealResults (*gContestResources->appealResults) diff --git a/include/contest_effect.h b/include/contest_effect.h index 87129bd7921f..7db929031b7c 100644 --- a/include/contest_effect.h +++ b/include/contest_effect.h @@ -1,17 +1,17 @@ #ifndef GUARD_CONTEST_EFFECT_H #define GUARD_CONTEST_EFFECT_H -#define MAX_COMBO_MOVES 5 +#define MAX_COMBO_MOVES 17 struct ContestEffect { u8 effectType; u8 appeal; u8 jam; + const u8 *description; + void (*function)(void); }; extern const struct ContestEffect gContestEffects[]; -extern const u8 *const gContestEffectDescriptionPointers[]; -extern const u8 *const gContestMoveTypeTextPointers[]; bool8 AreMovesContestCombo(u16 lastMove, u16 nextMove); diff --git a/include/data.h b/include/data.h index 3a697d573c1a..fbca022f977e 100644 --- a/include/data.h +++ b/include/data.h @@ -5,6 +5,7 @@ #include "constants/trainers.h" #include "constants/battle.h" #include "difficulty.h" +#include "debug.h" #define MAX_TRAINER_ITEMS 4 @@ -41,9 +42,9 @@ struct TrainerSprite struct TrainerBacksprite { - struct MonCoords coordinates; - struct CompressedSpriteSheet backPic; - struct SpritePalette palette; + const struct MonCoords coordinates; + const struct SpriteFrameImage backPic; + const struct SpritePalette palette; const union AnimCmd *const *const animation; }; @@ -63,14 +64,14 @@ struct TrainerMon u16 moves[4]; u16 species; u16 heldItem; - u16 ability; + enum Ability ability; u8 lvl; u8 ball; u8 friendship; u8 nature:5; bool8 gender:2; bool8 isShiny:1; - u8 teraType:5; + enum Type teraType:5; bool8 gigantamaxFactor:1; u8 shouldUseDynamax:1; u8 padding1:1; @@ -81,7 +82,7 @@ struct TrainerMon #define TRAINER_PARTY(partyArray) partyArray, .partySize = ARRAY_COUNT(partyArray) -enum TrainerBattleType +enum TrainerBattleType { TRAINER_BATTLE_TYPE_SINGLES, TRAINER_BATTLE_TYPE_DOUBLES, @@ -104,6 +105,8 @@ struct Trainer /*0x22*/ u8 poolRuleIndex; /*0x23*/ u8 poolPickIndex; /*0x24*/ u8 poolPruneIndex; + /*0x25*/ u16 overrideTrainer; + /*0x26*/ u8 trainerBackPic; }; struct TrainerClass @@ -176,7 +179,6 @@ extern const union AnimCmd *const gAnims_MonPic[]; extern const union AnimCmd *const gAnims_Trainer[]; extern const struct TrainerSprite gTrainerSprites[]; extern const struct TrainerBacksprite gTrainerBacksprites[]; -extern const u16 gTrainerPicToTrainerBackPic[]; extern const struct Trainer gTrainers[DIFFICULTY_COUNT][TRAINERS_COUNT]; extern const struct Trainer gBattlePartners[DIFFICULTY_COUNT][PARTNER_COUNT]; @@ -196,27 +198,38 @@ extern const struct FollowerMsgInfo gFollowerCuriousMessages[]; extern const struct FollowerMsgInfo gFollowerMusicMessages[]; extern const struct FollowerMsgInfo gFollowerPoisonedMessages[]; +static inline bool8 IsPartnerTrainerId(u16 trainerId) +{ + if (trainerId >= TRAINER_PARTNER(PARTNER_NONE) && trainerId < TRAINER_PARTNER(PARTNER_COUNT)) + return TRUE; + return FALSE; +} + static inline u16 SanitizeTrainerId(u16 trainerId) { - if (trainerId >= TRAINERS_COUNT) + if (trainerId >= TRAINERS_COUNT && !IsPartnerTrainerId(trainerId)) return TRAINER_NONE; return trainerId; } static inline const struct Trainer *GetTrainerStructFromId(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); + u32 sanitizedTrainerId = 0; + if (gIsDebugBattle) return GetDebugAiTrainer(); + sanitizedTrainerId = SanitizeTrainerId(trainerId); enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); - return &gTrainers[difficulty][sanitizedTrainerId]; + if (IsPartnerTrainerId(trainerId)) + return &gBattlePartners[difficulty][sanitizedTrainerId - TRAINER_PARTNER(PARTNER_NONE)]; + else + return &gTrainers[difficulty][sanitizedTrainerId]; } -static inline const u8 GetTrainerClassFromId(u16 trainerId) +static inline const enum TrainerClassID GetTrainerClassFromId(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); + const struct Trainer *trainer = GetTrainerStructFromId(trainerId); - return gTrainers[difficulty][sanitizedTrainerId].trainerClass; + return trainer->trainerClass; } static inline const u8 *GetTrainerClassNameFromId(u16 trainerId) @@ -230,82 +243,72 @@ static inline const u8 *GetTrainerClassNameFromId(u16 trainerId) static inline const u8 *GetTrainerNameFromId(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); - - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); - - enum DifficultyLevel partnerDifficulty = GetBattlePartnerDifficultyLevel(trainerId); - if (trainerId > TRAINER_PARTNER(PARTNER_NONE)) + { + enum DifficultyLevel partnerDifficulty = GetBattlePartnerDifficultyLevel(trainerId); return gBattlePartners[partnerDifficulty][trainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerName; - return gTrainers[difficulty][sanitizedTrainerId].trainerName; + } + return GetTrainerStructFromId(trainerId)->trainerName; } static inline const u8 GetTrainerPicFromId(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); enum DifficultyLevel partnerDifficulty = GetBattlePartnerDifficultyLevel(trainerId); if (trainerId > TRAINER_PARTNER(PARTNER_NONE)) return gBattlePartners[partnerDifficulty][trainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic; - return gTrainers[difficulty][sanitizedTrainerId].trainerPic; + return GetTrainerStructFromId(trainerId)->trainerPic; +} + +static inline const u8 GetTrainerBackPicFromId(u16 trainerId) +{ + enum DifficultyLevel partnerDifficulty = GetBattlePartnerDifficultyLevel(trainerId); + + if (trainerId > TRAINER_PARTNER(PARTNER_NONE)) + return gBattlePartners[partnerDifficulty][trainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic; + + return GetTrainerStructFromId(trainerId)->trainerBackPic; } static inline const u8 GetTrainerStartingStatusFromId(u16 trainerId) { - return gTrainers[GetCurrentDifficultyLevel()][SanitizeTrainerId(trainerId)].startingStatus; + return GetTrainerStructFromId(trainerId)->startingStatus; } static inline const enum TrainerBattleType GetTrainerBattleType(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); - - return gTrainers[difficulty][sanitizedTrainerId].battleType; + return GetTrainerStructFromId(trainerId)->battleType; } static inline const u8 GetTrainerPartySizeFromId(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); - - return gTrainers[difficulty][sanitizedTrainerId].partySize; + return GetTrainerStructFromId(trainerId)->partySize; } static inline const bool32 DoesTrainerHaveMugshot(u16 trainerId) { - return gTrainers[GetCurrentDifficultyLevel()][SanitizeTrainerId(trainerId)].mugshotColor; + return GetTrainerStructFromId(trainerId)->mugshotColor; } static inline const u8 GetTrainerMugshotColorFromId(u16 trainerId) { - return gTrainers[GetCurrentDifficultyLevel()][SanitizeTrainerId(trainerId)].mugshotColor; + return GetTrainerStructFromId(trainerId)->mugshotColor; } static inline const u16 *GetTrainerItemsFromId(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); - - return gTrainers[difficulty][sanitizedTrainerId].items; + return GetTrainerStructFromId(trainerId)->items; } static inline const struct TrainerMon *GetTrainerPartyFromId(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); - - return gTrainers[difficulty][sanitizedTrainerId].party; + return GetTrainerStructFromId(trainerId)->party; } static inline const u64 GetTrainerAIFlagsFromId(u16 trainerId) { - u32 sanitizedTrainerId = SanitizeTrainerId(trainerId); - enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); - - return gTrainers[difficulty][sanitizedTrainerId].aiFlags; + return GetTrainerStructFromId(trainerId)->aiFlags; } #endif // GUARD_DATA_H diff --git a/include/debug.h b/include/debug.h index 1a48e9f6cd90..01be269c4d7f 100644 --- a/include/debug.h +++ b/include/debug.h @@ -4,6 +4,10 @@ void Debug_ShowMainMenu(void); extern const u8 Debug_FlagsAndVarNotSetBattleConfigMessage[]; const u8 *GetWeatherName(u32 weatherId); +const struct Trainer* GetDebugAiTrainer(void); + +void DebugNative_GetAbilityNames(void); +void DebugNative_Party_SetFriendship(void); extern EWRAM_DATA bool8 gIsDebugBattle; extern EWRAM_DATA u64 gDebugAIFlags; diff --git a/include/decompress.h b/include/decompress.h index cc654a49ced1..52fcc10a3f3c 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -5,9 +5,68 @@ #define MAX_DECOMPRESSION_BUFFER_SIZE 0x4000 -void LZDecompressWram(const u32 *src, void *dest); -void LZDecompressVram(const u32 *src, void *dest); +#define TANS_TABLE_SIZE 64 +#define PACKED_FREQ_MASK 0x3F +#define PARTIAL_FREQ_MASK 0xC0000000 +#define FIRST_LO_MASK 0x7f +#define CONTINUE_BIT 0x80 + +#define SMOL_IMAGE_SIZE_MULTIPLIER 4 + +struct LZ77Header { + u32 lz77IdBits:5; + u32 padding:3; + u32 size:24; +}; + +struct SmolHeader { + u32 mode:4; + u32 imageSize:14; + u32 symSize:14; + u32 initialState:6; + u32 bitstreamSize:13; + u32 loSize:13; +}; + +struct SpriteSheetHeader { + u32 mode:4; + u32 numComponents:12; + u32 framesPerComponent:16; +}; + +struct SmolTilemapHeader { + u32 mode:4; + u32 tilemapSize:14; + u32 symSize:14; + u32 tileNumberSize; +}; + +union CompressionHeader { + struct LZ77Header lz77; + struct SmolHeader smol; + struct SmolTilemapHeader smolTilemap; +}; + +enum CompressionMode { + MODE_LZ77 = 0, + BASE_ONLY = 1, + ENCODE_SYMS = 2, + ENCODE_DELTA_SYMS = 3, + ENCODE_LO = 4, + ENCODE_BOTH = 5, + ENCODE_BOTH_DELTA_SYMS = 6, + IS_FRAME_CONTAINER = 7, + IS_TILEMAP = 8, +}; + +void DecompressDataWithHeaderVram(const u32 *src, void *dest); +void DecompressDataWithHeaderWram(const u32 *src, void *dest); + +// Lucky's fast lz decompression function +void FastLZ77UnCompWram(const u32 *src, void *dest); + +// Default Decompression functions are below here u32 IsLZ77Data(const void *ptr, u32 minSize, u32 maxSize); u32 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src); @@ -22,5 +81,6 @@ void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, s32 species, u32 pe void LoadSpecialPokePic(void *dest, s32 species, u32 personality, bool8 isFrontPic); u32 GetDecompressedDataSize(const u32 *ptr); +bool32 IsCompressedData(const u32 *ptr); #endif // GUARD_DECOMPRESS_H diff --git a/include/decompress_error_handler.h b/include/decompress_error_handler.h new file mode 100644 index 000000000000..1eb2c34a2500 --- /dev/null +++ b/include/decompress_error_handler.h @@ -0,0 +1,15 @@ +#ifndef GUARD_DECOMPRESS_ERROR_HANDLER_H +#define GUARD_DECOMPRESS_ERROR_HANDLER_H + +#include "gba/types.h" + +enum CompressionError { + NO_COMPRESSION_ERROR, + HEADER_ERROR, +}; + +void DoDecompressionError(void); +void DecompressionError_CB2(void); +void DecompressionError(const u32 *src, enum CompressionError error); + +#endif // GUARD_DECOMPRESS_ERROR_HANDLER_H diff --git a/include/dodrio_berry_picking.h b/include/dodrio_berry_picking.h index a93fb27cd137..ec62e51947fe 100644 --- a/include/dodrio_berry_picking.h +++ b/include/dodrio_berry_picking.h @@ -1,7 +1,9 @@ #ifndef GUARD_DODRIO_BERRY_PICKING_H #define GUARD_DODRIO_BERRY_PICKING_H -void StartDodrioBerryPicking(u16 partyId, void (*exitCallback)(void)); +#include "main.h" + +void StartDodrioBerryPicking(u16 partyId, MainCallback exitCallback); void IsDodrioInParty(void); void ShowDodrioBerryPickingRecords(void); diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 51cc2c991c03..4ec46709e367 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -182,7 +182,7 @@ u8 GetWalkInPlaceFasterMovementAction(u32); u8 GetWalkInPlaceFastMovementAction(u32); u8 GetWalkInPlaceNormalMovementAction(u32); u8 GetWalkInPlaceSlowMovementAction(u32); -u8 GetCollisionAtCoords(struct ObjectEvent *, s16 x, s16 y, u32 dir); +u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir); u32 GetObjectObjectCollidesWith(struct ObjectEvent *objectEvent, s16 x, s16 y, bool32 addCoords); void MoveCoords(u8 direction, s16 *x, s16 *y); bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *objectEvent); @@ -512,4 +512,6 @@ bool8 MovementAction_EmoteX_Step0(struct ObjectEvent *, struct Sprite *); bool8 MovementAction_EmoteDoubleExclamationMark_Step0(struct ObjectEvent *, struct Sprite *); bool8 PlayerIsUnderWaterfall(struct ObjectEvent *objectEvent); +u8 GetObjectEventApricornTreeId(u8 objectEventId); + #endif //GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/event_scripts.h b/include/event_scripts.h index fa2df54740e9..646b0541955f 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -573,6 +573,7 @@ extern const u8 EventScript_UseWaterfall[]; extern const u8 EventScript_CannotUseWaterfall[]; extern const u8 EventScript_UseDive[]; extern const u8 EventScript_UseDiveUnderwater[]; +extern const u8 EventScript_UseRockClimb[]; extern const u8 EventScript_FallDownHole[]; extern const u8 EventScript_FieldPoison[]; extern const u8 EventScript_EggHatch[]; diff --git a/include/field_effect.h b/include/field_effect.h index 2e13879353cf..0bfe15308b20 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -37,6 +37,7 @@ bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val); bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val); bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val); void FieldCB_FallWarpExit(void); +void HideFollowerForFieldEffect(void); void StartEscalatorWarp(u8 metatileBehavior, u8 priority); void StartLavaridgeGymB1FWarp(u8 priority); void StartLavaridgeGym1FWarp(u8 priority); @@ -49,5 +50,5 @@ void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId); u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority); void StartEscapeRopeFieldEffect(void); void FieldEffectFreeGraphicsResources(struct Sprite *sprite); - +bool8 IsRockClimbActive(void); #endif // GUARD_FIELD_EFFECTS_H diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 0c97da43371f..65dce3dfda8e 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -22,7 +22,7 @@ void StartRevealDisguise(struct ObjectEvent *objectEvent); void StartAshFieldEffect(s16 x, s16 y, u16 metatileId, s16 delay); void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, bool8 stillReflection); void SetUpShadow(struct ObjectEvent *objectEvent); -u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent *objectEvent); +u32 StartFieldEffectForObjectEvent(u8 fieldEffectId, struct ObjectEvent *objectEvent); u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); void UpdateRayquazaSpotlightEffect(struct Sprite *sprite); void UpdateShadowFieldEffect(struct Sprite *sprite); diff --git a/include/field_move.h b/include/field_move.h new file mode 100644 index 000000000000..1608b60bcb14 --- /dev/null +++ b/include/field_move.h @@ -0,0 +1,37 @@ +#ifndef GUARD_FIELD_MOVE_H +#define GUARD_FIELD_MOVE_H + +#include "global.h" +#include "constants/field_move.h" + +struct FieldMoveInfo +{ + bool32 (*fieldMoveFunc)(void); + bool32 (*isUnlockedFunc)(void); + u16 moveID; + u8 partyMsgID; +}; + +extern const struct FieldMoveInfo gFieldMoveInfo[]; + +static inline bool32 SetUpFieldMove(enum FieldMove fieldMove) +{ + return gFieldMoveInfo[fieldMove].fieldMoveFunc(); +} + +static inline bool32 IsFieldMoveUnlocked(enum FieldMove fieldMove) +{ + return gFieldMoveInfo[fieldMove].isUnlockedFunc(); +} + +static inline u32 FieldMove_GetMoveId(enum FieldMove fieldMove) +{ + return gFieldMoveInfo[fieldMove].moveID; +} + +static inline u32 FieldMove_GetPartyMsgID(enum FieldMove fieldMove) +{ + return gFieldMoveInfo[fieldMove].partyMsgID; +} + +#endif //GUARD_FIELD_MOVE_H diff --git a/include/field_name_box.h b/include/field_name_box.h new file mode 100644 index 000000000000..983ac09d091e --- /dev/null +++ b/include/field_name_box.h @@ -0,0 +1,22 @@ +#ifndef GUARD_FIELD_NAME_BOX_H +#define GUARD_FIELD_NAME_BOX_H + +#include "config/name_box.h" + +#define NAME_BOX_BASE_TILES_TOTAL (6) // Total tiles within the namebox's .png, best practice to make all images uses the same total tiles. +#define NAME_BOX_BASE_TILE_NUM (0x194 - (OW_NAME_BOX_DEFAULT_WIDTH * OW_NAME_BOX_DEFAULT_HEIGHT)) + +extern EWRAM_DATA const u8 *gSpeakerName; +extern const u8 *const gSpeakerNamesTable[]; + +void TrySpawnNamebox(u32 tileNum); +u32 GetNameboxWindowId(void); +void ResetNameboxData(void); +void DestroyNamebox(void); +void FillNamebox(void); +void DrawNamebox(u32 windowId, u32 tileNum, bool32 copyToVram); +void ClearNamebox(u32 windowId, bool32 copyToVram); +u32 GetNameboxWidth(void); +void TrySpawnAndShowNamebox(const u8 *speaker, u32 tileNum); + +#endif // GUARD_FIELD_NAME_BOX_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index cb7128f203bb..a6d56f62f7c6 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -64,7 +64,7 @@ bool32 IsPlayerSpinEntranceActive(void); bool32 IsPlayerSpinExitActive(void); void SetPlayerInvisibility(bool8 invisible); u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); -void StartFishing(u8 rod); +void SetPlayerAvatarFishing(u8 direction); bool8 ObjectMovingOnRockStairs(struct ObjectEvent *objectEvent, u8 direction); //sideways stairs u8 GetRightSideStairsDirection(u8 direction); diff --git a/include/field_specials.h b/include/field_specials.h index 50afecf2fbd6..c6bc40143fc5 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -19,7 +19,7 @@ bool32 ShouldDoScottBattleFrontierCall(void); bool32 ShouldDoRoxanneCall(void); bool32 ShouldDoRivalRayquazaCall(void); bool32 CountSSTidalStep(u16 delta); -u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y); +enum SSTidalLocation GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y); void ShowScrollableMultichoice(void); void FrontierGamblerSetWonOrLost(bool8 won); u8 TryGainNewFanFromCounter(u8 incrementId); diff --git a/include/fishing.h b/include/fishing.h new file mode 100644 index 000000000000..05ee2366040a --- /dev/null +++ b/include/fishing.h @@ -0,0 +1,9 @@ +#ifndef GUARD_FISHING_H +#define GUARD_FISHING_H + +void StartFishing(u8 rod); +void UpdateChainFishingStreak(); +u32 CalculateChainFishingShinyRolls(void); +bool32 ShouldUseFishingEnvironmentInBattle(); + +#endif // GUARD_FISHING_H \ No newline at end of file diff --git a/include/fldeff.h b/include/fldeff.h index 9bad320c74e9..d1b9e279c364 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -2,7 +2,7 @@ #define GUARD_FLDEFF_H // cut -bool8 SetUpFieldMove_Cut(void); +bool32 SetUpFieldMove_Cut(void); bool8 FldEff_UseCutOnGrass(void); bool8 FldEff_UseCutOnTree(void); bool8 FldEff_CutGrass(void); @@ -18,41 +18,41 @@ void StopEscalator(void); bool8 IsEscalatorMoving(void); // soft-boiled -bool8 SetUpFieldMove_SoftBoiled(void); +bool32 SetUpFieldMove_SoftBoiled(void); void Task_TryUseSoftboiledOnPartyMon(u8 taskId); void ChooseMonForSoftboiled(u8 taskId); // flash -bool8 SetUpFieldMove_Flash(void); +bool32 SetUpFieldMove_Flash(void); void CB2_DoChangeMap(void); bool8 GetMapPairFadeToType(u8 _fromType, u8 _toType); bool8 GetMapPairFadeFromType(u8 _fromType, u8 _toType); // strength -bool8 SetUpFieldMove_Strength(void); +bool32 SetUpFieldMove_Strength(void); bool8 FldEff_UseStrength(void); // sweet scent -bool8 SetUpFieldMove_SweetScent(void); +bool32 SetUpFieldMove_SweetScent(void); bool8 FldEff_SweetScent(void); void StartSweetScentFieldEffect(void); // teleport -bool8 SetUpFieldMove_Teleport(void); +bool32 SetUpFieldMove_Teleport(void); bool8 FldEff_UseTeleport(void); // dig -bool8 SetUpFieldMove_Dig(void); +bool32 SetUpFieldMove_Dig(void); bool8 FldEff_UseDig(void); // rock smash bool8 CheckObjectGraphicsInFrontOfPlayer(u16 graphicsId); u8 CreateFieldMoveTask(void); -bool8 SetUpFieldMove_RockSmash(void); +bool32 SetUpFieldMove_RockSmash(void); bool8 FldEff_UseRockSmash(void); // defog -bool8 SetUpFieldMove_Defog(void); +bool32 SetUpFieldMove_Defog(void); bool8 FldEff_Defog(void); #endif // GUARD_FLDEFF_H diff --git a/include/fldeff_misc.h b/include/fldeff_misc.h index 61078466dbcd..71fef15005ba 100644 --- a/include/fldeff_misc.h +++ b/include/fldeff_misc.h @@ -5,7 +5,7 @@ void ComputerScreenOpenEffect(u16 increment, u16 unused, u8 priority); void ComputerScreenCloseEffect(u16 increment, u16 unused, u8 priority); bool8 IsComputerScreenOpenEffectActive(void); bool8 IsComputerScreenCloseEffectActive(void); -bool8 SetUpFieldMove_SecretPower(void); +bool32 SetUpFieldMove_SecretPower(void); bool8 FldEff_UseSecretPowerCave(void); bool8 FldEff_SecretPowerCave(void); bool8 FldEff_UseSecretPowerTree(void); diff --git a/include/follower_helper.h b/include/follower_helper.h index 54a2b4c12a33..2960077696f3 100644 --- a/include/follower_helper.h +++ b/include/follower_helper.h @@ -70,7 +70,8 @@ enum MessageCondition #define MATCH_U16(type, value1, value2) {type, {.split = {.hw = value1, .b = value2}}} #define MATCH_U8(type, v1, v2, v3) {type, {.bytes = {v1, v2, v3}}} -#define MATCH_SPECIES(species) MATCH_U24(MSG_COND_SPECIES, species) +#define MATCH_SPECIES(species) MATCH_U16(MSG_COND_SPECIES, species, 0) +#define MATCH_NOT_SPECIES(species) MATCH_U16(MSG_COND_SPECIES, species, 1) #define MATCH_TYPES(type1, type2) MATCH_U8(MSG_COND_TYPE, type1, type2, 0) // Checks that follower has *neither* of the two types #define MATCH_NOT_TYPES(type1, type2) MATCH_U8(MSG_COND_TYPE, type1, type2, TYPE_NONE | 1) @@ -118,6 +119,7 @@ enum ConditionalMessage COND_MSG_BURN, COND_MSG_DAY, COND_MSG_NIGHT, + COND_MSG_ABNORMAL_WEATHER, COND_MSG_COUNT, }; diff --git a/include/follower_npc.h b/include/follower_npc.h index 52355a78b7cb..680a3b6799a8 100644 --- a/include/follower_npc.h +++ b/include/follower_npc.h @@ -12,6 +12,7 @@ struct FollowerNPCSpriteGraphics u16 acroBikeId; u16 surfId; u16 underwaterId; + bool8 hasRunningFrames; }; enum FollowerNPCDataTypes @@ -20,12 +21,10 @@ enum FollowerNPCDataTypes FNPC_DATA_WARP_END, FNPC_DATA_SURF_BLOB, FNPC_DATA_COME_OUT_DOOR, + FNPC_DATA_FORCED_MOVEMENT, FNPC_DATA_OBJ_ID, FNPC_DATA_CURRENT_SPRITE, FNPC_DATA_DELAYED_STATE, - FNPC_DATA_MAP_ID, - FNPC_DATA_MAP_NUM, - FNPC_DATA_MAP_GROUP, FNPC_DATA_EVENT_FLAG, FNPC_DATA_GFX_ID, FNPC_DATA_FOLLOWER_FLAGS, @@ -62,7 +61,8 @@ enum FollowerNPCSurfBlobStates FNPC_SURF_BLOB_DESTROY }; -enum FollowerNPCOutOfDoorTaskStates{ +enum FollowerNPCOutOfDoorTaskStates +{ OPEN_DOOR, NPC_WALK_OUT, CLOSE_DOOR, @@ -70,7 +70,8 @@ enum FollowerNPCOutOfDoorTaskStates{ REALLOW_MOVEMENT }; -enum FollowerNPCHandleEscalatorFinishTaskStates{ +enum FollowerNPCHandleEscalatorFinishTaskStates +{ MOVE_TO_PLAYER_POS, WAIT_FOR_PLAYER_MOVE, SHOW_FOLLOWER_DOWN, @@ -80,11 +81,25 @@ enum FollowerNPCHandleEscalatorFinishTaskStates{ MOVEMENT_FINISH }; +enum FollowerNPCForcedMovementStates +{ + FNPC_FORCED_NONE, + FNPC_FORCED_FOLLOW, + FNPC_FORCED_STAY +}; + +#define FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES 0x1 + +#define FNPC_NONE 0 +#define FNPC_ALWAYS 2 + void SetFollowerNPCData(enum FollowerNPCDataTypes type, u32 value); const u8 *GetFollowerNPCScriptPointer(void); u32 GetFollowerNPCData(enum FollowerNPCDataTypes type); void ClearFollowerNPCData(void); +void CreateFollowerNPC(u32 gfx, u32 followerFlags, const u8 *scriptPtr); +void DestroyFollowerNPC(void); u32 DetermineFollowerNPCState(struct ObjectEvent *follower, u32 state, u32 direction); void SetFollowerNPCSprite(u32 spriteIndex); diff --git a/include/follower_npc_alternate_sprites.h b/include/follower_npc_alternate_sprites.h index a42795ddf920..15fc4897657b 100644 --- a/include/follower_npc_alternate_sprites.h +++ b/include/follower_npc_alternate_sprites.h @@ -19,6 +19,7 @@ static const struct FollowerNPCSpriteGraphics gFollowerNPCAlternateSprites[] = .acroBikeId = OBJ_EVENT_GFX_RIVAL_MAY_ACRO_BIKE, .surfId = OBJ_EVENT_GFX_RIVAL_MAY_SURFING, .underwaterId = OBJ_EVENT_GFX_MAY_UNDERWATER, + .hasRunningFrames = TRUE, }, { .normalId = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL, @@ -26,6 +27,7 @@ static const struct FollowerNPCSpriteGraphics gFollowerNPCAlternateSprites[] = .acroBikeId = OBJ_EVENT_GFX_RIVAL_BRENDAN_ACRO_BIKE, .surfId = OBJ_EVENT_GFX_RIVAL_BRENDAN_SURFING, .underwaterId = OBJ_EVENT_GFX_BRENDAN_UNDERWATER, + .hasRunningFrames = TRUE, }, }; diff --git a/include/frontier_util.h b/include/frontier_util.h index 0d617782a34b..cd99f7a18128 100644 --- a/include/frontier_util.h +++ b/include/frontier_util.h @@ -13,7 +13,7 @@ void ScrollRankingHallRecordsWindow(void); void ClearRankingHallRecords(void); void SaveGameFrontier(void); u8 GetFrontierBrainTrainerPicIndex(void); -u8 GetFrontierBrainTrainerClass(void); +enum TrainerClassID GetFrontierBrainTrainerClass(void); void CopyFrontierBrainTrainerName(u8 *dst); bool8 IsFrontierBrainFemale(void); void SetFrontierBrainObjEventGfx_2(void); @@ -25,5 +25,6 @@ u8 GetFrontierBrainMonNature(u8 monId); u8 GetFrontierBrainMonEvs(u8 monId, u8 evStatId); s32 GetFronterBrainSymbol(void); void ClearEnemyPartyAfterChallenge(void); +void ShowBattleFrontierCaughtBannedSpecies(void); #endif // GUARD_FRONTIER_UTIL_H diff --git a/include/gametypes.h b/include/gametypes.h new file mode 100644 index 000000000000..242fc9d9dbf0 --- /dev/null +++ b/include/gametypes.h @@ -0,0 +1,67 @@ +#ifndef GUARD_GAMETYPES_H +#define GUARD_GAMETYPES_H + +#include "gba/types.h" + +// +// This header includes typedefs for fields that commonly appear throughout +// the codebase, and which ROM hacks might benefit from being able to widen. +// +// These typedefs include the underlying type in their name for two reasons: +// +// - Game Freak wasn't fully consistent about field widths throughout +// their codebase. For example, when Region Map Sections are persistently +// stored in savedata, they're stored as 8-bit values; but much of the +// codebase handles them as 16-bit values. +// +// - Although Pokemon Emerald doesn't come close to maxing out RAM, it *does* +// use nearly all of its EEPROM. That is: the vanilla game uses 96% of the +// flash memory available for storing players' save files, leaving 2172 +// bytes to spare within each of the game's two save files (primary and +// backup). These spare bytes are not contiguous: SaveBlock1 can only grow +// by 84 bytes, and SaveBlock2 can only grow by 120 bytes, with the rest +// of the free space located after the player's PC-boxed Pokemon. +// +// With so little flash memory to spare, keeping track of how much space +// you're using is vital -- and so is arranging struct members to minimize +// compiler-inserted padding. It's easier to deal with this when you can +// see these types' widths at a glance. +// +// Accordingly, this file generally doesn't contain just single types, but +// rather families of types. For example, Region Map Sections are saved as +// u8s within the player's save file, but are sometimes handled as u16s or +// even s16s and ints; and so there are multiple typedefs for Map Sections +// corresponding to each of these underlying types, and each typedef has a +// name which indicates the underlying type. +// +// For a given family of typedefs, the smallest one should be considered +// the "real" or "canonical" type. Continuing with Map Sections as our +// example, the smallest type is an 8-bit integer, and so any values that +// can't fit in an 8-bit integer will be truncated and lost at some point +// within the codebase. Therefore mapsec_u8_t is the "canonical" type for +// Map Sections, and the larger typedefs just exist to describe situations +// where the game handles Map Sections inconsistently with that "canon." +// + +// Map Sections are named areas that can appear in the region map. Each +// individual map can be assigned to a Map Section as appropriate. The +// possible values are in constants/region_map_sections.h. +// +// If you choose to widen Map Sections, be aware that Met Locations (below) +// are based on Map Sections and will also be widened. +typedef u8 mapsec_u8_t; +typedef u16 mapsec_u16_t; +typedef s16 mapsec_s16_t; +typedef s32 mapsec_s32_t; + +// Met Locations for caught Pokemon use the same values as Map Sections, +// except that 0xFD, 0xFE, and 0xFF have special meanings. +// +// Because this value appears inside every Pokemon's data, widening it will +// consume a lot more space within flash memory. The space usage will be +// greater than you expect due to how Pokemon substructs are laid out; you +// would have to rearrange the substructs' contents in order to minimize +// how much more space a wider Met Location would consume. +typedef mapsec_u8_t metloc_u8_t; + +#endif //GUARD_GAMETYPES_H diff --git a/include/gba/defines.h b/include/gba/defines.h index 6d2b9f910a0f..754e95a6dd42 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -13,6 +13,7 @@ #define COMMON_DATA __attribute__((section("common_data"))) #define UNUSED __attribute__((unused)) #define USED __attribute__((used)) +#define KEEP_SECTION __attribute__((section(".text.consts"))) #define ARM_FUNC __attribute__((target("arm"))) @@ -24,6 +25,9 @@ #define ALIGNED(n) __attribute__((aligned(n))) #define PACKED __attribute__((packed)) +#define TRANSPARENT __attribute__ ((__transparent_union__)) +#define ALWAYS_INLINE inline __attribute__((always_inline)) +#define NONNULL __attribute__((__nonnull__)) #define SOUND_INFO_PTR (*(struct SoundInfo **)0x3007FF0) #define INTR_CHECK (*(u16 *)0x3007FF8) diff --git a/include/gba/isagbprint.h b/include/gba/isagbprint.h index d362b5cb380f..c94df4fe1db6 100644 --- a/include/gba/isagbprint.h +++ b/include/gba/isagbprint.h @@ -30,7 +30,7 @@ void AGBPrintInit(void); #if (LOG_HANDLER == LOG_HANDLER_MGBA_PRINT) -#define DebugPrintf(pBuf, ...) MgbaPrintf(MGBA_LOG_INFO, pBuf, ## __VA_ARGS__) +#define DebugPrintf(pBuf, ...) MgbaPrintf(MGBA_LOG_WARN, pBuf, ## __VA_ARGS__) #define DebugAssert(pFile, nLine, pExpression, nStopProgram) MgbaAssert(pFile, nLine, pExpression, nStopProgram) #define DebugPrintfLevel(level, pBuf, ...) MgbaPrintf(level, pBuf, ## __VA_ARGS__) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index a90771048dc2..5c3a0872ce88 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -401,7 +401,7 @@ extern const u8 gNoiseTable[]; extern const struct PokemonCrySong gPokemonCrySongTemplate; -extern const struct ToneData voicegroup000; +extern const struct ToneData voicegroup_dummy; extern char gNumMusicPlayers[]; extern char gMaxLines[]; diff --git a/include/gba/syscall.h b/include/gba/syscall.h index c922084d5fd2..50f578198884 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -61,9 +61,9 @@ void LZ77UnCompWram(const u32 *src, void *dest); void LZ77UnCompVram(const u32 *src, void *dest); -void RLUnCompWram(const void *src, void *dest); +void RLUnCompWram(const u32 *src, void *dest); -void RLUnCompVram(const void *src, void *dest); +void RLUnCompVram(const u32 *src, void *dest); int MultiBoot(struct MultiBootParam *mp); diff --git a/include/generational_changes.h b/include/generational_changes.h index 2a97728d0da7..2e6767ca844e 100644 --- a/include/generational_changes.h +++ b/include/generational_changes.h @@ -4,47 +4,20 @@ #include "constants/generational_changes.h" #include "config/battle.h" -static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] = -{ - [GEN_CONFIG_CRIT_CHANCE] = B_CRIT_CHANCE, - [GEN_CONFIG_CRIT_MULTIPLIER] = B_CRIT_MULTIPLIER, - [GEN_CONFIG_FOCUS_ENERGY_CRIT_RATIO] = B_FOCUS_ENERGY_CRIT_RATIO, - [GEN_CONFIG_PARALYSIS_SPEED] = B_PARALYSIS_SPEED, - [GEN_CONFIG_CONFUSION_SELF_DMG_CHANCE] = B_CONFUSION_SELF_DMG_CHANCE, - [GEN_CONFIG_MULTI_HIT_CHANCE] = B_MULTI_HIT_CHANCE, - [GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS, - [GEN_CONFIG_HEAL_BELL_SOUNDPROOF] = B_HEAL_BELL_SOUNDPROOF, - [GEN_CONFIG_TELEPORT_BEHAVIOR] = B_TELEPORT_BEHAVIOR, - [GEN_CONFIG_ABILITY_WEATHER] = B_ABILITY_WEATHER, - [GEN_CONFIG_MOODY_STATS] = B_MOODY_ACC_EVASION, - [GEN_CONFIG_BATTLE_BOND] = B_BATTLE_BOND, - [GEN_CONFIG_FELL_STINGER_STAT_RAISE] = B_FELL_STINGER_STAT_RAISE, - [GEN_CONFIG_ATE_MULTIPLIER] = B_ATE_MULTIPLIER, -}; - -#if TESTING -extern u8 *gGenerationalChangesTestOverride; -#endif +#define UNPACK_CONFIG_STRUCT(_name, _field, _typeMaxValue, ...) INVOKE_WITH_(UNPACK_CONFIG_STRUCT_, _field, UNPACK_B(_typeMaxValue)); +#define UNPACK_CONFIG_STRUCT_(_field, _type, ...) _type FIRST(__VA_OPT__(_field:BIT_SIZE(FIRST(__VA_ARGS__)),) _field) -static inline u32 GetGenConfig(enum GenConfigTag configTag) +struct GenChanges { - if (configTag >= GEN_CONFIG_COUNT) return GEN_LATEST; -#if TESTING - if (gGenerationalChangesTestOverride == NULL) return sGenerationalChanges[configTag]; - return gGenerationalChangesTestOverride[configTag]; -#else - return sGenerationalChanges[configTag]; -#endif -} + CONFIG_DEFINITIONS(UNPACK_CONFIG_STRUCT) + // Expands to: + // u32 critChance:4; + // u32 critMultiplier:4; + // ... +}; -static inline void SetGenConfig(enum GenConfigTag configTag, u32 value) -{ -#if TESTING - if (configTag >= GEN_CONFIG_COUNT) return; - if (gGenerationalChangesTestOverride == NULL) return; - gGenerationalChangesTestOverride[configTag] = value; -#endif -} +u32 GetConfig(enum ConfigTag configTag); +void SetConfig(enum ConfigTag configTag, u32 value); #if TESTING void TestInitConfigData(void); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 5f2a84017f51..5e0f99031db2 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -7,19 +7,36 @@ #define MAPGRID_METATILE_ID_MASK 0x03FF // Bits 0-9 #define MAPGRID_COLLISION_MASK 0x0C00 // Bits 10-11 #define MAPGRID_ELEVATION_MASK 0xF000 // Bits 12-15 +#define MAPGRID_METATILE_ID_SHIFT 0 #define MAPGRID_COLLISION_SHIFT 10 #define MAPGRID_ELEVATION_SHIFT 12 +#define PACK_METATILE(metatileId) PACK(metatileId, MAPGRID_METATILE_ID_SHIFT, MAPGRID_METATILE_ID_MASK) +#define PACK_COLLISION(collision) PACK(collision, MAPGRID_COLLISION_SHIFT, MAPGRID_COLLISION_MASK) +#define PACK_ELEVATION(elevation) PACK(elevation, MAPGRID_ELEVATION_SHIFT, MAPGRID_ELEVATION_MASK) +#define UNPACK_METATILE(data) UNPACK(data, MAPGRID_METATILE_ID_SHIFT, MAPGRID_METATILE_ID_MASK) +#define UNPACK_COLLISION(data) UNPACK(data, MAPGRID_COLLISION_SHIFT, MAPGRID_COLLISION_MASK) +#define UNPACK_ELEVATION(data) UNPACK(data, MAPGRID_ELEVATION_SHIFT, MAPGRID_ELEVATION_MASK) + // An undefined map grid block has all metatile id bits set and nothing else #define MAPGRID_UNDEFINED MAPGRID_METATILE_ID_MASK +// When setting impassability manually GF sets all the collision bits +#define MAPGRID_IMPASSABLE MAPGRID_COLLISION_MASK + // Masks/shifts for metatile attributes // Metatile attributes consist of an 8 bit behavior value, 4 unused bits, and a 4 bit layer type value // This is the data stored in each data/tilesets/*/*/metatile_attributes.bin file #define METATILE_ATTR_BEHAVIOR_MASK 0x00FF // Bits 0-7 #define METATILE_ATTR_LAYER_MASK 0xF000 // Bits 12-15 +#define METATILE_ATTR_BEHAVIOR_SHIFT 0 #define METATILE_ATTR_LAYER_SHIFT 12 +#define PACK_BEHAVIOR(behavior) PACK(behavior, METATILE_ATTR_BEHAVIOR_SHIFT, METATILE_ATTR_BEHAVIOR_MASK) +#define PACK_LAYER_TYPE(layerType) PACK(layerType, METATILE_ATTR_LAYER_SHIFT, METATILE_ATTR_LAYER_MASK) +#define UNPACK_BEHAVIOR(data) UNPACK(data, METATILE_ATTR_BEHAVIOR_SHIFT, METATILE_ATTR_BEHAVIOR_MASK) +#define UNPACK_LAYER_TYPE(data) UNPACK(data, METATILE_ATTR_LAYER_SHIFT, METATILE_ATTR_LAYER_MASK) + enum { METATILE_LAYER_TYPE_NORMAL, // Metatile uses middle and top bg layers METATILE_LAYER_TYPE_COVERED, // Metatile uses bottom and middle bg layers @@ -152,7 +169,7 @@ struct MapHeader /* 0x0C */ const struct MapConnections *connections; /* 0x10 */ u16 music; /* 0x12 */ u16 mapLayoutId; - /* 0x14 */ u8 regionMapSectionId; + /* 0x14 */ mapsec_u8_t regionMapSectionId; /* 0x15 */ u8 cave; /* 0x16 */ u8 weather; /* 0x17 */ u8 mapType; diff --git a/include/global.h b/include/global.h index b58ef3518b38..3135542e027d 100644 --- a/include/global.h +++ b/include/global.h @@ -5,6 +5,7 @@ #include #include "config/general.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines. #include "gba/gba.h" +#include "gametypes.h" #include "siirtc.h" #include "fpmath.h" #include "metaprogram.h" @@ -13,6 +14,7 @@ #include "constants/vars.h" #include "constants/species.h" #include "constants/pokedex.h" +#include "constants/apricorn_tree.h" #include "constants/berry.h" #include "constants/maps.h" #include "constants/pokemon.h" @@ -107,6 +109,9 @@ #define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) #define T2_READ_PTR(ptr) (void *) T2_READ_32(ptr) +#define PACK(data, shift, mask) ( ((data) << (shift)) & (mask) ) +#define UNPACK(data, shift, mask) ( ((data) & (mask)) >> (shift) ) + // Macros for checking the joypad #define TEST_BUTTON(field, button) ((field) & (button)) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) @@ -130,6 +135,8 @@ #define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) #define NUM_TRENDY_SAYING_BYTES ROUND_BITS_TO_BYTES(NUM_TRENDY_SAYINGS) +#define NUM_APRICORN_TREE_BYTES ROUND_BITS_TO_BYTES(APRICORN_TREE_COUNT) + // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative #define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; @@ -204,23 +211,24 @@ struct Time /*0x04*/ s8 seconds; }; -struct NPCFollowerMapData +struct NPCFollowerPadding { - u8 id; - u8 number; - u8 group; + u8 padding1; + u8 padding2; + u8 padding3; }; struct NPCFollower { u8 inProgress:1; u8 warpEnd:1; - u8 createSurfBlob:3; - u8 comeOutDoorStairs:3; + u8 createSurfBlob:2; + u8 comeOutDoorStairs:2; + u8 forcedMovement:2; u8 objId; u8 currentSprite; u8 delayedState; - struct NPCFollowerMapData map; + struct NPCFollowerPadding padding; struct Coords16 log; const u8 *script; u16 flag; @@ -247,6 +255,9 @@ struct SaveBlock3 u8 dexNavSearchLevels[NUM_SPECIES]; #endif u8 dexNavChain; +#if APRICORN_TREE_COUNT > 0 + u8 apricornTrees[NUM_APRICORN_TREE_BYTES]; +#endif }; /* max size 1624 bytes */ extern struct SaveBlock3 *gSaveBlock3Ptr; @@ -1044,6 +1055,15 @@ struct ExternalEventFlags } __attribute__((packed));/*size = 0x15*/ +struct Bag +{ + struct ItemSlot items[BAG_ITEMS_COUNT]; + struct ItemSlot keyItems[BAG_KEYITEMS_COUNT]; + struct ItemSlot pokeBalls[BAG_POKEBALLS_COUNT]; + struct ItemSlot TMsHMs[BAG_TMHM_COUNT]; + struct ItemSlot berries[BAG_BERRIES_COUNT]; +}; + struct SaveBlock1 { /*0x00*/ struct Coords16 pos; @@ -1066,11 +1086,8 @@ struct SaveBlock1 /*0x494*/ u16 coins; /*0x496*/ u16 registeredItem; // registered for use with SELECT button /*0x498*/ struct ItemSlot pcItems[PC_ITEMS_COUNT]; - /*0x560*/ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT]; - /*0x5D8*/ struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; - /*0x650*/ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT]; - /*0x690*/ struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT]; - /*0x790*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT]; + /*0x560 -> 0x848 is bag storage*/ + /*0x560*/ struct Bag bag; /*0x848*/ struct Pokeblock pokeblocks[POKEBLOCKS_COUNT]; #if FREE_EXTRA_SEEN_FLAGS_SAVEBLOCK1 == FALSE /*0x988*/ u8 filler1[0x34]; // Previously Dex Flags, feel free to remove. @@ -1169,6 +1186,8 @@ struct MapPosition #if T_SHOULD_RUN_MOVE_ANIM extern bool32 gLoadFail; +extern bool32 gCountAllocs; +extern s32 gSpriteAllocs; #endif // T_SHOULD_RUN_MOVE_ANIM #endif // GUARD_GLOBAL_H diff --git a/include/global.tv.h b/include/global.tv.h index 6bc6d08f86f3..3956decd4a19 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -226,7 +226,7 @@ typedef union // size = 0x24 /*0x04*/ u8 filler_04[2]; /*0x06*/ u16 itemIds[SMARTSHOPPER_NUM_ITEMS]; /*0x0C*/ u16 itemAmounts[SMARTSHOPPER_NUM_ITEMS]; - /*0x12*/ u8 shopLocation; + /*0x12*/ mapsec_u8_t shopLocation; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x1B*/ //u8 padding; } smartshopperShow; @@ -241,7 +241,7 @@ typedef union // size = 0x24 /*0x0E*/ u16 species2; /*0x10*/ u8 nBallsUsed; /*0x11*/ u8 outcome; - /*0x12*/ u8 location; + /*0x12*/ mapsec_u8_t location; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x1B*/ //u8 padding; } pokemonTodayFailed; @@ -267,7 +267,7 @@ typedef union // size = 0x24 /*0x04*/ u16 caughtPoke; /*0x06*/ u16 steps; /*0x08*/ u16 species; - /*0x0A*/ u8 location; + /*0x0A*/ mapsec_u8_t location; /*0x0B*/ u8 language; /*0x0C*/ u8 filler_0C[7]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; @@ -282,7 +282,7 @@ typedef union // size = 0x24 /*0x04*/ u8 badgeCount; /*0x05*/ u8 nSilverSymbols; /*0x06*/ u8 nGoldSymbols; - /*0x07*/ u8 location; + /*0x07*/ mapsec_u8_t location; /*0x08*/ u16 battlePoints; /*0x0A*/ u16 mapLayoutId; /*0x0C*/ u8 language; @@ -309,7 +309,7 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u16 item; - /*0x04*/ u8 location; + /*0x04*/ mapsec_u8_t location; /*0x05*/ u8 language; /*0x06*/ u16 mapLayoutId; /*0x08*/ u8 filler_08[11]; @@ -336,7 +336,7 @@ typedef union // size = 0x24 /*0x00*/ u8 kind; /*0x01*/ bool8 active; /*0x02*/ u16 lastOpponentSpecies; - /*0x04*/ u8 location; + /*0x04*/ mapsec_u8_t location; /*0x05*/ u8 outcome; /*0x06*/ u16 caughtMonBall; /*0x08*/ u16 balls; @@ -505,7 +505,7 @@ struct GabbyAndTyData /*2BA6*/ u16 mon2; /*2BA8*/ u16 lastMove; /*2BAA*/ u16 quote[1]; - /*2BAC*/ u8 mapnum; + /*2BAC*/ mapsec_u8_t mapnum; /*2BAD*/ u8 battleNum; /*2BAE*/ u8 battleTookMoreThanOneTurn:1; u8 playerLostAMon:1; diff --git a/include/graphics.h b/include/graphics.h index 262afd533727..bc168e39a181 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2700,6 +2700,8 @@ extern const u32 gBattleAnimSpriteGfx_MegaParticles[]; extern const u16 gBattleAnimSpritePal_MegaParticles[]; extern const u32 gBattleAnimSpriteGfx_MegaSymbol[]; extern const u16 gBattleAnimSpritePal_MegaSymbol[]; +extern const u32 gBattleAnimSpriteGfx_TeraSymbol[]; +extern const u16 gBattleAnimSpritePal_TeraSymbol[]; extern const u32 gBattleAnimSpriteGfx_FlashCannonBall[]; extern const u16 gBattleAnimSpritePal_FlashCannonBall[]; extern const u32 gBattleAnimSpriteGfx_WaterGun[]; @@ -2712,6 +2714,12 @@ extern const u32 gBattleAnimSpriteGfx_TeraCrystal[]; extern const u16 gBattleAnimSpritePal_TeraCrystal[]; extern const u32 gBattleAnimSpriteGfx_TeraShatter[]; extern const u16 gBattleAnimSpritePal_TeraShatter[]; +extern const u32 gBattleAnimSpriteGfx_TatsugiriCurly[]; +extern const u16 gBattleAnimSpritePal_TatsugiriCurly[]; +extern const u32 gBattleAnimSpriteGfx_TatsugiriDroopy[]; +extern const u16 gBattleAnimSpritePal_TatsugiriDroopy[]; +extern const u32 gBattleAnimSpriteGfx_TatsugiriStretchy[]; +extern const u16 gBattleAnimSpritePal_TatsugiriStretchy[]; // New Battle Anim Particles extern const u32 gBattleAnimSpriteGfx_AlphaStone[]; @@ -3188,9 +3196,11 @@ extern const u32 gBattleAnimBgTilemap_Sandstorm[]; extern const u32 gBattleAnimBgImage_Sandstorm[]; // Pledge Effect field status - Rainbow -extern const u32 gBattleAnimBgImage_Rainbow[]; +extern const u32 gBattleAnimBgImage_RainbowPlayer[]; +extern const u32 gBattleAnimBgImage_RainbowOpponent[]; extern const u16 gBattleAnimBGPalette_Rainbow[]; -extern const u32 gBattleAnimBgTilemap_Rainbow[]; +extern const u32 gBattleAnimBgTilemap_RainbowPlayer[]; +extern const u32 gBattleAnimBgTilemap_RainbowOpponent[]; // Pledge Effect field status - Swamp extern const u32 gBattleAnimBgImage_Swamp[]; diff --git a/include/item.h b/include/item.h index aeffae774266..d548643af80c 100644 --- a/include/item.h +++ b/include/item.h @@ -2,8 +2,87 @@ #define GUARD_ITEM_H #include "constants/item.h" +#include "constants/item_effects.h" #include "constants/items.h" +#include "constants/moves.h" #include "constants/tms_hms.h" +#include "constants/item_effects.h" +#include "constants/hold_effects.h" + +/* Expands to: + * enum + * { + * ITEM_TM_FOCUS_PUNCH = ITEM_TM01, + * ... + * ITEM_HM_CUT = ITM_HM01, + * ... + * }; */ +#define ENUM_TM(n, id) CAT(ITEM_TM_, id) = CAT(ITEM_TM, n), +#define ENUM_HM(n, id) CAT(ITEM_HM_, id) = CAT(ITEM_HM, n), +#define TO_TMHM_NUMS(a, ...) (__VA_ARGS__) +enum TMHMItemId +{ + RECURSIVELY(R_ZIP(ENUM_TM, TO_TMHM_NUMS NUMBERS_256, (FOREACH_TM(APPEND_COMMA)))) + RECURSIVELY(R_ZIP(ENUM_HM, TO_TMHM_NUMS NUMBERS_256, (FOREACH_HM(APPEND_COMMA)))) +}; + +#undef ENUM_TM +#undef ENUM_HM +#undef TO_TMHM_NUMS + +/* Each of these TM_HM enums corresponds an index in the list of TMs + HMs item ids in + * gTMHMItemMoveIds. The index for an item can be retrieved with GetItemTMHMIndex below. + */ +#define UNPACK_TM_HM_ENUM(_tmHm) CAT(ENUM_TM_HM_, _tmHm), +enum TMHMIndex +{ + FOREACH_TMHM(UNPACK_TM_HM_ENUM) + NUM_ALL_MACHINES, + NUM_TECHNICAL_MACHINES = (0 FOREACH_TM(PLUS_ONE)), + NUM_HIDDEN_MACHINES = (0 FOREACH_HM(PLUS_ONE)), +}; + +#undef UNPACK_TM_HM_ENUM + +enum PACKED ItemSortType +{ + ITEM_TYPE_UNCATEGORIZED, + ITEM_TYPE_FIELD_USE, + ITEM_TYPE_LEVEL_UP_ITEM, + ITEM_TYPE_HEALTH_RECOVERY, + ITEM_TYPE_STATUS_RECOVERY, + ITEM_TYPE_PP_RECOVERY, + ITEM_TYPE_NATURE_MINT, + ITEM_TYPE_STAT_BOOST_DRINK, + ITEM_TYPE_STAT_BOOST_FEATHER, + ITEM_TYPE_STAT_BOOST_MOCHI, + ITEM_TYPE_BATTLE_ITEM, + ITEM_TYPE_FLUTE, + ITEM_TYPE_X_ITEM, + ITEM_TYPE_AUX_ITEM, + ITEM_TYPE_EVOLUTION_STONE, + ITEM_TYPE_EVOLUTION_ITEM, + ITEM_TYPE_SPECIAL_HELD_ITEM, + ITEM_TYPE_MEGA_STONE, + ITEM_TYPE_Z_CRYSTAL, + ITEM_TYPE_TERA_SHARD, + ITEM_TYPE_HELD_ITEM, + ITEM_TYPE_TYPE_BOOST_HELD_ITEM, + ITEM_TYPE_CONTEST_HELD_ITEM, + ITEM_TYPE_EV_BOOST_HELD_ITEM, + ITEM_TYPE_GEM, + ITEM_TYPE_PLATE, + ITEM_TYPE_MEMORY, + ITEM_TYPE_DRIVE, + ITEM_TYPE_INCENSE, + ITEM_TYPE_NECTAR, + ITEM_TYPE_GROWTH, + ITEM_TYPE_SHARD, + ITEM_TYPE_SELLABLE, + ITEM_TYPE_RELIC, + ITEM_TYPE_FOSSIL, + ITEM_TYPE_MAIL, +}; typedef void (*ItemUseFunc)(u8); @@ -14,14 +93,14 @@ struct Item ItemUseFunc fieldUseFunc; const u8 *description; const u8 *effect; - u8 name[ITEM_NAME_LENGTH]; - u8 pluralName[ITEM_NAME_PLURAL_LENGTH]; + const u8 *name; + const u8 *pluralName; u8 holdEffect; u8 holdEffectParam; u8 importance:2; u8 notConsumed:1; - u8 padding:5; - u8 pocket; + enum Pocket pocket:5; + enum ItemSortType sortType; u8 type; u8 battleUsage; u8 flingPower; @@ -29,82 +108,165 @@ struct Item const u16 *iconPalette; }; -struct BagPocket +struct ALIGNED(2) BagPocket { struct ItemSlot *itemSlots; - u8 capacity; + u16 capacity:10; + enum Pocket id:6; +}; + +struct TmHmIndexKey +{ + enum TMHMItemId itemId:16; + u16 moveId; }; +extern const u8 gQuestionMarksItemName[]; extern const struct Item gItemsInfo[]; extern struct BagPocket gBagPockets[]; +extern const struct TmHmIndexKey gTMHMItemMoveIds[]; + +#define UNPACK_ITEM_TO_TM_INDEX(_tm) case CAT(ITEM_TM_, _tm): return CAT(ENUM_TM_HM_, _tm) + 1; +#define UNPACK_ITEM_TO_HM_INDEX(_hm) case CAT(ITEM_HM_, _hm): return CAT(ENUM_TM_HM_, _hm) + 1; +#define UNPACK_ITEM_TO_TM_MOVE_ID(_tm) case CAT(ITEM_TM_, _tm): return CAT(MOVE_, _tm); +#define UNPACK_ITEM_TO_HM_MOVE_ID(_hm) case CAT(ITEM_HM_, _hm): return CAT(MOVE_, _hm); +#define UNPACK_TM_MOVE_TO_ITEM_ID(_move) case CAT(MOVE_, _move): return CAT(ITEM_TM_, _move); +#define UNPACK_HM_MOVE_TO_ITEM_ID(_move) case CAT(MOVE_, _move): return CAT(ITEM_HM_, _move); + +static inline enum TMHMIndex GetItemTMHMIndex(u16 item) +{ + switch (item) + { + /* Expands to: + * case ITEM_TM_FOCUS_PUNCH: + * return 1; + * case ITEM_TM_DRAGON_CLAW: + * return 2; + * etc */ + FOREACH_TM(UNPACK_ITEM_TO_TM_INDEX) + FOREACH_HM(UNPACK_ITEM_TO_HM_INDEX) + default: + return 0; + } +} + +static inline u16 GetItemTMHMMoveId(u16 item) +{ + switch (item) + { + /* Expands to: + * case ITEM_TM_FOCUS_PUNCH: + * return MOVE_FOCUS_PUNCH; + * case ITEM_TM_DRAGON_CLAW: + * return MOVE_DRAGON_CLAW; + * etc */ + FOREACH_TM(UNPACK_ITEM_TO_TM_MOVE_ID) + FOREACH_HM(UNPACK_ITEM_TO_HM_MOVE_ID) + default: + return MOVE_NONE; + } +} + +static inline enum TMHMItemId GetTMHMItemIdFromMoveId(u16 move) +{ + switch (move) + { + /* Expands to: + * case MOVE_FOCUS_PUNCH: + * return ITEM_TM_FOCUS_PUNCH; + * case MOVE_DRAGON_CLAW: + * return ITEM_TM_DRAGON_CLAW; + * etc */ + FOREACH_TM(UNPACK_TM_MOVE_TO_ITEM_ID) + FOREACH_HM(UNPACK_HM_MOVE_TO_ITEM_ID) + default: + return ITEM_NONE; + } +} + +#undef UNPACK_ITEM_TO_TM_INDEX +#undef UNPACK_ITEM_TO_HM_INDEX +#undef UNPACK_ITEM_TO_TM_MOVE_ID +#undef UNPACK_ITEM_TO_HM_MOVE_ID +#undef UNPACK_TM_MOVE_TO_ITEM_ID +#undef UNPACK_HM_MOVE_TO_ITEM_ID + +static inline enum TMHMItemId GetTMHMItemId(enum TMHMIndex index) +{ + return gTMHMItemMoveIds[index].itemId; +} + +static inline u16 GetTMHMMoveId(enum TMHMIndex index) +{ + return gTMHMItemMoveIds[index].moveId; +} + +void BagPocket_SetSlotData(struct BagPocket *pocket, u32 pocketPos, struct ItemSlot newSlot); +struct ItemSlot BagPocket_GetSlotData(struct BagPocket *pocket, u32 pocketPos); + +static inline void BagPocket_SetSlotItemIdAndCount(struct BagPocket *pocket, u32 pocketPos, u16 itemId, u16 quantity) +{ + BagPocket_SetSlotData(pocket, pocketPos, (struct ItemSlot) {itemId, quantity}); +} + +static inline u16 GetBagItemId(enum Pocket pocketId, u32 pocketPos) +{ + return BagPocket_GetSlotData(&gBagPockets[pocketId], pocketPos).itemId; +} + +static inline u16 GetBagItemQuantity(enum Pocket pocketId, u32 pocketPos) +{ + return BagPocket_GetSlotData(&gBagPockets[pocketId], pocketPos).quantity; +} + +static inline struct ItemSlot GetBagItemIdAndQuantity(enum Pocket pocketId, u32 pocketPos) +{ + return BagPocket_GetSlotData(&gBagPockets[pocketId], pocketPos); +} void ApplyNewEncryptionKeyToBagItems(u32 newKey); -void ApplyNewEncryptionKeyToBagItems_(u32 newKey); void SetBagItemsPointers(void); u8 *CopyItemName(u16 itemId, u8 *dst); u8 *CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity); -bool8 IsBagPocketNonEmpty(u8 pocket); -bool8 CheckBagHasItem(u16 itemId, u16 count); -bool8 HasAtLeastOneBerry(void); -bool8 HasAtLeastOnePokeBall(void); -bool8 CheckBagHasSpace(u16 itemId, u16 count); +bool32 IsBagPocketNonEmpty(enum Pocket pocketId); +bool32 CheckBagHasItem(u16 itemId, u16 count); +bool32 HasAtLeastOneBerry(void); +bool32 HasAtLeastOnePokeBall(void); +bool32 CheckBagHasSpace(u16 itemId, u16 count); u32 GetFreeSpaceForItemInBag(u16 itemId); -bool8 AddBagItem(u16 itemId, u16 count); -bool8 RemoveBagItem(u16 itemId, u16 count); -u8 GetPocketByItemId(u16 itemId); -void ClearItemSlots(struct ItemSlot *itemSlots, u8 itemCount); +bool32 AddBagItem(u16 itemId, u16 count); +bool32 RemoveBagItem(u16 itemId, u16 count); +void RemoveBagItemFromSlot(struct BagPocket *pocket, u16 slotId, u16 count); u8 CountUsedPCItemSlots(void); -bool8 CheckPCHasItem(u16 itemId, u16 count); -bool8 AddPCItem(u16 itemId, u16 count); +bool32 CheckPCHasItem(u16 itemId, u16 count); +bool32 AddPCItem(u16 itemId, u16 count); void RemovePCItem(u8 index, u16 count); void CompactPCItems(void); void SwapRegisteredBike(void); -u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 pocketPos); -u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 pocketPos); -void CompactItemsInBagPocket(struct BagPocket *bagPocket); -void SortBerriesOrTMHMs(struct BagPocket *bagPocket); -void MoveItemSlotInList(struct ItemSlot *itemSlots_, u32 from, u32 to_); +void CompactItemsInBagPocket(enum Pocket pocketId); +void MoveItemSlotInPocket(enum Pocket pocketId, u32 from, u32 to); +void MoveItemSlotInPC(struct ItemSlot *itemSlots, u32 from, u32 to); void ClearBag(void); u16 CountTotalItemQuantityInBag(u16 itemId); -bool8 AddPyramidBagItem(u16 itemId, u16 count); -bool8 RemovePyramidBagItem(u16 itemId, u16 count); +bool32 AddPyramidBagItem(u16 itemId, u16 count); +bool32 RemovePyramidBagItem(u16 itemId, u16 count); const u8 *GetItemName(u16 itemId); u32 GetItemPrice(u16 itemId); const u8 *GetItemEffect(u32 itemId); -u32 GetItemHoldEffect(u32 itemId); +enum HoldEffect GetItemHoldEffect(u32 itemId); u32 GetItemHoldEffectParam(u32 itemId); const u8 *GetItemDescription(u16 itemId); u8 GetItemImportance(u16 itemId); u8 GetItemConsumability(u16 itemId); -u8 GetItemPocket(u16 itemId); +enum Pocket GetItemPocket(u16 itemId); u8 GetItemType(u16 itemId); ItemUseFunc GetItemFieldFunc(u16 itemId); u8 GetItemBattleUsage(u16 itemId); u32 GetItemSecondaryId(u32 itemId); u32 GetItemFlingPower(u32 itemId); u32 GetItemStatus1Mask(u16 itemId); -u32 GetItemStatus2Mask(u16 itemId); +bool32 ItemHasVolatileFlag(u16 itemId, enum Volatile volatile); u32 GetItemSellPrice(u32 itemId); - -/* Expands to: - * enum - * { - * ITEM_TM_FOCUS_PUNCH, - * ... - * ITEM_HM_CUT, - * ... - * }; */ -#define ENUM_TM(id) CAT(ITEM_TM_, id), -#define ENUM_HM(id) CAT(ITEM_HM_, id), -enum -{ - ENUM_TM_START_ = ITEM_TM01 - 1, - FOREACH_TM(ENUM_TM) - - ENUM_HM_START_ = ITEM_HM01 - 1, - FOREACH_HM(ENUM_HM) -}; -#undef ENUM_TM -#undef ENUM_HM +bool32 IsHoldEffectChoice(enum HoldEffect holdEffect); #endif // GUARD_ITEM_H diff --git a/include/item_menu.h b/include/item_menu.h index 84137da1de2b..a16ccae5d462 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -2,6 +2,7 @@ #define GUARD_ITEM_MENU_H #include "item.h" +#include "main.h" #include "menu_helpers.h" enum { @@ -36,6 +37,15 @@ enum { ITEMWIN_COUNT }; +//bag sort +enum BagSortOptions +{ + SORT_ALPHABETICALLY, + SORT_BY_TYPE, + SORT_BY_AMOUNT, //greatest->least + SORT_BY_INDEX, +}; + #define ITEMMENU_SWAP_LINE_LENGTH 8 // Swap line is 8 sprites long enum { ITEMMENUSPRITE_BAG, @@ -48,7 +58,7 @@ enum { struct BagPosition { - void (*exitCallback)(void); + MainCallback exitCallback; u8 location; u8 pocket; u16 pocketSwitchArrowPos; @@ -60,7 +70,7 @@ extern struct BagPosition gBagPosition; struct BagMenu { - void (*newScreenCallback)(void); + MainCallback newScreenCallback; u8 tilemapBuffer[BG_SCREEN_SIZE]; u8 spriteIds[ITEMMENUSPRITE_COUNT]; u8 windowIds[ITEMWIN_COUNT]; @@ -97,18 +107,19 @@ void CB2_BagMenuFromStartMenu(void); u8 GetItemListPosition(u8 pocketId); bool8 UseRegisteredKeyItemOnField(void); void CB2_GoToSellMenu(void); -void GoToBagMenu(u8 location, u8 pocket, void ( *exitCallback)()); +void GoToBagMenu(u8 location, u8 pocket, MainCallback exitCallback); void DoWallyTutorialBagMenu(void); void ResetBagScrollPositions(void); -void ChooseBerryForMachine(void (*exitCallback)(void)); +void ChooseBerryForMachine(MainCallback exitCallback); void CB2_ChooseBerry(void); void CB2_ChooseMulch(void); void Task_FadeAndCloseBagMenu(u8 taskId); void BagMenu_YesNo(u8 taskId, u8 windowType, const struct YesNoFuncTable *funcTable); -void UpdatePocketItemList(u8 pocketId); -void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void (*callback)(u8 taskId)); +void UpdatePocketItemList(enum Pocket pocketId); +void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, TaskFunc callback); void DisplayItemMessageOnField(u8 taskId, const u8 *string, TaskFunc callback); void CloseItemMessage(u8 taskId); void ItemMenu_RotomCatalog(u8 taskId); +void SortItemsInBag(struct BagPocket *pocket, enum BagSortOptions type); #endif //GUARD_ITEM_MENU_H diff --git a/include/item_use.h b/include/item_use.h index ad8018d67df9..ccb0f4f3df8c 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -49,6 +49,8 @@ void Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker(u8 taskId); void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField); void ItemUseOutOfBattle_PokeFlute(u8 taskId); void ItemUseOutOfBattle_TownMap(u8 taskId); +bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8); +u8 GetDirectionToHiddenItem(s16, s16); enum { BALL_THROW_UNABLE_TWO_MONS, diff --git a/include/landmark.h b/include/landmark.h index 395905033a2a..f5feb407bc02 100644 --- a/include/landmark.h +++ b/include/landmark.h @@ -1,6 +1,6 @@ #ifndef GUARD_LANDMARK_H #define GUARD_LANDMARK_H -const u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count); +const u8 *GetLandmarkName(mapsec_u8_t mapSection, u8 id, u8 count); #endif // GUARD_LANDMARK_H diff --git a/include/line_break.h b/include/line_break.h index af0d27ff2159..12c4603528a8 100644 --- a/include/line_break.h +++ b/include/line_break.h @@ -32,6 +32,9 @@ u32 CountLineBreaks(u8 *src); void BreakStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId, enum ToggleScrollPrompt toggleScrollPrompt); void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId, enum ToggleScrollPrompt toggleScrollPrompt); +void BreakStringNaive(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId, enum ToggleScrollPrompt toggleScrollPrompt); +void BreakSubStringNaive(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId, enum ToggleScrollPrompt toggleScrollPrompt); + bool32 IsWordSplittingChar(const u8 *src, u32 index); u32 GetStringBadness(struct StringLine *stringLines, u32 numLines, u32 maxWidth); void BuildNewString(struct StringLine *stringLines, u32 numLines, u32 maxLines, u8 *str, enum ToggleScrollPrompt toggleScrollPrompt); diff --git a/include/list_menu.h b/include/list_menu.h index 184b9c416f8e..8d472320d67c 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -76,8 +76,9 @@ struct ListMenuTemplate u8 lettersSpacing:3; u8 itemVerticalPadding:3; u8 scrollMultiple:2; // x40, x80 = xC0 - u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F - u8 cursorKind:2; // x40, x80 + u8 fontId:5; // x1, x2, x4, x8, x10 = x1F + u8 cursorKind:2; // x20, x40 + u8 isDynamic:1; //Dynamic list doesn't store all items in memory but load them from ROM when necessary }; struct ListMenu diff --git a/include/mail.h b/include/mail.h index 403078f0975f..de29b21d425c 100644 --- a/include/mail.h +++ b/include/mail.h @@ -1,6 +1,8 @@ #ifndef GUARD_MAIL_H #define GUARD_MAIL_H +#include "main.h" + #define IS_ITEM_MAIL(itemId) ((itemId == ITEM_ORANGE_MAIL \ || itemId == ITEM_HARBOR_MAIL \ || itemId == ITEM_GLITTER_MAIL \ @@ -15,7 +17,7 @@ || itemId == ITEM_RETRO_MAIL)) // mail.h -void ReadMail(struct Mail *mail, void (*exitCallback)(void), bool8 hasText); +void ReadMail(struct Mail *mail, MainCallback exitCallback, bool8 hasText); // mail_data.h void ClearAllMail(void); diff --git a/include/malloc.h b/include/malloc.h index ca4ff8af7e7d..b3f176e33040 100644 --- a/include/malloc.h +++ b/include/malloc.h @@ -41,7 +41,7 @@ struct MemBlock u8 data[0]; }; -#define HEAP_SIZE 0x1C000 +#define HEAP_SIZE 0x1C300 extern u8 gHeap[HEAP_SIZE]; #if TESTING || !defined(NDEBUG) diff --git a/include/match_call.h b/include/match_call.h index ed2cf506c55a..468a977a1377 100644 --- a/include/match_call.h +++ b/include/match_call.h @@ -19,5 +19,6 @@ void BufferPokedexRatingForMatchCall(u8 *destStr); bool32 SelectMatchCallMessage(int trainerId, u8 *str); void LoadMatchCallWindowGfx(u32 windowId, u32 destOffset, u32 paletteId); void DrawMatchCallTextBoxBorder(u32 windowId, u32 tileOffset, u32 paletteId); +void RedrawMatchCallTextBoxBorder(void); #endif //GUARD_MATCH_CALL_H diff --git a/include/math_util.h b/include/math_util.h index 04013fc03f0a..71d79d9ba8f8 100755 --- a/include/math_util.h +++ b/include/math_util.h @@ -10,5 +10,6 @@ s32 MathUtil_Div32(s32 x, s32 y); s16 MathUtil_Inv16(s16 y); s16 MathUtil_Inv16Shift(u8 s, s16 y); s32 MathUtil_Inv32(s32 y); +u32 MathUtil_Exponent(u32 x, u32 y); #endif // GUARD_MATH_UTIL_H diff --git a/include/menu.h b/include/menu.h index ca7f8d008c4c..670255233174 100644 --- a/include/menu.h +++ b/include/menu.h @@ -61,8 +61,6 @@ void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y); void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram); void SetStandardWindowBorderStyle(u8 windowId, bool8 copyToVram); void DisplayYesNoMenuDefaultYes(void); -u32 GetPlayerTextSpeed(void); -u8 GetPlayerTextSpeedDelay(void); void Menu_LoadStdPalAt(u16 offset); void AddTextPrinterWithCallbackForMessage(bool8 canSpeedUp, void (*callback)(struct TextPrinterTemplate *, u16)); void BgDmaFill(u32 bg, u8 value, int offset, int size); @@ -106,7 +104,6 @@ void DrawStdWindowFrame(u8 windowId, bool8 copyToVram); u8 AddStartMenuWindow(u8 numActions); u8 InitMenuNormal(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos); void LoadMessageBoxAndFrameGfx(u8 windowId, bool8 copyToVram); -void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress); void RemoveStartMenuWindow(void); void DisplayYesNoMenuWithDefault(u8 initialCursorPos); void BufferSaveMenuText(u8 textId, u8 *dest, u8 color); @@ -135,5 +132,6 @@ u8 AddSecondaryPopUpWindow(void); u8 GetSecondaryPopUpWindowId(void); void RemoveSecondaryPopUpWindow(void); void HBlankCB_DoublePopupWindow(void); +void RedrawDialogueFrame(void); #endif // GUARD_MENU_H diff --git a/include/metaprogram.h b/include/metaprogram.h index be62b2f9e536..1bf77265ff32 100644 --- a/include/metaprogram.h +++ b/include/metaprogram.h @@ -26,11 +26,18 @@ #define STR(...) STR_(__VA_ARGS__) #define STR_(...) #__VA_ARGS__ -/* You'll never guess what this one does */ +/* You'll never guess what these do */ #define APPEND_SEMICOLON(a) a; +#define APPEND_COMMA(a) a, /* Converts a string to a compound literal, essentially making it a pointer to const u8 */ #define COMPOUND_STRING(str) (const u8[]) _(str) +#define COMPOUND_STRING_SIZE_LIMIT(str, limit) (const u8[COMPOUND_STRING_CHECK_SIZE(str, limit)]) _(str) + +/* Used for COMPOUND_STRING_SIZE_LIMIT. Stupid, but makes sure we only get + * one error message regardless of how many characters over the limit we are. + * Otherwise, GCC gives an error for each and every character (which is annoying). */ +#define COMPOUND_STRING_CHECK_SIZE(str, limit) (sizeof(COMPOUND_STRING(str)) > limit ? sizeof(COMPOUND_STRING(str)) - 1 : sizeof(COMPOUND_STRING(str))) /* Expands to the first/second/third/fourth argument. */ #define FIRST(a, ...) a @@ -44,14 +51,31 @@ #define EXCEPT_3(a, ...) __VA_OPT__(EXCEPT_2(__VA_ARGS__)) #define EXCEPT_4(a, ...) __VA_OPT__(EXCEPT_3(__VA_ARGS__)) -/* 'UNPACK (x, y, z)' expands to 'x, y, z'. +/* 'UNPACK_META (x, y, z)' expands to 'x, y, z'. * Useful for passing arguments which may contain commas into a macro. */ -#define UNPACK(...) __VA_ARGS__ +#define UNPACK_META(...) __VA_ARGS__ + +/* Updated version that can extract arguments from brackets as well. + * Examples: + * + * UNPACK_B(a, b) => a, b + * UNPACK_B((a, b)) => a, b + * UNPACK_B((a)) => a + * + * The simple UNPACK is used for extracting non-bracketed arguments. + * */ +#define UNPACK_EXTRA(...) IF_YOU_SEE_ME_SOMETHING_IS_WRONG, __VA_ARGS__ +#define UNPACK_B(a) INVOKE_WITH_(UNPACK_B_, a, UNPACK_EXTRA a) +#define UNPACK_B_(a, b, ...) __VA_OPT__(UNPACK_META)a /* Expands to 'macro(...args, ...)'. */ -#define INVOKE_WITH(macro, args, ...) INVOKE_WITH_(macro, UNPACK args __VA_OPT__(, __VA_ARGS__)) +#define INVOKE_WITH(macro, args, ...) INVOKE_WITH_(macro, UNPACK_META args __VA_OPT__(, __VA_ARGS__)) #define INVOKE_WITH_(macro, ...) macro(__VA_ARGS__) +/* Same as INVOKE_WITH but uses UNPACK_B to unpack arguments and only applies macro to args if there are any. */ +#define INVOKE_WITH_B(macro, args, ...) INVOKE_B(macro, UNPACK_B(args) __VA_OPT__(, __VA_ARGS__)) +#define INVOKE_B(macro, ...) __VA_OPT__(macro(__VA_ARGS__)) + /* Recursive macros. * Based on https://www.scs.stanford.edu/~dm/blog/va-opt.html * @@ -81,48 +105,72 @@ #define R_FOR_EACH_WITH_(macro, args, a, ...) INVOKE_WITH(macro, args, a) __VA_OPT__(R_FOR_EACH_WITH_P PARENS (macro, args, __VA_ARGS__)) #define R_FOR_EACH_WITH_P() R_FOR_EACH_WITH_ +/* Expands to 'macro(a, b)' for each 'a' in 'as' and 'b' in 'bs'. + * Uses the shorter of 'as' and 'bs'. (Credit to MGriffin) */ +#define R_ZIP(macro, as, bs) CAT(R_ZIP_, CAT(R_ZIP_NONEMPTY(as), R_ZIP_NONEMPTY(bs)))(macro, FIRST as, FIRST bs, (EXCEPT_1 as), (EXCEPT_1 bs)) +#define R_ZIP_00(macro, a, b, as, bs) +#define R_ZIP_01(macro, a, b, as, bs) +#define R_ZIP_10(macro, a, b, as, bs) +#define R_ZIP_11(macro, a, b, as, bs) macro(a, b) R_ZIP_P PARENS (macro, as, bs) +#define R_ZIP_P() R_ZIP + +#define R_ZIP_NONEMPTY(as) R_ZIP_NONEMPTY_ as +#define R_ZIP_NONEMPTY_(...) FIRST(__VA_OPT__(1,) 0) + +/* Just a lot of numbers (with leading zeroes - remove with REMOVE_LEADING_ZEROES) */ +#define NUMBERS_256 (00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255) + /* Picks the xth VA_ARG if it exists, otherwise returns a default value */ #define DEFAULT(_default, ...) FIRST(__VA_OPT__(__VA_ARGS__, ) _default) #define DEFAULT_2(_default, ...) DEFAULT(_default __VA_OPT__(, SECOND(__VA_ARGS__))) #define DEFAULT_3(_default, ...) DEFAULT(_default __VA_OPT__(, THIRD(__VA_ARGS__))) #define DEFAULT_4(_default, ...) DEFAULT(_default __VA_OPT__(, FOURTH(__VA_ARGS__))) +/* Simply a lists numbers 0-31, allows for word-spanning macros */ +#define BITS_32(F, ...) \ + F(0, __VA_ARGS__) \ + F(1, __VA_ARGS__) \ + F(2, __VA_ARGS__) \ + F(3, __VA_ARGS__) \ + F(4, __VA_ARGS__) \ + F(5, __VA_ARGS__) \ + F(6, __VA_ARGS__) \ + F(7, __VA_ARGS__) \ + F(8, __VA_ARGS__) \ + F(9, __VA_ARGS__) \ + F(10, __VA_ARGS__) \ + F(11, __VA_ARGS__) \ + F(12, __VA_ARGS__) \ + F(13, __VA_ARGS__) \ + F(14, __VA_ARGS__) \ + F(15, __VA_ARGS__) \ + F(16, __VA_ARGS__) \ + F(17, __VA_ARGS__) \ + F(18, __VA_ARGS__) \ + F(19, __VA_ARGS__) \ + F(20, __VA_ARGS__) \ + F(21, __VA_ARGS__) \ + F(22, __VA_ARGS__) \ + F(23, __VA_ARGS__) \ + F(24, __VA_ARGS__) \ + F(25, __VA_ARGS__) \ + F(26, __VA_ARGS__) \ + F(27, __VA_ARGS__) \ + F(28, __VA_ARGS__) \ + F(29, __VA_ARGS__) \ + F(30, __VA_ARGS__) \ + F(31, __VA_ARGS__) + +/* Compares _n to 1 shifted by _b by _operation (==, <, > etc) */ +#define OP_BIT_SHIFT(_b, _n, _operation) (_n) _operation (1 << _b) ? _b : + /* (Credit to MGriffin) A rather monstrous way of finding the set bit in a word. Invalid input causes a compiler error. Sample: https://cexplore.karathan.at/z/x1hm7B */ -#define BIT_INDEX(n) \ - (n) == (1 << 0) ? 0 : \ - (n) == (1 << 1) ? 1 : \ - (n) == (1 << 2) ? 2 : \ - (n) == (1 << 3) ? 3 : \ - (n) == (1 << 4) ? 4 : \ - (n) == (1 << 5) ? 5 : \ - (n) == (1 << 6) ? 6 : \ - (n) == (1 << 7) ? 7 : \ - (n) == (1 << 8) ? 8 : \ - (n) == (1 << 9) ? 9 : \ - (n) == (1 << 10) ? 10 : \ - (n) == (1 << 11) ? 11 : \ - (n) == (1 << 12) ? 12 : \ - (n) == (1 << 13) ? 13 : \ - (n) == (1 << 14) ? 14 : \ - (n) == (1 << 15) ? 15 : \ - (n) == (1 << 16) ? 16 : \ - (n) == (1 << 17) ? 17 : \ - (n) == (1 << 18) ? 18 : \ - (n) == (1 << 19) ? 19 : \ - (n) == (1 << 20) ? 20 : \ - (n) == (1 << 21) ? 21 : \ - (n) == (1 << 22) ? 22 : \ - (n) == (1 << 23) ? 23 : \ - (n) == (1 << 24) ? 24 : \ - (n) == (1 << 25) ? 25 : \ - (n) == (1 << 26) ? 26 : \ - (n) == (1 << 27) ? 27 : \ - (n) == (1 << 28) ? 28 : \ - (n) == (1 << 29) ? 29 : \ - (n) == (1 << 30) ? 30 : \ - (n) == (1 << 31) ? 31 : \ - *(u32 *)NULL +#define BIT_INDEX(_n) BITS_32(OP_BIT_SHIFT, _n, ==) *(u32 *)NULL + +/* (Credit to MGriffin) A way to find the minimum required number of bits to +store a number (max: 32). Sample: https://godbolt.org/z/xb4KdPMhT */ +#define BIT_SIZE(_n) (BITS_32(OP_BIT_SHIFT, _n, <) 32) #define COMPRESS_BITS_0 0, 1 #define COMPRESS_BITS_1 1, 1 @@ -134,13 +182,29 @@ Invalid input causes a compiler error. Sample: https://cexplore.karathan.at/z/x1 #define COMPRESS_BITS_7 7, 1 /* Will try and compress a set bit (or up to three sequential bits) into a single byte -Input must be of the form (upper << lower) where upper can be up to 3, lower up to 31 */ +Input must be of the form (upper << lower) where upper can be up to 7, lower up to 31 */ #define COMPRESS_BITS(_val) COMPRESS_BITS_STEP_2 _val -#define COMPRESS_BITS_STEP_2(_unpacked) COMPRESS_BITS_STEP_3(COMPRESS_BITS_## _unpacked) -#define COMPRESS_BITS_STEP_3(...) COMPRESS_BITS_STEP_4(__VA_ARGS__) -#define COMPRESS_BITS_STEP_4(upper, lower) (((upper % 8) << 5) + (BIT_INDEX(lower))) +#define COMPRESS_BITS_STEP_2(_unpacked) INVOKE_WITH_(COMPRESS_BITS_STEP_3, COMPRESS_BITS_## _unpacked) +#define COMPRESS_BITS_STEP_3(upper, lower) (((upper % 8) << 5) + (BIT_INDEX(lower))) /* Will read a compressed bit stored by COMPRESS_BIT into a single byte */ #define UNCOMPRESS_BITS(compressed) ((compressed >> 5) << (compressed & 0x1F)) +/* Bit maxima */ +#define MAX_u8 0xFF +#define MAX_u16 0xFFFF +#define MAX_u32 0xFFFFFFFF + +/* Finds the maximum value of the given number of bits (up to 32 - obviously)*/ +#define MAX_BITS(_bit) (MAX_u32 >> (32 - _bit)) + +/* Finds the required digits to display the number (maximum 4) */ +#define MAX_DIGITS(_num) 1 + !!(_num / 10) + !!(_num / 100) + !!(_num / 1000) + +/* Converts a number with leading zeroes to a normal int (base 10 and up to three digits only!) */ +#define REMOVE_LEADING_ZEROES(_num) (((0x##_num / 256) * 100) + ((0x##_num / 16) * 10) + (0x##_num % 16)) + +/* Useful for counting arguments */ +#define PLUS_ONE(...) + 1 + #endif diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index ecdc696d41d9..5e268d726253 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -164,5 +164,6 @@ bool8 MetatileBehavior_IsSidewaysStairsRightSideBottom(u8 metatileBehavior); bool8 MetatileBehavior_IsSidewaysStairsLeftSideBottom(u8 metatileBehavior); bool8 MetatileBehavior_IsSidewaysStairsRightSideAny(u8 metatileBehavior); bool8 MetatileBehavior_IsSidewaysStairsLeftSideAny(u8 metatileBehavior); +bool8 MetatileBehavior_IsRockClimbable(u8 metatileBehavior); #endif // GUARD_METATILE_BEHAVIOR_H diff --git a/include/move.h b/include/move.h index 16ede9d80994..fe2587a22574 100644 --- a/include/move.h +++ b/include/move.h @@ -4,6 +4,7 @@ #include "contest_effect.h" #include "constants/battle.h" #include "constants/battle_move_effects.h" +#include "constants/battle_string_ids.h" #include "constants/moves.h" // For defining EFFECT_HIT etc. with battle TV scores and flags etc. @@ -21,21 +22,17 @@ struct __attribute__((packed, aligned(2))) BattleMoveEffect #define EFFECTS_ARR(...) (const struct AdditionalEffect[]) {__VA_ARGS__} #define ADDITIONAL_EFFECTS(...) EFFECTS_ARR( __VA_ARGS__ ), .numAdditionalEffects = ARRAY_COUNT(EFFECTS_ARR( __VA_ARGS__ )) -enum SheerForceBoost -{ - SHEER_FORCE_AUTO_BOOST, // This is the default state when a move has a move effect with a chance - SHEER_FORCE_BOOST, // If a move effect doesn't have an effect with a chance this can force a boost - SHEER_FORCE_NO_BOOST, // Prevents a Sheer Force boost -}; - struct AdditionalEffect { - u16 moveEffect; + enum MoveEffect moveEffect; u8 self:1; u8 onlyIfTargetRaisedStats:1; u8 onChargeTurnOnly:1; - u8 sheerForceBoost:2; // Handles edge cases for Sheer Force - u8 padding:3; + u8 sheerForceOverride:1; // Handles edge cases for Sheer Force - if TRUE, boosts when it shouldn't, or doesn't boost when it should + u8 padding:4; + union PACKED { + enum WrappedStringID wrapped; + } multistring; u8 chance; // 0% = effect certain, primary effect }; @@ -67,9 +64,9 @@ struct MoveInfo { const u8 *name; const u8 *description; - u16 effect; - u16 type:5; // Up to 32 - u16 category:2; + enum BattleMoveEffects effect; + enum Type type:5; // Up to 32 + enum DamageCategory category:2; u16 power:9; // up to 511 // end of word u16 accuracy:7; @@ -84,7 +81,7 @@ struct MoveInfo u32 strikeCount:4; // Max 15 hits. Defaults to 1 if not set. May apply its effect on each hit. u32 criticalHitStage:2; bool32 alwaysCriticalHit:1; - u32 numAdditionalEffects:2; // limited to 3 - don't want to get too crazy + u32 numAdditionalEffects:3; // limited to 7 // Flags bool32 makesContact:1; bool32 ignoresProtect:1; @@ -104,8 +101,8 @@ struct MoveInfo bool32 minimizeDoubleDamage:1; bool32 ignoresTargetAbility:1; bool32 ignoresTargetDefenseEvasionStages:1; - bool32 damagesUnderground:1; // end of word + bool32 damagesUnderground:1; bool32 damagesUnderwater:1; bool32 damagesAirborne:1; bool32 damagesAirborneDoubleDamage:1; @@ -131,9 +128,10 @@ struct MoveInfo bool32 parentalBondBanned:1; bool32 skyBattleBanned:1; bool32 sketchBanned:1; + bool32 dampBanned:1; //Other bool32 validApprenticeMove:1; - u32 padding:7; + u32 padding:5; // end of word union { @@ -147,9 +145,11 @@ struct MoveInfo u32 holdEffect; u32 type; u32 fixedDamage; + u32 damagePercentage; u32 absorbPercentage; u32 recoilPercentage; u32 nonVolatileStatus; + u32 overwriteAbility; } argument; // primary/secondary effects @@ -193,12 +193,12 @@ static inline const u8 *GetMoveDescription(u32 moveId) return gMovesInfo[moveId].description; } -static inline u32 GetMoveType(u32 moveId) +static inline enum Type GetMoveType(u32 moveId) { return gMovesInfo[SanitizeMoveId(moveId)].type; } -static inline u32 GetMoveCategory(u32 moveId) +static inline enum DamageCategory GetMoveCategory(u32 moveId) { return gMovesInfo[SanitizeMoveId(moveId)].category; } @@ -473,6 +473,11 @@ static inline bool32 IsMoveSketchBanned(u32 moveId) return gMovesInfo[SanitizeMoveId(moveId)].sketchBanned; } +static inline bool32 IsMoveDampBanned(u32 moveId) +{ + return gMovesInfo[SanitizeMoveId(moveId)].dampBanned; +} + static inline bool32 IsValidApprenticeMove(u32 moveId) { return gMovesInfo[SanitizeMoveId(moveId)].validApprenticeMove; @@ -485,7 +490,7 @@ static inline u32 GetMoveTwoTurnAttackStringId(u32 moveId) static inline u32 GetMoveTwoTurnAttackStatus(u32 moveId) { - return UNCOMPRESS_BITS(gMovesInfo[SanitizeMoveId(moveId)].argument.twoTurnAttack.status); + return gMovesInfo[SanitizeMoveId(moveId)].argument.twoTurnAttack.status; } static inline u32 GetMoveTwoTurnAttackWeather(u32 moveId) @@ -493,11 +498,16 @@ static inline u32 GetMoveTwoTurnAttackWeather(u32 moveId) return gMovesInfo[SanitizeMoveId(moveId)].argument.twoTurnAttack.status; } -static inline u32 GetMoveProtectMethod(u32 moveId) +static inline enum ProtectMethod GetMoveProtectMethod(u32 moveId) { return gMovesInfo[SanitizeMoveId(moveId)].argument.protectMethod; } +static inline u32 GetMoveTerrainFlag(u32 moveId) +{ + return gMovesInfo[SanitizeMoveId(moveId)].argument.moveProperty; +} + static inline u32 GetMoveEffectArg_Status(u32 moveId) { return gMovesInfo[SanitizeMoveId(moveId)].argument.status; @@ -518,7 +528,7 @@ static inline u32 GetMoveArgType(u32 moveId) return gMovesInfo[SanitizeMoveId(moveId)].argument.type; } -static inline u32 GetMoveFixedDamage(u32 moveId) +static inline u32 GetMoveFixedHPDamage(u32 moveId) { return gMovesInfo[SanitizeMoveId(moveId)].argument.fixedDamage; } @@ -550,6 +560,16 @@ static inline u32 GetMoveNonVolatileStatus(u32 move) } } +static inline u32 GetMoveDamagePercentage(u32 move) +{ + return gMovesInfo[SanitizeMoveId(move)].argument.damagePercentage; +} + +static inline u32 GetMoveOverwriteAbility(u32 move) +{ + return gMovesInfo[SanitizeMoveId(move)].argument.overwriteAbility; +} + static inline const struct AdditionalEffect *GetMoveAdditionalEffectById(u32 moveId, u32 effect) { return &gMovesInfo[SanitizeMoveId(moveId)].additionalEffects[effect]; diff --git a/include/move_relearner.h b/include/move_relearner.h index 9aab3974df4e..1d22d82a79ed 100644 --- a/include/move_relearner.h +++ b/include/move_relearner.h @@ -1,11 +1,14 @@ #ifndef GUARD_MOVE_RELEARNER_H #define GUARD_MOVE_RELEARNER_H +#include "constants/move_relearner.h" + void TeachMoveRelearnerMove(void); void MoveRelearnerShowHideHearts(s32 move); void MoveRelearnerShowHideCategoryIcon(s32); void CB2_InitLearnMove(void); -extern u8 gOriginSummaryScreenPage; +extern enum MoveRelearnerStates gMoveRelearnerState; +extern enum RelearnMode gRelearnMode; #endif //GUARD_MOVE_RELEARNER_H diff --git a/include/oras_dowse.h b/include/oras_dowse.h new file mode 100644 index 000000000000..8b490cf6c754 --- /dev/null +++ b/include/oras_dowse.h @@ -0,0 +1,39 @@ +#ifndef GUARD_ORAS_DOWSE_H +#define GUARD_ORAS_DOWSE_H + +// States for ORAS Dowsing +enum +{ + ORASD_WIGGLE_NONE, + ORASD_WIGGLE_SLOW, + ORASD_WIGGLE_NORMAL, + ORASD_WIGGLE_FAST, + ORASD_WIGGLE_FASTER +}; + +#define ANIM_ORAS_DOWSE_WIGGLE_SOUTH_SLOW (ANIM_STD_FACE_EAST + 1) +#define ANIM_ORAS_DOWSE_WIGGLE_NORTH_SLOW (ANIM_STD_FACE_EAST + 2) +#define ANIM_ORAS_DOWSE_WIGGLE_WEST_SLOW (ANIM_STD_FACE_EAST + 3) +#define ANIM_ORAS_DOWSE_WIGGLE_EAST_SLOW (ANIM_STD_FACE_EAST + 4) +#define ANIM_ORAS_DOWSE_WIGGLE_SOUTH (ANIM_STD_FACE_EAST + 5) +#define ANIM_ORAS_DOWSE_WIGGLE_NORTH (ANIM_STD_FACE_EAST + 6) +#define ANIM_ORAS_DOWSE_WIGGLE_WEST (ANIM_STD_FACE_EAST + 7) +#define ANIM_ORAS_DOWSE_WIGGLE_EAST (ANIM_STD_FACE_EAST + 8) +#define ANIM_ORAS_DOWSE_WIGGLE_SOUTH_FAST (ANIM_STD_FACE_EAST + 9) +#define ANIM_ORAS_DOWSE_WIGGLE_NORTH_FAST (ANIM_STD_FACE_EAST + 10) +#define ANIM_ORAS_DOWSE_WIGGLE_WEST_FAST (ANIM_STD_FACE_EAST + 11) +#define ANIM_ORAS_DOWSE_WIGGLE_EAST_FAST (ANIM_STD_FACE_EAST + 12) +#define ANIM_ORAS_DOWSE_WIGGLE_SOUTH_FASTER (ANIM_STD_FACE_EAST + 13) +#define ANIM_ORAS_DOWSE_WIGGLE_NORTH_FASTER (ANIM_STD_FACE_EAST + 14) +#define ANIM_ORAS_DOWSE_WIGGLE_WEST_FASTER (ANIM_STD_FACE_EAST + 15) +#define ANIM_ORAS_DOWSE_WIGGLE_EAST_FASTER (ANIM_STD_FACE_EAST + 16) + +extern const u16 gFieldEffectPal_ORASDowsing[]; + +void Task_UseORASDowsingMachine(u8 taskId); +void ResumeORASDowseFieldEffect(void); +void UpdateDowseState(struct Sprite *sprite); +void UpdateDowsingAnimDirection(struct Sprite *sprite, struct ObjectEvent *playerObj); +void EndORASDowsing(void); + +#endif // GUARD_ORAS_DOWSE_H diff --git a/include/overworld.h b/include/overworld.h index 09992cf48266..e0df9c3b899e 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -1,6 +1,8 @@ #ifndef GUARD_OVERWORLD_H #define GUARD_OVERWORLD_H +#include "constants/map_types.h" + #define LINK_KEY_CODE_NULL 0x00 #define LINK_KEY_CODE_EMPTY 0x11 #define LINK_KEY_CODE_DPAD_DOWN 0x12 @@ -126,22 +128,22 @@ void TryFadeOutOldMapMusic(void); bool8 BGMusicStopped(void); void Overworld_FadeOutMapMusic(void); void UpdateAmbientCry(s16 *state, u16 *delayCounter); -u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum); -u8 GetMapTypeByWarpData(struct WarpData *warp); -u8 GetCurrentMapType(void); -u8 GetLastUsedWarpMapType(void); -bool8 IsMapTypeOutdoors(u8 mapType); -bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType); -bool8 IsMapTypeIndoors(u8 mapType); -u8 GetSavedWarpRegionMapSectionId(void); -u8 GetCurrentRegionMapSectionId(void); -u8 GetCurrentMapBattleScene(void); +enum MapType GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum); +enum MapType GetMapTypeByWarpData(struct WarpData *warp); +enum MapType GetCurrentMapType(void); +enum MapType GetLastUsedWarpMapType(void); +bool8 IsMapTypeOutdoors(enum MapType mapType); +bool8 Overworld_MapTypeAllowsTeleportAndFly(enum MapType mapType); +bool8 IsMapTypeIndoors(enum MapType mapType); +mapsec_u8_t GetSavedWarpRegionMapSectionId(void); +mapsec_u8_t GetCurrentRegionMapSectionId(void); +enum MapBattleScene GetCurrentMapBattleScene(void); void CleanupOverworldWindowsAndTilemaps(void); bool32 IsOverworldLinkActive(void); void CB1_Overworld(void); void CB2_OverworldBasic(void); void UpdateTimeOfDay(void); -bool32 MapHasNaturalLight(u8 mapType); +bool32 MapHasNaturalLight(enum MapType mapType); bool32 CurrentMapHasShadows(void); void UpdateAltBgPalettes(u16 palettes); void UpdatePalettesWithTime(u32); diff --git a/include/party_menu.h b/include/party_menu.h index 7c4af8c3a49f..acae4e0c0b73 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -16,10 +16,12 @@ struct PartyMenu s8 slotId2; u8 action; u16 bagItem; - s16 data1; // used variously as a move, counter, moveSlotId, or cursorPos + s16 data1; // used variously as a move, counter, moveSlotId, cursorPos, or indicator that the menu is opened from the field s16 learnMoveState; // data2, used only as a learn move state }; +#define DATA1_PARTY_MENU_FROM_FIELD -1 + extern struct PartyMenu gPartyMenu; extern bool8 gPartyMenuUseExitCallback; extern u8 gSelectedMonPartyId; @@ -94,6 +96,7 @@ u8 GetPartyIdFromBattlePartyId(u8 battlePartyId); void ShowPartyMenuToShowcaseMultiBattleParty(void); void ChooseMonForDaycare(void); bool8 CB2_FadeFromPartyMenu(void); +void CB2_ReturnToPartyMenuFromSummaryScreen(void); void ChooseContestMon(void); void ChoosePartyMon(void); void ChooseMonForMoveRelearner(void); @@ -106,4 +109,10 @@ void BufferMoveDeleterNicknameAndMove(void); void GetNumMovesSelectedMonHas(void); void MoveDeleterChooseMoveToForget(void); +bool32 SetUpFieldMove_Surf(void); +bool32 SetUpFieldMove_Fly(void); +bool32 SetUpFieldMove_Waterfall(void); +bool32 SetUpFieldMove_Dive(void); +bool32 SetUpFieldMove_RockClimb(void); + #endif // GUARD_PARTY_MENU_H diff --git a/include/pokeball.h b/include/pokeball.h index 530e168f939d..51949206e275 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -45,6 +45,7 @@ enum { extern const struct CompressedSpriteSheet gBallSpriteSheets[]; extern const struct SpritePalette gBallSpritePalettes[]; extern const struct SpriteTemplate gBallSpriteTemplates[]; +extern const u16 gBallItemIds[]; #define POKEBALL_PLAYER_SENDOUT 0xFF #define POKEBALL_OPPONENT_SENDOUT 0xFE diff --git a/include/pokedex.h b/include/pokedex.h index aa88834e678f..c558cd1b0705 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -8,9 +8,10 @@ void ResetPokedex(void); u16 GetNationalPokedexCount(u8 caseID); u16 GetHoennPokedexCount(u8 caseID); u8 DisplayCaughtMonDexPage(u16 species, bool32 isShiny, u32 personality); -s8 GetSetPokedexFlag(u16 nationalDexNo, u8 caseID); +u32 Pokedex_CreateCaughtMonSprite(u32 species, s32 x, s32 y); +s8 GetSetPokedexFlag(enum NationalDexOrder nationalDexNo, u8 caseID); void DrawFootprint(u8 windowId, u16 species); -u16 CreateMonSpriteFromNationalDexNumber(u16 nationalNum, s16 x, s16 y, u16 paletteSlot); +u16 CreateMonSpriteFromNationalDexNumber(enum NationalDexOrder nationalNum, s16 x, s16 y, u16 paletteSlot); bool16 HasAllHoennMons(void); void ResetPokedexScrollPositions(void); bool16 HasAllMons(void); diff --git a/include/pokemon.h b/include/pokemon.h index edc37a1a0bc4..9ca274330085 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -1,20 +1,27 @@ #ifndef GUARD_POKEMON_H #define GUARD_POKEMON_H +#include "contest_effect.h" #include "sprite.h" +#include "constants/battle.h" +#include "constants/cries.h" #include "constants/form_change_types.h" +#include "constants/hold_effects.h" #include "constants/items.h" +#include "constants/map_groups.h" #include "constants/regions.h" #include "constants/region_map_sections.h" #include "constants/map_groups.h" #include "constants/battle.h" +#include "constants/abilities.h" #include "contest_effect.h" +#include "constants/trainers.h" #define GET_BASE_SPECIES_ID(speciesId) (GetFormSpeciesId(speciesId, 0)) #define FORM_SPECIES_END (0xffff) // Property labels for Get(Box)MonData / Set(Box)MonData -enum { +enum MonData { MON_DATA_PERSONALITY, MON_DATA_STATUS, MON_DATA_OT_ID, @@ -124,7 +131,7 @@ enum { struct PokemonSubstruct0 { u16 species:11; // 2047 species. - u16 teraType:5; // 30 types. + enum Type teraType:5; // 30 types. u16 heldItem:10; // 1023 items. u16 unused_02:6; u32 experience:21; @@ -230,6 +237,14 @@ struct PokemonSubstruct3 max(sizeof(struct PokemonSubstruct2), \ sizeof(struct PokemonSubstruct3))))) +enum SubstructType +{ + SUBSTRUCT_TYPE_0, + SUBSTRUCT_TYPE_1, + SUBSTRUCT_TYPE_2, + SUBSTRUCT_TYPE_3, +}; + union PokemonSubstruct { struct PokemonSubstruct0 type0; @@ -308,6 +323,39 @@ enum { MON_SPR_GFX_MANAGERS_COUNT }; +#define UNPACK_VOLATILE_STRUCT(_enum, _fieldName, _typeMaxValue, ...) INVOKE_WITH_(UNPACK_VOLATILE_STRUCT_, _fieldName, UNPACK_B(_typeMaxValue)); +#define UNPACK_VOLATILE_STRUCT_(_fieldName, _type, ...) _type FIRST(__VA_OPT__(_fieldName:BIT_SIZE(FIRST(__VA_ARGS__)),) _fieldName) + +struct Volatiles +{ + VOLATILE_DEFINITIONS(UNPACK_VOLATILE_STRUCT) + // Expands to: + // u32 confusionTurns:3; + // u32 flinched:1; + // u32 uproarTurns:3; + // u32 torment:1; + // u32 bideTurns:2; + // u32 lockConfusionTurns:2; + // u32 multipleTurns:1; + // u32 wrapped:1; + // u32 powder:1; + // u32 padding:1; + // u32 infatuation:4; // one bit for each battler + // u32 defenseCurl:1; + // u32 transformed:1; + // u32 recharge:1; + // u32 rage:1; + // u32 substitute:1; + // u32 destinyBond:1; + // u32 escapePrevention:1; + // u32 nightmare:1; + // u32 cursed:1; + // u32 foresight:1; + // u32 dragonCheer:1; + // u32 focusEnergy:1; + // u32 bonusCritStages:3; +}; + struct BattlePokemon { /*0x00*/ u16 species; @@ -325,8 +373,8 @@ struct BattlePokemon /*0x17*/ u32 spDefenseIV:5; /*0x17*/ u32 abilityNum:2; /*0x18*/ s8 statStages[NUM_BATTLE_STATS]; - /*0x20*/ u16 ability; - /*0x22*/ u8 types[3]; + /*0x20*/ enum Ability ability; + /*0x22*/ enum Type types[3]; /*0x25*/ u8 pp[MAX_MON_MOVES]; /*0x29*/ u16 hp; /*0x2B*/ u8 level; @@ -339,10 +387,10 @@ struct BattlePokemon /*0x45*/ u32 experience; /*0x49*/ u32 personality; /*0x4D*/ u32 status1; - /*0x51*/ u32 status2; - /*0x55*/ u32 otId; - /*0x59*/ u8 metLevel; - /*0x5A*/ bool8 isShiny; + /*0x51*/ struct Volatiles volatiles; + /*0x5D*/ u32 otId; + /*0x61*/ u8 metLevel; + /*0x62*/ bool8 isShiny; }; struct EvolutionParam @@ -369,7 +417,7 @@ struct SpeciesInfo /*0xC4*/ u8 baseSpeed; u8 baseSpAttack; u8 baseSpDefense; - u8 types[2]; + enum Type types[2]; u8 catchRate; u8 forceTeraType; u16 expYield; // expYield was changed from u8 to u16 for the new Exp System. @@ -387,14 +435,14 @@ struct SpeciesInfo /*0xC4*/ u8 friendship; u8 growthRate; u8 eggGroups[2]; - u16 abilities[NUM_ABILITY_SLOTS]; // 3 abilities, no longer u8 because we have over 255 abilities now. + enum Ability abilities[NUM_ABILITY_SLOTS]; // 3 abilities, no longer u8 because we have over 255 abilities now. u8 safariZoneFleeRate; // PokΓ©dex data u8 categoryName[13]; u8 speciesName[POKEMON_NAME_LENGTH + 1]; - u16 cryId; - u16 natDexNum; + enum PokemonCry cryId:16; + enum NationalDexOrder natDexNum:16; u16 height; //in decimeters u16 weight; //in hectograms u16 pokemonScale; @@ -402,7 +450,7 @@ struct SpeciesInfo /*0xC4*/ u16 trainerScale; u16 trainerOffset; const u8 *description; - u8 bodyColor:7; + enum BodyColor bodyColor:7; // Graphical Data u8 noFlip:1; u8 frontAnimDelay; @@ -491,7 +539,7 @@ struct SpeciesInfo /*0xC4*/ #endif //OW_POKEMON_OBJECT_EVENTS }; -struct Ability +struct AbilityInfo { u8 name[ABILITY_NAME_LENGTH + 1]; const u8 *description; @@ -555,8 +603,8 @@ enum { struct NatureInfo { const u8 *name; - u8 statUp; - u8 statDown; + enum Stat statUp; + enum Stat statDown; u8 backAnim; u8 pokeBlockAnim[2]; u8 battlePalacePercents[4]; @@ -589,6 +637,13 @@ struct FormChange u16 param3; }; +enum FusionExtraMoveHandling +{ + FORGET_EXTRA_MOVES, + SWAP_EXTRA_MOVES_KYUREM_WHITE, + SWAP_EXTRA_MOVES_KYUREM_BLACK +}; + struct Fusion { u16 fusionStorageIndex; @@ -597,11 +652,22 @@ struct Fusion u16 targetSpecies2; u16 fusingIntoMon; u16 fusionMove; - u16 unfuseForgetMove; + enum FusionExtraMoveHandling extraMoveHandling; }; extern const struct Fusion *const gFusionTablePointers[NUM_SPECIES]; +#if P_FUSION_FORMS +#if P_FAMILY_KYUREM +#if P_FAMILY_RESHIRAM +extern const u16 gKyuremWhiteSwapMoveTable[][2]; +#endif //P_FAMILY_RESHIRAM +#if P_FAMILY_ZEKROM +extern const u16 gKyuremBlackSwapMoveTable[][2]; +#endif //P_FAMILY_ZEKROM +#endif //P_FAMILY_KYUREM +#endif //P_FUSION_FORMS + #define NUM_UNOWN_FORMS 28 #define GET_UNOWN_LETTER(personality) (( \ @@ -624,7 +690,7 @@ extern u32 removeBagItem; extern u32 removeBagItemCount; extern const u16 gFacilityClassToPicIndex[]; -extern const u16 gFacilityClassToTrainerClass[]; +extern const enum TrainerClassID gFacilityClassToTrainerClass[]; extern const struct SpeciesInfo gSpeciesInfo[]; extern const u32 gExperienceTables[][MAX_LEVEL + 1]; extern const u8 gPPUpGetMask[]; @@ -634,7 +700,7 @@ extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2]; extern const u16 gUnionRoomFacilityClasses[]; extern const struct SpriteTemplate gBattlerSpriteTemplates[]; extern const u32 sExpCandyExperienceTable[]; -extern const struct Ability gAbilitiesInfo[]; +extern const struct AbilityInfo gAbilitiesInfo[]; extern const struct NatureInfo gNaturesInfo[]; #if P_TUTOR_MOVES_ARRAY extern const u16 gTutorMoves[]; @@ -657,9 +723,8 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); -bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battler); u16 GetUnionRoomTrainerPic(void); -u16 GetUnionRoomTrainerClass(void); +enum TrainerClassID GetUnionRoomTrainerClass(void); void CreateEnemyEventMon(void); void CalculateMonStats(struct Pokemon *mon); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); @@ -709,18 +774,27 @@ u8 CalculateEnemyPartyCount(void); u8 CalculateEnemyPartyCountInSide(u32 battler); u8 GetMonsStateToDoubles(void); u8 GetMonsStateToDoubles_2(void); -u16 GetAbilityBySpecies(u16 species, u8 abilityNum); -u16 GetMonAbility(struct Pokemon *mon); +enum Ability GetAbilityBySpecies(u16 species, u8 abilityNum); +enum Ability GetMonAbility(struct Pokemon *mon); void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord); u8 GetSecretBaseTrainerPicIndex(void); -u8 GetSecretBaseTrainerClass(void); +enum TrainerClassID GetSecretBaseTrainerClass(void); bool8 IsPlayerPartyAndPokemonStorageFull(void); bool8 IsPokemonStorageFull(void); const u8 *GetSpeciesName(u16 species); const u8 *GetSpeciesCategory(u16 species); const u8 *GetSpeciesPokedexDescription(u16 species); -u16 GetSpeciesHeight(u16 species); -u16 GetSpeciesWeight(u16 species); +u32 GetSpeciesHeight(u16 species); +u32 GetSpeciesWeight(u16 species); +enum Type GetSpeciesType(u16 species, u8 slot); +enum Ability GetSpeciesAbility(u16 species, u8 slot); +u32 GetSpeciesBaseHP(u16 species); +u32 GetSpeciesBaseAttack(u16 species); +u32 GetSpeciesBaseDefense(u16 species); +u32 GetSpeciesBaseSpAttack(u16 species); +u32 GetSpeciesBaseSpDefense(u16 species); +u32 GetSpeciesBaseSpeed(u16 species); +u32 GetSpeciesBaseStat(u16 species, u32 statIndex); const struct LevelUpMove *GetSpeciesLevelUpLearnset(u16 species); const u16 *GetSpeciesTeachableLearnset(u16 species); const u16 *GetSpeciesEggMoves(u16 species); @@ -743,19 +817,20 @@ u32 GetGMaxTargetSpecies(u32 species); bool32 DoesMonMeetAdditionalConditions(struct Pokemon *mon, const struct EvolutionParam *params, struct Pokemon *tradePartner, u32 partyId, bool32 *canStopEvo, enum EvoState evoState); u32 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner, bool32 *canStopEvo, enum EvoState evoState); bool8 IsMonPastEvolutionLevel(struct Pokemon *mon); -u16 NationalPokedexNumToSpecies(u16 nationalNum); -u16 NationalToHoennOrder(u16 nationalNum); -u16 SpeciesToNationalPokedexNum(u16 species); -u16 SpeciesToHoennPokedexNum(u16 species); -u16 HoennToNationalOrder(u16 hoennNum); +u16 NationalPokedexNumToSpecies(enum NationalDexOrder nationalNum); +enum HoennDexOrder NationalToHoennOrder(enum NationalDexOrder nationalNum); +enum NationalDexOrder SpeciesToNationalPokedexNum(u16 species); +enum HoennDexOrder SpeciesToHoennPokedexNum(u16 species); +enum NationalDexOrder HoennToNationalOrder(enum HoennDexOrder hoennNum); void DrawSpindaSpots(u32 personality, u8 *dest, bool32 isSecondFrame); void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); u8 GetPlayerFlankId(void); u16 GetLinkTrainerFlankId(u8 linkPlayerId); s32 GetBattlerMultiplayerId(u16 id); u8 GetTrainerEncounterMusicId(u16 trainerOpponentId); -u16 ModifyStatByNature(u8 nature, u16 stat, u8 statIndex); +u16 ModifyStatByNature(u8 nature, u16 stat, enum Stat statIndex); void AdjustFriendship(struct Pokemon *mon, u8 event); +u8 CalculateFriendshipBonuses(struct Pokemon *mon, u32 modifier, enum HoldEffect itemHoldEffect); void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies); u16 GetMonEVCount(struct Pokemon *mon); void RandomlyGivePartyPokerus(struct Pokemon *party); @@ -765,9 +840,15 @@ void UpdatePartyPokerusTime(u16 days); void PartySpreadPokerus(struct Pokemon *party); bool8 TryIncrementMonLevel(struct Pokemon *mon); u8 CanLearnTeachableMove(u16 species, u16 move); -u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves); +u32 GetRelearnerLevelUpMoves(struct Pokemon *mon, u16 *moves); +u32 GetRelearnerEggMoves(struct Pokemon *mon, u16 *moves); +u32 GetRelearnerTMMoves(struct Pokemon *mon, u16 *moves); +u32 GetRelearnerTutorMoves(struct Pokemon *mon, u16 *moves); +bool32 HasRelearnerLevelUpMoves(struct Pokemon *mon); +bool32 HasRelearnerEggMoves(struct Pokemon *mon); +bool32 HasRelearnerTMMoves(struct Pokemon *mon); +bool32 HasRelearnerTutorMoves(struct Pokemon *mon); u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves); -u8 GetNumberOfRelearnableMoves(struct Pokemon *mon); u16 SpeciesToPokedexNum(u16 species); bool32 IsSpeciesInHoennDex(u16 species); u16 GetBattleBGM(void); @@ -777,7 +858,8 @@ void CreateTask_PlayMapChosenOrBattleBGM(u16 songId); const u16 *GetMonFrontSpritePal(struct Pokemon *mon); const u16 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, bool32 isShiny, u32 personality); const u16 *GetMonSpritePalFromSpecies(u16 species, bool32 isShiny, bool32 isFemale); -bool8 IsMoveHM(u16 move); +bool32 IsMoveHM(u16 move); +bool32 CannotForgetMove(u16 move); bool8 IsMonSpriteNotFlipped(u16 species); s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor); s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor); @@ -797,7 +879,8 @@ void BattleAnimateBackSprite(struct Sprite *sprite, u16 species); u8 GetOpposingLinkMultiBattlerId(bool8 rightSide, u8 multiplayerId); u16 FacilityClassToPicIndex(u16 facilityClass); u16 PlayerGenderToFrontTrainerPicId(u8 playerGender); -void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality); +void HandleSetPokedexFlag(enum NationalDexOrder nationalNum, u8 caseId, u32 personality); +void HandleSetPokedexFlagFromMon(struct Pokemon *mon, u32 caseId); bool8 HasTwoFramesAnimation(u16 species); struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode); void DestroyMonSpritesGfxManager(u8 managerId); @@ -811,7 +894,7 @@ u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove); void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv); void TrySpecialOverworldEvo(void); bool32 SpeciesHasGenderDifferences(u16 species); -bool32 TryFormChange(u32 monId, u32 side, enum FormChanges method); +bool32 TryFormChange(u32 monId, enum BattleSide side, enum FormChanges method); void TryToSetBattleFormChangeMoves(struct Pokemon *mon, enum FormChanges method); u32 GetMonFriendshipScore(struct Pokemon *pokemon); u32 GetMonAffectionHearts(struct Pokemon *pokemon); @@ -819,16 +902,21 @@ void UpdateMonPersonality(struct BoxPokemon *boxMon, u32 personality); u8 CalculatePartyCount(struct Pokemon *party); u16 SanitizeSpeciesId(u16 species); bool32 IsSpeciesEnabled(u16 species); -u16 GetCryIdBySpecies(u16 species); +enum PokemonCry GetCryIdBySpecies(u16 species); u16 GetSpeciesPreEvolution(u16 species); void HealPokemon(struct Pokemon *mon); void HealBoxPokemon(struct BoxPokemon *boxMon); void UpdateDaysPassedSinceFormChange(u16 days); void TrySetDayLimitToFormChange(struct Pokemon *mon); -u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState state); +enum Type CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState state); uq4_12_t GetDynamaxLevelHPMultiplier(u32 dynamaxLevel, bool32 inverseMultiplier); u32 GetRegionalFormByRegion(u32 species, u32 region); bool32 IsSpeciesForeignRegionalForm(u32 species, u32 currentRegion); -u32 GetTeraTypeFromPersonality(struct Pokemon *mon); +enum Type GetTeraTypeFromPersonality(struct Pokemon *mon); +bool8 ShouldSkipFriendshipChange(void); +struct Pokemon *GetSavedPlayerPartyMon(u32 index); +u8 *GetSavedPlayerPartyCount(void); +void SavePlayerPartyMon(u32 index, struct Pokemon *mon); +bool32 IsSpeciesOfType(u32 species, enum Type type); #endif // GUARD_POKEMON_H diff --git a/include/pokemon_animation.h b/include/pokemon_animation.h index 748eb4b36d13..8d25d3025ce4 100644 --- a/include/pokemon_animation.h +++ b/include/pokemon_animation.h @@ -1,195 +1,201 @@ #ifndef GUARD_POKEMON_ANIMATION_H #define GUARD_POKEMON_ANIMATION_H -u8 GetSpeciesBackAnimSet(u16 species); -void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId); -void StartMonSummaryAnimation(struct Sprite *sprite, u8 frontAnimId); -void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet); -void SetSpriteCB_MonAnimDummy(struct Sprite *sprite); - // PokΓ©mon back animation sets -#define BACK_ANIM_NONE 0 -#define BACK_ANIM_H_VIBRATE 1 -#define BACK_ANIM_H_SLIDE 2 -#define BACK_ANIM_H_SPRING 3 -#define BACK_ANIM_H_SPRING_REPEATED 4 -#define BACK_ANIM_SHRINK_GROW 5 -#define BACK_ANIM_GROW 6 -#define BACK_ANIM_CIRCLE_COUNTERCLOCKWISE 7 -#define BACK_ANIM_H_SHAKE 8 -#define BACK_ANIM_V_SHAKE 9 -#define BACK_ANIM_V_SHAKE_H_SLIDE 10 -#define BACK_ANIM_V_STRETCH 11 -#define BACK_ANIM_H_STRETCH 12 -#define BACK_ANIM_GROW_STUTTER 13 -#define BACK_ANIM_V_SHAKE_LOW 14 -#define BACK_ANIM_TRIANGLE_DOWN 15 -#define BACK_ANIM_CONCAVE_ARC_LARGE 16 -#define BACK_ANIM_CONVEX_DOUBLE_ARC 17 -#define BACK_ANIM_CONCAVE_ARC_SMALL 18 -#define BACK_ANIM_DIP_RIGHT_SIDE 19 -#define BACK_ANIM_SHRINK_GROW_VIBRATE 20 -#define BACK_ANIM_JOLT_RIGHT 21 -#define BACK_ANIM_SHAKE_FLASH_YELLOW 22 -#define BACK_ANIM_SHAKE_GLOW_RED 23 -#define BACK_ANIM_SHAKE_GLOW_GREEN 24 -#define BACK_ANIM_SHAKE_GLOW_BLUE 25 +enum BackAnim +{ + BACK_ANIM_NONE, + BACK_ANIM_H_VIBRATE, + BACK_ANIM_H_SLIDE, + BACK_ANIM_H_SPRING, + BACK_ANIM_H_SPRING_REPEATED, + BACK_ANIM_SHRINK_GROW, + BACK_ANIM_GROW, + BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, + BACK_ANIM_H_SHAKE, + BACK_ANIM_V_SHAKE, + BACK_ANIM_V_SHAKE_H_SLIDE, + BACK_ANIM_V_STRETCH, + BACK_ANIM_H_STRETCH, + BACK_ANIM_GROW_STUTTER, + BACK_ANIM_V_SHAKE_LOW, + BACK_ANIM_TRIANGLE_DOWN, + BACK_ANIM_CONCAVE_ARC_LARGE, + BACK_ANIM_CONVEX_DOUBLE_ARC, + BACK_ANIM_CONCAVE_ARC_SMALL, + BACK_ANIM_DIP_RIGHT_SIDE, + BACK_ANIM_SHRINK_GROW_VIBRATE, + BACK_ANIM_JOLT_RIGHT, + BACK_ANIM_SHAKE_FLASH_YELLOW, + BACK_ANIM_SHAKE_GLOW_RED, + BACK_ANIM_SHAKE_GLOW_GREEN, + BACK_ANIM_SHAKE_GLOW_BLUE, +}; // PokΓ©mon animation function ids (for front and back) // Each front anim uses 1, and each back anim uses a set of 3 -#define ANIM_V_SQUISH_AND_BOUNCE 0 -#define ANIM_CIRCULAR_STRETCH_TWICE 1 -#define ANIM_H_VIBRATE 2 -#define ANIM_H_SLIDE 3 -#define ANIM_V_SLIDE 4 -#define ANIM_BOUNCE_ROTATE_TO_SIDES 5 -#define ANIM_V_JUMPS_H_JUMPS 6 -#define ANIM_ROTATE_TO_SIDES 7 -#define ANIM_ROTATE_TO_SIDES_TWICE 8 -#define ANIM_GROW_VIBRATE 9 -#define ANIM_ZIGZAG_FAST 10 -#define ANIM_SWING_CONCAVE 11 -#define ANIM_SWING_CONCAVE_FAST 12 -#define ANIM_SWING_CONVEX 13 -#define ANIM_SWING_CONVEX_FAST 14 -#define ANIM_H_SHAKE 15 -#define ANIM_V_SHAKE 16 -#define ANIM_CIRCULAR_VIBRATE 17 -#define ANIM_TWIST 18 -#define ANIM_SHRINK_GROW 19 -#define ANIM_CIRCLE_C_CLOCKWISE 20 -#define ANIM_GLOW_BLACK 21 -#define ANIM_H_STRETCH 22 -#define ANIM_V_STRETCH 23 -#define ANIM_RISING_WOBBLE 24 -#define ANIM_V_SHAKE_TWICE 25 -#define ANIM_TIP_MOVE_FORWARD 26 -#define ANIM_H_PIVOT 27 -#define ANIM_V_SLIDE_WOBBLE 28 -#define ANIM_H_SLIDE_WOBBLE 29 -#define ANIM_V_JUMPS_BIG 30 -#define ANIM_SPIN_LONG 31 -#define ANIM_GLOW_ORANGE 32 -#define ANIM_GLOW_RED 33 -#define ANIM_GLOW_BLUE 34 -#define ANIM_GLOW_YELLOW 35 -#define ANIM_GLOW_PURPLE 36 -#define ANIM_BACK_AND_LUNGE 37 -#define ANIM_BACK_FLIP 38 -#define ANIM_FLICKER 39 -#define ANIM_BACK_FLIP_BIG 40 -#define ANIM_FRONT_FLIP 41 -#define ANIM_TUMBLING_FRONT_FLIP 42 -#define ANIM_FIGURE_8 43 -#define ANIM_FLASH_YELLOW 44 -#define ANIM_SWING_CONCAVE_FAST_SHORT 45 -#define ANIM_SWING_CONVEX_FAST_SHORT 46 -#define ANIM_ROTATE_UP_SLAM_DOWN 47 -#define ANIM_DEEP_V_SQUISH_AND_BOUNCE 48 -#define ANIM_H_JUMPS 49 -#define ANIM_H_JUMPS_V_STRETCH 50 -#define ANIM_ROTATE_TO_SIDES_FAST 51 -#define ANIM_ROTATE_UP_TO_SIDES 52 -#define ANIM_FLICKER_INCREASING 53 -#define ANIM_TIP_HOP_FORWARD 54 -#define ANIM_PIVOT_SHAKE 55 -#define ANIM_TIP_AND_SHAKE 56 -#define ANIM_VIBRATE_TO_CORNERS 57 -#define ANIM_GROW_IN_STAGES 58 -#define ANIM_V_SPRING 59 -#define ANIM_V_REPEATED_SPRING 60 -#define ANIM_SPRING_RISING 61 -#define ANIM_H_SPRING 62 -#define ANIM_H_REPEATED_SPRING_SLOW 63 -#define ANIM_H_SLIDE_SHRINK 64 -#define ANIM_LUNGE_GROW 65 -#define ANIM_CIRCLE_INTO_BG 66 -#define ANIM_RAPID_H_HOPS 67 -#define ANIM_FOUR_PETAL 68 -#define ANIM_V_SQUISH_AND_BOUNCE_SLOW 69 -#define ANIM_H_SLIDE_SLOW 70 -#define ANIM_V_SLIDE_SLOW 71 -#define ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL 72 -#define ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW 73 -#define ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW 74 -#define ANIM_ZIGZAG_SLOW 75 -#define ANIM_H_SHAKE_SLOW 76 -#define ANIM_V_SHAKE_SLOW 77 -#define ANIM_TWIST_TWICE 78 -#define ANIM_CIRCLE_C_CLOCKWISE_SLOW 79 -#define ANIM_V_SHAKE_TWICE_SLOW 80 -#define ANIM_V_SLIDE_WOBBLE_SMALL 81 -#define ANIM_V_JUMPS_SMALL 82 -#define ANIM_SPIN 83 -#define ANIM_TUMBLING_FRONT_FLIP_TWICE 84 -#define ANIM_DEEP_V_SQUISH_AND_BOUNCE_TWICE 85 -#define ANIM_H_JUMPS_V_STRETCH_TWICE 86 -#define ANIM_V_SHAKE_BACK 87 -#define ANIM_V_SHAKE_BACK_SLOW 88 -#define ANIM_V_SHAKE_H_SLIDE_SLOW 89 -#define ANIM_V_STRETCH_BOTH_ENDS_SLOW 90 -#define ANIM_H_STRETCH_FAR_SLOW 91 -#define ANIM_V_SHAKE_LOW_TWICE 92 -#define ANIM_H_SHAKE_FAST 93 -#define ANIM_H_SLIDE_FAST 94 -#define ANIM_H_VIBRATE_FAST 95 -#define ANIM_H_VIBRATE_FASTEST 96 -#define ANIM_V_SHAKE_BACK_FAST 97 -#define ANIM_V_SHAKE_LOW_TWICE_SLOW 98 -#define ANIM_V_SHAKE_LOW_TWICE_FAST 99 -#define ANIM_CIRCLE_C_CLOCKWISE_LONG 100 -#define ANIM_GROW_STUTTER_SLOW 101 -#define ANIM_V_SHAKE_H_SLIDE 102 -#define ANIM_V_SHAKE_H_SLIDE_FAST 103 -#define ANIM_TRIANGLE_DOWN_SLOW 104 -#define ANIM_TRIANGLE_DOWN 105 -#define ANIM_TRIANGLE_DOWN_TWICE 106 -#define ANIM_GROW 107 -#define ANIM_GROW_TWICE 108 -#define ANIM_H_SPRING_FAST 109 -#define ANIM_H_SPRING_SLOW 110 -#define ANIM_H_REPEATED_SPRING_FAST 111 -#define ANIM_H_REPEATED_SPRING 112 -#define ANIM_SHRINK_GROW_FAST 113 -#define ANIM_SHRINK_GROW_SLOW 114 -#define ANIM_V_STRETCH_BOTH_ENDS 115 -#define ANIM_V_STRETCH_BOTH_ENDS_TWICE 116 -#define ANIM_H_STRETCH_FAR_TWICE 117 -#define ANIM_H_STRETCH_FAR 118 -#define ANIM_GROW_STUTTER_TWICE 119 -#define ANIM_GROW_STUTTER 120 -#define ANIM_CONCAVE_ARC_LARGE_SLOW 121 -#define ANIM_CONCAVE_ARC_LARGE 122 -#define ANIM_CONCAVE_ARC_LARGE_TWICE 123 -#define ANIM_CONVEX_DOUBLE_ARC_SLOW 124 -#define ANIM_CONVEX_DOUBLE_ARC 125 -#define ANIM_CONVEX_DOUBLE_ARC_TWICE 126 -#define ANIM_CONCAVE_ARC_SMALL_SLOW 127 -#define ANIM_CONCAVE_ARC_SMALL 128 -#define ANIM_CONCAVE_ARC_SMALL_TWICE 129 -#define ANIM_H_DIP 130 -#define ANIM_H_DIP_FAST 131 -#define ANIM_H_DIP_TWICE 132 -#define ANIM_SHRINK_GROW_VIBRATE_FAST 133 -#define ANIM_SHRINK_GROW_VIBRATE 134 -#define ANIM_SHRINK_GROW_VIBRATE_SLOW 135 -#define ANIM_JOLT_RIGHT_FAST 136 -#define ANIM_JOLT_RIGHT 137 -#define ANIM_JOLT_RIGHT_SLOW 138 -#define ANIM_SHAKE_FLASH_YELLOW_FAST 139 -#define ANIM_SHAKE_FLASH_YELLOW 140 -#define ANIM_SHAKE_FLASH_YELLOW_SLOW 141 -#define ANIM_SHAKE_GLOW_RED_FAST 142 -#define ANIM_SHAKE_GLOW_RED 143 -#define ANIM_SHAKE_GLOW_RED_SLOW 144 -#define ANIM_SHAKE_GLOW_GREEN_FAST 145 -#define ANIM_SHAKE_GLOW_GREEN 146 -#define ANIM_SHAKE_GLOW_GREEN_SLOW 147 -#define ANIM_SHAKE_GLOW_BLUE_FAST 148 -#define ANIM_SHAKE_GLOW_BLUE 149 -#define ANIM_SHAKE_GLOW_BLUE_SLOW 150 -#define ANIM_SHAKE_GLOW_BLACK_SLOW 151 -#define ANIM_SHAKE_GLOW_WHITE_SLOW 152 -#define ANIM_SHAKE_GLOW_PURPLE_SLOW 153 +enum AnimFunctionIDs +{ + ANIM_V_SQUISH_AND_BOUNCE, + ANIM_CIRCULAR_STRETCH_TWICE, + ANIM_H_VIBRATE, + ANIM_H_SLIDE, + ANIM_V_SLIDE, + ANIM_BOUNCE_ROTATE_TO_SIDES, + ANIM_V_JUMPS_H_JUMPS, + ANIM_ROTATE_TO_SIDES, + ANIM_ROTATE_TO_SIDES_TWICE, + ANIM_GROW_VIBRATE, + ANIM_ZIGZAG_FAST, + ANIM_SWING_CONCAVE, + ANIM_SWING_CONCAVE_FAST, + ANIM_SWING_CONVEX, + ANIM_SWING_CONVEX_FAST, + ANIM_H_SHAKE, + ANIM_V_SHAKE, + ANIM_CIRCULAR_VIBRATE, + ANIM_TWIST, + ANIM_SHRINK_GROW, + ANIM_CIRCLE_C_CLOCKWISE, + ANIM_GLOW_BLACK, + ANIM_H_STRETCH, + ANIM_V_STRETCH, + ANIM_RISING_WOBBLE, + ANIM_V_SHAKE_TWICE, + ANIM_TIP_MOVE_FORWARD, + ANIM_H_PIVOT, + ANIM_V_SLIDE_WOBBLE, + ANIM_H_SLIDE_WOBBLE, + ANIM_V_JUMPS_BIG, + ANIM_SPIN_LONG, + ANIM_GLOW_ORANGE, + ANIM_GLOW_RED, + ANIM_GLOW_BLUE, + ANIM_GLOW_YELLOW, + ANIM_GLOW_PURPLE, + ANIM_BACK_AND_LUNGE, + ANIM_BACK_FLIP, + ANIM_FLICKER, + ANIM_BACK_FLIP_BIG, + ANIM_FRONT_FLIP, + ANIM_TUMBLING_FRONT_FLIP, + ANIM_FIGURE_8, + ANIM_FLASH_YELLOW, + ANIM_SWING_CONCAVE_FAST_SHORT, + ANIM_SWING_CONVEX_FAST_SHORT, + ANIM_ROTATE_UP_SLAM_DOWN, + ANIM_DEEP_V_SQUISH_AND_BOUNCE, + ANIM_H_JUMPS, + ANIM_H_JUMPS_V_STRETCH, + ANIM_ROTATE_TO_SIDES_FAST, + ANIM_ROTATE_UP_TO_SIDES, + ANIM_FLICKER_INCREASING, + ANIM_TIP_HOP_FORWARD, + ANIM_PIVOT_SHAKE, + ANIM_TIP_AND_SHAKE, + ANIM_VIBRATE_TO_CORNERS, + ANIM_GROW_IN_STAGES, + ANIM_V_SPRING, + ANIM_V_REPEATED_SPRING, + ANIM_SPRING_RISING, + ANIM_H_SPRING, + ANIM_H_REPEATED_SPRING_SLOW, + ANIM_H_SLIDE_SHRINK, + ANIM_LUNGE_GROW, + ANIM_CIRCLE_INTO_BG, + ANIM_RAPID_H_HOPS, + ANIM_FOUR_PETAL, + ANIM_V_SQUISH_AND_BOUNCE_SLOW, + ANIM_H_SLIDE_SLOW, + ANIM_V_SLIDE_SLOW, + ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL, + ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW, + ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW, + ANIM_ZIGZAG_SLOW, + ANIM_H_SHAKE_SLOW, + ANIM_V_SHAKE_SLOW, + ANIM_TWIST_TWICE, + ANIM_CIRCLE_C_CLOCKWISE_SLOW, + ANIM_V_SHAKE_TWICE_SLOW, + ANIM_V_SLIDE_WOBBLE_SMALL, + ANIM_V_JUMPS_SMALL, + ANIM_SPIN, + ANIM_TUMBLING_FRONT_FLIP_TWICE, + ANIM_DEEP_V_SQUISH_AND_BOUNCE_TWICE, + ANIM_H_JUMPS_V_STRETCH_TWICE, + ANIM_V_SHAKE_BACK, + ANIM_V_SHAKE_BACK_SLOW, + ANIM_V_SHAKE_H_SLIDE_SLOW, + ANIM_V_STRETCH_BOTH_ENDS_SLOW, + ANIM_H_STRETCH_FAR_SLOW, + ANIM_V_SHAKE_LOW_TWICE, + ANIM_H_SHAKE_FAST, + ANIM_H_SLIDE_FAST, + ANIM_H_VIBRATE_FAST, + ANIM_H_VIBRATE_FASTEST, + ANIM_V_SHAKE_BACK_FAST, + ANIM_V_SHAKE_LOW_TWICE_SLOW, + ANIM_V_SHAKE_LOW_TWICE_FAST, + ANIM_CIRCLE_C_CLOCKWISE_LONG, + ANIM_GROW_STUTTER_SLOW, + ANIM_V_SHAKE_H_SLIDE, + ANIM_V_SHAKE_H_SLIDE_FAST, + ANIM_TRIANGLE_DOWN_SLOW, + ANIM_TRIANGLE_DOWN, + ANIM_TRIANGLE_DOWN_TWICE, + ANIM_GROW, + ANIM_GROW_TWICE, + ANIM_H_SPRING_FAST, + ANIM_H_SPRING_SLOW, + ANIM_H_REPEATED_SPRING_FAST, + ANIM_H_REPEATED_SPRING, + ANIM_SHRINK_GROW_FAST, + ANIM_SHRINK_GROW_SLOW, + ANIM_V_STRETCH_BOTH_ENDS, + ANIM_V_STRETCH_BOTH_ENDS_TWICE, + ANIM_H_STRETCH_FAR_TWICE, + ANIM_H_STRETCH_FAR, + ANIM_GROW_STUTTER_TWICE, + ANIM_GROW_STUTTER, + ANIM_CONCAVE_ARC_LARGE_SLOW, + ANIM_CONCAVE_ARC_LARGE, + ANIM_CONCAVE_ARC_LARGE_TWICE, + ANIM_CONVEX_DOUBLE_ARC_SLOW, + ANIM_CONVEX_DOUBLE_ARC, + ANIM_CONVEX_DOUBLE_ARC_TWICE, + ANIM_CONCAVE_ARC_SMALL_SLOW, + ANIM_CONCAVE_ARC_SMALL, + ANIM_CONCAVE_ARC_SMALL_TWICE, + ANIM_H_DIP, + ANIM_H_DIP_FAST, + ANIM_H_DIP_TWICE, + ANIM_SHRINK_GROW_VIBRATE_FAST, + ANIM_SHRINK_GROW_VIBRATE, + ANIM_SHRINK_GROW_VIBRATE_SLOW, + ANIM_JOLT_RIGHT_FAST, + ANIM_JOLT_RIGHT, + ANIM_JOLT_RIGHT_SLOW, + ANIM_SHAKE_FLASH_YELLOW_FAST, + ANIM_SHAKE_FLASH_YELLOW, + ANIM_SHAKE_FLASH_YELLOW_SLOW, + ANIM_SHAKE_GLOW_RED_FAST, + ANIM_SHAKE_GLOW_RED, + ANIM_SHAKE_GLOW_RED_SLOW, + ANIM_SHAKE_GLOW_GREEN_FAST, + ANIM_SHAKE_GLOW_GREEN, + ANIM_SHAKE_GLOW_GREEN_SLOW, + ANIM_SHAKE_GLOW_BLUE_FAST, + ANIM_SHAKE_GLOW_BLUE, + ANIM_SHAKE_GLOW_BLUE_SLOW, + ANIM_SHAKE_GLOW_BLACK_SLOW, + ANIM_SHAKE_GLOW_WHITE_SLOW, + ANIM_SHAKE_GLOW_PURPLE_SLOW, +}; + +enum BackAnim GetSpeciesBackAnimSet(u16 species); +void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, enum AnimFunctionIDs frontAnimId); +void StartMonSummaryAnimation(struct Sprite *sprite, enum AnimFunctionIDs frontAnimId); +void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, enum BackAnim backAnimSet); +void SetSpriteCB_MonAnimDummy(struct Sprite *sprite); #endif // GUARD_POKEMON_ANIMATION_H diff --git a/include/pokemon_sprite_visualizer.h b/include/pokemon_sprite_visualizer.h index fdd53d2ce898..4205c6dc2003 100644 --- a/include/pokemon_sprite_visualizer.h +++ b/include/pokemon_sprite_visualizer.h @@ -81,7 +81,7 @@ struct PokemonSpriteVisualizer u8 animIdBack; u8 animIdFront; u8 battleBgType; - u8 battleTerrain; + u8 battleEnvironment; u8 currentSubmenu; u8 submenuYpos[3]; }; diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 3aa8460a1748..6c4128dba416 100755 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -3,6 +3,7 @@ #include "main.h" #include "config/summary_screen.h" +#include "constants/move_relearner.h" extern u8 gLastViewedMonIndex; @@ -13,11 +14,12 @@ extern const struct SpritePalette gSpritePal_CategoryIcons; extern const struct SpriteTemplate gSpriteTemplate_CategoryIcons; extern MainCallback gInitialSummaryScreenCallback; -void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); -void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove); -void ShowPokemonSummaryScreenHandleDeoxys(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); -u8 GetMoveSlotToReplace(void); -void SummaryScreen_SetAnimDelayTaskId(u8 taskId); +enum IncrDecrUpdateValues +{ + TRY_SET_UPDATE, + TRY_INCREMENT, + TRY_DECREMENT, +}; // The PokΓ©mon Summary Screen can operate in different modes. Certain features, // such as move re-ordering, are available in the different modes. @@ -48,4 +50,12 @@ enum PokemonSummarySkillsMode SUMMARY_SKILLS_MODE_EVS, }; +void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); +void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove); +void ShowPokemonSummaryScreenHandleDeoxys(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); +u8 GetMoveSlotToReplace(void); +void SummaryScreen_SetAnimDelayTaskId(u8 taskId); +void ShowRelearnPrompt(void); +void TryUpdateRelearnType(enum IncrDecrUpdateValues delta); + #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/include/pokenav.h b/include/pokenav.h index 2992a76d127e..191355736c2e 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -17,7 +17,7 @@ struct PokenavMonListItem struct PokenavMatchCallEntry { bool8 isSpecialTrainer; - u8 mapSec; + mapsec_u8_t mapSec; u16 headerId; }; @@ -413,7 +413,7 @@ void FreeMatchCallSubstruct1(void); int IsMatchCallListInitFinished(void); int GetNumberRegistered(void); struct PokenavMatchCallEntry *GetMatchCallList(void); -u16 GetMatchCallMapSec(int index); +mapsec_u16_t GetMatchCallMapSec(int index); bool32 ShouldDrawRematchPokeballIcon(int index); void ClearRematchPokeballIcon(u16 windowId, u32 tileOffset); int GetMatchCallTrainerPic(int index); @@ -422,7 +422,7 @@ const u8 *GetMatchCallMessageText(int index, bool8 *newRematchRequest); u16 GetMatchCallOptionCursorPos(void); u16 GetMatchCallOptionId(int optionId); void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntry *matchCallEntry, u8 *str); -u8 GetMatchTableMapSectionId(int rematchIndex); +mapsec_u8_t GetMatchTableMapSectionId(int rematchIndex); int GetIndexDeltaOfNextCheckPageDown(int index); int GetIndexDeltaOfNextCheckPageUp(int index); bool32 IsRematchEntryRegistered(int rematchIndex); diff --git a/include/random.h b/include/random.h index b9a0ab4311d0..84318bedc0fc 100644 --- a/include/random.h +++ b/include/random.h @@ -190,16 +190,38 @@ enum RandomTag RNG_AI_SWITCH_TRAPPER, RNG_AI_SWITCH_FREE_TURN, RNG_AI_SWITCH_ALL_MOVES_BAD, + RNG_AI_CONSERVE_TERA, RNG_AI_SWITCH_ALL_SCORES_BAD, + RNG_AI_SWITCH_ABSORBING_HIDDEN_POWER, RNG_AI_PP_STALL_DISREGARD_MOVE, + RNG_AI_SUCKER_PUNCH, RNG_SHELL_SIDE_ARM, RNG_RANDOM_TARGET, RNG_AI_PREDICT_ABILITY, RNG_AI_PREDICT_SWITCH, RNG_AI_PREDICT_MOVE, RNG_AI_STATUS_FOCUS_PUNCH, + RNG_AI_BOOST_INTO_HAZE, + RNG_AI_SHOULD_RECOVER, + RNG_AI_PRIORITIZE_LAST_CHANCE, RNG_HEALER, RNG_DEXNAV_ENCOUNTER_LEVEL, + RNG_AI_ASSUME_STATUS_SLEEP, + RNG_AI_ASSUME_STATUS_NONVOLATILE, + RNG_AI_ASSUME_STATUS_HIGH_ODDS, + RNG_AI_ASSUME_STATUS_MEDIUM_ODDS, + RNG_AI_ASSUME_STATUS_LOW_ODDS, + RNG_AI_ASSUME_ALL_STATUS, + RNG_AI_REFRESH_TRICK_ROOM_ON_LAST_TURN, + RNG_AI_APPLY_TAILWIND_ON_LAST_TURN_OF_TRICK_ROOM, + RNG_WRAP, + RNG_BALLTHROW_CRITICAL, + RNG_BALLTHROW_SHAKE, + RNG_PROTECT_FAIL, + RNG_PRESENT, + RNG_MAGNITUDE, + RNG_FISHING_BITE, + RNG_FISHING_GEN3_STICKY, }; #define RandomWeighted(tag, ...) \ @@ -249,4 +271,13 @@ const void *RandomElementArrayDefault(enum RandomTag, const void *array, size_t u8 RandomWeightedIndex(u8 *weights, u8 length); +#if TESTING +u32 RandomUniformTrials(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32), void *caller); +u32 RandomUniformDefaultValue(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32), void *caller); +u32 RandomWeightedArrayTrials(enum RandomTag tag, u32 sum, u32 n, const u8 *weights, void *caller); +u32 RandomWeightedArrayDefaultValue(enum RandomTag tag, u32 n, const u8 *weights, void *caller); +const void *RandomElementArrayTrials(enum RandomTag tag, const void *array, size_t size, size_t count, void *caller); +const void *RandomElementArrayDefaultValue(enum RandomTag tag, const void *array, size_t size, size_t count, void *caller); +#endif + #endif // GUARD_RANDOM_H diff --git a/include/rayquaza_scene.h b/include/rayquaza_scene.h index 422b59127324..6a51b9a45ff7 100644 --- a/include/rayquaza_scene.h +++ b/include/rayquaza_scene.h @@ -1,6 +1,8 @@ #ifndef GUARD_RAYQUAZA_SCENE_H #define GUARD_RAYQUAZA_SCENE_H -void DoRayquazaScene(u8 animId, bool8 endEarly, void (*exitCallback)(void)); +#include "main.h" + +void DoRayquazaScene(u8 animId, bool8 endEarly, MainCallback exitCallback); #endif // GUARD_RAYQUAZA_SCENE_H diff --git a/include/recorded_battle.h b/include/recorded_battle.h index faf966109fb5..787cf4606c0b 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -27,7 +27,7 @@ struct RecordedBattleSave u8 frontierBrainSymbol; u8 battleScene:1; u8 textSpeed:3; - u64 AI_scripts; + u64 AI_scripts[MAX_BATTLERS_COUNT]; u8 recordMixFriendName[PLAYER_NAME_LENGTH + 1]; u8 recordMixFriendClass; u8 apprenticeId; @@ -81,7 +81,7 @@ u8 GetBattleSceneInRecordedBattle(void); u8 GetTextSpeedInRecordedBattle(void); void RecordedBattle_CopyBattlerMoves(u32 battler); void RecordedBattle_CheckMovesetChanges(u8 mode); -u64 GetAiScriptsInRecordedBattle(void); +u64 GetAiScriptsInRecordedBattle(u32 battler); void RecordedBattle_SetPlaybackFinished(void); bool8 RecordedBattle_CanStopPlayback(void); void GetRecordedBattleRecordMixFriendName(u8 *dst); diff --git a/include/region_map.h b/include/region_map.h index 2ca153e92fe0..571acbf3512f 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -27,7 +27,7 @@ enum { }; struct RegionMap { - /*0x000*/ u16 mapSecId; + /*0x000*/ mapsec_u16_t mapSecId; /*0x002*/ u8 mapSecType; /*0x003*/ u8 posWithinMapSec; /*0x004*/ u8 mapSecName[20]; @@ -100,14 +100,14 @@ void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed); u8 DoRegionMapInputCallback(void); bool8 UpdateRegionMapZoom(void); void FreeRegionMapIconResources(void); -u16 GetRegionMapSecIdAt(u16 x, u16 y); +mapsec_u16_t GetRegionMapSecIdAt(u16 x, u16 y); void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag); void CreateRegionMapCursor(u16 tileTag, u16 paletteTag); -bool32 IsEventIslandMapSecId(u8 mapSecId); -u8 *GetMapName(u8 *dest, u16 regionMapId, u16 padLength); -u8 *GetMapNameGeneric(u8 *dest, u16 mapSecId); -u8 *GetMapNameHandleAquaHideout(u8 *dest, u16 mapSecId); -u16 CorrectSpecialMapSecId(u16 mapSecId); +bool32 IsEventIslandMapSecId(mapsec_u8_t mapSecId); +u8 *GetMapName(u8 *dest, mapsec_u16_t regionMapId, u16 padLength); +u8 *GetMapNameGeneric(u8 *dest, mapsec_u16_t mapSecId); +u8 *GetMapNameHandleAquaHideout(u8 *dest, mapsec_u16_t mapSecId); +mapsec_u16_t CorrectSpecialMapSecId(mapsec_u16_t mapSecId); void ShowRegionMapForPokedexAreaScreen(struct RegionMap *regionMap); void PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(s16 x, s16 y); void CB2_OpenFlyMap(void); diff --git a/include/rtc.h b/include/rtc.h index 8ee3071615ac..d0bb6a43de9f 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -43,6 +43,7 @@ u16 GetFullYear(void); enum Month GetMonth(void); u8 GetDay(void); enum Weekday GetDayOfWeek(void); +enum TimeOfDay GenConfigTimeOfDay(enum TimeOfDay timeOfDay); enum TimeOfDay TryIncrementTimeOfDay(enum TimeOfDay timeOfDay); enum TimeOfDay TryDecrementTimeOfDay(enum TimeOfDay timeOfDay); diff --git a/include/save.h b/include/save.h index aef84c31585e..1bc4c02404ba 100644 --- a/include/save.h +++ b/include/save.h @@ -1,6 +1,8 @@ #ifndef GUARD_SAVE_H #define GUARD_SAVE_H +#include "main.h" + // Each 4 KiB flash sector contains 3968 bytes of actual data followed by 116 bytes of SaveBlock3 and then 12 bytes of footer. #define SECTOR_DATA_SIZE 3968 #define SAVE_BLOCK_3_CHUNK_SIZE 116 @@ -87,7 +89,7 @@ extern u32 gSaveCounter; extern struct SaveSector *gFastSaveSector; extern u16 gIncrementalSectorId; extern u16 gSaveFileStatus; -extern void (*gGameContinueCallback)(void); +extern MainCallback gGameContinueCallback; extern struct SaveSectorLocation gRamSaveSectorLocations[]; extern struct SaveSector gSaveDataBuffer; diff --git a/include/sprite.h b/include/sprite.h index 5b5fd5e62f5e..791907505319 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -324,5 +324,6 @@ void ResetAffineAnimData(void); u32 GetSpanPerImage(u32 shape, u32 size); void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); +u8 IndexOfSpriteTileTag(u16 tag); #endif //GUARD_SPRITE_H diff --git a/include/strings.h b/include/strings.h index a9cddee25b93..a9264b69fda8 100644 --- a/include/strings.h +++ b/include/strings.h @@ -246,31 +246,6 @@ extern const u8 gText_SavingTime[]; extern const u8 gText_BattlePyramidConfirmRest[]; extern const u8 gText_BattlePyramidConfirmRetire[]; -// option menu texts -extern const u8 gText_TextSpeedSlow[]; -extern const u8 gText_TextSpeedMid[]; -extern const u8 gText_TextSpeedFast[]; -extern const u8 gText_BattleSceneOn[]; -extern const u8 gText_BattleSceneOff[]; -extern const u8 gText_BattleStyleShift[]; -extern const u8 gText_BattleStyleSet[]; -extern const u8 gText_SoundMono[]; -extern const u8 gText_SoundStereo[]; -extern const u8 gText_FrameTypeNumber[]; -extern const u8 gText_FrameType[]; -extern const u8 gText_ButtonTypeNormal[]; -extern const u8 gText_ButtonTypeLR[]; -extern const u8 gText_ButtonTypeLEqualsA[]; -extern const u8 gText_Option[]; -extern const u8 gText_OptionMenu[]; -extern const u8 gText_TextSpeed[]; -extern const u8 gText_BattleScene[]; -extern const u8 gText_BattleStyle[]; -extern const u8 gText_Sound[]; -extern const u8 gText_Frame[]; -extern const u8 gText_OptionMenuCancel[]; -extern const u8 gText_ButtonMode[]; - extern const u8 gText_MaleSymbol[]; extern const u8 gText_FemaleSymbol[]; @@ -942,6 +917,9 @@ extern const u8 gText_FrontierFacilityClearStreak[]; extern const u8 gText_FrontierFacilityRoomsCleared[]; extern const u8 gText_FrontierFacilityKOsStreak[]; extern const u8 gText_FrontierFacilityFloorsCleared[]; +extern const u8 gText_FrontierFacilityTotalCaughtSpeciesBanned[]; +extern const u8 gText_FrontierFacilityIncluding[]; +extern const u8 gText_FrontierFacilityAreInelegible[]; // Battle Tower. extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_Apprentice1Intro[]; @@ -2421,9 +2399,20 @@ extern const u8 gText_PlayerRegroupCenter[]; extern const u8 gText_PlayerRegroupHome[]; extern const u8 gText_Relearn[]; // move relearner from summary screen +extern const u8 gText_Relearn_LevelUp[]; +extern const u8 gText_Relearn_Egg[]; +extern const u8 gText_Relearn_TM[]; +extern const u8 gText_Relearn_Tutor[]; extern const u8 gText_Rename[]; // change nickname from summary screen +extern const u8 MoveRelearner_Text_LevelUpMoveLWR[]; +extern const u8 MoveRelearner_Text_EggMoveLWR[]; +extern const u8 MoveRelearner_Text_TMMoveLWR[]; +extern const u8 MoveRelearner_Text_TutorMoveLWR[]; + // Switch Caught Mon into Party extern const u8 gText_CannotSendMonToBoxHM[]; +extern const u8 gText_CannotSendMonToBoxActive[]; +extern const u8 gText_CannotSendMonToBoxPartner[]; #endif // GUARD_STRINGS_H diff --git a/include/test/battle.h b/include/test/battle.h index 431e0f98f95e..198de63f3c12 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -2,8 +2,13 @@ * * To run all the tests use: * make check -j - * To run specific tests, e.g. Spikes ones, use: + * To run specific tests, e.g. Spikes ones, use either: * make check TESTS="Spikes" + * make check TESTS="*Spikes*" + * The first runs tests with names that start with Spikes, whereas the + * second runs tests with names that include Spikes anywhere in them. + * To run tests from a specific file, e.g. 'test/battle/move_effect/spikes.c', use: + * make check TESTS="test/battle/move_effect/spikes.c" * To build a ROM (pokemerald-test.elf) that can be opened in mgba to * view specific tests, e.g. Spikes ones, use: * make pokeemerald-test.elf TESTS="Spikes" @@ -88,7 +93,7 @@ * { * GIVEN { * ASSUME(IsPowderMove(MOVE_STUN_SPORE)); - * ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + * ASSUME(GetSpeciesType(SPECIES_ODDISH, 0) == TYPE_GRASS); * PLAYER(SPECIES_ODDISH); // 1. * OPPONENT(SPECIES_ODDISH); // 2. * } WHEN { @@ -189,21 +194,22 @@ * ASSUME(GetMoveEffect(MOVE_POISON_STING) == EFFECT_POISON_HIT); * } * - * SINGLE_BATTLE_TEST(name, results...) and DOUBLE_BATTLE_TEST(name, results...) - * Define single- and double- battles. The names should start with the - * name of the mechanic being tested so that it is easier to run all the - * related tests. results contains variable declarations to be placed - * into the results array which is available in PARAMETRIZEd tests. - * The main differences for doubles are: + * SINGLE_BATTLE_TEST(name, results...), DOUBLE_BATTLE_TEST(name, results...), MULTI_BATTLE_TEST(name, results...), + * TWO_VS_ONE_BATTLE_TEST(name, results...), and ONE_VS_TWO_BATTLE_TEST(name, results...) + * Define single-, double-, 2v2-multi-, 2v1-multi-, and 1v2- battles. The names should start with + * the name of the mechanic being tested so that it is easier to run all the related tests. results contains variable + * declarations to be placed into the `results` array which is available in tests using `PARAMETRIZE` commands. + * The main differences for doubles, 2v2, 2v1, and 1v2 are: * - Move targets sometimes need to be explicit. * - Instead of player and opponent there is playerLeft, playerRight, * opponentLeft, and opponentRight. * - * AI_SINGLE_BATTLE_TEST(name, results...) and AI_DOUBLE_BATTLE_TEST(name, results...) + * AI_SINGLE_BATTLE_TEST(name, results...), AI_DOUBLE_BATTLE_TEST(name, results...), + * AI_MULTI_BATTLE_TEST(name, results...), AI_TWO_VS_ONE_BATTLE_TEST(name, results...), and AI_ONE_VS_TWO_BATTLE_TEST(name, results...) * Define battles where opponent mons are controlled by AI, the same that runs * when battling regular Trainers. The flags for AI should be specified by * the AI_FLAGS command. - * The rules remain the same as with the SINGLE and DOUBLE battle tests + * The rules remain the same as with the SINGLE, DOUBLE, MULTI, TWO_VS_ONE, and ONE_VS_TWO battle tests with some differences: * with some differences: * - opponent's action is specified by the EXPECT_MOVE(s) / EXPECT_SEND_OUT / EXPECT_SWITCH commands * - we don't control what opponent actually does, instead we make sure the opponent does what we expect it to do @@ -219,6 +225,17 @@ * { * KNOWN_FAILING; // #2596. * + * KNOWN_CRASHING + * Marks a test as crashing due to a bug. If there is an issue number + * associated with the bug it should be included in a comment. If the + * test passes the developer will be notified to remove KNOWN_CRASHING. + * For example: + * TEST("Crashes") + * { + * KNOWN_CRASHING; // #7255 + * void (*f)(void) = NULL; + * f(); // Crashes! + * * PARAMETRIZE * Runs a test multiple times. i will be set to which parameter is * running, and results will contain an entry for each parameter, e.g.: @@ -289,10 +306,10 @@ * * WITH_CONFIG(configTag, value) * Runs the test with a specified config override. `configTag` must be - * of `enum GenConfigTag` + * of `enum ConfigTag` * Example: * GIVEN { - * WITH_CONFIG(GEN_CONFIG_GALE_WINGS, GEN_6); + * WITH_CONFIG(CONFIG_GALE_WINGS, GEN_6); * } * The `value` may be inferred from a local variable, e.g. set by * PARAMETRIZE. @@ -317,11 +334,40 @@ * Note if Moves is specified then MOVE will not automatically add moves * to the moveset. * + * For tests using MULTI_BATTLE_TEST, AI_MULTI_BATTLE_TEST, TWO_VS_ONE_BATTLE_TEST, + * AI_TWO_VS_ONE_BATTLE_TEST, ONE_VS_TWO_BATTLE_TEST, and AI_ONE_VS_TWO_BATTLE_TEST, + * the below must be used instead of PLAYER(species) and OPPONENT(species). + * MULTI_PLAYER(species), MULTI_PARTNER(species), MULTI_OPPONENT_A(species), and + * MULTI_OPPONENT_B(species) Adds the species to the player's, player partner's, + * opponent A's, or opponent B's party, respectively. + * Pokemon can be customised as per the guidance for PLAYER(species) and OPPONENT(species). + * The functions assign the PokΓ©mon to the party of the trainer at B_POSITION_PLAYER_LEFT, + * B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_LEFT, and B_POSITION_OPPONENT_RIGHT, respectively. + * MULTI_PLAYER(species) and MULTI_OPPONENT_A(species) set PokΓ©mon starting at party index 0, + * while MULTI_PARTNER(species) and MULTI_OPPONENT_B(species) set PokΓ©mon starting at party + * index 3. + * For ONE_VS_TWO tests, MULTI_PLAYER(species) must be used for all player-side PokΓ©mon, + * and for TWO_VS_ONE tests, MULTI_OPPONENT_A(species) must be used for all opponent-side + * PokΓ©mon. + * All MULTI_PLAYER(species) PokΓ©mon must be set before any MULTI_PARTNER(species) PokΓ©mon, + * and all MULTI_OPPONENT_A(species) must be set before any MULTI_OPPONENT_B(species) PokΓ©mon, + * else PokΓ©mon will be set in the incorrect parties in the test. + * Note where a side in a test has two trainers, the test setup manages the assigning of correct + * multi-party orders, therefore when using functions such as SEND_OUT, Player and Opponent A + * PokΓ©mon may be referenced using indexes 0, 1, and 2, and Player's Partner and Opponent B + * PokΓ©mon may be referenced using indexes 3, 4, and 5. + * * AI_FLAGS - * Specifies which AI flags are run during the test. Has use only for AI tests. + * Specifies which AI flags are run for all battlers during the test. Has use only for AI tests. * The most common combination is AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT) * which is the general 'smart' AI. * + * BATTLER_AI_FLAGS + * Specifies additional AI flags to be applied to specific battlers (battler 0/1/2/3). Has use only for AI tests. + * Must be used strictly after AI_FLAGS(flags), which overwrites all existing flags. + * Example: BATTLER_AI_FLAGS(3, AI_FLAG_RISKY) used after AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT) + * will set AI_FLAG_RISKY to only battler3 (Opponent B), in addition to the flags set by AI_FLAGS. + * * WHEN * Contains the choices that battlers make during the battle. * @@ -423,7 +469,7 @@ * Spaces in pattern match newlines (\n, \l, and \p) in the message. * Often used to check that a battler took its turn but it failed, e.g.: * MESSAGE("Wobbuffet used Dream Eater!"); - * MESSAGE("The opposing Wobbuffet wasn't affected!"); + * MESSAGE("It doesn't affect the opposing Wobbuffet…"); * * STATUS_ICON(battler, status1 | none: | sleep: | poison: | burn: | freeze: | paralysis:, badPoison:) * Causes the test to fail if the battler's status is not changed to the @@ -521,10 +567,25 @@ #define MAX_QUEUED_EVENTS 30 #define MAX_EXPECTED_ACTIONS 10 -enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES, BATTLE_TEST_WILD, BATTLE_TEST_AI_SINGLES, BATTLE_TEST_AI_DOUBLES }; +enum { + BATTLE_TEST_SINGLES, + BATTLE_TEST_DOUBLES, + BATTLE_TEST_WILD, + BATTLE_TEST_MULTI, + BATTLE_TEST_TWO_VS_ONE, + BATTLE_TEST_ONE_VS_TWO, + BATTLE_TEST_AI_SINGLES, + BATTLE_TEST_AI_DOUBLES, + BATTLE_TEST_AI_MULTI, + BATTLE_TEST_AI_TWO_VS_ONE, + BATTLE_TEST_AI_ONE_VS_TWO +}; typedef void (*SingleBattleTestFunction)(void *, const u32, struct BattlePokemon *, struct BattlePokemon *); typedef void (*DoubleBattleTestFunction)(void *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); +typedef void (*MultiBattleTestFunction)(void *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); +typedef void (*TwoVsOneBattleTestFunction)(void *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); +typedef void (*OneVsTwoBattleTestFunction)(void *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); struct BattleTest { @@ -533,6 +594,9 @@ struct BattleTest { SingleBattleTestFunction singles; DoubleBattleTestFunction doubles; + MultiBattleTestFunction multi; + TwoVsOneBattleTestFunction two_vs_one; + OneVsTwoBattleTestFunction one_vs_two; } function; size_t resultsSize; }; @@ -542,6 +606,7 @@ enum QUEUED_ABILITY_POPUP_EVENT, QUEUED_ANIMATION_EVENT, QUEUED_HP_EVENT, + QUEUED_SUB_HIT_EVENT, QUEUED_EXP_EVENT, QUEUED_MESSAGE_EVENT, QUEUED_STATUS_EVENT, @@ -550,7 +615,7 @@ enum struct QueuedAbilityEvent { u8 battlerId; - u16 ability; + enum Ability ability; }; struct QueuedAnimationEvent @@ -571,6 +636,14 @@ struct QueuedHPEvent u32 address:28; }; +struct QueuedSubHitEvent +{ + u32 battlerId:3; + u32 checkBreak:1; + u32 breakSub:1; + u32 address:27; +}; + struct QueuedExpEvent { u32 battlerId:3; @@ -600,29 +673,25 @@ struct QueuedEvent struct QueuedAbilityEvent ability; struct QueuedAnimationEvent animation; struct QueuedHPEvent hp; + struct QueuedSubHitEvent subHit; struct QueuedExpEvent exp; struct QueuedMessageEvent message; struct QueuedStatusEvent status; } as; }; -struct TurnRNG -{ - u16 tag; - u16 value; -}; - struct BattlerTurn { u8 hit:2; u8 criticalHit:2; u8 secondaryEffect:2; - struct TurnRNG rng; + struct RiggedRNG rng; }; struct ExpectedAIAction { - u16 sourceLine; + u16 sourceLine:13; // TODO: Avoid stealing these bits. + enum Gimmick gimmick:3; u8 type:4; // which action u8 moveSlots:4; // Expected move(s) to be chosen or not, marked as bits. u8 target:4; // move target or id of mon which gets sent out @@ -671,17 +740,19 @@ struct BattleTestData u8 playerPartySize; u8 opponentPartySize; - u8 explicitMoves[NUM_BATTLE_SIDES]; + u8 explicitMoves[MAX_BATTLERS_COUNT]; bool8 hasExplicitSpeeds; - u8 explicitSpeeds[NUM_BATTLE_SIDES]; + u8 explicitSpeeds[MAX_BATTLERS_COUNT]; u16 slowerThan[NUM_BATTLE_SIDES][PARTY_SIZE]; - u8 currentSide; + u8 currentPosition; u8 currentPartyIndex; struct Pokemon *currentMon; u8 gender; u8 nature; - u16 forcedAbilities[NUM_BATTLE_SIDES][PARTY_SIZE]; + bool8 isShiny; + enum Ability forcedAbilities[NUM_BATTLE_SIDES][PARTY_SIZE]; u8 chosenGimmick[NUM_BATTLE_SIDES][PARTY_SIZE]; + u8 forcedEnvironment; u8 currentMonIndexes[MAX_BATTLERS_COUNT]; u8 turnState; @@ -749,6 +820,8 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; #define R_APPEND_TRUE(...) __VA_OPT__(FIRST(__VA_ARGS__), TRUE RECURSIVELY(R_FOR_EACH(APPEND_COMMA_TRUE, EXCEPT_1(__VA_ARGS__)))) #define AI_TRAINER_NAME "{PKMN} TRAINER LEAF" +#define AI_TRAINER_2_NAME "{PKMN} TRAINER RED" +#define AI_PARTNER_NAME "{PKMN} TRAINER 1" /* Test */ @@ -794,6 +867,60 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; }; \ static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, const u32 i, struct BattlePokemon *playerLeft, struct BattlePokemon *opponentLeft, struct BattlePokemon *playerRight, struct BattlePokemon *opponentRight) + #define BATTLE_TEST_ARGS_MULTI(_name, _type, ...) \ + struct CAT(Result, __LINE__) { RECURSIVELY(R_FOR_EACH(APPEND_SEMICOLON, __VA_ARGS__)) }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); \ + __attribute__((section(".tests"), used)) static const struct Test CAT(sTest, __LINE__) = \ + { \ + .name = _name, \ + .filename = __FILE__, \ + .runner = &gBattleTestRunner, \ + .sourceLine = __LINE__, \ + .data = (void *)&(const struct BattleTest) \ + { \ + .type = _type, \ + .function = { .multi = (MultiBattleTestFunction)CAT(Test, __LINE__) }, \ + .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ + }, \ + }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, const u32 i, struct BattlePokemon *playerLeft, struct BattlePokemon *opponentLeft, struct BattlePokemon *playerRight, struct BattlePokemon *opponentRight) + +#define BATTLE_TEST_ARGS_TWO_VS_ONE(_name, _type, ...) \ + struct CAT(Result, __LINE__) { RECURSIVELY(R_FOR_EACH(APPEND_SEMICOLON, __VA_ARGS__)) }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); \ + __attribute__((section(".tests"), used)) static const struct Test CAT(sTest, __LINE__) = \ + { \ + .name = _name, \ + .filename = __FILE__, \ + .runner = &gBattleTestRunner, \ + .sourceLine = __LINE__, \ + .data = (void *)&(const struct BattleTest) \ + { \ + .type = _type, \ + .function = { .two_vs_one = (TwoVsOneBattleTestFunction)CAT(Test, __LINE__) }, \ + .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ + }, \ + }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, const u32 i, struct BattlePokemon *playerLeft, struct BattlePokemon *opponentLeft, struct BattlePokemon *playerRight, struct BattlePokemon *opponentRight) + +#define BATTLE_TEST_ARGS_ONE_VS_TWO(_name, _type, ...) \ + struct CAT(Result, __LINE__) { RECURSIVELY(R_FOR_EACH(APPEND_SEMICOLON, __VA_ARGS__)) }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); \ + __attribute__((section(".tests"), used)) static const struct Test CAT(sTest, __LINE__) = \ + { \ + .name = _name, \ + .filename = __FILE__, \ + .runner = &gBattleTestRunner, \ + .sourceLine = __LINE__, \ + .data = (void *)&(const struct BattleTest) \ + { \ + .type = _type, \ + .function = { .one_vs_two = (OneVsTwoBattleTestFunction)CAT(Test, __LINE__) }, \ + .resultsSize = sizeof(struct CAT(Result, __LINE__)), \ + }, \ + }; \ + static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, const u32 i, struct BattlePokemon *playerLeft, struct BattlePokemon *opponentLeft, struct BattlePokemon *playerRight, struct BattlePokemon *opponentRight) + #define SINGLE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_SINGLE(_name, BATTLE_TEST_SINGLES, __VA_ARGS__) #define WILD_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_SINGLE(_name, BATTLE_TEST_WILD, __VA_ARGS__) @@ -802,6 +929,15 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; #define DOUBLE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_DOUBLE(_name, BATTLE_TEST_DOUBLES, __VA_ARGS__) #define AI_DOUBLE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_DOUBLE(_name, BATTLE_TEST_AI_DOUBLES, __VA_ARGS__) +#define MULTI_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_MULTI(_name, BATTLE_TEST_MULTI, __VA_ARGS__) +#define AI_MULTI_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_MULTI(_name, BATTLE_TEST_AI_MULTI, __VA_ARGS__) + +#define TWO_VS_ONE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_TWO_VS_ONE(_name, BATTLE_TEST_TWO_VS_ONE, __VA_ARGS__) +#define AI_TWO_VS_ONE_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_TWO_VS_ONE(_name, BATTLE_TEST_AI_TWO_VS_ONE, __VA_ARGS__) + +#define ONE_VS_TWO_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_ONE_VS_TWO(_name, BATTLE_TEST_ONE_VS_TWO, __VA_ARGS__) +#define AI_ONE_VS_TWO_BATTLE_TEST(_name, ...) BATTLE_TEST_ARGS_ONE_VS_TWO(_name, BATTLE_TEST_AI_ONE_VS_TWO, __VA_ARGS__) + /* Parametrize */ #undef PARAMETRIZE // Override test/test.h's implementation. @@ -830,13 +966,18 @@ struct moveWithPP { #define RNGSeed(seed) RNGSeed_(__LINE__, seed) #define AI_FLAGS(flags) AIFlags_(__LINE__, flags) +#define BATTLER_AI_FLAGS(battler, flags) BattlerAIFlags_(__LINE__, battler, flags) #define AI_LOG AILogScores(__LINE__) #define FLAG_SET(flagId) SetFlagForTest(__LINE__, flagId) #define WITH_CONFIG(configTag, value) TestSetConfig(__LINE__, configTag, value) -#define PLAYER(species) for (OpenPokemon(__LINE__, B_SIDE_PLAYER, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) -#define OPPONENT(species) for (OpenPokemon(__LINE__, B_SIDE_OPPONENT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) +#define PLAYER(species) for (OpenPokemon(__LINE__, B_POSITION_PLAYER_LEFT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) +#define OPPONENT(species) for (OpenPokemon(__LINE__, B_POSITION_OPPONENT_LEFT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) +#define MULTI_PLAYER(species) for (OpenPokemonMulti(__LINE__, B_POSITION_PLAYER_LEFT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) +#define MULTI_OPPONENT_A(species) for (OpenPokemonMulti(__LINE__, B_POSITION_OPPONENT_LEFT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) +#define MULTI_PARTNER(species) for (OpenPokemonMulti(__LINE__, B_POSITION_PLAYER_RIGHT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) +#define MULTI_OPPONENT_B(species) for (OpenPokemonMulti(__LINE__, B_POSITION_OPPONENT_RIGHT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) #define Gender(gender) Gender_(__LINE__, gender) #define Nature(nature) Nature_(__LINE__, nature) @@ -864,20 +1005,24 @@ struct moveWithPP { #define DynamaxLevel(dynamaxLevel) DynamaxLevel_(__LINE__, dynamaxLevel) #define GigantamaxFactor(gigantamaxFactor) GigantamaxFactor_(__LINE__, gigantamaxFactor) #define TeraType(teraType) TeraType_(__LINE__, teraType) -#define Shadow(isShadow) Shadow_(__LINE__, shadow) +#define Shadow(isShadow) Shadow_(__LINE__, isShadow) +#define Shiny(isShiny) Shiny_(__LINE__, isShiny) +#define Environment(environment) Environment_(__LINE__, environment) void SetFlagForTest(u32 sourceLine, u16 flagId); -void TestSetConfig(u32 sourceLine, enum GenConfigTag configTag, u32 value); +void TestSetConfig(u32 sourceLine, enum ConfigTag configTag, u32 value); void ClearFlagAfterTest(void); -void OpenPokemon(u32 sourceLine, u32 side, u32 species); +void OpenPokemon(u32 sourceLine, enum BattlerPosition position, u32 species); +void OpenPokemonMulti(u32 sourceLine, enum BattlerPosition position, u32 species); void ClosePokemon(u32 sourceLine); void RNGSeed_(u32 sourceLine, rng_value_t seed); void AIFlags_(u32 sourceLine, u64 flags); +void BattlerAIFlags_(u32 sourceLine, u32 battler, u64 flags); void AILogScores(u32 sourceLine); void Gender_(u32 sourceLine, u32 gender); void Nature_(u32 sourceLine, u32 nature); -void Ability_(u32 sourceLine, u32 ability); +void Ability_(u32 sourceLine, enum Ability ability); void Level_(u32 sourceLine, u32 level); void MaxHP_(u32 sourceLine, u32 maxHP); void HP_(u32 sourceLine, u32 hp); @@ -900,8 +1045,26 @@ void Status1_(u32 sourceLine, u32 status1); void OTName_(u32 sourceLine, const u8 *otName); void DynamaxLevel_(u32 sourceLine, u32 dynamaxLevel); void GigantamaxFactor_(u32 sourceLine, bool32 gigantamaxFactor); -void TeraType_(u32 sourceLine, u32 teraType); +void TeraType_(u32 sourceLine, enum Type teraType); void Shadow_(u32 sourceLine, bool32 isShadow); +void Shiny_(u32 sourceLine, bool32 isShiny); +void Environment_(u32 sourceLine, u32 environment); + +static inline bool8 IsMultibattleTest(void) +{ + if (TESTING) + { + if (((gBattleTypeFlags & BATTLE_MULTI_TEST) == BATTLE_MULTI_TEST) + || ((gBattleTypeFlags & BATTLE_TWO_VS_ONE_TEST) == BATTLE_TWO_VS_ONE_TEST)) + return TRUE; + else + return FALSE; + } + else + { + return FALSE; + } +} // Created for easy use of EXPECT_MOVES, so the user can provide 1, 2, 3 or 4 moves for AI which can pass the test. struct FourMoves @@ -952,7 +1115,7 @@ enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING }; #define SKIP_TURN(battler) SkipTurn(__LINE__, battler) #define SEND_OUT(battler, partyIndex) SendOut(__LINE__, battler, partyIndex) #define USE_ITEM(battler, ...) UseItem(__LINE__, battler, (struct ItemContext) { R_APPEND_TRUE(__VA_ARGS__) }) -#define WITH_RNG(tag, value) rng: ((struct TurnRNG) { tag, value }) +#define WITH_RNG(tag, value) rng: ((struct RiggedRNG) { tag, value }) struct MoveContext { @@ -977,7 +1140,7 @@ struct MoveContext u16 explicitNotExpected:1; struct BattlePokemon *target; bool8 explicitTarget; - struct TurnRNG rng; + struct RiggedRNG rng; bool8 explicitRNG; }; @@ -989,6 +1152,8 @@ struct ItemContext u16 explicitPartyIndex:1; u16 move; u16 explicitMove:1; + struct RiggedRNG rng; + u16 explicitRNG:1; }; void OpenTurn(u32 sourceLine); @@ -1018,6 +1183,7 @@ void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); #define ABILITY_POPUP(battler, ...) QueueAbility(__LINE__, battler, (struct AbilityEventContext) { __VA_ARGS__ }) #define ANIMATION(type, id, ...) QueueAnimation(__LINE__, type, id, (struct AnimationEventContext) { __VA_ARGS__ }) #define HP_BAR(battler, ...) QueueHP(__LINE__, battler, (struct HPEventContext) { R_APPEND_TRUE(__VA_ARGS__) }) +#define SUB_HIT(battler, ...) QueueSubHit(__LINE__, battler, (struct SubHitEventContext) { R_APPEND_TRUE(__VA_ARGS__) }) #define EXPERIENCE_BAR(battler, ...) QueueExp(__LINE__, battler, (struct ExpEventContext) { R_APPEND_TRUE(__VA_ARGS__) }) // Static const is needed to make the modern compiler put the pattern variable in the .rodata section, instead of putting it on stack(which can break the game). #define MESSAGE(pattern) do {static const u8 msg[] = _(pattern); QueueMessage(__LINE__, msg);} while (0) @@ -1048,7 +1214,7 @@ enum QueueGroupType struct AbilityEventContext { - u16 ability; + enum Ability ability; }; struct AnimationEventContext @@ -1070,6 +1236,15 @@ struct HPEventContext bool8 explicitCaptureDamage; }; +struct SubHitEventContext +{ + u8 _; + bool8 subBreak; + bool8 explicitSubBreak; + u16 *captureDamage; + bool8 explicitCaptureDamage; +}; + struct ExpEventContext { u8 _; @@ -1098,6 +1273,7 @@ void CloseQueueGroup(u32 sourceLine); void QueueAbility(u32 sourceLine, struct BattlePokemon *battler, struct AbilityEventContext); void QueueAnimation(u32 sourceLine, u32 type, u32 id, struct AnimationEventContext); void QueueHP(u32 sourceLine, struct BattlePokemon *battler, struct HPEventContext); +void QueueSubHit(u32 sourceLine, struct BattlePokemon *battler, struct SubHitEventContext); void QueueExp(u32 sourceLine, struct BattlePokemon *battler, struct ExpEventContext); void QueueMessage(u32 sourceLine, const u8 *pattern); void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEventContext); diff --git a/include/test/overworld_script.h b/include/test/overworld_script.h index e849f87e0c15..a5bee797b22a 100644 --- a/include/test/overworld_script.h +++ b/include/test/overworld_script.h @@ -51,7 +51,6 @@ asm(".set FALSE, 0\n" ".set VARS_END, " STR(VARS_END) "\n" ".set SPECIAL_VARS_START, " STR(SPECIAL_VARS_START) "\n" ".set SPECIAL_VARS_END, " STR(SPECIAL_VARS_END) "\n"); -asm(".include \"constants/gba_constants.inc\"\n"); // Make overworld script macros available. asm(".include \"constants/gba_constants.inc\"\n" diff --git a/include/test/test.h b/include/test/test.h index 092b603ec015..15f71d50b198 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -2,8 +2,10 @@ #define GUARD_TEST_H #include "test_runner.h" +#include "random.h" #define MAX_PROCESSES 32 // See also tools/mgba-rom-test-hydra/main.c +#define RIGGED_RNG_COUNT 8 enum TestResult { @@ -26,6 +28,9 @@ struct TestRunner void (*tearDown)(void *); bool32 (*checkProgress)(void *); bool32 (*handleExitWithResult)(void *, enum TestResult); + u32 (*randomUniform)(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32), void *caller); + u32 (*randomWeightedArray)(enum RandomTag tag, u32 sum, u32 n, const u8 *weights, void *caller); + const void* (*randomElementArray)(enum RandomTag tag, const void *array, size_t size, size_t count, void *caller); }; struct Test @@ -37,10 +42,18 @@ struct Test u16 sourceLine; }; +enum TestFilterMode +{ + TEST_FILTER_MODE_TEST_NAME_PREFIX, + TEST_FILTER_MODE_TEST_NAME_INFIX, + TEST_FILTER_MODE_FILENAME_EXACT, +}; + struct TestRunnerState { u8 state; u8 exitCode; + enum TestFilterMode filterMode:8; const char *skipFilename; u32 failedAssumptionsBlockLine; const struct Test *test; @@ -54,31 +67,50 @@ struct TestRunnerState u32 timeoutSeconds; }; +struct PersistentTestRunnerState +{ + u32 address:28; + u32 state:1; + u32 expectCrash:1; + u32 unused_30:2; +}; + extern const u8 gTestRunnerN; extern const u8 gTestRunnerI; extern const char gTestRunnerArgv[256]; extern const struct TestRunner gAssumptionsRunner; +struct RiggedRNG +{ + u16 tag; + u16 value; +}; + struct FunctionTestRunnerState { u16 parameters; u16 runParameter; u16 checkProgressParameter; + struct RiggedRNG rngList[RIGGED_RNG_COUNT]; }; extern const struct TestRunner gFunctionTestRunner; extern struct FunctionTestRunnerState *gFunctionTestRunnerState; extern struct TestRunnerState gTestRunnerState; +extern struct PersistentTestRunnerState gPersistentTestRunnerState; void CB2_TestRunner(void); void Test_ExpectedResult(enum TestResult); void Test_ExpectLeaks(bool32); +void Test_ExpectCrash(bool32); void Test_ExitWithResult(enum TestResult, u32 stopLine, const char *fmt, ...); u32 SourceLine(u32 sourceLineOffset); u32 SourceLineOffset(u32 sourceLine); +void SetupRiggedRng(u32 sourceLine, enum RandomTag randomTag, u32 value); +void ClearRiggedRng(); s32 Test_MgbaPrintf(const char *fmt, ...); @@ -125,7 +157,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a != _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_EQ(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_EQ(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, a, b); \ } while (0) #define EXPECT_NE(a, b) \ @@ -133,7 +165,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a == _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_NE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_NE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, a, b); \ } while (0) #define EXPECT_LT(a, b) \ @@ -141,7 +173,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a >= _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_LT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_LT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, a, b); \ } while (0) #define EXPECT_LE(a, b) \ @@ -149,7 +181,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a > _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_LE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_LE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, a, b); \ } while (0) #define EXPECT_GT(a, b) \ @@ -157,7 +189,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a <= _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_GT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_GT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, a, b); \ } while (0) #define EXPECT_GE(a, b) \ @@ -165,7 +197,7 @@ s32 Test_MgbaPrintf(const char *fmt, ...); { \ typeof(a) _a = (a), _b = (b); \ if (_a < _b) \ - Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_GE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \ + Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_GE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, a, b); \ } while (0) struct Benchmark { s32 ticks; }; @@ -220,10 +252,15 @@ static inline struct Benchmark BenchmarkStop(void) #define KNOWN_LEAKING \ Test_ExpectLeaks(TRUE) +#define KNOWN_CRASHING \ + Test_ExpectCrash(TRUE) + #define PARAMETRIZE if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter) #define PARAMETRIZE_LABEL(f, label) if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter && (Test_MgbaPrintf(":N%s: " f " (%d/%d)", gTestRunnerState.test->name, label, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters), 1)) +#define SET_RNG(tag, value) SetupRiggedRng(__LINE__, tag, value) + #define TO_DO \ do { \ Test_ExpectedResult(TEST_RESULT_TODO); \ diff --git a/include/test/test_runner_battle.h b/include/test/test_runner_battle.h new file mode 100644 index 000000000000..8a2c0dc64b4a --- /dev/null +++ b/include/test/test_runner_battle.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BATTLE_TEST_RUNNER_H +#define GUARD_BATTLE_TEST_RUNNER_H + +bool8 IsMultibattleTest(void); + +#endif diff --git a/include/test_runner.h b/include/test_runner.h index 9e0d96ff5bb7..fa97da988112 100644 --- a/include/test_runner.h +++ b/include/test_runner.h @@ -2,19 +2,26 @@ #define GUARD_TEST_RUNNER_H extern const bool8 gTestRunnerEnabled; +#if TESTING extern const bool8 gTestRunnerHeadless; +#else +#define gTestRunnerHeadless FALSE +#endif extern const bool8 gTestRunnerSkipIsFail; #if TESTING -void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability); +enum Gimmick; + +void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, enum Ability ability); void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId); void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP); +void TestRunner_Battle_RecordSubHit(u32 battlerId, u32 damage, bool32 broke); void TestRunner_Battle_RecordExp(u32 battlerId, u32 oldExp, u32 newExp); void TestRunner_Battle_RecordMessage(const u8 *message); void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1); void TestRunner_Battle_AfterLastTurn(void); -void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target); +void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target, enum Gimmick gimmick); void TestRunner_Battle_CheckSwitch(u32 battlerId, u32 partyIndex); void TestRunner_Battle_CheckAiMoveScores(u32 battlerId); void TestRunner_Battle_AISetScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score); @@ -26,12 +33,14 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex); u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex); +u32 TestRunner_Battle_GetForcedEnvironment(void); #else #define TestRunner_Battle_RecordAbilityPopUp(...) (void)0 #define TestRunner_Battle_RecordAnimation(...) (void)0 #define TestRunner_Battle_RecordHP(...) (void)0 +#define TestRunner_Battle_RecordSubHit(...) (void)0 #define TestRunner_Battle_RecordExp(...) (void)0 #define TestRunner_Battle_RecordMessage(...) (void)0 #define TestRunner_Battle_RecordStatus1(...) (void)0 @@ -49,6 +58,8 @@ u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex); #define TestRunner_Battle_GetChosenGimmick(...) (u32)0 +#define TestRunner_Battle_GetForcedEnvironment(...) (u8)0 + #endif #endif diff --git a/include/text.h b/include/text.h index 040fe49f1327..294bff94c7be 100644 --- a/include/text.h +++ b/include/text.h @@ -1,8 +1,15 @@ #ifndef GUARD_TEXT_H #define GUARD_TEXT_H +#include "config/text.h" #include "constants/characters.h" +// This is to prevent the user from having a higher text speed modifier than the printing system can handle. +STATIC_ASSERT( TEXT_SPEED_SLOW_MODIFIER <= 31 + && TEXT_SPEED_MEDIUM_MODIFIER <= 31 + && TEXT_SPEED_FAST_MODIFIER <= 31 + && TEXT_SPEED_INSTANT_MODIFIER <= 31, TextSpeedModifiersCantGoPast31) + // Given as a text speed when all the text should be // loaded at once but not copied to vram yet. #define TEXT_SKIP_DRAW 0xFF @@ -59,9 +66,9 @@ struct TextPrinterSubStruct u8 fontId:4; // 0x14 bool8 hasPrintBeenSpedUp:1; u8 unk:3; - u8 downArrowDelay:5; - u8 downArrowYPosIdx:2; - bool8 hasFontIdBeenSet:1; + u16 utilityCounter:13; + u16 downArrowYPosIdx:2; + bool16 hasFontIdBeenSet:1; u8 autoScrollDelay; }; @@ -135,7 +142,6 @@ struct TextGlyph }; extern TextFlags gTextFlags; - extern u8 gDisableTextPrinters; extern struct TextGlyph gCurGlyph; @@ -178,4 +184,11 @@ u32 GetFontIdToFit(const u8 *string, u32 widestFontId, u32 letterSpacing, u32 wi u8 *PrependFontIdToFit(u8 *start, u8 *end, u32 fontId, u32 width); u8 *WrapFontIdToFit(u8 *start, u8 *end, u32 fontId, u32 width); +// player text speed +u32 GetPlayerTextSpeed(void); +u32 GetPlayerTextSpeedDelay(void); +u32 GetPlayerTextSpeedModifier(void); +u32 GetPlayerTextScrollSpeed(void); +bool32 IsPlayerTextSpeedInstant(void); + #endif // GUARD_TEXT_H diff --git a/include/trade.h b/include/trade.h index 24de69b036ab..553d5ab334bf 100644 --- a/include/trade.h +++ b/include/trade.h @@ -14,7 +14,7 @@ s32 GetGameProgressForLinkTrade(void); void CB2_StartCreateTradeMenu(void); void CB2_LinkTrade(void); int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isModernFatefulEncounter); -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter); +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, enum Type requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter); int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx); void InitTradeSequenceBgGpuRegs(void); void LinkTradeDrawWindow(void); diff --git a/include/trainer_hill.h b/include/trainer_hill.h index 6e2ec0ba0ac6..848e40e7d5ac 100644 --- a/include/trainer_hill.h +++ b/include/trainer_hill.h @@ -45,7 +45,7 @@ extern u32 *gTrainerHillVBlankCounter; void CallTrainerHillFunction(void); void ResetTrainerHillResults(void); -u8 GetTrainerHillOpponentClass(u16 trainerId); +enum TrainerClassID GetTrainerHillOpponentClass(u16 trainerId); void GetTrainerHillTrainerName(u8 *dst, u16 trainerId); u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId); void InitTrainerHillBattleStruct(void); diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h index 619fa91e7039..ac464266eb27 100644 --- a/include/trainer_pokemon_sprites.h +++ b/include/trainer_pokemon_sprites.h @@ -16,5 +16,6 @@ u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 palet u16 FreeAndDestroyTrainerPicSprite(u16 spriteId); u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId); u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass); +void CopyTrainerBackspriteFramesToDest(u8 trainerPicId, u8 *dest); #endif // GUARD_TRAINER_POKEMON_SPRITES_H diff --git a/include/trainer_pools.h b/include/trainer_pools.h index 196657a55fdc..72df3e765c5b 100644 --- a/include/trainer_pools.h +++ b/include/trainer_pools.h @@ -56,10 +56,12 @@ enum PoolTags { struct PoolRules { - bool8 speciesClause; - bool8 excludeForms; - bool8 itemClause; - bool8 itemClauseExclusions; + u8 speciesClause:1; + u8 excludeForms:1; + u8 itemClause:1; + u8 itemClauseExclusions:1; + u8 megaStoneClause:1; + u8 zCrystalClause:1; u8 tagMaxMembers[POOL_NUM_TAGS]; bool8 tagRequired[POOL_NUM_TAGS]; }; diff --git a/include/trainer_slide.h b/include/trainer_slide.h index 19fdf7c24a2a..a8f1988fb8fe 100644 --- a/include/trainer_slide.h +++ b/include/trainer_slide.h @@ -12,7 +12,7 @@ struct MessageStatus void SetTrainerSlideMessage(enum DifficultyLevel difficulty, u32 trainerId, u32 slideId); enum TrainerSlideTargets ShouldDoTrainerSlide(u32 battler, enum TrainerSlideType slideId); -void TryInitializeFirstSTABMoveTrainerSlide(u32 battlerDef, u32 battlerAtk, u32 moveType); +void TryInitializeFirstSTABMoveTrainerSlide(u32 battlerDef, u32 battlerAtk, enum Type moveType); void TryInitializeTrainerSlidePlayerLandsFirstCriticalHit(u32 target); void TryInitializeTrainerSlideEnemyLandsFirstCriticalHit(u32 target); void TryInitializeTrainerSlidePlayerLandsFirstSuperEffectiveHit(u32 target); diff --git a/include/union_room.h b/include/union_room.h index 514a15985027..5616c106d380 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -149,7 +149,7 @@ extern u8 gPlayerCurrActivity; extern struct RfuGameCompatibilityData gRfuPartnerCompatibilityData; extern u16 gUnionRoomOfferedSpecies; -extern u8 gUnionRoomRequestedMonType; +extern enum Type gUnionRoomRequestedMonType; u8 CreateTask_CreateTradeMenu(void); void SetUsingUnionRoomStartMenu(void); diff --git a/include/vs_seeker.h b/include/vs_seeker.h index d6795432b071..749aaeab57a7 100644 --- a/include/vs_seeker.h +++ b/include/vs_seeker.h @@ -9,6 +9,7 @@ void MapResetTrainerRematches(u16 mapGroup, u16 mapNum); void ClearRematchMovementByTrainerId(void); u16 GetRematchTrainerIdVSSeeker(u16 trainerId); bool32 IsVsSeekerEnabled(void); +void NativeVsSeekerRematchId(struct ScriptContext *ctx); #define VSSEEKER_RECHARGE_STEPS 100 diff --git a/include/wild_encounter.h b/include/wild_encounter.h index 8a0eb671f65e..c8f60712f906 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -63,9 +63,10 @@ bool8 StandardWildEncounter_Debug(void); u32 CalculateChainFishingShinyRolls(void); void CreateWildMon(u16 species, u8 level); u16 GetCurrentMapWildMonHeaderId(void); -u8 ChooseWildMonIndex_Land(void); -u8 ChooseWildMonIndex_WaterRock(void); -u8 ChooseHiddenMonIndex(void); +u32 ChooseWildMonIndex_Land(void); +u32 ChooseWildMonIndex_Water(void); +u32 ChooseWildMonIndex_Rocks(void); +u32 ChooseHiddenMonIndex(void); bool32 MapHasNoEncounterData(void); enum TimeOfDay GetTimeOfDayForEncounters(u32 headerId, enum WildPokemonArea area); diff --git a/include/window.h b/include/window.h index 2dd67b123ffd..fc35f724d90c 100644 --- a/include/window.h +++ b/include/window.h @@ -45,7 +45,7 @@ struct WindowTemplate struct Window { struct WindowTemplate window; - u8 *tileData; + ALIGNED(4) u8 *tileData; }; bool32 InitWindows(const struct WindowTemplate *templates); diff --git a/ld_script_modern.ld b/ld_script_modern.ld index ee4713ab177e..47989bd91f30 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -26,7 +26,7 @@ SECTIONS { .ewram.sbss (NOLOAD) : ALIGN(4) { - src/*.o(.sbss); + *.o(.sbss); } > EWRAM .iwram ORIGIN(IWRAM) : AT (__iwram_lma) @@ -41,14 +41,8 @@ SECTIONS { .iwram.bss (NOLOAD) : ALIGN(4) { - src/*.o(.bss); - data/*.o(.bss); - *libc.a:*.o(.bss*); - *libnosys.a:*.o(.bss*); - - src/m4a.o(.bss.code); - - src/*.o(common_data); + *.o(.bss*); + *.o(common_data); src/*.o(COMMON); *libc.a:*.o(COMMON); *libnosys.a:*.o(COMMON); @@ -60,83 +54,33 @@ SECTIONS { ALIGN(4) { src/rom_header.o(.text*); - src/rom_header_gf.o(.text.*); - src/rom_header_rhh.o(.text.*); + KEEP(*.o(.text.header_gf)); + KEEP(*.o(.text.header_rhh)); src/crt0.o(.text); - src/main.o(.text); - src/*.o(.text*); - asm/*.o(.text*); - } > ROM =0 - - script_data : - ALIGN(4) - { - data/*.o(script_data); - } > ROM =0 - - lib_text : - ALIGN(4) - { - src/libgcnmultiboot.o(.text); - src/m4a_1.o(.text); - src/m4a.o(.text); - src/agb_flash.o(.text); - src/agb_flash_1m.o(.text); - src/agb_flash_mx.o(.text); - src/siirtc.o(.text); - src/librfu_stwi.o(.text); - src/librfu_intr.o(.text); - src/librfu_rfu.o(.text); - src/librfu_sio32id.o(.text); *libagbsyscall.a:*.o(.text*); *libgcc.a:*.o(.text*); *libc.a:*.o(.text*); *libnosys.a:*.o(.text*); - src/libisagbprn.o(.text); + asm/*.o(.text*); + KEEP(*.o(.text.consts)); + *.o(.text*); + *.o(.eh_frame); } > ROM =0 - .rodata : + script_data : ALIGN(4) { - src/*.o(.rodata*); - data/*.o(.rodata*); + data/*.o(script_data); } > ROM =0 - song_data : + .rodata : ALIGN(4) { - sound/songs/*.o(.rodata); - } > ROM =0 - - lib_rodata : - SUBALIGN(4) - { - src/m4a.o(.rodata); - src/agb_flash.o(.rodata); - src/agb_flash_1m.o(.rodata); - src/agb_flash_mx.o(.rodata); - src/agb_flash_le.o(.rodata); - src/siirtc.o(.rodata); - src/librfu_rfu.o(.rodata); - src/librfu_sio32id.o(.rodata); + *.o(.rodata*); *libgcc.a:*.o(.rodata*); *libc.a:*.o(.rodata*); *libc.a:*.o(.data*); - src/libisagbprn.o(.rodata); - } > ROM =0 - - multiboot_data : - ALIGN(4) - { - data/multiboot_ereader.o(.rodata); - data/multiboot_berry_glitch_fix.o(.rodata); - data/multiboot_pokemon_colosseum.o(.rodata); - } > ROM =0 - - gfx_data : - ALIGN(4) - { - src/graphics.o(.rodata); + sound/songs/*.o(.rodata); } > ROM =0 .data.iwram : diff --git a/ld_script_test.ld b/ld_script_test.ld index d279d6b4f6a1..a40329ff1c95 100644 --- a/ld_script_test.ld +++ b/ld_script_test.ld @@ -6,9 +6,10 @@ gInitialMainCB2 = CB2_TestRunner; MEMORY { - EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K - IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K - ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M + EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K + IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 0x7F00 + IWRAM_PERSISTENT (rwx) : ORIGIN = 0x3007F00, LENGTH = 0x100 + ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M } SECTIONS { @@ -18,6 +19,7 @@ SECTIONS { { __ewram_start = .; *(.ewram*) + . = ALIGN(4); __ewram_end = .; } > EWRAM @@ -60,13 +62,11 @@ SECTIONS { /* .persistent starts at 0x3007F00 */ /* WARNING: This is the end of the IRQ stack, if there's too * much data it WILL be overwritten. */ - - . = 0x03007F00; .iwram.persistent (NOLOAD) : ALIGN(4) { test/*.o(.persistent); - } > IWRAM + } > IWRAM_PERSISTENT /* BEGIN ROM DATA */ . = 0x8000000; @@ -75,8 +75,9 @@ SECTIONS { ALIGN(4) { src/rom_header.o(.text); - src/rom_header_gf.o(.text.*); - src/rom_header_rhh.o(.text.*); + KEEP(*.o(.text.header_gf)); + KEEP(*.o(.text.header_rhh)); + KEEP(*.o(.text.consts)); src/*.o(.text); } > ROM =0 @@ -135,6 +136,7 @@ SECTIONS { ALIGN(4) { __start_tests = .; + test/test_test_runner.o(.tests); /* Sanity checks first. */ test/*.o(.tests); __stop_tests = .; test/*.o(.text); diff --git a/make_tools.mk b/make_tools.mk index 75ebc05c9625..f0eb2d296250 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -5,17 +5,17 @@ MAKEFLAGS += --no-print-directory # Inclusive list. If you don't want a tool to be built, don't add it here. TOOLS_DIR := tools -TOOL_NAMES := aif2pcm bin2c gbafix gbagfx jsonproc mapjson mid2agb preproc ramscrgen rsfont scaninc trainerproc +TOOL_NAMES := bin2c gbafix gbagfx jsonproc mapjson mid2agb preproc ramscrgen rsfont scaninc trainerproc compresSmol wav2agb CHECK_TOOL_NAMES = patchelf mgba-rom-test-hydra TOOLDIRS := $(TOOL_NAMES:%=$(TOOLS_DIR)/%) CHECKTOOLDIRS := $(CHECK_TOOL_NAMES:%=$(TOOLS_DIR)/%) # Tool making doesnt require a pokeemerald dependency scan. -RULES_NO_SCAN += tools check-tools clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) +RULES_NO_SCAN += tools check-tools clean-tools clean-check-tools history $(TOOLDIRS) $(CHECKTOOLDIRS) .PHONY: $(RULES_NO_SCAN) -tools: $(TOOLDIRS) +tools: history $(TOOLDIRS) check-tools: $(CHECKTOOLDIRS) @@ -30,3 +30,6 @@ clean-tools: clean-check-tools: @$(foreach tooldir,$(CHECKTOOLDIRS),$(MAKE) clean -C $(tooldir);) + +history: + @$(SHELL) ./check_history.sh diff --git a/migration_scripts/1.11/consolidate_contest_opponent_filters.py b/migration_scripts/1.11/consolidate_contest_opponent_filters.py index 240152cea2e9..0f273f7b1d32 100644 --- a/migration_scripts/1.11/consolidate_contest_opponent_filters.py +++ b/migration_scripts/1.11/consolidate_contest_opponent_filters.py @@ -30,7 +30,6 @@ def add_filter_data(match): if trainer_name in source_data: contest_filter = source_data[trainer_name] print(f"Updating {trainer_name}: adding {contest_filter}") - #return f'{trainer_name} = {{\n .filter = {contest_filter}' return f'{match.group(0)}\n .filter = {contest_filter}' else: return match.group(0) diff --git a/migration_scripts/1.13/convert_compressed_files.py b/migration_scripts/1.13/convert_compressed_files.py new file mode 100644 index 000000000000..0ccb5d61c1ce --- /dev/null +++ b/migration_scripts/1.13/convert_compressed_files.py @@ -0,0 +1,75 @@ +import glob +import re +import os +from pathlib import Path + +if not os.path.exists("Makefile"): + print("Please run this script from your root folder.") + quit() + +primaryTileset_pattern = re.compile(r"(.*\"data/tilesets/primary/.+\.4bpp\.)lz(\".*)") +secondaryTileset_pattern = re.compile(r"(.*\"data/tilesets/secondary/.+\.4bpp\.)lz(\".*)") +tilemap_pattern = re.compile(r"(.*\"graphics/.+\.bin\.)(?:lz|rl)(\".*)") +lzuncomp_pattern = re.compile(r"(.*)\bLZ77UnComp([WV])ram\b(\(.*)") +lzdecomp_pattern = re.compile(r"(.*)\bLZDecompress([WV])ram\b(\(.*)") +rluncomp_pattern = re.compile(r"(.*)\bRLUnComp([WV])ram\b(\(.*)") + +def handle_file(fileInput): + fileTest = Path(fileInput) + if not fileTest.is_file(): + return False + allLines = list() + with open(fileInput, 'r', encoding='UTF-8') as file: + has_decompress_h = False + needs_decompress_h = False + + while line:=file.readline(): + if line.strip() == "#include \"decompress.h\"": + has_decompress_h = True + elif match := secondaryTileset_pattern.match(line): + line = match.group(1) + "fastSmol" + match.group(2) + "\n" + elif match := primaryTileset_pattern.match(line): + line = match.group(1) + "smol" + match.group(2) + "\n" + elif match := tilemap_pattern.match(line): + line = match.group(1) + "smolTM" + match.group(2) + "\n" + elif ".4bpp.lz" in line: + line = line.replace(".4bpp.lz", ".4bpp.smol") + elif ".4bpp.rl" in line: + line = line.replace(".4bpp.rl", ".4bpp.smol") + elif ".8bpp.lz" in line: + line = line.replace(".8bpp.lz", ".8bpp.smol") + elif ".8bpp.rl" in line: + line = line.replace(".8bpp.rl", ".8bpp.smol") + elif match := lzuncomp_pattern.match(line): + if allLines[-1].strip() != "case MODE_LZ77:": # do not modify DecompressDataWithHeader itself + line = match.group(1) + "DecompressDataWithHeader" + match.group(2) + "ram" + match.group(3) + "\n" + needs_decompress_h = True + elif match := lzdecomp_pattern.match(line): + line = match.group(1) + "DecompressDataWithHeader" + match.group(2) + "ram" + match.group(3) + "\n" + needs_decompress_h = True + elif match := rluncomp_pattern.match(line): + line = match.group(1) + "DecompressDataWithHeader" + match.group(2) + "ram" + match.group(3) + "\n" + needs_decompress_h = True + else: + pass + + allLines.append(line) + + if needs_decompress_h and not has_decompress_h: + # attempt to place the new header in alphabetical order + i = 0 + while not allLines[i].startswith("#include \"") or allLines[i] == "#include \"global.h\"\n": + i += 1 + while allLines[i].startswith("#include \"") and allLines[i] < "#include \"decompress.h\"\n": + i += 1 + allLines.insert(i, "#include \"decompress.h\"\n") + + with open(fileInput, 'w', encoding='UTF-8') as file: + for line in allLines: + file.write(line) + return True + +for path in glob.glob("src/**/*.c", recursive=True): + handle_file(path) +for path in glob.glob("src/**/*.h", recursive=True): + handle_file(path) diff --git a/migration_scripts/1.13/convert_trainers.py b/migration_scripts/1.13/convert_trainers.py new file mode 100644 index 000000000000..ba48f5465e41 --- /dev/null +++ b/migration_scripts/1.13/convert_trainers.py @@ -0,0 +1,401 @@ +import re +import sys +import os + +is_blank = re.compile(r'^[ \t]*(//.*)?$') + +begin_party_definition = re.compile(r'struct TrainerMon (\w+)\[\] =') +end_party_definition = re.compile(r'^ },') +begin_pokemon_definition = re.compile(r'^ { *$') +end_pokemon_definition = re.compile(r'^ },? *$') +level_definition = re.compile(r'\.lvl = (\d+)') +species_definition = re.compile(r'\.species = SPECIES_(\w+)') +gender_definition = re.compile(r'\.gender = TRAINER_MON_(\w+)') +nickname_definition = re.compile(r'\.nickname = COMPOUND_STRING\("([^"]+)"\)') +item_definition = re.compile(r'\.heldItem = ITEM_(\w+)') +ball_definition = re.compile(r'\.ball = ITEM_(\w+)') +ability_definition = re.compile(r'\.ability = ABILITY_(\w+)') +friendship_definition = re.compile(r'\.friendship = (\d+)') +shiny_definition = re.compile(r'\.isShiny = (\w+)') +ivs_definition = re.compile(r'\.iv = TRAINER_PARTY_IVS\(([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+)\)') +evs_definition = re.compile(r'\.ev = TRAINER_PARTY_EVS\(([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+)\)') +moves_definition = re.compile(r'\.moves = \{([^}]+)\}') +move_definition = re.compile(r'MOVE_(\w+)') +nature_definition = re.compile(r'NATURE_(\w+)') + +is_trainer_skip = re.compile(r'(const struct Trainer gTrainers\[\] = \{)|(^ \{$)|(\.partySize =)|(\.party = NULL)|(\.mugshotEnabled = TRUE)|(\};)') + +trainer_normal_definition = re.compile(r' \[DIFFICULTY_NORMAL\]\[(TRAINER_\w+)\] =') +trainer_easy_definition = re.compile(r' \[DIFFICULTY_EASY\]\[(TRAINER_\w+)\] =') +trainer_hard_definition = re.compile(r' \[DIFFICULTY_HARD\]\[(TRAINER_\w+)\] =') +end_pokemon_definition = re.compile(r' },') +trainer_class_definition = re.compile(r'\.trainerClass = TRAINER_CLASS_(\w+)') +encounter_music_gender_definition = re.compile(r'\.encounterMusic_gender = (F_TRAINER_FEMALE \| )?TRAINER_ENCOUNTER_MUSIC_(\w+)') +encounter_music_definition = re.compile(r'TRAINER_ENCOUNTER_MUSIC_(\w+)') +trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_PIC_(\w+)') +trainer_name_definition = re.compile(r'\.trainerName = _\("([^"]*)"\)') +trainer_items_definition = re.compile(r'\.items = \{([^}]*)\}') +trainer_item_definition = re.compile(r'ITEM_(\w+)') +trainer_double_battle_definition = re.compile(r'\.battleType = (\w+)') +trainer_ai_flags_definition = re.compile(r'\.aiFlags = (.*)') +trainer_ai_flag_definition = re.compile(r'AI_FLAG_(\w+)') +trainer_party_definition = re.compile(r'\.party = ') +trainer_mugshot_definition = re.compile(r'\.mugshotColor = MUGSHOT_COLOR_(\w+)') +trainer_starting_status_definition = re.compile(r'\.startingStatus = STARTING_STATUS_(\w+)') + +# NOTE: These are just for aesthetics, the Pokemon would still compile +# without them. +species_replacements = { + "CHIEN_PAO": "Chien-Pao", + "CHI_YU": "Chi-Yu", + "HAKAMO_O": "Hakamo-o", + "HO_OH": "Ho-Oh", + "JANGMO_O": "Jangmo-o", + "KOMMO_O": "Kommo-o", + "PORYGON_Z": "Porygon-Z", + "ROTOM_": "Rotom-", + "TING_LU": "Ting-Lu", + "TYPE_NULL": "Type: Null", + "WO_CHIEN": "Wo-Chien", + + "_ALOLAN": "-Alola", + "_AQUA_BREED": "-Aqua", + "_BATTLE_BOND": "-Bond", + "_BLAZE_BREED": "-Blaze", + "_CAP": "", + "_CLOAK": "", + "_COMBAT_BREED": "-Combat", + "_CROWED_SHIELD": "-Crowned", + "_CROWED_SWORD": "-Crowned", + "_DRIVE": "", + "_EAST_SEA": "-East", + "_FAMILY_OF_FOUR": "-Four", + "_FEMALE": "-F", + "_FLOWER": "", + "_GALARIAN": "-Galar", + "_GIGANTAMAX": "-Gmax", + "_HISUIAN": "-Hisui", + "_ICE_RIDER": "-Ice", + "_NOICE_FACE": "-Noice", + "_ORIGIN": "-Origin", + "_ORIGINAL_COLOR": "-Original", + "_PALDEAN": "-Paldea", + "_PLUMAGE": "", + "_POKE_BALL": "-Pokeball", + "_SHADOW_RIDER": "-Shadow", + "_STRIKE_STYLE": "-Style", + "_TOTEM": "-Totem", + "_ZEN_MODE": "-Zen", +} + +class_fixups = { + "Rs": "RS", +} + +pic_fixups = { + "Rs": "RS", +} + +pokemon_attribute_order = ['Level', 'Ability', 'IVs', 'EVs', 'Happiness', 'Shiny', 'Ball'] + +class Pokemon: + def __init__(self): + self.nickname = None + self.species = None + self.gender = None + self.item = None + self.nature = None + self.attributes = {} + self.attributes['IVs'] = "0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe" + self.moves = [] + + +class Trainer: + def __init__(self, id_): + self.id = id_ + self.class_ = None + self.encounter_music = None + self.gender = None + self.pic = None + self.name = None + self.items = [] + self.double_battle = None + self.ai_flags = None + self.mugshot = None + self.starting_status = None + self.party = None + self.difficulty = None + + +def write_tutorial(output): + output.write('/*\n') + output.write('Trainers and their parties defined with Competetive Syntax.\n') + output.write('Compatible with Pokemon Showdown exports.\n') + output.write('https://github.com/smogon/pokemon-showdown/blob/master/sim/TEAMS.md\n') + output.write('\n') + output.write('A trainer specification starts with "=== TRAINER_XXXX ==="\n') + output.write('and includes everything until the next line that starts with "==="\n') + output.write('or the file ends.\n') + output.write('\n') + output.write('A blank line is required between the trainer and their Pokemon\n') + output.write('and between their Pokemon.\n') + output.write('TRAINER_XXXX is how the trainer is referred to within code.\n') + output.write('Fields with description and/or example of usage\n') + output.write('Required fields for trainers:\n') + output.write(' - Name\n') + output.write(' - Pic\n') + output.write('Optional (but still recommended) fields for trainers:\n') + output.write(' - Class (if not specified, PkMn Trainer will be used)\n') + output.write(' - Gender (Male/Female, affects random gender weights of party if not specified)\n') + output.write(' - Music\n') + output.write(' - Items (Some Item / Another Item / Third Item)\n') + output.write(' (Can also be specified with ITEM_SOME_ITEM)\n') + output.write(' - Battle Type (Singles / Doubles, defaults to Singles)\n') + output.write(' - AI (Ai Flag / Another Flag / Third Flag / ...\n') + output.write(' see "constants/battle_ai.h" for all flags)\n') + output.write(' - Mugshot (enable Mugshots during battle transition\n') + output.write(' set to one of Purple, Green, Pink, Blue or Yellow)\n') + output.write(' - Starting Status (see include/constants/battle.h for values)\n') + output.write('\n') + output.write('Pokemon are then specified using the Showdown Export format.\n') + output.write("If a field is not specified, it will use it's default value.\n") + output.write("\n") + output.write('Required fields for Pokemon:\n') + output.write(' - Species (Either as SPECIES_ABRA or Abra)\n') + output.write(' This line also specifies Gender, Nickname and Held item.\n') + output.write(' Alfred (Abra) (M) @ Eviolite\n') + output.write(' Roberta (SPECIES_ABRA) (F) @ ITEM_CHOICE_SPECS\n') + output.write(' Both lines are valid. Gender (M) or (F) must use a capital letter.\n') + output.write(' Nickname length is limited to 10 characters using standard letters.\n') + output.write(" With narrow font it's increased to 12. Longer strings will be silently shortened.\n") + output.write('\n') + output.write('Optional fields for Pokemon:\n') + output.write(' - Level (Number between 1 and 100, defaults to 100)\n') + output.write(' - Ability (Ability Name or ABILITY_ABILITY_NAME)\n') + output.write(' - IVs (0 HP / 1 Atk / 2 Def / 3 SpA / 4 SpD / 5 Spe, defaults to all 31)\n') + output.write(' (Order does not matter)\n') + output.write(' - EVs (252 HP / 128 Spe / 48 Def, defaults to all 0, is not capped at 512 total)\n') + output.write(' (Order does not matter)\n') + output.write(' - Ball (Poke Ball or ITEM_POKE_BALL, defaults to Poke Ball)\n') + output.write(' - Happiness (Number between 1 and 255)\n') + output.write(' - Nature (Rash or NATURE_RASH, defaults to Hardy)\n') + output.write(' - Shiny (Yes/No, defaults to No)\n') + output.write(' - Dynamax Level (Number between 0 and 10, default 10, also sets "shouldDynamax" to True)\n') + output.write(' - Gigantamax (Yes/No, sets to Gigantamax factor)\n') + output.write(' (doesn\'t do anything to Pokemon without a Gigantamax form, also sets "shouldDynamax" to True)\n') + output.write(' - Tera Type (Set to a Type, either Fire or TYPE_FIRE, also sets "shouldTerastal" to True)\n') + output.write('Moves are defined with a - (dash) followed by a single space, then the move name.\n') + output.write('Either "- Tackle" or "- MOVE_TACKLE" works. One move per line.\n') + output.write('Moves have to be the last lines of a Pokemon.\n') + output.write('If no moves are specified, the Pokemon will use the last 4 moves it learns\n') + output.write('through levelup at its level.\n') + output.write("\n") + output.write('Default IVs and Level can be changed in the "main" function of tools/trainerproc/main.c\n') + output.write("\n") + output.write('This file is processed with a custom preprocessor.\n') + output.write('*/\n') + output.write("\n") + output.write('/*\n') + output.write('Comments can be added as C comment blocks\n') + output.write('// cannot be used as comments\n') + output.write('*/\n') + output.write("\n") + output.write('/*Comments can also be on a single line*/\n') + output.write("\n") + output.write("\n") + + + +def write_to_file(trainer, output): + output.write(f'=== {trainer.id} ===\n') + output.write(f'Name: {trainer.name}\n') + output.write(f'Class: {trainer.class_}\n') + output.write(f'Pic: {trainer.pic}\n') + output.write(f'Gender: {trainer.gender}\n') + output.write(f'Music: {trainer.encounter_music}\n') + if len(trainer.items) > 0: + output.write(f'Items: {trainer.items}\n') + output.write(f'Battle Type: {trainer.double_battle}\n') + if trainer.ai_flags is not None: + output.write(f'AI: {trainer.ai_flags}\n') + if trainer.mugshot: + output.write(f'Mugshot: {trainer.mugshot}\n') + if trainer.difficulty is not None: + output.write(f'Difficulty: {trainer.difficulty}\n') + + output.write(f'\n') + + for pokemon in trainer.party: + if pokemon.species is None: + continue + if pokemon.item is not None: + output.write(f'{pokemon.species} @ {pokemon.item}\n') + else: + output.write(f'{pokemon.species}\n') + # for key in pokemon.attributes: + for key in pokemon_attribute_order: + if key in pokemon.attributes: + output.write(f'{key}: {pokemon.attributes[key]}\n') + if pokemon.nature: + output.write(f'Nature: {pokemon.nature}\n') + for move in pokemon.moves: + output.write(f'- {move}\n') + output.write(f'\n') + + +def parse_trainers(content, output): + newlines = 0 + trainer = None + pokemon = None + party = [] + moves = [] + + write_tutorial(output) + + for line_no, line in enumerate(content, 1): + try: + line = line[:-1] + + # Trainer defition + if m := trainer_normal_definition.search(line): + if trainer is not None: + trainer.party = party + write_to_file(trainer, output) + trainer = None + party = [] + [id_] = m.groups() + trainer = Trainer(id_) + trainer.difficulty = None + trainer.gender = 'Male' + elif m := trainer_easy_definition.search(line): + if trainer is not None: + trainer.party = party + write_to_file(trainer, output) + trainer = None + party = [] + [id_] = m.groups() + trainer = Trainer(id_) + trainer.difficulty = "Easy" + trainer.gender = 'Male' + elif m := trainer_hard_definition.search(line): + if trainer is not None: + trainer.party = party + write_to_file(trainer, output) + trainer = None + party = [] + [id_] = m.groups() + trainer = Trainer(id_) + trainer.difficulty = "Hard" + trainer.gender = 'Male' + elif m := trainer_class_definition.search(line): + [class_] = m.groups() + class_ = class_.replace("_", " ").title() + for match, replacement in class_fixups.items(): + class_ = class_.replace(match, replacement) + trainer.class_ = class_ + elif m := encounter_music_gender_definition.search(line): + [is_female, music] = m.groups() + trainer.gender = 'Female' if is_female else 'Male' + trainer.encounter_music = music.replace("_", " ").title() + elif m := encounter_music_definition.search(line): + [music] = m.groups() + trainer.encounter_music = music.replace("_", " ").title() + elif "F_TRAINER_FEMALE" in line: + trainer.gender = 'Female' + elif m := trainer_pic_definition.search(line): + [pic] = m.groups() + pic = pic.replace("_", " ").title() + for match, replacement in pic_fixups.items(): + pic = pic.replace(match, replacement) + trainer.pic = pic + elif m := trainer_name_definition.search(line): + [name] = m.groups() + trainer.name = name + elif m := trainer_items_definition.search(line): + [items] = m.groups() + trainer.items = " / ".join(item.replace("_", " ").title() for item in trainer_item_definition.findall(items) if item != "NONE") + elif m := trainer_double_battle_definition.search(line): + [double_battle] = m.groups() + if double_battle == 'TRAINER_BATTLE_TYPE_DOUBLES': + trainer.double_battle = "Doubles" + elif double_battle == 'TRAINER_BATTLE_TYPE_SINGLES': + trainer.double_battle = "Singles" + elif m := trainer_ai_flags_definition.search(line): + [ai_flags] = m.groups() + trainer.ai_flags = " / ".join(ai_flag.replace("_", " ").title() for ai_flag in trainer_ai_flag_definition.findall(ai_flags)) + elif m := trainer_mugshot_definition.search(line): + [color] = m.groups() + trainer.mugshot = color.title() + elif m := trainer_starting_status_definition.search(line): + [starting_status] = m.groups() + trainer.starting_status = starting_status.replace("_", " ").title() + elif m := trainer_party_definition.search(line): + pokemon = Pokemon() + + # Party mons + elif end_pokemon_definition.search(line): + party.append(pokemon) + pokemon = Pokemon() + elif m := level_definition.search(line): + [level] = m.groups() + pokemon.attributes['Level'] = level + elif m := species_definition.search(line): + [species_] = m.groups() + for match, replacement in species_replacements.items(): + species_ = species_.replace(match, replacement) + pokemon.species = species_.replace("_", " ").title() + elif m := gender_definition.search(line): + [gender_] = m.groups() + if gender_ == 'MALE': + pokemon.gender = 'M' + elif gender_ == 'FEMALE': + pokemon.gender = 'F' + elif m := nickname_definition.search(line): + [nickname] = m.groups() + pokemon.nickname = nickname + elif m := item_definition.search(line): + [item_] = m.groups() + pokemon.item = item_.replace("_", " ").title() + elif m := ball_definition.search(line): + [ball] = m.groups() + pokemon.attributes['Ball'] = ball.replace("_", " ").title() + elif m := ability_definition.search(line): + [ability] = m.groups() + pokemon.attributes['Ability'] = ability.replace("_", " ").title() + elif m := friendship_definition.search(line): + [friendship] = m.groups() + pokemon.attributes['Happiness'] = friendship + elif m := shiny_definition.search(line): + [shiny] = m.groups() + if shiny == 'TRUE': + pokemon.attributes['Shiny'] = 'Yes' + elif shiny == 'FALSE': + pokemon.attributes['Shiny'] = 'No' + elif m := ivs_definition.search(line): + [hp, attack, defense, speed, special_attack, special_defense] = [stat.strip() for stat in m.groups()] + stats = {"HP": hp, "Atk": attack, "Def": defense, "SpA": special_attack, "SpD": special_defense, "Spe": speed} + pokemon.attributes['IVs'] = ' / '.join(f"{value} {key}" for key, value in stats.items()) + elif m := evs_definition.search(line): + [hp, attack, defense, speed, special_attack, special_defense] = [stat.strip() for stat in m.groups()] + stats = {"HP": hp, "Atk": attack, "Def": defense, "SpA": special_attack, "SpD": special_defense, "Spe": speed} + pokemon.attributes['EVs'] = ' / '.join(f"{value} {key}" for key, value in stats.items() if value != '0') + elif m := move_definition.search(line): + [move] = m.groups() + pokemon.moves.append(move.replace("_", " ").title()) + elif m := nature_definition.search(line): + [nature] = m.groups() + pokemon.nature = nature.replace("_", " ").title() + + except Exception as e: + print(f"{line_no}: {e}") + +if __name__ == '__main__': + try: + [argv0, trainers_in_path, out_path] = sys.argv + except: + print(f"usage: python3 {sys.argv[0]} ") + print("trainers.h path: src/data/trainers.h") + print("trainers.party output path: src/data/trainers.party") + else: + with open(trainers_in_path, "r") as source, open(out_path, 'w') as output: + parse_trainers(source, output) diff --git a/migration_scripts/1.14/bin_to_wav.py b/migration_scripts/1.14/bin_to_wav.py new file mode 100644 index 000000000000..499c7666e25c --- /dev/null +++ b/migration_scripts/1.14/bin_to_wav.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python3 + +""" +Converts .bin audio files (GBA format) to .wav files. +Reads the binary format created by aif2pcm and generates WAV files +that will produce identical binaries when processed by wav2agb -b. +""" + +import struct +import sys +import os +from typing import Optional + +# Delta encoding table used for compression/decompression +# Matches the table in tools/aif2pcm/main.c +DELTA_ENCODING_TABLE = [ + 0, 1, 4, 9, 16, 25, 36, 49, + -64, -49, -36, -25, -16, -9, -4, -1, +] + + +def delta_decompress(compressed_data: bytes, expected_length: int) -> bytes: + """ + Decompress delta-encoded audio data. + + Delta compression format (from tools/aif2pcm/main.c): + - Data is organized in blocks of up to 64 samples each + - Each block starts with a base sample value (1 byte) + - Followed by a delta index (4 bits) for the second sample + - Then 31 pairs of delta indices (4 bits each, packed into bytes) + - Delta indices reference DELTA_ENCODING_TABLE to get the actual delta value + + Args: + compressed_data: The compressed audio data + expected_length: Expected length of decompressed data + + Returns: + Decompressed audio data as bytes + """ + pcm = bytearray(expected_length + 0x40) # Extra buffer space + + i = 0 # Input position + j = 0 # Output position + + while i < len(compressed_data) and j < expected_length: + # Read base sample for this block + base = compressed_data[i] + # Convert to signed int8 for calculations + base_signed = base if base < 128 else base - 256 + pcm[j] = base + i += 1 + j += 1 + + if i >= len(compressed_data) or j >= expected_length: + break + + # Read second sample using low nibble delta + lo = compressed_data[i] & 0xf + base_signed += DELTA_ENCODING_TABLE[lo] + pcm[j] = base_signed & 0xff + i += 1 + j += 1 + + if i >= len(compressed_data) or j >= expected_length: + break + + # Process up to 31 pairs of samples (62 samples total) + for k in range(31): + # High nibble + hi = (compressed_data[i] >> 4) & 0xf + base_signed += DELTA_ENCODING_TABLE[hi] + pcm[j] = base_signed & 0xff + j += 1 + + if j >= expected_length: + break + + # Low nibble + lo = compressed_data[i] & 0xf + base_signed += DELTA_ENCODING_TABLE[lo] + pcm[j] = base_signed & 0xff + j += 1 + i += 1 + + if i >= len(compressed_data): + break + if j >= expected_length: + break + + if j >= expected_length: + break + + return bytes(pcm[:j]) + + +def read_bin(bin_path: str) -> tuple: + """ + Read a GBA audio .bin file and extract all data. + + Binary format (little-endian): + - Bytes 0-3: flags (bit 0 = compression, bit 30 = loop enabled) + - Bytes 4-7: pitch value = sample_rate * 1024 + - Bytes 8-11: loop start position + - Bytes 12-15: loop end position (stored as actual_end - 1) + - Remaining bytes: audio samples (8-bit signed) + """ + with open(bin_path, 'rb') as f: + bin_data = f.read() + + if len(bin_data) < 16: + raise ValueError(f"File too small: {len(bin_data)} bytes") + + # Read header + flags = struct.unpack(' 0 else 0 + padding = bytes([last_sample] * (expected_num_samples - len(samples))) + samples = samples + padding + else: + # For uncompressed data, only read expected_num_samples + # (ignore any trailing alignment padding in the .bin file) + samples = compressed_data[:expected_num_samples] + + # For loop_end, use the expected number from the header + # This matches aif2pcm's behavior where the COMM chunk has the expected count + # even if the actual SSND data is shorter + loop_end = expected_num_samples if is_looped else 0 + + return sample_rate, is_looped, loop_start, loop_end, samples + + +def write_wav(wav_path: str, sample_rate: float, is_looped: bool, + loop_start: int, loop_end: int, samples: bytes): + """ + Write a .wav file with smpl chunk. + """ + # WAV uses unsigned 8-bit, GBA bin uses signed 8-bit + # Convert signed (-128 to +127) to unsigned (0 to 255) + samples_unsigned = bytes((b + 128) & 0xFF for b in samples) + + # For WAV fmt chunk, use integer sample rate + sample_rate_int = int(sample_rate) + num_channels = 1 + bytes_per_sample = 1 + bits_per_sample = 8 + byte_rate = sample_rate_int * num_channels * bytes_per_sample + block_align = num_channels * bytes_per_sample + + # Build fmt chunk + fmt_chunk = struct.pack(' {wav_path}") + + sample_rate, is_looped, loop_start, loop_end, samples = read_bin(bin_path) + + print(f" Sample rate: {sample_rate} Hz") + print(f" Num samples: {len(samples)}") + if is_looped: + print(f" Loop: {loop_start} -> {loop_end}") + else: + print(f" Loop: None") + + write_wav(wav_path, sample_rate, is_looped, loop_start, loop_end, samples) + print(f" Done!") + + +def main(): + if len(sys.argv) < 2: + print("Usage: bin_to_wav.py [output.wav]") + print(" or: bin_to_wav.py (converts all .bin files in directory)") + sys.exit(1) + + input_path = sys.argv[1] + + if os.path.isdir(input_path): + # Convert all .bin files in directory + for filename in sorted(os.listdir(input_path)): + if filename.lower().endswith('.bin'): + bin_path = os.path.join(input_path, filename) + convert_bin_to_wav(bin_path) + else: + # Convert single file + output_path = sys.argv[2] if len(sys.argv) > 2 else None + convert_bin_to_wav(input_path, output_path) + + +if __name__ == '__main__': + main() diff --git a/migration_scripts/1.14/consolidate_contest_effects.py b/migration_scripts/1.14/consolidate_contest_effects.py new file mode 100644 index 000000000000..b517a45d2c0e --- /dev/null +++ b/migration_scripts/1.14/consolidate_contest_effects.py @@ -0,0 +1,44 @@ +import glob +import re +import os + +if not os.path.exists("Makefile"): + print("Please run this script from your root folder.") + quit() + +# Read contest.c and extract the party information +for file in glob.glob('./src/contest.c'): + with open(file, 'r') as f: + source_content = f.read() + +# Extract party info from contest.c +source_pattern = re.compile(r'(\[CONTEST_EFFECT_.*\])\s*=\s(COMPOUND_STRING.*),') +source_data = {} +for match in source_pattern.findall(source_content): + if len(match) == 2: + contest_effect, effect_description = match + source_data[contest_effect] = (effect_description) + +# Read contest_moves.h content +for file in glob.glob('./src/data/contest_moves.h'): + with open(file, 'r') as f: + destination_content = f.read() + +# Modify contest_moves.h content +def add_description(match): + contest_effect = match.group(1) + if contest_effect in source_data: + effect_description = source_data[contest_effect] + print(f"Updating {contest_effect}: adding {effect_description}") + return f"{match.group(0)}\n .description = {effect_description}," + else: + return match.group(0) + +destination_pattern = re.compile(r'(\[CONTEST_EFFECT_.*\]) =\s*\n\s*{') +modified_content = destination_pattern.sub(add_description, destination_content) + +# Write the modified content back to contest_moves.h +for file in glob.glob('./src/data/contest_moves.h'): + with open(file, 'w') as f: + f.write(modified_content) + print("contest_moves.h has been updated") diff --git a/migration_scripts/add_time_based_encounters.py b/migration_scripts/add_time_based_encounters.py index aebdafc2b2ad..b036e46e41de 100644 --- a/migration_scripts/add_time_based_encounters.py +++ b/migration_scripts/add_time_based_encounters.py @@ -7,7 +7,7 @@ print("Please run this script from the project's root folder.") quit() sys.path.append("./tools/wild_encounters/") - from wild_encounters_to_header import TimeOfDay, SetupUserTimeEnum + from wild_encounters_to_header import Config except ImportError: print("Could not import the file tools/wild_encounters/wild_encounters_to_header.py") quit() @@ -24,11 +24,13 @@ def GetWildEncounterFile(): print("Please run this script from the project's root folder.") quit() - timeOfDay = SetupUserTimeEnum(TimeOfDay()) - wFile = open("src/data/wild_encounters.json") wData = json.load(wFile) + config = Config('include/config/overworld.h', 'include/constants/rtc.h', wData) + timeOfDay = config.times_of_day + + wBackupData = json.dumps(wData, indent=2) wBackupFile = open("src/data/wild_encounters.json.bak", mode="w", encoding="utf-8") wBackupFile.write(wBackupData) @@ -49,7 +51,7 @@ def GetWildEncounterFile(): wEncounters_New = list() for map in wEncounters: - for suffix in timeOfDay.fvals: + for suffix in timeOfDay.values(): tempSuffix = "_" + suffix if tempSuffix in map["base_label"]: editMap = False @@ -59,7 +61,7 @@ def GetWildEncounterFile(): if editMap: k = 0 - for suffix in timeOfDay.fvals: + for suffix in timeOfDay.values(): tempDict = dict() if k == TIME_OF_DAY_DEFAULT or COPY_FULL_ENCOUNTER: tempDict = map.copy() diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 0e4980667c6b..6b345df53cc4 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -6172,6 +6172,64 @@ DirectSoundWaveData_sc88pro_nylon_str_guitar:: DirectSoundWaveData_sd90_special_scream_drive:: .incbin "sound/direct_sound_samples/sd90_special_scream_drive.bin" + +.if PHONEMES_SHARED == TRUE + .align 2 +DirectSoundWaveData_Phoneme_1:: +DirectSoundWaveData_Phoneme_2:: +DirectSoundWaveData_Phoneme_3:: +DirectSoundWaveData_Phoneme_4:: +DirectSoundWaveData_Phoneme_5:: +DirectSoundWaveData_Phoneme_6:: +DirectSoundWaveData_Phoneme_7:: +DirectSoundWaveData_Phoneme_8:: +DirectSoundWaveData_Phoneme_9:: +DirectSoundWaveData_Phoneme_10:: +DirectSoundWaveData_Phoneme_11:: +DirectSoundWaveData_Phoneme_12:: +DirectSoundWaveData_Phoneme_13:: +DirectSoundWaveData_Phoneme_14:: +DirectSoundWaveData_Phoneme_15:: +DirectSoundWaveData_Phoneme_16:: +DirectSoundWaveData_Phoneme_17:: +DirectSoundWaveData_Phoneme_18:: +DirectSoundWaveData_Phoneme_19:: +DirectSoundWaveData_Phoneme_20:: +DirectSoundWaveData_Phoneme_21:: +DirectSoundWaveData_Phoneme_22:: +DirectSoundWaveData_Phoneme_23:: +DirectSoundWaveData_Phoneme_24:: +DirectSoundWaveData_Phoneme_25:: +DirectSoundWaveData_Phoneme_26:: +DirectSoundWaveData_Phoneme_27:: +DirectSoundWaveData_Phoneme_28:: +DirectSoundWaveData_Phoneme_29:: +DirectSoundWaveData_Phoneme_30:: +DirectSoundWaveData_Phoneme_31:: +DirectSoundWaveData_Phoneme_32:: +DirectSoundWaveData_Phoneme_33:: +DirectSoundWaveData_Phoneme_34:: +DirectSoundWaveData_Phoneme_35:: +DirectSoundWaveData_Phoneme_36:: +DirectSoundWaveData_Phoneme_37:: +DirectSoundWaveData_Phoneme_38:: +DirectSoundWaveData_Phoneme_39:: +DirectSoundWaveData_Phoneme_40:: +DirectSoundWaveData_Phoneme_41:: +DirectSoundWaveData_Phoneme_42:: +DirectSoundWaveData_Phoneme_43:: +DirectSoundWaveData_Phoneme_44:: +DirectSoundWaveData_Phoneme_45:: +DirectSoundWaveData_Phoneme_46:: +DirectSoundWaveData_Phoneme_47:: +DirectSoundWaveData_Phoneme_48:: +DirectSoundWaveData_Phoneme_49:: +DirectSoundWaveData_Phoneme_50:: +DirectSoundWaveData_Phoneme_51:: + .incbin "sound/direct_sound_samples/phonemes/shared.bin" + +.else @ PHONEMES_SHARED + .align 2 DirectSoundWaveData_Phoneme_1:: .incbin "sound/direct_sound_samples/phonemes/01.bin" @@ -6376,6 +6434,8 @@ DirectSoundWaveData_Phoneme_50:: DirectSoundWaveData_Phoneme_51:: .incbin "sound/direct_sound_samples/phonemes/51.bin" +.endif @ PHONEMES_SHARED + .align 2 DirectSoundWaveData_sc88pro_accordion_duplicate:: .incbin "sound/direct_sound_samples/sc88pro_accordion_duplicate.bin" diff --git a/sound/direct_sound_samples/bicycle_bell.aif b/sound/direct_sound_samples/bicycle_bell.aif deleted file mode 100644 index 578a81c2f1e9..000000000000 Binary files a/sound/direct_sound_samples/bicycle_bell.aif and /dev/null differ diff --git a/sound/direct_sound_samples/bicycle_bell.wav b/sound/direct_sound_samples/bicycle_bell.wav new file mode 100644 index 000000000000..92f9634069d2 Binary files /dev/null and b/sound/direct_sound_samples/bicycle_bell.wav differ diff --git a/sound/direct_sound_samples/classical_choir_voice_ahhs.aif b/sound/direct_sound_samples/classical_choir_voice_ahhs.aif deleted file mode 100644 index e8784682e475..000000000000 Binary files a/sound/direct_sound_samples/classical_choir_voice_ahhs.aif and /dev/null differ diff --git a/sound/direct_sound_samples/classical_choir_voice_ahhs.wav b/sound/direct_sound_samples/classical_choir_voice_ahhs.wav new file mode 100644 index 000000000000..7e38d3a3f7b2 Binary files /dev/null and b/sound/direct_sound_samples/classical_choir_voice_ahhs.wav differ diff --git a/sound/direct_sound_samples/cries/abomasnow.aif b/sound/direct_sound_samples/cries/abomasnow.aif deleted file mode 100644 index 83ef6b33aca9..000000000000 Binary files a/sound/direct_sound_samples/cries/abomasnow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/abomasnow.wav b/sound/direct_sound_samples/cries/abomasnow.wav new file mode 100644 index 000000000000..a403166d2cde Binary files /dev/null and b/sound/direct_sound_samples/cries/abomasnow.wav differ diff --git a/sound/direct_sound_samples/cries/abomasnow_mega.aif b/sound/direct_sound_samples/cries/abomasnow_mega.aif deleted file mode 100644 index 1b6b0684cf76..000000000000 Binary files a/sound/direct_sound_samples/cries/abomasnow_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/abomasnow_mega.wav b/sound/direct_sound_samples/cries/abomasnow_mega.wav new file mode 100644 index 000000000000..6d825e530186 Binary files /dev/null and b/sound/direct_sound_samples/cries/abomasnow_mega.wav differ diff --git a/sound/direct_sound_samples/cries/abra.aif b/sound/direct_sound_samples/cries/abra.aif deleted file mode 100644 index 5c96619143a0..000000000000 Binary files a/sound/direct_sound_samples/cries/abra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/abra.wav b/sound/direct_sound_samples/cries/abra.wav new file mode 100644 index 000000000000..14aba2d7a52e Binary files /dev/null and b/sound/direct_sound_samples/cries/abra.wav differ diff --git a/sound/direct_sound_samples/cries/absol.aif b/sound/direct_sound_samples/cries/absol.aif deleted file mode 100644 index 81e81350d5e6..000000000000 Binary files a/sound/direct_sound_samples/cries/absol.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/absol.wav b/sound/direct_sound_samples/cries/absol.wav new file mode 100644 index 000000000000..4a90ec5c0143 Binary files /dev/null and b/sound/direct_sound_samples/cries/absol.wav differ diff --git a/sound/direct_sound_samples/cries/absol_mega.aif b/sound/direct_sound_samples/cries/absol_mega.aif deleted file mode 100644 index 415b6132f61a..000000000000 Binary files a/sound/direct_sound_samples/cries/absol_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/absol_mega.wav b/sound/direct_sound_samples/cries/absol_mega.wav new file mode 100644 index 000000000000..59ce8447a137 Binary files /dev/null and b/sound/direct_sound_samples/cries/absol_mega.wav differ diff --git a/sound/direct_sound_samples/cries/accelgor.aif b/sound/direct_sound_samples/cries/accelgor.aif deleted file mode 100644 index 209c309c1efb..000000000000 Binary files a/sound/direct_sound_samples/cries/accelgor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/accelgor.wav b/sound/direct_sound_samples/cries/accelgor.wav new file mode 100644 index 000000000000..09d3b0bc7742 Binary files /dev/null and b/sound/direct_sound_samples/cries/accelgor.wav differ diff --git a/sound/direct_sound_samples/cries/aegislash.aif b/sound/direct_sound_samples/cries/aegislash.aif deleted file mode 100644 index d2c48b5d6213..000000000000 Binary files a/sound/direct_sound_samples/cries/aegislash.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aegislash.wav b/sound/direct_sound_samples/cries/aegislash.wav new file mode 100644 index 000000000000..33a16719479a Binary files /dev/null and b/sound/direct_sound_samples/cries/aegislash.wav differ diff --git a/sound/direct_sound_samples/cries/aerodactyl.aif b/sound/direct_sound_samples/cries/aerodactyl.aif deleted file mode 100644 index d4bf14946de2..000000000000 Binary files a/sound/direct_sound_samples/cries/aerodactyl.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aerodactyl.wav b/sound/direct_sound_samples/cries/aerodactyl.wav new file mode 100644 index 000000000000..95518884b9dd Binary files /dev/null and b/sound/direct_sound_samples/cries/aerodactyl.wav differ diff --git a/sound/direct_sound_samples/cries/aerodactyl_mega.aif b/sound/direct_sound_samples/cries/aerodactyl_mega.aif deleted file mode 100644 index d323b09c593f..000000000000 Binary files a/sound/direct_sound_samples/cries/aerodactyl_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aerodactyl_mega.wav b/sound/direct_sound_samples/cries/aerodactyl_mega.wav new file mode 100644 index 000000000000..2c6d876529c4 Binary files /dev/null and b/sound/direct_sound_samples/cries/aerodactyl_mega.wav differ diff --git a/sound/direct_sound_samples/cries/aggron.aif b/sound/direct_sound_samples/cries/aggron.aif deleted file mode 100644 index a87adf8f841f..000000000000 Binary files a/sound/direct_sound_samples/cries/aggron.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aggron.wav b/sound/direct_sound_samples/cries/aggron.wav new file mode 100644 index 000000000000..bc75b2dbdd38 Binary files /dev/null and b/sound/direct_sound_samples/cries/aggron.wav differ diff --git a/sound/direct_sound_samples/cries/aggron_mega.aif b/sound/direct_sound_samples/cries/aggron_mega.aif deleted file mode 100644 index 6772bdd5ee80..000000000000 Binary files a/sound/direct_sound_samples/cries/aggron_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aggron_mega.wav b/sound/direct_sound_samples/cries/aggron_mega.wav new file mode 100644 index 000000000000..b679811f299e Binary files /dev/null and b/sound/direct_sound_samples/cries/aggron_mega.wav differ diff --git a/sound/direct_sound_samples/cries/aipom.aif b/sound/direct_sound_samples/cries/aipom.aif deleted file mode 100644 index e40107f78709..000000000000 Binary files a/sound/direct_sound_samples/cries/aipom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aipom.wav b/sound/direct_sound_samples/cries/aipom.wav new file mode 100644 index 000000000000..4d7bc829cd73 Binary files /dev/null and b/sound/direct_sound_samples/cries/aipom.wav differ diff --git a/sound/direct_sound_samples/cries/alakazam.aif b/sound/direct_sound_samples/cries/alakazam.aif deleted file mode 100644 index d6b0126112a5..000000000000 Binary files a/sound/direct_sound_samples/cries/alakazam.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/alakazam.wav b/sound/direct_sound_samples/cries/alakazam.wav new file mode 100644 index 000000000000..f397363d1535 Binary files /dev/null and b/sound/direct_sound_samples/cries/alakazam.wav differ diff --git a/sound/direct_sound_samples/cries/alakazam_mega.aif b/sound/direct_sound_samples/cries/alakazam_mega.aif deleted file mode 100644 index be09f22777fa..000000000000 Binary files a/sound/direct_sound_samples/cries/alakazam_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/alakazam_mega.wav b/sound/direct_sound_samples/cries/alakazam_mega.wav new file mode 100644 index 000000000000..1b33bbe6461f Binary files /dev/null and b/sound/direct_sound_samples/cries/alakazam_mega.wav differ diff --git a/sound/direct_sound_samples/cries/alcremie.aif b/sound/direct_sound_samples/cries/alcremie.aif deleted file mode 100644 index 4819688a6ddb..000000000000 Binary files a/sound/direct_sound_samples/cries/alcremie.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/alcremie.wav b/sound/direct_sound_samples/cries/alcremie.wav new file mode 100644 index 000000000000..64870763a7fe Binary files /dev/null and b/sound/direct_sound_samples/cries/alcremie.wav differ diff --git a/sound/direct_sound_samples/cries/alomomola.aif b/sound/direct_sound_samples/cries/alomomola.aif deleted file mode 100644 index 2e47a4083ae5..000000000000 Binary files a/sound/direct_sound_samples/cries/alomomola.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/alomomola.wav b/sound/direct_sound_samples/cries/alomomola.wav new file mode 100644 index 000000000000..8b06465e2e9e Binary files /dev/null and b/sound/direct_sound_samples/cries/alomomola.wav differ diff --git a/sound/direct_sound_samples/cries/altaria.aif b/sound/direct_sound_samples/cries/altaria.aif deleted file mode 100644 index 0aa89c8fcba7..000000000000 Binary files a/sound/direct_sound_samples/cries/altaria.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/altaria.wav b/sound/direct_sound_samples/cries/altaria.wav new file mode 100644 index 000000000000..ca35cbf5194d Binary files /dev/null and b/sound/direct_sound_samples/cries/altaria.wav differ diff --git a/sound/direct_sound_samples/cries/altaria_mega.aif b/sound/direct_sound_samples/cries/altaria_mega.aif deleted file mode 100644 index bf2a7daec235..000000000000 Binary files a/sound/direct_sound_samples/cries/altaria_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/altaria_mega.wav b/sound/direct_sound_samples/cries/altaria_mega.wav new file mode 100644 index 000000000000..1ddbcc6aff91 Binary files /dev/null and b/sound/direct_sound_samples/cries/altaria_mega.wav differ diff --git a/sound/direct_sound_samples/cries/amaura.aif b/sound/direct_sound_samples/cries/amaura.aif deleted file mode 100644 index 813fcadddede..000000000000 Binary files a/sound/direct_sound_samples/cries/amaura.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/amaura.wav b/sound/direct_sound_samples/cries/amaura.wav new file mode 100644 index 000000000000..cdd5ce160a01 Binary files /dev/null and b/sound/direct_sound_samples/cries/amaura.wav differ diff --git a/sound/direct_sound_samples/cries/ambipom.aif b/sound/direct_sound_samples/cries/ambipom.aif deleted file mode 100644 index a767329e07ed..000000000000 Binary files a/sound/direct_sound_samples/cries/ambipom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ambipom.wav b/sound/direct_sound_samples/cries/ambipom.wav new file mode 100644 index 000000000000..fc63ee7011f1 Binary files /dev/null and b/sound/direct_sound_samples/cries/ambipom.wav differ diff --git a/sound/direct_sound_samples/cries/amoonguss.aif b/sound/direct_sound_samples/cries/amoonguss.aif deleted file mode 100644 index d476e670bd61..000000000000 Binary files a/sound/direct_sound_samples/cries/amoonguss.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/amoonguss.wav b/sound/direct_sound_samples/cries/amoonguss.wav new file mode 100644 index 000000000000..e472803369db Binary files /dev/null and b/sound/direct_sound_samples/cries/amoonguss.wav differ diff --git a/sound/direct_sound_samples/cries/ampharos.aif b/sound/direct_sound_samples/cries/ampharos.aif deleted file mode 100644 index 7eed0aa9f6b9..000000000000 Binary files a/sound/direct_sound_samples/cries/ampharos.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ampharos.wav b/sound/direct_sound_samples/cries/ampharos.wav new file mode 100644 index 000000000000..346b2aa48bfc Binary files /dev/null and b/sound/direct_sound_samples/cries/ampharos.wav differ diff --git a/sound/direct_sound_samples/cries/ampharos_mega.aif b/sound/direct_sound_samples/cries/ampharos_mega.aif deleted file mode 100644 index e24e62866776..000000000000 Binary files a/sound/direct_sound_samples/cries/ampharos_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ampharos_mega.wav b/sound/direct_sound_samples/cries/ampharos_mega.wav new file mode 100644 index 000000000000..284a01fba257 Binary files /dev/null and b/sound/direct_sound_samples/cries/ampharos_mega.wav differ diff --git a/sound/direct_sound_samples/cries/annihilape.aif b/sound/direct_sound_samples/cries/annihilape.aif deleted file mode 100644 index 889c5219296b..000000000000 Binary files a/sound/direct_sound_samples/cries/annihilape.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/annihilape.wav b/sound/direct_sound_samples/cries/annihilape.wav new file mode 100644 index 000000000000..c0232220b936 Binary files /dev/null and b/sound/direct_sound_samples/cries/annihilape.wav differ diff --git a/sound/direct_sound_samples/cries/anorith.aif b/sound/direct_sound_samples/cries/anorith.aif deleted file mode 100644 index ac6c774e5da6..000000000000 Binary files a/sound/direct_sound_samples/cries/anorith.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/anorith.wav b/sound/direct_sound_samples/cries/anorith.wav new file mode 100644 index 000000000000..349ffacf0464 Binary files /dev/null and b/sound/direct_sound_samples/cries/anorith.wav differ diff --git a/sound/direct_sound_samples/cries/appletun.aif b/sound/direct_sound_samples/cries/appletun.aif deleted file mode 100644 index 46b6ab4fccf4..000000000000 Binary files a/sound/direct_sound_samples/cries/appletun.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/appletun.wav b/sound/direct_sound_samples/cries/appletun.wav new file mode 100644 index 000000000000..4cf9d895b2e4 Binary files /dev/null and b/sound/direct_sound_samples/cries/appletun.wav differ diff --git a/sound/direct_sound_samples/cries/applin.aif b/sound/direct_sound_samples/cries/applin.aif deleted file mode 100644 index 9e9a1de275d0..000000000000 Binary files a/sound/direct_sound_samples/cries/applin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/applin.wav b/sound/direct_sound_samples/cries/applin.wav new file mode 100644 index 000000000000..55de4865de25 Binary files /dev/null and b/sound/direct_sound_samples/cries/applin.wav differ diff --git a/sound/direct_sound_samples/cries/araquanid.aif b/sound/direct_sound_samples/cries/araquanid.aif deleted file mode 100644 index 86aac62b8002..000000000000 Binary files a/sound/direct_sound_samples/cries/araquanid.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/araquanid.wav b/sound/direct_sound_samples/cries/araquanid.wav new file mode 100644 index 000000000000..9c92577b4bc0 Binary files /dev/null and b/sound/direct_sound_samples/cries/araquanid.wav differ diff --git a/sound/direct_sound_samples/cries/arbok.aif b/sound/direct_sound_samples/cries/arbok.aif deleted file mode 100644 index 0be4b7e62464..000000000000 Binary files a/sound/direct_sound_samples/cries/arbok.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/arbok.wav b/sound/direct_sound_samples/cries/arbok.wav new file mode 100644 index 000000000000..cebc9e3e56f9 Binary files /dev/null and b/sound/direct_sound_samples/cries/arbok.wav differ diff --git a/sound/direct_sound_samples/cries/arboliva.aif b/sound/direct_sound_samples/cries/arboliva.aif deleted file mode 100644 index 641491ff0e89..000000000000 Binary files a/sound/direct_sound_samples/cries/arboliva.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/arboliva.wav b/sound/direct_sound_samples/cries/arboliva.wav new file mode 100644 index 000000000000..c4ddb922d8a2 Binary files /dev/null and b/sound/direct_sound_samples/cries/arboliva.wav differ diff --git a/sound/direct_sound_samples/cries/arcanine.aif b/sound/direct_sound_samples/cries/arcanine.aif deleted file mode 100644 index cdc942c49ab2..000000000000 Binary files a/sound/direct_sound_samples/cries/arcanine.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/arcanine.wav b/sound/direct_sound_samples/cries/arcanine.wav new file mode 100644 index 000000000000..f6e3e3680192 Binary files /dev/null and b/sound/direct_sound_samples/cries/arcanine.wav differ diff --git a/sound/direct_sound_samples/cries/arceus.aif b/sound/direct_sound_samples/cries/arceus.aif deleted file mode 100644 index 8496de2a173b..000000000000 Binary files a/sound/direct_sound_samples/cries/arceus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/arceus.wav b/sound/direct_sound_samples/cries/arceus.wav new file mode 100644 index 000000000000..5a33b4168be7 Binary files /dev/null and b/sound/direct_sound_samples/cries/arceus.wav differ diff --git a/sound/direct_sound_samples/cries/archaludon.aif b/sound/direct_sound_samples/cries/archaludon.aif deleted file mode 100644 index 470afe8348a9..000000000000 Binary files a/sound/direct_sound_samples/cries/archaludon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/archaludon.wav b/sound/direct_sound_samples/cries/archaludon.wav new file mode 100644 index 000000000000..7195a6aa005e Binary files /dev/null and b/sound/direct_sound_samples/cries/archaludon.wav differ diff --git a/sound/direct_sound_samples/cries/archen.aif b/sound/direct_sound_samples/cries/archen.aif deleted file mode 100644 index b1b2be3eadcc..000000000000 Binary files a/sound/direct_sound_samples/cries/archen.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/archen.wav b/sound/direct_sound_samples/cries/archen.wav new file mode 100644 index 000000000000..05817f66331d Binary files /dev/null and b/sound/direct_sound_samples/cries/archen.wav differ diff --git a/sound/direct_sound_samples/cries/archeops.aif b/sound/direct_sound_samples/cries/archeops.aif deleted file mode 100644 index 6555f0ce3a39..000000000000 Binary files a/sound/direct_sound_samples/cries/archeops.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/archeops.wav b/sound/direct_sound_samples/cries/archeops.wav new file mode 100644 index 000000000000..e79d66625c39 Binary files /dev/null and b/sound/direct_sound_samples/cries/archeops.wav differ diff --git a/sound/direct_sound_samples/cries/arctibax.aif b/sound/direct_sound_samples/cries/arctibax.aif deleted file mode 100644 index a18bc7808104..000000000000 Binary files a/sound/direct_sound_samples/cries/arctibax.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/arctibax.wav b/sound/direct_sound_samples/cries/arctibax.wav new file mode 100644 index 000000000000..75bce7bca510 Binary files /dev/null and b/sound/direct_sound_samples/cries/arctibax.wav differ diff --git a/sound/direct_sound_samples/cries/arctovish.aif b/sound/direct_sound_samples/cries/arctovish.aif deleted file mode 100644 index 281c88f8d322..000000000000 Binary files a/sound/direct_sound_samples/cries/arctovish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/arctovish.wav b/sound/direct_sound_samples/cries/arctovish.wav new file mode 100644 index 000000000000..6888758c3f21 Binary files /dev/null and b/sound/direct_sound_samples/cries/arctovish.wav differ diff --git a/sound/direct_sound_samples/cries/arctozolt.aif b/sound/direct_sound_samples/cries/arctozolt.aif deleted file mode 100644 index 3d0bb582648f..000000000000 Binary files a/sound/direct_sound_samples/cries/arctozolt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/arctozolt.wav b/sound/direct_sound_samples/cries/arctozolt.wav new file mode 100644 index 000000000000..fafc0a59fbab Binary files /dev/null and b/sound/direct_sound_samples/cries/arctozolt.wav differ diff --git a/sound/direct_sound_samples/cries/ariados.aif b/sound/direct_sound_samples/cries/ariados.aif deleted file mode 100644 index 343879d70a28..000000000000 Binary files a/sound/direct_sound_samples/cries/ariados.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ariados.wav b/sound/direct_sound_samples/cries/ariados.wav new file mode 100644 index 000000000000..f059bcfc9302 Binary files /dev/null and b/sound/direct_sound_samples/cries/ariados.wav differ diff --git a/sound/direct_sound_samples/cries/armaldo.aif b/sound/direct_sound_samples/cries/armaldo.aif deleted file mode 100644 index 23add2fec8dd..000000000000 Binary files a/sound/direct_sound_samples/cries/armaldo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/armaldo.wav b/sound/direct_sound_samples/cries/armaldo.wav new file mode 100644 index 000000000000..de11795664ab Binary files /dev/null and b/sound/direct_sound_samples/cries/armaldo.wav differ diff --git a/sound/direct_sound_samples/cries/armarouge.aif b/sound/direct_sound_samples/cries/armarouge.aif deleted file mode 100644 index 578c73392b41..000000000000 Binary files a/sound/direct_sound_samples/cries/armarouge.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/armarouge.wav b/sound/direct_sound_samples/cries/armarouge.wav new file mode 100644 index 000000000000..bd891fe53623 Binary files /dev/null and b/sound/direct_sound_samples/cries/armarouge.wav differ diff --git a/sound/direct_sound_samples/cries/aromatisse.aif b/sound/direct_sound_samples/cries/aromatisse.aif deleted file mode 100644 index 4880d14946b0..000000000000 Binary files a/sound/direct_sound_samples/cries/aromatisse.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aromatisse.wav b/sound/direct_sound_samples/cries/aromatisse.wav new file mode 100644 index 000000000000..bcfb43e6dc77 Binary files /dev/null and b/sound/direct_sound_samples/cries/aromatisse.wav differ diff --git a/sound/direct_sound_samples/cries/aron.aif b/sound/direct_sound_samples/cries/aron.aif deleted file mode 100644 index d246b4c22b04..000000000000 Binary files a/sound/direct_sound_samples/cries/aron.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aron.wav b/sound/direct_sound_samples/cries/aron.wav new file mode 100644 index 000000000000..35c69f8dc454 Binary files /dev/null and b/sound/direct_sound_samples/cries/aron.wav differ diff --git a/sound/direct_sound_samples/cries/arrokuda.aif b/sound/direct_sound_samples/cries/arrokuda.aif deleted file mode 100644 index 863b6d2fb52b..000000000000 Binary files a/sound/direct_sound_samples/cries/arrokuda.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/arrokuda.wav b/sound/direct_sound_samples/cries/arrokuda.wav new file mode 100644 index 000000000000..c5b040c87ab0 Binary files /dev/null and b/sound/direct_sound_samples/cries/arrokuda.wav differ diff --git a/sound/direct_sound_samples/cries/articuno.aif b/sound/direct_sound_samples/cries/articuno.aif deleted file mode 100644 index 212114537f43..000000000000 Binary files a/sound/direct_sound_samples/cries/articuno.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/articuno.wav b/sound/direct_sound_samples/cries/articuno.wav new file mode 100644 index 000000000000..348fbcd2f046 Binary files /dev/null and b/sound/direct_sound_samples/cries/articuno.wav differ diff --git a/sound/direct_sound_samples/cries/audino.aif b/sound/direct_sound_samples/cries/audino.aif deleted file mode 100644 index 873d4c947b91..000000000000 Binary files a/sound/direct_sound_samples/cries/audino.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/audino.wav b/sound/direct_sound_samples/cries/audino.wav new file mode 100644 index 000000000000..fc2fb1283d5b Binary files /dev/null and b/sound/direct_sound_samples/cries/audino.wav differ diff --git a/sound/direct_sound_samples/cries/audino_mega.aif b/sound/direct_sound_samples/cries/audino_mega.aif deleted file mode 100644 index 04d815001e76..000000000000 Binary files a/sound/direct_sound_samples/cries/audino_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/audino_mega.wav b/sound/direct_sound_samples/cries/audino_mega.wav new file mode 100644 index 000000000000..5cf86197066f Binary files /dev/null and b/sound/direct_sound_samples/cries/audino_mega.wav differ diff --git a/sound/direct_sound_samples/cries/aurorus.aif b/sound/direct_sound_samples/cries/aurorus.aif deleted file mode 100644 index 9483e1b6371b..000000000000 Binary files a/sound/direct_sound_samples/cries/aurorus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/aurorus.wav b/sound/direct_sound_samples/cries/aurorus.wav new file mode 100644 index 000000000000..4504fd119a7b Binary files /dev/null and b/sound/direct_sound_samples/cries/aurorus.wav differ diff --git a/sound/direct_sound_samples/cries/avalugg.aif b/sound/direct_sound_samples/cries/avalugg.aif deleted file mode 100644 index 95c9d7a1749e..000000000000 Binary files a/sound/direct_sound_samples/cries/avalugg.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/avalugg.wav b/sound/direct_sound_samples/cries/avalugg.wav new file mode 100644 index 000000000000..cbb8acb91ac8 Binary files /dev/null and b/sound/direct_sound_samples/cries/avalugg.wav differ diff --git a/sound/direct_sound_samples/cries/axew.aif b/sound/direct_sound_samples/cries/axew.aif deleted file mode 100644 index f642085f67d9..000000000000 Binary files a/sound/direct_sound_samples/cries/axew.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/axew.wav b/sound/direct_sound_samples/cries/axew.wav new file mode 100644 index 000000000000..8cdab431e9c8 Binary files /dev/null and b/sound/direct_sound_samples/cries/axew.wav differ diff --git a/sound/direct_sound_samples/cries/azelf.aif b/sound/direct_sound_samples/cries/azelf.aif deleted file mode 100644 index ad2e96c8f9bf..000000000000 Binary files a/sound/direct_sound_samples/cries/azelf.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/azelf.wav b/sound/direct_sound_samples/cries/azelf.wav new file mode 100644 index 000000000000..b87f8e4d8f91 Binary files /dev/null and b/sound/direct_sound_samples/cries/azelf.wav differ diff --git a/sound/direct_sound_samples/cries/azumarill.aif b/sound/direct_sound_samples/cries/azumarill.aif deleted file mode 100644 index 99a497e20569..000000000000 Binary files a/sound/direct_sound_samples/cries/azumarill.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/azumarill.wav b/sound/direct_sound_samples/cries/azumarill.wav new file mode 100644 index 000000000000..f9e9ed89a12a Binary files /dev/null and b/sound/direct_sound_samples/cries/azumarill.wav differ diff --git a/sound/direct_sound_samples/cries/azurill.aif b/sound/direct_sound_samples/cries/azurill.aif deleted file mode 100644 index 401385cafb59..000000000000 Binary files a/sound/direct_sound_samples/cries/azurill.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/azurill.wav b/sound/direct_sound_samples/cries/azurill.wav new file mode 100644 index 000000000000..65fa56e65b80 Binary files /dev/null and b/sound/direct_sound_samples/cries/azurill.wav differ diff --git a/sound/direct_sound_samples/cries/bagon.aif b/sound/direct_sound_samples/cries/bagon.aif deleted file mode 100644 index f7c5c3b59e02..000000000000 Binary files a/sound/direct_sound_samples/cries/bagon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bagon.wav b/sound/direct_sound_samples/cries/bagon.wav new file mode 100644 index 000000000000..af36a96eb860 Binary files /dev/null and b/sound/direct_sound_samples/cries/bagon.wav differ diff --git a/sound/direct_sound_samples/cries/baltoy.aif b/sound/direct_sound_samples/cries/baltoy.aif deleted file mode 100644 index 7900eb1d64c2..000000000000 Binary files a/sound/direct_sound_samples/cries/baltoy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/baltoy.wav b/sound/direct_sound_samples/cries/baltoy.wav new file mode 100644 index 000000000000..395954b565d9 Binary files /dev/null and b/sound/direct_sound_samples/cries/baltoy.wav differ diff --git a/sound/direct_sound_samples/cries/banette.aif b/sound/direct_sound_samples/cries/banette.aif deleted file mode 100644 index 587b307e27ec..000000000000 Binary files a/sound/direct_sound_samples/cries/banette.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/banette.wav b/sound/direct_sound_samples/cries/banette.wav new file mode 100644 index 000000000000..f030fb66c287 Binary files /dev/null and b/sound/direct_sound_samples/cries/banette.wav differ diff --git a/sound/direct_sound_samples/cries/banette_mega.aif b/sound/direct_sound_samples/cries/banette_mega.aif deleted file mode 100644 index 974f74c31e97..000000000000 Binary files a/sound/direct_sound_samples/cries/banette_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/banette_mega.wav b/sound/direct_sound_samples/cries/banette_mega.wav new file mode 100644 index 000000000000..5de36a008cf2 Binary files /dev/null and b/sound/direct_sound_samples/cries/banette_mega.wav differ diff --git a/sound/direct_sound_samples/cries/barbaracle.aif b/sound/direct_sound_samples/cries/barbaracle.aif deleted file mode 100644 index 3f724127bddc..000000000000 Binary files a/sound/direct_sound_samples/cries/barbaracle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/barbaracle.wav b/sound/direct_sound_samples/cries/barbaracle.wav new file mode 100644 index 000000000000..8c5f4c2c692e Binary files /dev/null and b/sound/direct_sound_samples/cries/barbaracle.wav differ diff --git a/sound/direct_sound_samples/cries/barboach.aif b/sound/direct_sound_samples/cries/barboach.aif deleted file mode 100644 index 926e7fc05002..000000000000 Binary files a/sound/direct_sound_samples/cries/barboach.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/barboach.wav b/sound/direct_sound_samples/cries/barboach.wav new file mode 100644 index 000000000000..40539ce514ab Binary files /dev/null and b/sound/direct_sound_samples/cries/barboach.wav differ diff --git a/sound/direct_sound_samples/cries/barraskewda.aif b/sound/direct_sound_samples/cries/barraskewda.aif deleted file mode 100644 index e1a75a7dc78d..000000000000 Binary files a/sound/direct_sound_samples/cries/barraskewda.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/barraskewda.wav b/sound/direct_sound_samples/cries/barraskewda.wav new file mode 100644 index 000000000000..61e0b5a8836e Binary files /dev/null and b/sound/direct_sound_samples/cries/barraskewda.wav differ diff --git a/sound/direct_sound_samples/cries/basculegion.aif b/sound/direct_sound_samples/cries/basculegion.aif deleted file mode 100644 index 28a8349a5109..000000000000 Binary files a/sound/direct_sound_samples/cries/basculegion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/basculegion.wav b/sound/direct_sound_samples/cries/basculegion.wav new file mode 100644 index 000000000000..61770488d171 Binary files /dev/null and b/sound/direct_sound_samples/cries/basculegion.wav differ diff --git a/sound/direct_sound_samples/cries/basculin.aif b/sound/direct_sound_samples/cries/basculin.aif deleted file mode 100644 index dfa6db25f1c1..000000000000 Binary files a/sound/direct_sound_samples/cries/basculin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/basculin.wav b/sound/direct_sound_samples/cries/basculin.wav new file mode 100644 index 000000000000..177af170bebf Binary files /dev/null and b/sound/direct_sound_samples/cries/basculin.wav differ diff --git a/sound/direct_sound_samples/cries/bastiodon.aif b/sound/direct_sound_samples/cries/bastiodon.aif deleted file mode 100644 index 5f5646f7879d..000000000000 Binary files a/sound/direct_sound_samples/cries/bastiodon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bastiodon.wav b/sound/direct_sound_samples/cries/bastiodon.wav new file mode 100644 index 000000000000..7d693cb6cbd4 Binary files /dev/null and b/sound/direct_sound_samples/cries/bastiodon.wav differ diff --git a/sound/direct_sound_samples/cries/baxcalibur.aif b/sound/direct_sound_samples/cries/baxcalibur.aif deleted file mode 100644 index fd8f5eff6d62..000000000000 Binary files a/sound/direct_sound_samples/cries/baxcalibur.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/baxcalibur.wav b/sound/direct_sound_samples/cries/baxcalibur.wav new file mode 100644 index 000000000000..2dd6bf735ff0 Binary files /dev/null and b/sound/direct_sound_samples/cries/baxcalibur.wav differ diff --git a/sound/direct_sound_samples/cries/bayleef.aif b/sound/direct_sound_samples/cries/bayleef.aif deleted file mode 100644 index 1b38f322a945..000000000000 Binary files a/sound/direct_sound_samples/cries/bayleef.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bayleef.wav b/sound/direct_sound_samples/cries/bayleef.wav new file mode 100644 index 000000000000..754e6e6e6e14 Binary files /dev/null and b/sound/direct_sound_samples/cries/bayleef.wav differ diff --git a/sound/direct_sound_samples/cries/beartic.aif b/sound/direct_sound_samples/cries/beartic.aif deleted file mode 100644 index 1c7635357ab4..000000000000 Binary files a/sound/direct_sound_samples/cries/beartic.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/beartic.wav b/sound/direct_sound_samples/cries/beartic.wav new file mode 100644 index 000000000000..a7fa0481be99 Binary files /dev/null and b/sound/direct_sound_samples/cries/beartic.wav differ diff --git a/sound/direct_sound_samples/cries/beautifly.aif b/sound/direct_sound_samples/cries/beautifly.aif deleted file mode 100644 index 5b31f73c3166..000000000000 Binary files a/sound/direct_sound_samples/cries/beautifly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/beautifly.wav b/sound/direct_sound_samples/cries/beautifly.wav new file mode 100644 index 000000000000..f9c3f26a5b6a Binary files /dev/null and b/sound/direct_sound_samples/cries/beautifly.wav differ diff --git a/sound/direct_sound_samples/cries/beedrill.aif b/sound/direct_sound_samples/cries/beedrill.aif deleted file mode 100644 index 888e1e637dec..000000000000 Binary files a/sound/direct_sound_samples/cries/beedrill.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/beedrill.wav b/sound/direct_sound_samples/cries/beedrill.wav new file mode 100644 index 000000000000..6ba426baea09 Binary files /dev/null and b/sound/direct_sound_samples/cries/beedrill.wav differ diff --git a/sound/direct_sound_samples/cries/beedrill_mega.aif b/sound/direct_sound_samples/cries/beedrill_mega.aif deleted file mode 100644 index cea7ca52d569..000000000000 Binary files a/sound/direct_sound_samples/cries/beedrill_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/beedrill_mega.wav b/sound/direct_sound_samples/cries/beedrill_mega.wav new file mode 100644 index 000000000000..ed5d23ee704a Binary files /dev/null and b/sound/direct_sound_samples/cries/beedrill_mega.wav differ diff --git a/sound/direct_sound_samples/cries/beheeyem.aif b/sound/direct_sound_samples/cries/beheeyem.aif deleted file mode 100644 index fb7ce7067721..000000000000 Binary files a/sound/direct_sound_samples/cries/beheeyem.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/beheeyem.wav b/sound/direct_sound_samples/cries/beheeyem.wav new file mode 100644 index 000000000000..e69067281bf7 Binary files /dev/null and b/sound/direct_sound_samples/cries/beheeyem.wav differ diff --git a/sound/direct_sound_samples/cries/beldum.aif b/sound/direct_sound_samples/cries/beldum.aif deleted file mode 100644 index 626f94fc1c5c..000000000000 Binary files a/sound/direct_sound_samples/cries/beldum.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/beldum.wav b/sound/direct_sound_samples/cries/beldum.wav new file mode 100644 index 000000000000..5d6514af4cf7 Binary files /dev/null and b/sound/direct_sound_samples/cries/beldum.wav differ diff --git a/sound/direct_sound_samples/cries/bellibolt.aif b/sound/direct_sound_samples/cries/bellibolt.aif deleted file mode 100644 index b7fc6d0175c6..000000000000 Binary files a/sound/direct_sound_samples/cries/bellibolt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bellibolt.wav b/sound/direct_sound_samples/cries/bellibolt.wav new file mode 100644 index 000000000000..2a59187760e2 Binary files /dev/null and b/sound/direct_sound_samples/cries/bellibolt.wav differ diff --git a/sound/direct_sound_samples/cries/bellossom.aif b/sound/direct_sound_samples/cries/bellossom.aif deleted file mode 100644 index ffe452fc5a8f..000000000000 Binary files a/sound/direct_sound_samples/cries/bellossom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bellossom.wav b/sound/direct_sound_samples/cries/bellossom.wav new file mode 100644 index 000000000000..71680c16b2ad Binary files /dev/null and b/sound/direct_sound_samples/cries/bellossom.wav differ diff --git a/sound/direct_sound_samples/cries/bellsprout.aif b/sound/direct_sound_samples/cries/bellsprout.aif deleted file mode 100644 index 40e12f8e8b63..000000000000 Binary files a/sound/direct_sound_samples/cries/bellsprout.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bellsprout.wav b/sound/direct_sound_samples/cries/bellsprout.wav new file mode 100644 index 000000000000..dc7da2e277d4 Binary files /dev/null and b/sound/direct_sound_samples/cries/bellsprout.wav differ diff --git a/sound/direct_sound_samples/cries/bergmite.aif b/sound/direct_sound_samples/cries/bergmite.aif deleted file mode 100644 index 9dbcb7dd0884..000000000000 Binary files a/sound/direct_sound_samples/cries/bergmite.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bergmite.wav b/sound/direct_sound_samples/cries/bergmite.wav new file mode 100644 index 000000000000..89b2c96ae5b7 Binary files /dev/null and b/sound/direct_sound_samples/cries/bergmite.wav differ diff --git a/sound/direct_sound_samples/cries/bewear.aif b/sound/direct_sound_samples/cries/bewear.aif deleted file mode 100644 index 00979e4542a7..000000000000 Binary files a/sound/direct_sound_samples/cries/bewear.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bewear.wav b/sound/direct_sound_samples/cries/bewear.wav new file mode 100644 index 000000000000..e2f83f9e124a Binary files /dev/null and b/sound/direct_sound_samples/cries/bewear.wav differ diff --git a/sound/direct_sound_samples/cries/bibarel.aif b/sound/direct_sound_samples/cries/bibarel.aif deleted file mode 100644 index 64b3f5e0ec94..000000000000 Binary files a/sound/direct_sound_samples/cries/bibarel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bibarel.wav b/sound/direct_sound_samples/cries/bibarel.wav new file mode 100644 index 000000000000..d1db5310ffe5 Binary files /dev/null and b/sound/direct_sound_samples/cries/bibarel.wav differ diff --git a/sound/direct_sound_samples/cries/bidoof.aif b/sound/direct_sound_samples/cries/bidoof.aif deleted file mode 100644 index 4da8f32adede..000000000000 Binary files a/sound/direct_sound_samples/cries/bidoof.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bidoof.wav b/sound/direct_sound_samples/cries/bidoof.wav new file mode 100644 index 000000000000..7d7b519fa68c Binary files /dev/null and b/sound/direct_sound_samples/cries/bidoof.wav differ diff --git a/sound/direct_sound_samples/cries/binacle.aif b/sound/direct_sound_samples/cries/binacle.aif deleted file mode 100644 index 168952c84bdb..000000000000 Binary files a/sound/direct_sound_samples/cries/binacle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/binacle.wav b/sound/direct_sound_samples/cries/binacle.wav new file mode 100644 index 000000000000..c9a5449d9038 Binary files /dev/null and b/sound/direct_sound_samples/cries/binacle.wav differ diff --git a/sound/direct_sound_samples/cries/bisharp.aif b/sound/direct_sound_samples/cries/bisharp.aif deleted file mode 100644 index dd1d4c4229da..000000000000 Binary files a/sound/direct_sound_samples/cries/bisharp.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bisharp.wav b/sound/direct_sound_samples/cries/bisharp.wav new file mode 100644 index 000000000000..55ee54e0f2e4 Binary files /dev/null and b/sound/direct_sound_samples/cries/bisharp.wav differ diff --git a/sound/direct_sound_samples/cries/blacephalon.aif b/sound/direct_sound_samples/cries/blacephalon.aif deleted file mode 100644 index f1308e13449c..000000000000 Binary files a/sound/direct_sound_samples/cries/blacephalon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/blacephalon.wav b/sound/direct_sound_samples/cries/blacephalon.wav new file mode 100644 index 000000000000..342221ee879e Binary files /dev/null and b/sound/direct_sound_samples/cries/blacephalon.wav differ diff --git a/sound/direct_sound_samples/cries/blastoise.aif b/sound/direct_sound_samples/cries/blastoise.aif deleted file mode 100644 index c3ae9294f243..000000000000 Binary files a/sound/direct_sound_samples/cries/blastoise.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/blastoise.wav b/sound/direct_sound_samples/cries/blastoise.wav new file mode 100644 index 000000000000..fecb7733b49f Binary files /dev/null and b/sound/direct_sound_samples/cries/blastoise.wav differ diff --git a/sound/direct_sound_samples/cries/blastoise_mega.aif b/sound/direct_sound_samples/cries/blastoise_mega.aif deleted file mode 100644 index a25f49c30ce7..000000000000 Binary files a/sound/direct_sound_samples/cries/blastoise_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/blastoise_mega.wav b/sound/direct_sound_samples/cries/blastoise_mega.wav new file mode 100644 index 000000000000..1f04ee2aaa65 Binary files /dev/null and b/sound/direct_sound_samples/cries/blastoise_mega.wav differ diff --git a/sound/direct_sound_samples/cries/blaziken.aif b/sound/direct_sound_samples/cries/blaziken.aif deleted file mode 100644 index fa8a46ba9c24..000000000000 Binary files a/sound/direct_sound_samples/cries/blaziken.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/blaziken.wav b/sound/direct_sound_samples/cries/blaziken.wav new file mode 100644 index 000000000000..b7b663d8ecc9 Binary files /dev/null and b/sound/direct_sound_samples/cries/blaziken.wav differ diff --git a/sound/direct_sound_samples/cries/blaziken_mega.aif b/sound/direct_sound_samples/cries/blaziken_mega.aif deleted file mode 100644 index ef5f08153ed2..000000000000 Binary files a/sound/direct_sound_samples/cries/blaziken_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/blaziken_mega.wav b/sound/direct_sound_samples/cries/blaziken_mega.wav new file mode 100644 index 000000000000..65e06208a166 Binary files /dev/null and b/sound/direct_sound_samples/cries/blaziken_mega.wav differ diff --git a/sound/direct_sound_samples/cries/blipbug.aif b/sound/direct_sound_samples/cries/blipbug.aif deleted file mode 100644 index ac9a26d484ba..000000000000 Binary files a/sound/direct_sound_samples/cries/blipbug.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/blipbug.wav b/sound/direct_sound_samples/cries/blipbug.wav new file mode 100644 index 000000000000..b398671b6fe7 Binary files /dev/null and b/sound/direct_sound_samples/cries/blipbug.wav differ diff --git a/sound/direct_sound_samples/cries/blissey.aif b/sound/direct_sound_samples/cries/blissey.aif deleted file mode 100644 index 6cb483ae72bf..000000000000 Binary files a/sound/direct_sound_samples/cries/blissey.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/blissey.wav b/sound/direct_sound_samples/cries/blissey.wav new file mode 100644 index 000000000000..a5012768c105 Binary files /dev/null and b/sound/direct_sound_samples/cries/blissey.wav differ diff --git a/sound/direct_sound_samples/cries/blitzle.aif b/sound/direct_sound_samples/cries/blitzle.aif deleted file mode 100644 index d730da670f2c..000000000000 Binary files a/sound/direct_sound_samples/cries/blitzle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/blitzle.wav b/sound/direct_sound_samples/cries/blitzle.wav new file mode 100644 index 000000000000..e026b158d4ef Binary files /dev/null and b/sound/direct_sound_samples/cries/blitzle.wav differ diff --git a/sound/direct_sound_samples/cries/boldore.aif b/sound/direct_sound_samples/cries/boldore.aif deleted file mode 100644 index 9dbee0011504..000000000000 Binary files a/sound/direct_sound_samples/cries/boldore.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/boldore.wav b/sound/direct_sound_samples/cries/boldore.wav new file mode 100644 index 000000000000..463e54d938db Binary files /dev/null and b/sound/direct_sound_samples/cries/boldore.wav differ diff --git a/sound/direct_sound_samples/cries/boltund.aif b/sound/direct_sound_samples/cries/boltund.aif deleted file mode 100644 index 819142f86c86..000000000000 Binary files a/sound/direct_sound_samples/cries/boltund.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/boltund.wav b/sound/direct_sound_samples/cries/boltund.wav new file mode 100644 index 000000000000..5545f336853a Binary files /dev/null and b/sound/direct_sound_samples/cries/boltund.wav differ diff --git a/sound/direct_sound_samples/cries/bombirdier.aif b/sound/direct_sound_samples/cries/bombirdier.aif deleted file mode 100644 index 27f334acbb97..000000000000 Binary files a/sound/direct_sound_samples/cries/bombirdier.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bombirdier.wav b/sound/direct_sound_samples/cries/bombirdier.wav new file mode 100644 index 000000000000..db0e74d7c1cc Binary files /dev/null and b/sound/direct_sound_samples/cries/bombirdier.wav differ diff --git a/sound/direct_sound_samples/cries/bonsly.aif b/sound/direct_sound_samples/cries/bonsly.aif deleted file mode 100644 index 15bd56f23270..000000000000 Binary files a/sound/direct_sound_samples/cries/bonsly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bonsly.wav b/sound/direct_sound_samples/cries/bonsly.wav new file mode 100644 index 000000000000..791486846355 Binary files /dev/null and b/sound/direct_sound_samples/cries/bonsly.wav differ diff --git a/sound/direct_sound_samples/cries/bouffalant.aif b/sound/direct_sound_samples/cries/bouffalant.aif deleted file mode 100644 index e9502a94b655..000000000000 Binary files a/sound/direct_sound_samples/cries/bouffalant.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bouffalant.wav b/sound/direct_sound_samples/cries/bouffalant.wav new file mode 100644 index 000000000000..a1af3a6b9031 Binary files /dev/null and b/sound/direct_sound_samples/cries/bouffalant.wav differ diff --git a/sound/direct_sound_samples/cries/bounsweet.aif b/sound/direct_sound_samples/cries/bounsweet.aif deleted file mode 100644 index b1d21fb39072..000000000000 Binary files a/sound/direct_sound_samples/cries/bounsweet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bounsweet.wav b/sound/direct_sound_samples/cries/bounsweet.wav new file mode 100644 index 000000000000..2a4120aa0194 Binary files /dev/null and b/sound/direct_sound_samples/cries/bounsweet.wav differ diff --git a/sound/direct_sound_samples/cries/braixen.aif b/sound/direct_sound_samples/cries/braixen.aif deleted file mode 100644 index d5d9e800b076..000000000000 Binary files a/sound/direct_sound_samples/cries/braixen.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/braixen.wav b/sound/direct_sound_samples/cries/braixen.wav new file mode 100644 index 000000000000..640edbfb2b73 Binary files /dev/null and b/sound/direct_sound_samples/cries/braixen.wav differ diff --git a/sound/direct_sound_samples/cries/brambleghast.aif b/sound/direct_sound_samples/cries/brambleghast.aif deleted file mode 100644 index 404e7d1dc614..000000000000 Binary files a/sound/direct_sound_samples/cries/brambleghast.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/brambleghast.wav b/sound/direct_sound_samples/cries/brambleghast.wav new file mode 100644 index 000000000000..30f2f133be07 Binary files /dev/null and b/sound/direct_sound_samples/cries/brambleghast.wav differ diff --git a/sound/direct_sound_samples/cries/bramblin.aif b/sound/direct_sound_samples/cries/bramblin.aif deleted file mode 100644 index b55e43fe77ad..000000000000 Binary files a/sound/direct_sound_samples/cries/bramblin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bramblin.wav b/sound/direct_sound_samples/cries/bramblin.wav new file mode 100644 index 000000000000..68596b96a1a6 Binary files /dev/null and b/sound/direct_sound_samples/cries/bramblin.wav differ diff --git a/sound/direct_sound_samples/cries/braviary.aif b/sound/direct_sound_samples/cries/braviary.aif deleted file mode 100644 index 0cf3fc403ef3..000000000000 Binary files a/sound/direct_sound_samples/cries/braviary.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/braviary.wav b/sound/direct_sound_samples/cries/braviary.wav new file mode 100644 index 000000000000..a05d45f955d3 Binary files /dev/null and b/sound/direct_sound_samples/cries/braviary.wav differ diff --git a/sound/direct_sound_samples/cries/breloom.aif b/sound/direct_sound_samples/cries/breloom.aif deleted file mode 100644 index aa6e22f1b916..000000000000 Binary files a/sound/direct_sound_samples/cries/breloom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/breloom.wav b/sound/direct_sound_samples/cries/breloom.wav new file mode 100644 index 000000000000..49f57f53ec92 Binary files /dev/null and b/sound/direct_sound_samples/cries/breloom.wav differ diff --git a/sound/direct_sound_samples/cries/brionne.aif b/sound/direct_sound_samples/cries/brionne.aif deleted file mode 100644 index ac026ada8824..000000000000 Binary files a/sound/direct_sound_samples/cries/brionne.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/brionne.wav b/sound/direct_sound_samples/cries/brionne.wav new file mode 100644 index 000000000000..f72a6df30a7e Binary files /dev/null and b/sound/direct_sound_samples/cries/brionne.wav differ diff --git a/sound/direct_sound_samples/cries/bronzong.aif b/sound/direct_sound_samples/cries/bronzong.aif deleted file mode 100644 index 628ec30895c3..000000000000 Binary files a/sound/direct_sound_samples/cries/bronzong.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bronzong.wav b/sound/direct_sound_samples/cries/bronzong.wav new file mode 100644 index 000000000000..019013e0dade Binary files /dev/null and b/sound/direct_sound_samples/cries/bronzong.wav differ diff --git a/sound/direct_sound_samples/cries/bronzor.aif b/sound/direct_sound_samples/cries/bronzor.aif deleted file mode 100644 index 857bef1056e7..000000000000 Binary files a/sound/direct_sound_samples/cries/bronzor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bronzor.wav b/sound/direct_sound_samples/cries/bronzor.wav new file mode 100644 index 000000000000..133c581532a9 Binary files /dev/null and b/sound/direct_sound_samples/cries/bronzor.wav differ diff --git a/sound/direct_sound_samples/cries/brute_bonnet.aif b/sound/direct_sound_samples/cries/brute_bonnet.aif deleted file mode 100644 index 3a6369e8be7a..000000000000 Binary files a/sound/direct_sound_samples/cries/brute_bonnet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/brute_bonnet.wav b/sound/direct_sound_samples/cries/brute_bonnet.wav new file mode 100644 index 000000000000..f3fe7e979921 Binary files /dev/null and b/sound/direct_sound_samples/cries/brute_bonnet.wav differ diff --git a/sound/direct_sound_samples/cries/bruxish.aif b/sound/direct_sound_samples/cries/bruxish.aif deleted file mode 100644 index f725043bc712..000000000000 Binary files a/sound/direct_sound_samples/cries/bruxish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bruxish.wav b/sound/direct_sound_samples/cries/bruxish.wav new file mode 100644 index 000000000000..cd5bfbf91277 Binary files /dev/null and b/sound/direct_sound_samples/cries/bruxish.wav differ diff --git a/sound/direct_sound_samples/cries/budew.aif b/sound/direct_sound_samples/cries/budew.aif deleted file mode 100644 index bebc52a8dfeb..000000000000 Binary files a/sound/direct_sound_samples/cries/budew.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/budew.wav b/sound/direct_sound_samples/cries/budew.wav new file mode 100644 index 000000000000..97960bf335e4 Binary files /dev/null and b/sound/direct_sound_samples/cries/budew.wav differ diff --git a/sound/direct_sound_samples/cries/buizel.aif b/sound/direct_sound_samples/cries/buizel.aif deleted file mode 100644 index b138be7a4f36..000000000000 Binary files a/sound/direct_sound_samples/cries/buizel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/buizel.wav b/sound/direct_sound_samples/cries/buizel.wav new file mode 100644 index 000000000000..21bb4d26aac6 Binary files /dev/null and b/sound/direct_sound_samples/cries/buizel.wav differ diff --git a/sound/direct_sound_samples/cries/bulbasaur.aif b/sound/direct_sound_samples/cries/bulbasaur.aif deleted file mode 100644 index cff5d718b311..000000000000 Binary files a/sound/direct_sound_samples/cries/bulbasaur.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bulbasaur.wav b/sound/direct_sound_samples/cries/bulbasaur.wav new file mode 100644 index 000000000000..77a2d1bd1cb6 Binary files /dev/null and b/sound/direct_sound_samples/cries/bulbasaur.wav differ diff --git a/sound/direct_sound_samples/cries/buneary.aif b/sound/direct_sound_samples/cries/buneary.aif deleted file mode 100644 index f02bf1b46560..000000000000 Binary files a/sound/direct_sound_samples/cries/buneary.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/buneary.wav b/sound/direct_sound_samples/cries/buneary.wav new file mode 100644 index 000000000000..00af6ec1d8fb Binary files /dev/null and b/sound/direct_sound_samples/cries/buneary.wav differ diff --git a/sound/direct_sound_samples/cries/bunnelby.aif b/sound/direct_sound_samples/cries/bunnelby.aif deleted file mode 100644 index 7588776e93be..000000000000 Binary files a/sound/direct_sound_samples/cries/bunnelby.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/bunnelby.wav b/sound/direct_sound_samples/cries/bunnelby.wav new file mode 100644 index 000000000000..469b6d371b86 Binary files /dev/null and b/sound/direct_sound_samples/cries/bunnelby.wav differ diff --git a/sound/direct_sound_samples/cries/burmy.aif b/sound/direct_sound_samples/cries/burmy.aif deleted file mode 100644 index 80478166f5e3..000000000000 Binary files a/sound/direct_sound_samples/cries/burmy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/burmy.wav b/sound/direct_sound_samples/cries/burmy.wav new file mode 100644 index 000000000000..6f8db1d2a400 Binary files /dev/null and b/sound/direct_sound_samples/cries/burmy.wav differ diff --git a/sound/direct_sound_samples/cries/butterfree.aif b/sound/direct_sound_samples/cries/butterfree.aif deleted file mode 100644 index e59865ae5af7..000000000000 Binary files a/sound/direct_sound_samples/cries/butterfree.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/butterfree.wav b/sound/direct_sound_samples/cries/butterfree.wav new file mode 100644 index 000000000000..796a1afa9afb Binary files /dev/null and b/sound/direct_sound_samples/cries/butterfree.wav differ diff --git a/sound/direct_sound_samples/cries/buzzwole.aif b/sound/direct_sound_samples/cries/buzzwole.aif deleted file mode 100644 index 242edabdce22..000000000000 Binary files a/sound/direct_sound_samples/cries/buzzwole.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/buzzwole.wav b/sound/direct_sound_samples/cries/buzzwole.wav new file mode 100644 index 000000000000..69f4f7c1a028 Binary files /dev/null and b/sound/direct_sound_samples/cries/buzzwole.wav differ diff --git a/sound/direct_sound_samples/cries/cacnea.aif b/sound/direct_sound_samples/cries/cacnea.aif deleted file mode 100644 index 4d1771b18df1..000000000000 Binary files a/sound/direct_sound_samples/cries/cacnea.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cacnea.wav b/sound/direct_sound_samples/cries/cacnea.wav new file mode 100644 index 000000000000..b2786069b6cb Binary files /dev/null and b/sound/direct_sound_samples/cries/cacnea.wav differ diff --git a/sound/direct_sound_samples/cries/cacturne.aif b/sound/direct_sound_samples/cries/cacturne.aif deleted file mode 100644 index d81f86d9fc9d..000000000000 Binary files a/sound/direct_sound_samples/cries/cacturne.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cacturne.wav b/sound/direct_sound_samples/cries/cacturne.wav new file mode 100644 index 000000000000..34c4525227bb Binary files /dev/null and b/sound/direct_sound_samples/cries/cacturne.wav differ diff --git a/sound/direct_sound_samples/cries/calyrex.aif b/sound/direct_sound_samples/cries/calyrex.aif deleted file mode 100644 index 59c41a4fdb76..000000000000 Binary files a/sound/direct_sound_samples/cries/calyrex.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/calyrex.wav b/sound/direct_sound_samples/cries/calyrex.wav new file mode 100644 index 000000000000..365d22f27e76 Binary files /dev/null and b/sound/direct_sound_samples/cries/calyrex.wav differ diff --git a/sound/direct_sound_samples/cries/calyrex_ice.aif b/sound/direct_sound_samples/cries/calyrex_ice.aif deleted file mode 100644 index a6be291e1dc0..000000000000 Binary files a/sound/direct_sound_samples/cries/calyrex_ice.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/calyrex_ice.wav b/sound/direct_sound_samples/cries/calyrex_ice.wav new file mode 100644 index 000000000000..d1bb9330fe7f Binary files /dev/null and b/sound/direct_sound_samples/cries/calyrex_ice.wav differ diff --git a/sound/direct_sound_samples/cries/calyrex_shadow.aif b/sound/direct_sound_samples/cries/calyrex_shadow.aif deleted file mode 100644 index 2d3c43d978bb..000000000000 Binary files a/sound/direct_sound_samples/cries/calyrex_shadow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/calyrex_shadow.wav b/sound/direct_sound_samples/cries/calyrex_shadow.wav new file mode 100644 index 000000000000..8c5fabed081a Binary files /dev/null and b/sound/direct_sound_samples/cries/calyrex_shadow.wav differ diff --git a/sound/direct_sound_samples/cries/camerupt.aif b/sound/direct_sound_samples/cries/camerupt.aif deleted file mode 100644 index 82a7f237cf07..000000000000 Binary files a/sound/direct_sound_samples/cries/camerupt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/camerupt.wav b/sound/direct_sound_samples/cries/camerupt.wav new file mode 100644 index 000000000000..95fdce35757c Binary files /dev/null and b/sound/direct_sound_samples/cries/camerupt.wav differ diff --git a/sound/direct_sound_samples/cries/camerupt_mega.aif b/sound/direct_sound_samples/cries/camerupt_mega.aif deleted file mode 100644 index 0c7966b8ea6e..000000000000 Binary files a/sound/direct_sound_samples/cries/camerupt_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/camerupt_mega.wav b/sound/direct_sound_samples/cries/camerupt_mega.wav new file mode 100644 index 000000000000..b76cd2d974b9 Binary files /dev/null and b/sound/direct_sound_samples/cries/camerupt_mega.wav differ diff --git a/sound/direct_sound_samples/cries/capsakid.aif b/sound/direct_sound_samples/cries/capsakid.aif deleted file mode 100644 index a93a531cdb0c..000000000000 Binary files a/sound/direct_sound_samples/cries/capsakid.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/capsakid.wav b/sound/direct_sound_samples/cries/capsakid.wav new file mode 100644 index 000000000000..1a5837c9cd1b Binary files /dev/null and b/sound/direct_sound_samples/cries/capsakid.wav differ diff --git a/sound/direct_sound_samples/cries/carbink.aif b/sound/direct_sound_samples/cries/carbink.aif deleted file mode 100644 index dfdc907bd7b0..000000000000 Binary files a/sound/direct_sound_samples/cries/carbink.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/carbink.wav b/sound/direct_sound_samples/cries/carbink.wav new file mode 100644 index 000000000000..34ccc0db3b06 Binary files /dev/null and b/sound/direct_sound_samples/cries/carbink.wav differ diff --git a/sound/direct_sound_samples/cries/carkol.aif b/sound/direct_sound_samples/cries/carkol.aif deleted file mode 100644 index a1f19de7f413..000000000000 Binary files a/sound/direct_sound_samples/cries/carkol.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/carkol.wav b/sound/direct_sound_samples/cries/carkol.wav new file mode 100644 index 000000000000..526f8f473ff8 Binary files /dev/null and b/sound/direct_sound_samples/cries/carkol.wav differ diff --git a/sound/direct_sound_samples/cries/carnivine.aif b/sound/direct_sound_samples/cries/carnivine.aif deleted file mode 100644 index 491e846a1a44..000000000000 Binary files a/sound/direct_sound_samples/cries/carnivine.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/carnivine.wav b/sound/direct_sound_samples/cries/carnivine.wav new file mode 100644 index 000000000000..cdb7d8a35803 Binary files /dev/null and b/sound/direct_sound_samples/cries/carnivine.wav differ diff --git a/sound/direct_sound_samples/cries/carracosta.aif b/sound/direct_sound_samples/cries/carracosta.aif deleted file mode 100644 index f75692c3a132..000000000000 Binary files a/sound/direct_sound_samples/cries/carracosta.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/carracosta.wav b/sound/direct_sound_samples/cries/carracosta.wav new file mode 100644 index 000000000000..4367ed1372e5 Binary files /dev/null and b/sound/direct_sound_samples/cries/carracosta.wav differ diff --git a/sound/direct_sound_samples/cries/carvanha.aif b/sound/direct_sound_samples/cries/carvanha.aif deleted file mode 100644 index 2c0a6a5d8ccc..000000000000 Binary files a/sound/direct_sound_samples/cries/carvanha.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/carvanha.wav b/sound/direct_sound_samples/cries/carvanha.wav new file mode 100644 index 000000000000..ae10c3b10c71 Binary files /dev/null and b/sound/direct_sound_samples/cries/carvanha.wav differ diff --git a/sound/direct_sound_samples/cries/cascoon.aif b/sound/direct_sound_samples/cries/cascoon.aif deleted file mode 100644 index a256131caff5..000000000000 Binary files a/sound/direct_sound_samples/cries/cascoon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cascoon.wav b/sound/direct_sound_samples/cries/cascoon.wav new file mode 100644 index 000000000000..fff0be68157e Binary files /dev/null and b/sound/direct_sound_samples/cries/cascoon.wav differ diff --git a/sound/direct_sound_samples/cries/castform.aif b/sound/direct_sound_samples/cries/castform.aif deleted file mode 100644 index 4fce6e5075e8..000000000000 Binary files a/sound/direct_sound_samples/cries/castform.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/castform.wav b/sound/direct_sound_samples/cries/castform.wav new file mode 100644 index 000000000000..83748d45b857 Binary files /dev/null and b/sound/direct_sound_samples/cries/castform.wav differ diff --git a/sound/direct_sound_samples/cries/caterpie.aif b/sound/direct_sound_samples/cries/caterpie.aif deleted file mode 100644 index 4ce12c5fb7d8..000000000000 Binary files a/sound/direct_sound_samples/cries/caterpie.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/caterpie.wav b/sound/direct_sound_samples/cries/caterpie.wav new file mode 100644 index 000000000000..ccdf1ba1ac08 Binary files /dev/null and b/sound/direct_sound_samples/cries/caterpie.wav differ diff --git a/sound/direct_sound_samples/cries/celebi.aif b/sound/direct_sound_samples/cries/celebi.aif deleted file mode 100644 index df1c4cd19504..000000000000 Binary files a/sound/direct_sound_samples/cries/celebi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/celebi.wav b/sound/direct_sound_samples/cries/celebi.wav new file mode 100644 index 000000000000..e217a99e81ad Binary files /dev/null and b/sound/direct_sound_samples/cries/celebi.wav differ diff --git a/sound/direct_sound_samples/cries/celesteela.aif b/sound/direct_sound_samples/cries/celesteela.aif deleted file mode 100644 index acab333235df..000000000000 Binary files a/sound/direct_sound_samples/cries/celesteela.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/celesteela.wav b/sound/direct_sound_samples/cries/celesteela.wav new file mode 100644 index 000000000000..fd5cae47f9a1 Binary files /dev/null and b/sound/direct_sound_samples/cries/celesteela.wav differ diff --git a/sound/direct_sound_samples/cries/centiskorch.aif b/sound/direct_sound_samples/cries/centiskorch.aif deleted file mode 100644 index 01c6bc23a5cb..000000000000 Binary files a/sound/direct_sound_samples/cries/centiskorch.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/centiskorch.wav b/sound/direct_sound_samples/cries/centiskorch.wav new file mode 100644 index 000000000000..cc669c123f41 Binary files /dev/null and b/sound/direct_sound_samples/cries/centiskorch.wav differ diff --git a/sound/direct_sound_samples/cries/ceruledge.aif b/sound/direct_sound_samples/cries/ceruledge.aif deleted file mode 100644 index de4b1bb7c89d..000000000000 Binary files a/sound/direct_sound_samples/cries/ceruledge.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ceruledge.wav b/sound/direct_sound_samples/cries/ceruledge.wav new file mode 100644 index 000000000000..158bf548e04d Binary files /dev/null and b/sound/direct_sound_samples/cries/ceruledge.wav differ diff --git a/sound/direct_sound_samples/cries/cetitan.aif b/sound/direct_sound_samples/cries/cetitan.aif deleted file mode 100644 index 45302ff84437..000000000000 Binary files a/sound/direct_sound_samples/cries/cetitan.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cetitan.wav b/sound/direct_sound_samples/cries/cetitan.wav new file mode 100644 index 000000000000..9f6df2ec42e4 Binary files /dev/null and b/sound/direct_sound_samples/cries/cetitan.wav differ diff --git a/sound/direct_sound_samples/cries/cetoddle.aif b/sound/direct_sound_samples/cries/cetoddle.aif deleted file mode 100644 index f85f3d201f63..000000000000 Binary files a/sound/direct_sound_samples/cries/cetoddle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cetoddle.wav b/sound/direct_sound_samples/cries/cetoddle.wav new file mode 100644 index 000000000000..93f34e1cf78c Binary files /dev/null and b/sound/direct_sound_samples/cries/cetoddle.wav differ diff --git a/sound/direct_sound_samples/cries/chandelure.aif b/sound/direct_sound_samples/cries/chandelure.aif deleted file mode 100644 index 29cd52e1c1fd..000000000000 Binary files a/sound/direct_sound_samples/cries/chandelure.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chandelure.wav b/sound/direct_sound_samples/cries/chandelure.wav new file mode 100644 index 000000000000..2539f2c23996 Binary files /dev/null and b/sound/direct_sound_samples/cries/chandelure.wav differ diff --git a/sound/direct_sound_samples/cries/chansey.aif b/sound/direct_sound_samples/cries/chansey.aif deleted file mode 100644 index b6a8a2902038..000000000000 Binary files a/sound/direct_sound_samples/cries/chansey.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chansey.wav b/sound/direct_sound_samples/cries/chansey.wav new file mode 100644 index 000000000000..62d8e6cd9fbb Binary files /dev/null and b/sound/direct_sound_samples/cries/chansey.wav differ diff --git a/sound/direct_sound_samples/cries/charcadet.aif b/sound/direct_sound_samples/cries/charcadet.aif deleted file mode 100644 index 60f5512ca6cd..000000000000 Binary files a/sound/direct_sound_samples/cries/charcadet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/charcadet.wav b/sound/direct_sound_samples/cries/charcadet.wav new file mode 100644 index 000000000000..509e7b496821 Binary files /dev/null and b/sound/direct_sound_samples/cries/charcadet.wav differ diff --git a/sound/direct_sound_samples/cries/charizard.aif b/sound/direct_sound_samples/cries/charizard.aif deleted file mode 100644 index cc5f2bdd33f8..000000000000 Binary files a/sound/direct_sound_samples/cries/charizard.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/charizard.wav b/sound/direct_sound_samples/cries/charizard.wav new file mode 100644 index 000000000000..fbbf3c555d49 Binary files /dev/null and b/sound/direct_sound_samples/cries/charizard.wav differ diff --git a/sound/direct_sound_samples/cries/charizard_mega_x.aif b/sound/direct_sound_samples/cries/charizard_mega_x.aif deleted file mode 100644 index f9c0f7659752..000000000000 Binary files a/sound/direct_sound_samples/cries/charizard_mega_x.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/charizard_mega_x.wav b/sound/direct_sound_samples/cries/charizard_mega_x.wav new file mode 100644 index 000000000000..053f05caad2f Binary files /dev/null and b/sound/direct_sound_samples/cries/charizard_mega_x.wav differ diff --git a/sound/direct_sound_samples/cries/charizard_mega_y.aif b/sound/direct_sound_samples/cries/charizard_mega_y.aif deleted file mode 100644 index 2cf5b3ea7fc6..000000000000 Binary files a/sound/direct_sound_samples/cries/charizard_mega_y.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/charizard_mega_y.wav b/sound/direct_sound_samples/cries/charizard_mega_y.wav new file mode 100644 index 000000000000..1d354bb938cb Binary files /dev/null and b/sound/direct_sound_samples/cries/charizard_mega_y.wav differ diff --git a/sound/direct_sound_samples/cries/charjabug.aif b/sound/direct_sound_samples/cries/charjabug.aif deleted file mode 100644 index ed5bd7d88be8..000000000000 Binary files a/sound/direct_sound_samples/cries/charjabug.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/charjabug.wav b/sound/direct_sound_samples/cries/charjabug.wav new file mode 100644 index 000000000000..686e72aa6f59 Binary files /dev/null and b/sound/direct_sound_samples/cries/charjabug.wav differ diff --git a/sound/direct_sound_samples/cries/charmander.aif b/sound/direct_sound_samples/cries/charmander.aif deleted file mode 100644 index dda65af54992..000000000000 Binary files a/sound/direct_sound_samples/cries/charmander.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/charmander.wav b/sound/direct_sound_samples/cries/charmander.wav new file mode 100644 index 000000000000..3d82aca2fa71 Binary files /dev/null and b/sound/direct_sound_samples/cries/charmander.wav differ diff --git a/sound/direct_sound_samples/cries/charmeleon.aif b/sound/direct_sound_samples/cries/charmeleon.aif deleted file mode 100644 index 9a9a14e3bb81..000000000000 Binary files a/sound/direct_sound_samples/cries/charmeleon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/charmeleon.wav b/sound/direct_sound_samples/cries/charmeleon.wav new file mode 100644 index 000000000000..a491f0586ec8 Binary files /dev/null and b/sound/direct_sound_samples/cries/charmeleon.wav differ diff --git a/sound/direct_sound_samples/cries/chatot.aif b/sound/direct_sound_samples/cries/chatot.aif deleted file mode 100644 index 62a961a82f4e..000000000000 Binary files a/sound/direct_sound_samples/cries/chatot.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chatot.wav b/sound/direct_sound_samples/cries/chatot.wav new file mode 100644 index 000000000000..5f76a9147239 Binary files /dev/null and b/sound/direct_sound_samples/cries/chatot.wav differ diff --git a/sound/direct_sound_samples/cries/cherrim.aif b/sound/direct_sound_samples/cries/cherrim.aif deleted file mode 100644 index d70cf77b0228..000000000000 Binary files a/sound/direct_sound_samples/cries/cherrim.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cherrim.wav b/sound/direct_sound_samples/cries/cherrim.wav new file mode 100644 index 000000000000..ca0dc7a4c035 Binary files /dev/null and b/sound/direct_sound_samples/cries/cherrim.wav differ diff --git a/sound/direct_sound_samples/cries/cherubi.aif b/sound/direct_sound_samples/cries/cherubi.aif deleted file mode 100644 index 703c1d5f8b81..000000000000 Binary files a/sound/direct_sound_samples/cries/cherubi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cherubi.wav b/sound/direct_sound_samples/cries/cherubi.wav new file mode 100644 index 000000000000..2a87affb5751 Binary files /dev/null and b/sound/direct_sound_samples/cries/cherubi.wav differ diff --git a/sound/direct_sound_samples/cries/chesnaught.aif b/sound/direct_sound_samples/cries/chesnaught.aif deleted file mode 100644 index 80cff836982e..000000000000 Binary files a/sound/direct_sound_samples/cries/chesnaught.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chesnaught.wav b/sound/direct_sound_samples/cries/chesnaught.wav new file mode 100644 index 000000000000..27044e80a41f Binary files /dev/null and b/sound/direct_sound_samples/cries/chesnaught.wav differ diff --git a/sound/direct_sound_samples/cries/chespin.aif b/sound/direct_sound_samples/cries/chespin.aif deleted file mode 100644 index 48136a98a0d5..000000000000 Binary files a/sound/direct_sound_samples/cries/chespin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chespin.wav b/sound/direct_sound_samples/cries/chespin.wav new file mode 100644 index 000000000000..5e5f5a7c6a93 Binary files /dev/null and b/sound/direct_sound_samples/cries/chespin.wav differ diff --git a/sound/direct_sound_samples/cries/chewtle.aif b/sound/direct_sound_samples/cries/chewtle.aif deleted file mode 100644 index d551d2715623..000000000000 Binary files a/sound/direct_sound_samples/cries/chewtle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chewtle.wav b/sound/direct_sound_samples/cries/chewtle.wav new file mode 100644 index 000000000000..a9f609dc4ca0 Binary files /dev/null and b/sound/direct_sound_samples/cries/chewtle.wav differ diff --git a/sound/direct_sound_samples/cries/chi_yu.aif b/sound/direct_sound_samples/cries/chi_yu.aif deleted file mode 100644 index 60131a9e4637..000000000000 Binary files a/sound/direct_sound_samples/cries/chi_yu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chi_yu.wav b/sound/direct_sound_samples/cries/chi_yu.wav new file mode 100644 index 000000000000..8db88a2de66b Binary files /dev/null and b/sound/direct_sound_samples/cries/chi_yu.wav differ diff --git a/sound/direct_sound_samples/cries/chien_pao.aif b/sound/direct_sound_samples/cries/chien_pao.aif deleted file mode 100644 index c598dac8d23d..000000000000 Binary files a/sound/direct_sound_samples/cries/chien_pao.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chien_pao.wav b/sound/direct_sound_samples/cries/chien_pao.wav new file mode 100644 index 000000000000..2575663d5df7 Binary files /dev/null and b/sound/direct_sound_samples/cries/chien_pao.wav differ diff --git a/sound/direct_sound_samples/cries/chikorita.aif b/sound/direct_sound_samples/cries/chikorita.aif deleted file mode 100644 index 63d5c9503373..000000000000 Binary files a/sound/direct_sound_samples/cries/chikorita.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chikorita.wav b/sound/direct_sound_samples/cries/chikorita.wav new file mode 100644 index 000000000000..65cb0c17656b Binary files /dev/null and b/sound/direct_sound_samples/cries/chikorita.wav differ diff --git a/sound/direct_sound_samples/cries/chimchar.aif b/sound/direct_sound_samples/cries/chimchar.aif deleted file mode 100644 index 06514a4d9040..000000000000 Binary files a/sound/direct_sound_samples/cries/chimchar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chimchar.wav b/sound/direct_sound_samples/cries/chimchar.wav new file mode 100644 index 000000000000..cd862e218abf Binary files /dev/null and b/sound/direct_sound_samples/cries/chimchar.wav differ diff --git a/sound/direct_sound_samples/cries/chimecho.aif b/sound/direct_sound_samples/cries/chimecho.aif deleted file mode 100644 index 7b2b45fac202..000000000000 Binary files a/sound/direct_sound_samples/cries/chimecho.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chimecho.wav b/sound/direct_sound_samples/cries/chimecho.wav new file mode 100644 index 000000000000..a063bf739e77 Binary files /dev/null and b/sound/direct_sound_samples/cries/chimecho.wav differ diff --git a/sound/direct_sound_samples/cries/chinchou.aif b/sound/direct_sound_samples/cries/chinchou.aif deleted file mode 100644 index 846df5079cde..000000000000 Binary files a/sound/direct_sound_samples/cries/chinchou.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chinchou.wav b/sound/direct_sound_samples/cries/chinchou.wav new file mode 100644 index 000000000000..88229968284e Binary files /dev/null and b/sound/direct_sound_samples/cries/chinchou.wav differ diff --git a/sound/direct_sound_samples/cries/chingling.aif b/sound/direct_sound_samples/cries/chingling.aif deleted file mode 100644 index dd3b00915b2b..000000000000 Binary files a/sound/direct_sound_samples/cries/chingling.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/chingling.wav b/sound/direct_sound_samples/cries/chingling.wav new file mode 100644 index 000000000000..af4d3051069c Binary files /dev/null and b/sound/direct_sound_samples/cries/chingling.wav differ diff --git a/sound/direct_sound_samples/cries/cinccino.aif b/sound/direct_sound_samples/cries/cinccino.aif deleted file mode 100644 index 6205aaf2b07b..000000000000 Binary files a/sound/direct_sound_samples/cries/cinccino.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cinccino.wav b/sound/direct_sound_samples/cries/cinccino.wav new file mode 100644 index 000000000000..beb20a3ce00d Binary files /dev/null and b/sound/direct_sound_samples/cries/cinccino.wav differ diff --git a/sound/direct_sound_samples/cries/cinderace.aif b/sound/direct_sound_samples/cries/cinderace.aif deleted file mode 100644 index 1e7bed5bfd69..000000000000 Binary files a/sound/direct_sound_samples/cries/cinderace.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cinderace.wav b/sound/direct_sound_samples/cries/cinderace.wav new file mode 100644 index 000000000000..01caaae4d61d Binary files /dev/null and b/sound/direct_sound_samples/cries/cinderace.wav differ diff --git a/sound/direct_sound_samples/cries/clamperl.aif b/sound/direct_sound_samples/cries/clamperl.aif deleted file mode 100644 index 186a1f9b408d..000000000000 Binary files a/sound/direct_sound_samples/cries/clamperl.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/clamperl.wav b/sound/direct_sound_samples/cries/clamperl.wav new file mode 100644 index 000000000000..6615de877926 Binary files /dev/null and b/sound/direct_sound_samples/cries/clamperl.wav differ diff --git a/sound/direct_sound_samples/cries/clauncher.aif b/sound/direct_sound_samples/cries/clauncher.aif deleted file mode 100644 index ab9cbf9ce1bb..000000000000 Binary files a/sound/direct_sound_samples/cries/clauncher.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/clauncher.wav b/sound/direct_sound_samples/cries/clauncher.wav new file mode 100644 index 000000000000..19a07f395aa6 Binary files /dev/null and b/sound/direct_sound_samples/cries/clauncher.wav differ diff --git a/sound/direct_sound_samples/cries/clawitzer.aif b/sound/direct_sound_samples/cries/clawitzer.aif deleted file mode 100644 index bd14270c3821..000000000000 Binary files a/sound/direct_sound_samples/cries/clawitzer.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/clawitzer.wav b/sound/direct_sound_samples/cries/clawitzer.wav new file mode 100644 index 000000000000..7947944ace46 Binary files /dev/null and b/sound/direct_sound_samples/cries/clawitzer.wav differ diff --git a/sound/direct_sound_samples/cries/claydol.aif b/sound/direct_sound_samples/cries/claydol.aif deleted file mode 100644 index 9da5f5bbb76b..000000000000 Binary files a/sound/direct_sound_samples/cries/claydol.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/claydol.wav b/sound/direct_sound_samples/cries/claydol.wav new file mode 100644 index 000000000000..037a9a40637c Binary files /dev/null and b/sound/direct_sound_samples/cries/claydol.wav differ diff --git a/sound/direct_sound_samples/cries/clefable.aif b/sound/direct_sound_samples/cries/clefable.aif deleted file mode 100644 index e04bf536ad3b..000000000000 Binary files a/sound/direct_sound_samples/cries/clefable.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/clefable.wav b/sound/direct_sound_samples/cries/clefable.wav new file mode 100644 index 000000000000..09b0d19b862e Binary files /dev/null and b/sound/direct_sound_samples/cries/clefable.wav differ diff --git a/sound/direct_sound_samples/cries/clefairy.aif b/sound/direct_sound_samples/cries/clefairy.aif deleted file mode 100644 index b38fa6e9d7d9..000000000000 Binary files a/sound/direct_sound_samples/cries/clefairy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/clefairy.wav b/sound/direct_sound_samples/cries/clefairy.wav new file mode 100644 index 000000000000..b447b700cd7a Binary files /dev/null and b/sound/direct_sound_samples/cries/clefairy.wav differ diff --git a/sound/direct_sound_samples/cries/cleffa.aif b/sound/direct_sound_samples/cries/cleffa.aif deleted file mode 100644 index e3243d0998de..000000000000 Binary files a/sound/direct_sound_samples/cries/cleffa.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cleffa.wav b/sound/direct_sound_samples/cries/cleffa.wav new file mode 100644 index 000000000000..53d18df4153c Binary files /dev/null and b/sound/direct_sound_samples/cries/cleffa.wav differ diff --git a/sound/direct_sound_samples/cries/clobbopus.aif b/sound/direct_sound_samples/cries/clobbopus.aif deleted file mode 100644 index ebce642966d2..000000000000 Binary files a/sound/direct_sound_samples/cries/clobbopus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/clobbopus.wav b/sound/direct_sound_samples/cries/clobbopus.wav new file mode 100644 index 000000000000..f26d8c1cddf0 Binary files /dev/null and b/sound/direct_sound_samples/cries/clobbopus.wav differ diff --git a/sound/direct_sound_samples/cries/clodsire.aif b/sound/direct_sound_samples/cries/clodsire.aif deleted file mode 100644 index 17aea97e46d9..000000000000 Binary files a/sound/direct_sound_samples/cries/clodsire.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/clodsire.wav b/sound/direct_sound_samples/cries/clodsire.wav new file mode 100644 index 000000000000..44cad4cb7116 Binary files /dev/null and b/sound/direct_sound_samples/cries/clodsire.wav differ diff --git a/sound/direct_sound_samples/cries/cloyster.aif b/sound/direct_sound_samples/cries/cloyster.aif deleted file mode 100644 index b69d0478bf51..000000000000 Binary files a/sound/direct_sound_samples/cries/cloyster.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cloyster.wav b/sound/direct_sound_samples/cries/cloyster.wav new file mode 100644 index 000000000000..4fc766ae194c Binary files /dev/null and b/sound/direct_sound_samples/cries/cloyster.wav differ diff --git a/sound/direct_sound_samples/cries/coalossal.aif b/sound/direct_sound_samples/cries/coalossal.aif deleted file mode 100644 index 5d62b25fbae7..000000000000 Binary files a/sound/direct_sound_samples/cries/coalossal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/coalossal.wav b/sound/direct_sound_samples/cries/coalossal.wav new file mode 100644 index 000000000000..7b2a758d2327 Binary files /dev/null and b/sound/direct_sound_samples/cries/coalossal.wav differ diff --git a/sound/direct_sound_samples/cries/cobalion.aif b/sound/direct_sound_samples/cries/cobalion.aif deleted file mode 100644 index 4a21505b5b50..000000000000 Binary files a/sound/direct_sound_samples/cries/cobalion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cobalion.wav b/sound/direct_sound_samples/cries/cobalion.wav new file mode 100644 index 000000000000..2cbc6bbd554e Binary files /dev/null and b/sound/direct_sound_samples/cries/cobalion.wav differ diff --git a/sound/direct_sound_samples/cries/cofagrigus.aif b/sound/direct_sound_samples/cries/cofagrigus.aif deleted file mode 100644 index 6fbf1c16f87b..000000000000 Binary files a/sound/direct_sound_samples/cries/cofagrigus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cofagrigus.wav b/sound/direct_sound_samples/cries/cofagrigus.wav new file mode 100644 index 000000000000..2096837cd9cc Binary files /dev/null and b/sound/direct_sound_samples/cries/cofagrigus.wav differ diff --git a/sound/direct_sound_samples/cries/combee.aif b/sound/direct_sound_samples/cries/combee.aif deleted file mode 100644 index 6aaedb642d12..000000000000 Binary files a/sound/direct_sound_samples/cries/combee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/combee.wav b/sound/direct_sound_samples/cries/combee.wav new file mode 100644 index 000000000000..d2e370227e7a Binary files /dev/null and b/sound/direct_sound_samples/cries/combee.wav differ diff --git a/sound/direct_sound_samples/cries/combusken.aif b/sound/direct_sound_samples/cries/combusken.aif deleted file mode 100644 index 58707c30b8bb..000000000000 Binary files a/sound/direct_sound_samples/cries/combusken.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/combusken.wav b/sound/direct_sound_samples/cries/combusken.wav new file mode 100644 index 000000000000..8da9de64a13d Binary files /dev/null and b/sound/direct_sound_samples/cries/combusken.wav differ diff --git a/sound/direct_sound_samples/cries/comfey.aif b/sound/direct_sound_samples/cries/comfey.aif deleted file mode 100644 index cb91d0cbd72d..000000000000 Binary files a/sound/direct_sound_samples/cries/comfey.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/comfey.wav b/sound/direct_sound_samples/cries/comfey.wav new file mode 100644 index 000000000000..b178f02a6999 Binary files /dev/null and b/sound/direct_sound_samples/cries/comfey.wav differ diff --git a/sound/direct_sound_samples/cries/conkeldurr.aif b/sound/direct_sound_samples/cries/conkeldurr.aif deleted file mode 100644 index 09885ab2ef05..000000000000 Binary files a/sound/direct_sound_samples/cries/conkeldurr.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/conkeldurr.wav b/sound/direct_sound_samples/cries/conkeldurr.wav new file mode 100644 index 000000000000..fa56aac5e922 Binary files /dev/null and b/sound/direct_sound_samples/cries/conkeldurr.wav differ diff --git a/sound/direct_sound_samples/cries/copperajah.aif b/sound/direct_sound_samples/cries/copperajah.aif deleted file mode 100644 index 97484e695b24..000000000000 Binary files a/sound/direct_sound_samples/cries/copperajah.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/copperajah.wav b/sound/direct_sound_samples/cries/copperajah.wav new file mode 100644 index 000000000000..23df3fd99cf2 Binary files /dev/null and b/sound/direct_sound_samples/cries/copperajah.wav differ diff --git a/sound/direct_sound_samples/cries/corphish.aif b/sound/direct_sound_samples/cries/corphish.aif deleted file mode 100644 index 9bc708e2fb41..000000000000 Binary files a/sound/direct_sound_samples/cries/corphish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/corphish.wav b/sound/direct_sound_samples/cries/corphish.wav new file mode 100644 index 000000000000..990029d333c0 Binary files /dev/null and b/sound/direct_sound_samples/cries/corphish.wav differ diff --git a/sound/direct_sound_samples/cries/corsola.aif b/sound/direct_sound_samples/cries/corsola.aif deleted file mode 100644 index 087308d8fd9c..000000000000 Binary files a/sound/direct_sound_samples/cries/corsola.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/corsola.wav b/sound/direct_sound_samples/cries/corsola.wav new file mode 100644 index 000000000000..890208bc73dc Binary files /dev/null and b/sound/direct_sound_samples/cries/corsola.wav differ diff --git a/sound/direct_sound_samples/cries/corviknight.aif b/sound/direct_sound_samples/cries/corviknight.aif deleted file mode 100644 index 8a7e200da3fd..000000000000 Binary files a/sound/direct_sound_samples/cries/corviknight.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/corviknight.wav b/sound/direct_sound_samples/cries/corviknight.wav new file mode 100644 index 000000000000..2f536e1280dc Binary files /dev/null and b/sound/direct_sound_samples/cries/corviknight.wav differ diff --git a/sound/direct_sound_samples/cries/corvisquire.aif b/sound/direct_sound_samples/cries/corvisquire.aif deleted file mode 100644 index a18e64c9c07d..000000000000 Binary files a/sound/direct_sound_samples/cries/corvisquire.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/corvisquire.wav b/sound/direct_sound_samples/cries/corvisquire.wav new file mode 100644 index 000000000000..b0600991c0d1 Binary files /dev/null and b/sound/direct_sound_samples/cries/corvisquire.wav differ diff --git a/sound/direct_sound_samples/cries/cosmoem.aif b/sound/direct_sound_samples/cries/cosmoem.aif deleted file mode 100644 index f2c8c0e2b49f..000000000000 Binary files a/sound/direct_sound_samples/cries/cosmoem.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cosmoem.wav b/sound/direct_sound_samples/cries/cosmoem.wav new file mode 100644 index 000000000000..8f9523bced6f Binary files /dev/null and b/sound/direct_sound_samples/cries/cosmoem.wav differ diff --git a/sound/direct_sound_samples/cries/cosmog.aif b/sound/direct_sound_samples/cries/cosmog.aif deleted file mode 100644 index deeb60b94d7c..000000000000 Binary files a/sound/direct_sound_samples/cries/cosmog.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cosmog.wav b/sound/direct_sound_samples/cries/cosmog.wav new file mode 100644 index 000000000000..c52927d1b073 Binary files /dev/null and b/sound/direct_sound_samples/cries/cosmog.wav differ diff --git a/sound/direct_sound_samples/cries/cottonee.aif b/sound/direct_sound_samples/cries/cottonee.aif deleted file mode 100644 index 207ac9d12df9..000000000000 Binary files a/sound/direct_sound_samples/cries/cottonee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cottonee.wav b/sound/direct_sound_samples/cries/cottonee.wav new file mode 100644 index 000000000000..a7c0e6ce5b5b Binary files /dev/null and b/sound/direct_sound_samples/cries/cottonee.wav differ diff --git a/sound/direct_sound_samples/cries/crabominable.aif b/sound/direct_sound_samples/cries/crabominable.aif deleted file mode 100644 index 1d6b3d4caf24..000000000000 Binary files a/sound/direct_sound_samples/cries/crabominable.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/crabominable.wav b/sound/direct_sound_samples/cries/crabominable.wav new file mode 100644 index 000000000000..ca783994b8be Binary files /dev/null and b/sound/direct_sound_samples/cries/crabominable.wav differ diff --git a/sound/direct_sound_samples/cries/crabrawler.aif b/sound/direct_sound_samples/cries/crabrawler.aif deleted file mode 100644 index 8c42fb18e57a..000000000000 Binary files a/sound/direct_sound_samples/cries/crabrawler.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/crabrawler.wav b/sound/direct_sound_samples/cries/crabrawler.wav new file mode 100644 index 000000000000..b5afae8c1db5 Binary files /dev/null and b/sound/direct_sound_samples/cries/crabrawler.wav differ diff --git a/sound/direct_sound_samples/cries/cradily.aif b/sound/direct_sound_samples/cries/cradily.aif deleted file mode 100644 index 3fa5e006f99d..000000000000 Binary files a/sound/direct_sound_samples/cries/cradily.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cradily.wav b/sound/direct_sound_samples/cries/cradily.wav new file mode 100644 index 000000000000..bb9d5bd42545 Binary files /dev/null and b/sound/direct_sound_samples/cries/cradily.wav differ diff --git a/sound/direct_sound_samples/cries/cramorant.aif b/sound/direct_sound_samples/cries/cramorant.aif deleted file mode 100644 index 01151693ffe5..000000000000 Binary files a/sound/direct_sound_samples/cries/cramorant.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cramorant.wav b/sound/direct_sound_samples/cries/cramorant.wav new file mode 100644 index 000000000000..a21c49b1c4c4 Binary files /dev/null and b/sound/direct_sound_samples/cries/cramorant.wav differ diff --git a/sound/direct_sound_samples/cries/cranidos.aif b/sound/direct_sound_samples/cries/cranidos.aif deleted file mode 100644 index dc67035a766a..000000000000 Binary files a/sound/direct_sound_samples/cries/cranidos.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cranidos.wav b/sound/direct_sound_samples/cries/cranidos.wav new file mode 100644 index 000000000000..5ceba87269d9 Binary files /dev/null and b/sound/direct_sound_samples/cries/cranidos.wav differ diff --git a/sound/direct_sound_samples/cries/crawdaunt.aif b/sound/direct_sound_samples/cries/crawdaunt.aif deleted file mode 100644 index 7f8ee48bebf6..000000000000 Binary files a/sound/direct_sound_samples/cries/crawdaunt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/crawdaunt.wav b/sound/direct_sound_samples/cries/crawdaunt.wav new file mode 100644 index 000000000000..e270a3179154 Binary files /dev/null and b/sound/direct_sound_samples/cries/crawdaunt.wav differ diff --git a/sound/direct_sound_samples/cries/cresselia.aif b/sound/direct_sound_samples/cries/cresselia.aif deleted file mode 100644 index 5edd1b01948a..000000000000 Binary files a/sound/direct_sound_samples/cries/cresselia.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cresselia.wav b/sound/direct_sound_samples/cries/cresselia.wav new file mode 100644 index 000000000000..dd73997250be Binary files /dev/null and b/sound/direct_sound_samples/cries/cresselia.wav differ diff --git a/sound/direct_sound_samples/cries/croagunk.aif b/sound/direct_sound_samples/cries/croagunk.aif deleted file mode 100644 index c5d42a42bf25..000000000000 Binary files a/sound/direct_sound_samples/cries/croagunk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/croagunk.wav b/sound/direct_sound_samples/cries/croagunk.wav new file mode 100644 index 000000000000..f3935f1b850d Binary files /dev/null and b/sound/direct_sound_samples/cries/croagunk.wav differ diff --git a/sound/direct_sound_samples/cries/crobat.aif b/sound/direct_sound_samples/cries/crobat.aif deleted file mode 100644 index 956be378c7e0..000000000000 Binary files a/sound/direct_sound_samples/cries/crobat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/crobat.wav b/sound/direct_sound_samples/cries/crobat.wav new file mode 100644 index 000000000000..fdad8d4a6373 Binary files /dev/null and b/sound/direct_sound_samples/cries/crobat.wav differ diff --git a/sound/direct_sound_samples/cries/crocalor.aif b/sound/direct_sound_samples/cries/crocalor.aif deleted file mode 100644 index 9a622026df37..000000000000 Binary files a/sound/direct_sound_samples/cries/crocalor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/crocalor.wav b/sound/direct_sound_samples/cries/crocalor.wav new file mode 100644 index 000000000000..17cba90fd9bd Binary files /dev/null and b/sound/direct_sound_samples/cries/crocalor.wav differ diff --git a/sound/direct_sound_samples/cries/croconaw.aif b/sound/direct_sound_samples/cries/croconaw.aif deleted file mode 100644 index b72db75f3ffd..000000000000 Binary files a/sound/direct_sound_samples/cries/croconaw.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/croconaw.wav b/sound/direct_sound_samples/cries/croconaw.wav new file mode 100644 index 000000000000..deb2a700357a Binary files /dev/null and b/sound/direct_sound_samples/cries/croconaw.wav differ diff --git a/sound/direct_sound_samples/cries/crustle.aif b/sound/direct_sound_samples/cries/crustle.aif deleted file mode 100644 index 62014a79c8e4..000000000000 Binary files a/sound/direct_sound_samples/cries/crustle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/crustle.wav b/sound/direct_sound_samples/cries/crustle.wav new file mode 100644 index 000000000000..6e1388bad89f Binary files /dev/null and b/sound/direct_sound_samples/cries/crustle.wav differ diff --git a/sound/direct_sound_samples/cries/cry_unused_265.aif b/sound/direct_sound_samples/cries/cry_unused_265.aif deleted file mode 100644 index 7f5965f06b60..000000000000 Binary files a/sound/direct_sound_samples/cries/cry_unused_265.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cry_unused_268.aif b/sound/direct_sound_samples/cries/cry_unused_268.aif deleted file mode 100644 index 5cae364c3801..000000000000 Binary files a/sound/direct_sound_samples/cries/cry_unused_268.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cryogonal.aif b/sound/direct_sound_samples/cries/cryogonal.aif deleted file mode 100644 index b2f551274ea8..000000000000 Binary files a/sound/direct_sound_samples/cries/cryogonal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cryogonal.wav b/sound/direct_sound_samples/cries/cryogonal.wav new file mode 100644 index 000000000000..22f6b994dbf8 Binary files /dev/null and b/sound/direct_sound_samples/cries/cryogonal.wav differ diff --git a/sound/direct_sound_samples/cries/cubchoo.aif b/sound/direct_sound_samples/cries/cubchoo.aif deleted file mode 100644 index e10ca5a0ccf6..000000000000 Binary files a/sound/direct_sound_samples/cries/cubchoo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cubchoo.wav b/sound/direct_sound_samples/cries/cubchoo.wav new file mode 100644 index 000000000000..5bbe309951e2 Binary files /dev/null and b/sound/direct_sound_samples/cries/cubchoo.wav differ diff --git a/sound/direct_sound_samples/cries/cubone.aif b/sound/direct_sound_samples/cries/cubone.aif deleted file mode 100644 index 1ebc283ef899..000000000000 Binary files a/sound/direct_sound_samples/cries/cubone.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cubone.wav b/sound/direct_sound_samples/cries/cubone.wav new file mode 100644 index 000000000000..b198c25403ed Binary files /dev/null and b/sound/direct_sound_samples/cries/cubone.wav differ diff --git a/sound/direct_sound_samples/cries/cufant.aif b/sound/direct_sound_samples/cries/cufant.aif deleted file mode 100644 index 9f8f55b245d8..000000000000 Binary files a/sound/direct_sound_samples/cries/cufant.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cufant.wav b/sound/direct_sound_samples/cries/cufant.wav new file mode 100644 index 000000000000..a9cb12d5ed20 Binary files /dev/null and b/sound/direct_sound_samples/cries/cufant.wav differ diff --git a/sound/direct_sound_samples/cries/cursola.aif b/sound/direct_sound_samples/cries/cursola.aif deleted file mode 100644 index 1bdba8731ac9..000000000000 Binary files a/sound/direct_sound_samples/cries/cursola.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cursola.wav b/sound/direct_sound_samples/cries/cursola.wav new file mode 100644 index 000000000000..076aed18f500 Binary files /dev/null and b/sound/direct_sound_samples/cries/cursola.wav differ diff --git a/sound/direct_sound_samples/cries/cutiefly.aif b/sound/direct_sound_samples/cries/cutiefly.aif deleted file mode 100644 index 61535bbdd8e4..000000000000 Binary files a/sound/direct_sound_samples/cries/cutiefly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cutiefly.wav b/sound/direct_sound_samples/cries/cutiefly.wav new file mode 100644 index 000000000000..612b06dc2258 Binary files /dev/null and b/sound/direct_sound_samples/cries/cutiefly.wav differ diff --git a/sound/direct_sound_samples/cries/cyclizar.aif b/sound/direct_sound_samples/cries/cyclizar.aif deleted file mode 100644 index eb32c91d5994..000000000000 Binary files a/sound/direct_sound_samples/cries/cyclizar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cyclizar.wav b/sound/direct_sound_samples/cries/cyclizar.wav new file mode 100644 index 000000000000..324dcbda08f2 Binary files /dev/null and b/sound/direct_sound_samples/cries/cyclizar.wav differ diff --git a/sound/direct_sound_samples/cries/cyndaquil.aif b/sound/direct_sound_samples/cries/cyndaquil.aif deleted file mode 100644 index 287c6496add7..000000000000 Binary files a/sound/direct_sound_samples/cries/cyndaquil.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/cyndaquil.wav b/sound/direct_sound_samples/cries/cyndaquil.wav new file mode 100644 index 000000000000..87921c52eb14 Binary files /dev/null and b/sound/direct_sound_samples/cries/cyndaquil.wav differ diff --git a/sound/direct_sound_samples/cries/dachsbun.aif b/sound/direct_sound_samples/cries/dachsbun.aif deleted file mode 100644 index 8e3ddbd781f6..000000000000 Binary files a/sound/direct_sound_samples/cries/dachsbun.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dachsbun.wav b/sound/direct_sound_samples/cries/dachsbun.wav new file mode 100644 index 000000000000..870cb99aee8e Binary files /dev/null and b/sound/direct_sound_samples/cries/dachsbun.wav differ diff --git a/sound/direct_sound_samples/cries/darkrai.aif b/sound/direct_sound_samples/cries/darkrai.aif deleted file mode 100644 index bfb37fca5b41..000000000000 Binary files a/sound/direct_sound_samples/cries/darkrai.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/darkrai.wav b/sound/direct_sound_samples/cries/darkrai.wav new file mode 100644 index 000000000000..3ff71721d5d3 Binary files /dev/null and b/sound/direct_sound_samples/cries/darkrai.wav differ diff --git a/sound/direct_sound_samples/cries/darmanitan.aif b/sound/direct_sound_samples/cries/darmanitan.aif deleted file mode 100644 index 902fdb69b4eb..000000000000 Binary files a/sound/direct_sound_samples/cries/darmanitan.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/darmanitan.wav b/sound/direct_sound_samples/cries/darmanitan.wav new file mode 100644 index 000000000000..c39aafe52e7b Binary files /dev/null and b/sound/direct_sound_samples/cries/darmanitan.wav differ diff --git a/sound/direct_sound_samples/cries/dartrix.aif b/sound/direct_sound_samples/cries/dartrix.aif deleted file mode 100644 index 894fefb3311c..000000000000 Binary files a/sound/direct_sound_samples/cries/dartrix.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dartrix.wav b/sound/direct_sound_samples/cries/dartrix.wav new file mode 100644 index 000000000000..ac4ef1cfa760 Binary files /dev/null and b/sound/direct_sound_samples/cries/dartrix.wav differ diff --git a/sound/direct_sound_samples/cries/darumaka.aif b/sound/direct_sound_samples/cries/darumaka.aif deleted file mode 100644 index 849f0f1dab7e..000000000000 Binary files a/sound/direct_sound_samples/cries/darumaka.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/darumaka.wav b/sound/direct_sound_samples/cries/darumaka.wav new file mode 100644 index 000000000000..f0feff895836 Binary files /dev/null and b/sound/direct_sound_samples/cries/darumaka.wav differ diff --git a/sound/direct_sound_samples/cries/decidueye.aif b/sound/direct_sound_samples/cries/decidueye.aif deleted file mode 100644 index dde3a574a9e9..000000000000 Binary files a/sound/direct_sound_samples/cries/decidueye.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/decidueye.wav b/sound/direct_sound_samples/cries/decidueye.wav new file mode 100644 index 000000000000..df44f57bc0f1 Binary files /dev/null and b/sound/direct_sound_samples/cries/decidueye.wav differ diff --git a/sound/direct_sound_samples/cries/dedenne.aif b/sound/direct_sound_samples/cries/dedenne.aif deleted file mode 100644 index 843f5cf38fe9..000000000000 Binary files a/sound/direct_sound_samples/cries/dedenne.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dedenne.wav b/sound/direct_sound_samples/cries/dedenne.wav new file mode 100644 index 000000000000..8b2472660bba Binary files /dev/null and b/sound/direct_sound_samples/cries/dedenne.wav differ diff --git a/sound/direct_sound_samples/cries/deerling.aif b/sound/direct_sound_samples/cries/deerling.aif deleted file mode 100644 index 9a4e8809b9e7..000000000000 Binary files a/sound/direct_sound_samples/cries/deerling.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/deerling.wav b/sound/direct_sound_samples/cries/deerling.wav new file mode 100644 index 000000000000..655c5916c315 Binary files /dev/null and b/sound/direct_sound_samples/cries/deerling.wav differ diff --git a/sound/direct_sound_samples/cries/deino.aif b/sound/direct_sound_samples/cries/deino.aif deleted file mode 100644 index e5074d082162..000000000000 Binary files a/sound/direct_sound_samples/cries/deino.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/deino.wav b/sound/direct_sound_samples/cries/deino.wav new file mode 100644 index 000000000000..f13aab187c0c Binary files /dev/null and b/sound/direct_sound_samples/cries/deino.wav differ diff --git a/sound/direct_sound_samples/cries/delcatty.aif b/sound/direct_sound_samples/cries/delcatty.aif deleted file mode 100644 index d4fe6c5c5912..000000000000 Binary files a/sound/direct_sound_samples/cries/delcatty.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/delcatty.wav b/sound/direct_sound_samples/cries/delcatty.wav new file mode 100644 index 000000000000..dce5e73b7ab2 Binary files /dev/null and b/sound/direct_sound_samples/cries/delcatty.wav differ diff --git a/sound/direct_sound_samples/cries/delibird.aif b/sound/direct_sound_samples/cries/delibird.aif deleted file mode 100644 index f2e0d4464237..000000000000 Binary files a/sound/direct_sound_samples/cries/delibird.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/delibird.wav b/sound/direct_sound_samples/cries/delibird.wav new file mode 100644 index 000000000000..7ccf645de649 Binary files /dev/null and b/sound/direct_sound_samples/cries/delibird.wav differ diff --git a/sound/direct_sound_samples/cries/delphox.aif b/sound/direct_sound_samples/cries/delphox.aif deleted file mode 100644 index 857af9f0ad20..000000000000 Binary files a/sound/direct_sound_samples/cries/delphox.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/delphox.wav b/sound/direct_sound_samples/cries/delphox.wav new file mode 100644 index 000000000000..b202343deb49 Binary files /dev/null and b/sound/direct_sound_samples/cries/delphox.wav differ diff --git a/sound/direct_sound_samples/cries/deoxys.aif b/sound/direct_sound_samples/cries/deoxys.aif deleted file mode 100644 index d9e3976e3c79..000000000000 Binary files a/sound/direct_sound_samples/cries/deoxys.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/deoxys.wav b/sound/direct_sound_samples/cries/deoxys.wav new file mode 100644 index 000000000000..7ed0f65cc1fc Binary files /dev/null and b/sound/direct_sound_samples/cries/deoxys.wav differ diff --git a/sound/direct_sound_samples/cries/dewgong.aif b/sound/direct_sound_samples/cries/dewgong.aif deleted file mode 100644 index daa3e5fd5ce7..000000000000 Binary files a/sound/direct_sound_samples/cries/dewgong.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dewgong.wav b/sound/direct_sound_samples/cries/dewgong.wav new file mode 100644 index 000000000000..24af04411a87 Binary files /dev/null and b/sound/direct_sound_samples/cries/dewgong.wav differ diff --git a/sound/direct_sound_samples/cries/dewott.aif b/sound/direct_sound_samples/cries/dewott.aif deleted file mode 100644 index e654be2372c5..000000000000 Binary files a/sound/direct_sound_samples/cries/dewott.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dewott.wav b/sound/direct_sound_samples/cries/dewott.wav new file mode 100644 index 000000000000..378ab5fbcbfb Binary files /dev/null and b/sound/direct_sound_samples/cries/dewott.wav differ diff --git a/sound/direct_sound_samples/cries/dewpider.aif b/sound/direct_sound_samples/cries/dewpider.aif deleted file mode 100644 index 0d8ade106b89..000000000000 Binary files a/sound/direct_sound_samples/cries/dewpider.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dewpider.wav b/sound/direct_sound_samples/cries/dewpider.wav new file mode 100644 index 000000000000..97ad9d826296 Binary files /dev/null and b/sound/direct_sound_samples/cries/dewpider.wav differ diff --git a/sound/direct_sound_samples/cries/dhelmise.aif b/sound/direct_sound_samples/cries/dhelmise.aif deleted file mode 100644 index 892faf19094d..000000000000 Binary files a/sound/direct_sound_samples/cries/dhelmise.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dhelmise.wav b/sound/direct_sound_samples/cries/dhelmise.wav new file mode 100644 index 000000000000..0659563c7658 Binary files /dev/null and b/sound/direct_sound_samples/cries/dhelmise.wav differ diff --git a/sound/direct_sound_samples/cries/dialga.aif b/sound/direct_sound_samples/cries/dialga.aif deleted file mode 100644 index ead8acb9a1bf..000000000000 Binary files a/sound/direct_sound_samples/cries/dialga.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dialga.wav b/sound/direct_sound_samples/cries/dialga.wav new file mode 100644 index 000000000000..bb421999f186 Binary files /dev/null and b/sound/direct_sound_samples/cries/dialga.wav differ diff --git a/sound/direct_sound_samples/cries/diancie.aif b/sound/direct_sound_samples/cries/diancie.aif deleted file mode 100644 index a32ad4ff93d1..000000000000 Binary files a/sound/direct_sound_samples/cries/diancie.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/diancie.wav b/sound/direct_sound_samples/cries/diancie.wav new file mode 100644 index 000000000000..ce1a602ebb3b Binary files /dev/null and b/sound/direct_sound_samples/cries/diancie.wav differ diff --git a/sound/direct_sound_samples/cries/diancie_mega.aif b/sound/direct_sound_samples/cries/diancie_mega.aif deleted file mode 100644 index be6268315395..000000000000 Binary files a/sound/direct_sound_samples/cries/diancie_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/diancie_mega.wav b/sound/direct_sound_samples/cries/diancie_mega.wav new file mode 100644 index 000000000000..80bec59a51ec Binary files /dev/null and b/sound/direct_sound_samples/cries/diancie_mega.wav differ diff --git a/sound/direct_sound_samples/cries/diggersby.aif b/sound/direct_sound_samples/cries/diggersby.aif deleted file mode 100644 index 10dffad8eeed..000000000000 Binary files a/sound/direct_sound_samples/cries/diggersby.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/diggersby.wav b/sound/direct_sound_samples/cries/diggersby.wav new file mode 100644 index 000000000000..af1792443c36 Binary files /dev/null and b/sound/direct_sound_samples/cries/diggersby.wav differ diff --git a/sound/direct_sound_samples/cries/diglett.aif b/sound/direct_sound_samples/cries/diglett.aif deleted file mode 100644 index cd212878fd77..000000000000 Binary files a/sound/direct_sound_samples/cries/diglett.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/diglett.wav b/sound/direct_sound_samples/cries/diglett.wav new file mode 100644 index 000000000000..8eecd3bedb33 Binary files /dev/null and b/sound/direct_sound_samples/cries/diglett.wav differ diff --git a/sound/direct_sound_samples/cries/dipplin.aif b/sound/direct_sound_samples/cries/dipplin.aif deleted file mode 100644 index 5591528f9bf9..000000000000 Binary files a/sound/direct_sound_samples/cries/dipplin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dipplin.wav b/sound/direct_sound_samples/cries/dipplin.wav new file mode 100644 index 000000000000..79f2d7a74c08 Binary files /dev/null and b/sound/direct_sound_samples/cries/dipplin.wav differ diff --git a/sound/direct_sound_samples/cries/ditto.aif b/sound/direct_sound_samples/cries/ditto.aif deleted file mode 100644 index 8a1de24b254f..000000000000 Binary files a/sound/direct_sound_samples/cries/ditto.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ditto.wav b/sound/direct_sound_samples/cries/ditto.wav new file mode 100644 index 000000000000..bbd9d0280421 Binary files /dev/null and b/sound/direct_sound_samples/cries/ditto.wav differ diff --git a/sound/direct_sound_samples/cries/dodrio.aif b/sound/direct_sound_samples/cries/dodrio.aif deleted file mode 100644 index 507e4ef8762e..000000000000 Binary files a/sound/direct_sound_samples/cries/dodrio.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dodrio.wav b/sound/direct_sound_samples/cries/dodrio.wav new file mode 100644 index 000000000000..e43a8a9770e1 Binary files /dev/null and b/sound/direct_sound_samples/cries/dodrio.wav differ diff --git a/sound/direct_sound_samples/cries/doduo.aif b/sound/direct_sound_samples/cries/doduo.aif deleted file mode 100644 index 02c736d5a0c2..000000000000 Binary files a/sound/direct_sound_samples/cries/doduo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/doduo.wav b/sound/direct_sound_samples/cries/doduo.wav new file mode 100644 index 000000000000..065e9fd62fb6 Binary files /dev/null and b/sound/direct_sound_samples/cries/doduo.wav differ diff --git a/sound/direct_sound_samples/cries/dolliv.aif b/sound/direct_sound_samples/cries/dolliv.aif deleted file mode 100644 index d0aae0c9ecf9..000000000000 Binary files a/sound/direct_sound_samples/cries/dolliv.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dolliv.wav b/sound/direct_sound_samples/cries/dolliv.wav new file mode 100644 index 000000000000..df8eb73f8126 Binary files /dev/null and b/sound/direct_sound_samples/cries/dolliv.wav differ diff --git a/sound/direct_sound_samples/cries/dondozo.aif b/sound/direct_sound_samples/cries/dondozo.aif deleted file mode 100644 index eddac5cc27f0..000000000000 Binary files a/sound/direct_sound_samples/cries/dondozo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dondozo.wav b/sound/direct_sound_samples/cries/dondozo.wav new file mode 100644 index 000000000000..1462faa4a967 Binary files /dev/null and b/sound/direct_sound_samples/cries/dondozo.wav differ diff --git a/sound/direct_sound_samples/cries/donphan.aif b/sound/direct_sound_samples/cries/donphan.aif deleted file mode 100644 index 795cdaef4529..000000000000 Binary files a/sound/direct_sound_samples/cries/donphan.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/donphan.wav b/sound/direct_sound_samples/cries/donphan.wav new file mode 100644 index 000000000000..ba6caf5bd860 Binary files /dev/null and b/sound/direct_sound_samples/cries/donphan.wav differ diff --git a/sound/direct_sound_samples/cries/dottler.aif b/sound/direct_sound_samples/cries/dottler.aif deleted file mode 100644 index 4ab520a4aedb..000000000000 Binary files a/sound/direct_sound_samples/cries/dottler.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dottler.wav b/sound/direct_sound_samples/cries/dottler.wav new file mode 100644 index 000000000000..7c21ff12519a Binary files /dev/null and b/sound/direct_sound_samples/cries/dottler.wav differ diff --git a/sound/direct_sound_samples/cries/doublade.aif b/sound/direct_sound_samples/cries/doublade.aif deleted file mode 100644 index d931b3de0ad5..000000000000 Binary files a/sound/direct_sound_samples/cries/doublade.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/doublade.wav b/sound/direct_sound_samples/cries/doublade.wav new file mode 100644 index 000000000000..4b76e5cccec8 Binary files /dev/null and b/sound/direct_sound_samples/cries/doublade.wav differ diff --git a/sound/direct_sound_samples/cries/dracovish.aif b/sound/direct_sound_samples/cries/dracovish.aif deleted file mode 100644 index e59b15f27426..000000000000 Binary files a/sound/direct_sound_samples/cries/dracovish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dracovish.wav b/sound/direct_sound_samples/cries/dracovish.wav new file mode 100644 index 000000000000..1d8e2ee1f235 Binary files /dev/null and b/sound/direct_sound_samples/cries/dracovish.wav differ diff --git a/sound/direct_sound_samples/cries/dracozolt.aif b/sound/direct_sound_samples/cries/dracozolt.aif deleted file mode 100644 index 0c2b86f4b0d9..000000000000 Binary files a/sound/direct_sound_samples/cries/dracozolt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dracozolt.wav b/sound/direct_sound_samples/cries/dracozolt.wav new file mode 100644 index 000000000000..bce799d02668 Binary files /dev/null and b/sound/direct_sound_samples/cries/dracozolt.wav differ diff --git a/sound/direct_sound_samples/cries/dragalge.aif b/sound/direct_sound_samples/cries/dragalge.aif deleted file mode 100644 index a9d11e9b65d2..000000000000 Binary files a/sound/direct_sound_samples/cries/dragalge.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dragalge.wav b/sound/direct_sound_samples/cries/dragalge.wav new file mode 100644 index 000000000000..a4ce94444cc0 Binary files /dev/null and b/sound/direct_sound_samples/cries/dragalge.wav differ diff --git a/sound/direct_sound_samples/cries/dragapult.aif b/sound/direct_sound_samples/cries/dragapult.aif deleted file mode 100644 index 7e34c9bb1be4..000000000000 Binary files a/sound/direct_sound_samples/cries/dragapult.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dragapult.wav b/sound/direct_sound_samples/cries/dragapult.wav new file mode 100644 index 000000000000..b0086241f5eb Binary files /dev/null and b/sound/direct_sound_samples/cries/dragapult.wav differ diff --git a/sound/direct_sound_samples/cries/dragonair.aif b/sound/direct_sound_samples/cries/dragonair.aif deleted file mode 100644 index 6cdc594f6374..000000000000 Binary files a/sound/direct_sound_samples/cries/dragonair.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dragonair.wav b/sound/direct_sound_samples/cries/dragonair.wav new file mode 100644 index 000000000000..3fd2efee29a3 Binary files /dev/null and b/sound/direct_sound_samples/cries/dragonair.wav differ diff --git a/sound/direct_sound_samples/cries/dragonite.aif b/sound/direct_sound_samples/cries/dragonite.aif deleted file mode 100644 index ab1a7af1c17e..000000000000 Binary files a/sound/direct_sound_samples/cries/dragonite.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dragonite.wav b/sound/direct_sound_samples/cries/dragonite.wav new file mode 100644 index 000000000000..8517e0da0f3a Binary files /dev/null and b/sound/direct_sound_samples/cries/dragonite.wav differ diff --git a/sound/direct_sound_samples/cries/drakloak.aif b/sound/direct_sound_samples/cries/drakloak.aif deleted file mode 100644 index 7b9beaad8978..000000000000 Binary files a/sound/direct_sound_samples/cries/drakloak.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drakloak.wav b/sound/direct_sound_samples/cries/drakloak.wav new file mode 100644 index 000000000000..e8cc04483f13 Binary files /dev/null and b/sound/direct_sound_samples/cries/drakloak.wav differ diff --git a/sound/direct_sound_samples/cries/drampa.aif b/sound/direct_sound_samples/cries/drampa.aif deleted file mode 100644 index 81e185711e18..000000000000 Binary files a/sound/direct_sound_samples/cries/drampa.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drampa.wav b/sound/direct_sound_samples/cries/drampa.wav new file mode 100644 index 000000000000..fd7b9b4f5017 Binary files /dev/null and b/sound/direct_sound_samples/cries/drampa.wav differ diff --git a/sound/direct_sound_samples/cries/drapion.aif b/sound/direct_sound_samples/cries/drapion.aif deleted file mode 100644 index 4ce0382fdc46..000000000000 Binary files a/sound/direct_sound_samples/cries/drapion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drapion.wav b/sound/direct_sound_samples/cries/drapion.wav new file mode 100644 index 000000000000..2aae89e6697e Binary files /dev/null and b/sound/direct_sound_samples/cries/drapion.wav differ diff --git a/sound/direct_sound_samples/cries/dratini.aif b/sound/direct_sound_samples/cries/dratini.aif deleted file mode 100644 index d79420d9c60a..000000000000 Binary files a/sound/direct_sound_samples/cries/dratini.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dratini.wav b/sound/direct_sound_samples/cries/dratini.wav new file mode 100644 index 000000000000..711c6b9a3088 Binary files /dev/null and b/sound/direct_sound_samples/cries/dratini.wav differ diff --git a/sound/direct_sound_samples/cries/drednaw.aif b/sound/direct_sound_samples/cries/drednaw.aif deleted file mode 100644 index 8dd2c8540931..000000000000 Binary files a/sound/direct_sound_samples/cries/drednaw.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drednaw.wav b/sound/direct_sound_samples/cries/drednaw.wav new file mode 100644 index 000000000000..ea83c848efc9 Binary files /dev/null and b/sound/direct_sound_samples/cries/drednaw.wav differ diff --git a/sound/direct_sound_samples/cries/dreepy.aif b/sound/direct_sound_samples/cries/dreepy.aif deleted file mode 100644 index 12217a7f49c2..000000000000 Binary files a/sound/direct_sound_samples/cries/dreepy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dreepy.wav b/sound/direct_sound_samples/cries/dreepy.wav new file mode 100644 index 000000000000..9e3dd467660d Binary files /dev/null and b/sound/direct_sound_samples/cries/dreepy.wav differ diff --git a/sound/direct_sound_samples/cries/drifblim.aif b/sound/direct_sound_samples/cries/drifblim.aif deleted file mode 100644 index 891c49f2053d..000000000000 Binary files a/sound/direct_sound_samples/cries/drifblim.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drifblim.wav b/sound/direct_sound_samples/cries/drifblim.wav new file mode 100644 index 000000000000..04d211e1ba7a Binary files /dev/null and b/sound/direct_sound_samples/cries/drifblim.wav differ diff --git a/sound/direct_sound_samples/cries/drifloon.aif b/sound/direct_sound_samples/cries/drifloon.aif deleted file mode 100644 index ba4c94e979ad..000000000000 Binary files a/sound/direct_sound_samples/cries/drifloon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drifloon.wav b/sound/direct_sound_samples/cries/drifloon.wav new file mode 100644 index 000000000000..6cc70ceb2170 Binary files /dev/null and b/sound/direct_sound_samples/cries/drifloon.wav differ diff --git a/sound/direct_sound_samples/cries/drilbur.aif b/sound/direct_sound_samples/cries/drilbur.aif deleted file mode 100644 index 105867ee08e3..000000000000 Binary files a/sound/direct_sound_samples/cries/drilbur.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drilbur.wav b/sound/direct_sound_samples/cries/drilbur.wav new file mode 100644 index 000000000000..c2c986331d18 Binary files /dev/null and b/sound/direct_sound_samples/cries/drilbur.wav differ diff --git a/sound/direct_sound_samples/cries/drizzile.aif b/sound/direct_sound_samples/cries/drizzile.aif deleted file mode 100644 index fde8abfbfe24..000000000000 Binary files a/sound/direct_sound_samples/cries/drizzile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drizzile.wav b/sound/direct_sound_samples/cries/drizzile.wav new file mode 100644 index 000000000000..ebea7fbca009 Binary files /dev/null and b/sound/direct_sound_samples/cries/drizzile.wav differ diff --git a/sound/direct_sound_samples/cries/drowzee.aif b/sound/direct_sound_samples/cries/drowzee.aif deleted file mode 100644 index d25203e123a0..000000000000 Binary files a/sound/direct_sound_samples/cries/drowzee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/drowzee.wav b/sound/direct_sound_samples/cries/drowzee.wav new file mode 100644 index 000000000000..41321096630c Binary files /dev/null and b/sound/direct_sound_samples/cries/drowzee.wav differ diff --git a/sound/direct_sound_samples/cries/druddigon.aif b/sound/direct_sound_samples/cries/druddigon.aif deleted file mode 100644 index 01bed53f9200..000000000000 Binary files a/sound/direct_sound_samples/cries/druddigon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/druddigon.wav b/sound/direct_sound_samples/cries/druddigon.wav new file mode 100644 index 000000000000..b1c7c7ce21ef Binary files /dev/null and b/sound/direct_sound_samples/cries/druddigon.wav differ diff --git a/sound/direct_sound_samples/cries/dubwool.aif b/sound/direct_sound_samples/cries/dubwool.aif deleted file mode 100644 index 42f23089afed..000000000000 Binary files a/sound/direct_sound_samples/cries/dubwool.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dubwool.wav b/sound/direct_sound_samples/cries/dubwool.wav new file mode 100644 index 000000000000..a70cb4b18baa Binary files /dev/null and b/sound/direct_sound_samples/cries/dubwool.wav differ diff --git a/sound/direct_sound_samples/cries/ducklett.aif b/sound/direct_sound_samples/cries/ducklett.aif deleted file mode 100644 index a95520506b76..000000000000 Binary files a/sound/direct_sound_samples/cries/ducklett.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ducklett.wav b/sound/direct_sound_samples/cries/ducklett.wav new file mode 100644 index 000000000000..1748d7cb7582 Binary files /dev/null and b/sound/direct_sound_samples/cries/ducklett.wav differ diff --git a/sound/direct_sound_samples/cries/dudunsparce.aif b/sound/direct_sound_samples/cries/dudunsparce.aif deleted file mode 100644 index faec8aae5390..000000000000 Binary files a/sound/direct_sound_samples/cries/dudunsparce.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dudunsparce.wav b/sound/direct_sound_samples/cries/dudunsparce.wav new file mode 100644 index 000000000000..dc0244f2411c Binary files /dev/null and b/sound/direct_sound_samples/cries/dudunsparce.wav differ diff --git a/sound/direct_sound_samples/cries/dugtrio.aif b/sound/direct_sound_samples/cries/dugtrio.aif deleted file mode 100644 index 1a0a05ecd01e..000000000000 Binary files a/sound/direct_sound_samples/cries/dugtrio.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dugtrio.wav b/sound/direct_sound_samples/cries/dugtrio.wav new file mode 100644 index 000000000000..d159a2fae090 Binary files /dev/null and b/sound/direct_sound_samples/cries/dugtrio.wav differ diff --git a/sound/direct_sound_samples/cries/dunsparce.aif b/sound/direct_sound_samples/cries/dunsparce.aif deleted file mode 100644 index da70bedf0876..000000000000 Binary files a/sound/direct_sound_samples/cries/dunsparce.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dunsparce.wav b/sound/direct_sound_samples/cries/dunsparce.wav new file mode 100644 index 000000000000..5154546d1001 Binary files /dev/null and b/sound/direct_sound_samples/cries/dunsparce.wav differ diff --git a/sound/direct_sound_samples/cries/duosion.aif b/sound/direct_sound_samples/cries/duosion.aif deleted file mode 100644 index 4022984f1ae3..000000000000 Binary files a/sound/direct_sound_samples/cries/duosion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/duosion.wav b/sound/direct_sound_samples/cries/duosion.wav new file mode 100644 index 000000000000..1850cd39377f Binary files /dev/null and b/sound/direct_sound_samples/cries/duosion.wav differ diff --git a/sound/direct_sound_samples/cries/duraludon.aif b/sound/direct_sound_samples/cries/duraludon.aif deleted file mode 100644 index 09be7c3ed9c3..000000000000 Binary files a/sound/direct_sound_samples/cries/duraludon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/duraludon.wav b/sound/direct_sound_samples/cries/duraludon.wav new file mode 100644 index 000000000000..ae0345be1476 Binary files /dev/null and b/sound/direct_sound_samples/cries/duraludon.wav differ diff --git a/sound/direct_sound_samples/cries/durant.aif b/sound/direct_sound_samples/cries/durant.aif deleted file mode 100644 index c0b19642c1da..000000000000 Binary files a/sound/direct_sound_samples/cries/durant.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/durant.wav b/sound/direct_sound_samples/cries/durant.wav new file mode 100644 index 000000000000..8a798caf7f1b Binary files /dev/null and b/sound/direct_sound_samples/cries/durant.wav differ diff --git a/sound/direct_sound_samples/cries/dusclops.aif b/sound/direct_sound_samples/cries/dusclops.aif deleted file mode 100644 index 084c74ee8729..000000000000 Binary files a/sound/direct_sound_samples/cries/dusclops.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dusclops.wav b/sound/direct_sound_samples/cries/dusclops.wav new file mode 100644 index 000000000000..81353887b95d Binary files /dev/null and b/sound/direct_sound_samples/cries/dusclops.wav differ diff --git a/sound/direct_sound_samples/cries/dusknoir.aif b/sound/direct_sound_samples/cries/dusknoir.aif deleted file mode 100644 index bb1d60567121..000000000000 Binary files a/sound/direct_sound_samples/cries/dusknoir.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dusknoir.wav b/sound/direct_sound_samples/cries/dusknoir.wav new file mode 100644 index 000000000000..333bd0448cca Binary files /dev/null and b/sound/direct_sound_samples/cries/dusknoir.wav differ diff --git a/sound/direct_sound_samples/cries/duskull.aif b/sound/direct_sound_samples/cries/duskull.aif deleted file mode 100644 index 523997cbf0a9..000000000000 Binary files a/sound/direct_sound_samples/cries/duskull.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/duskull.wav b/sound/direct_sound_samples/cries/duskull.wav new file mode 100644 index 000000000000..eba8fc3ff1bd Binary files /dev/null and b/sound/direct_sound_samples/cries/duskull.wav differ diff --git a/sound/direct_sound_samples/cries/dustox.aif b/sound/direct_sound_samples/cries/dustox.aif deleted file mode 100644 index 5ab919b520f2..000000000000 Binary files a/sound/direct_sound_samples/cries/dustox.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dustox.wav b/sound/direct_sound_samples/cries/dustox.wav new file mode 100644 index 000000000000..42f23c12896d Binary files /dev/null and b/sound/direct_sound_samples/cries/dustox.wav differ diff --git a/sound/direct_sound_samples/cries/dwebble.aif b/sound/direct_sound_samples/cries/dwebble.aif deleted file mode 100644 index 1aff10332332..000000000000 Binary files a/sound/direct_sound_samples/cries/dwebble.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/dwebble.wav b/sound/direct_sound_samples/cries/dwebble.wav new file mode 100644 index 000000000000..81d2af0f7f8c Binary files /dev/null and b/sound/direct_sound_samples/cries/dwebble.wav differ diff --git a/sound/direct_sound_samples/cries/eelektrik.aif b/sound/direct_sound_samples/cries/eelektrik.aif deleted file mode 100644 index d39453bc0d83..000000000000 Binary files a/sound/direct_sound_samples/cries/eelektrik.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/eelektrik.wav b/sound/direct_sound_samples/cries/eelektrik.wav new file mode 100644 index 000000000000..d0bf262cd3da Binary files /dev/null and b/sound/direct_sound_samples/cries/eelektrik.wav differ diff --git a/sound/direct_sound_samples/cries/eelektross.aif b/sound/direct_sound_samples/cries/eelektross.aif deleted file mode 100644 index b618fa5e9775..000000000000 Binary files a/sound/direct_sound_samples/cries/eelektross.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/eelektross.wav b/sound/direct_sound_samples/cries/eelektross.wav new file mode 100644 index 000000000000..4b65a7acedf8 Binary files /dev/null and b/sound/direct_sound_samples/cries/eelektross.wav differ diff --git a/sound/direct_sound_samples/cries/eevee.aif b/sound/direct_sound_samples/cries/eevee.aif deleted file mode 100644 index 0706209843d8..000000000000 Binary files a/sound/direct_sound_samples/cries/eevee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/eevee.wav b/sound/direct_sound_samples/cries/eevee.wav new file mode 100644 index 000000000000..e21ce1f0e7e5 Binary files /dev/null and b/sound/direct_sound_samples/cries/eevee.wav differ diff --git a/sound/direct_sound_samples/cries/eiscue_ice_face.aif b/sound/direct_sound_samples/cries/eiscue_ice_face.aif deleted file mode 100644 index 5c6c7d52ddb8..000000000000 Binary files a/sound/direct_sound_samples/cries/eiscue_ice_face.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/eiscue_ice_face.wav b/sound/direct_sound_samples/cries/eiscue_ice_face.wav new file mode 100644 index 000000000000..cf21e9ed35f6 Binary files /dev/null and b/sound/direct_sound_samples/cries/eiscue_ice_face.wav differ diff --git a/sound/direct_sound_samples/cries/eiscue_noice_face.aif b/sound/direct_sound_samples/cries/eiscue_noice_face.aif deleted file mode 100644 index e591e3e2ca7e..000000000000 Binary files a/sound/direct_sound_samples/cries/eiscue_noice_face.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/eiscue_noice_face.wav b/sound/direct_sound_samples/cries/eiscue_noice_face.wav new file mode 100644 index 000000000000..b928e3211c6a Binary files /dev/null and b/sound/direct_sound_samples/cries/eiscue_noice_face.wav differ diff --git a/sound/direct_sound_samples/cries/ekans.aif b/sound/direct_sound_samples/cries/ekans.aif deleted file mode 100644 index 80bc2fdfec2a..000000000000 Binary files a/sound/direct_sound_samples/cries/ekans.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ekans.wav b/sound/direct_sound_samples/cries/ekans.wav new file mode 100644 index 000000000000..2ae3e4a180e1 Binary files /dev/null and b/sound/direct_sound_samples/cries/ekans.wav differ diff --git a/sound/direct_sound_samples/cries/eldegoss.aif b/sound/direct_sound_samples/cries/eldegoss.aif deleted file mode 100644 index 56f9419b369f..000000000000 Binary files a/sound/direct_sound_samples/cries/eldegoss.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/eldegoss.wav b/sound/direct_sound_samples/cries/eldegoss.wav new file mode 100644 index 000000000000..d5c9ccd7e692 Binary files /dev/null and b/sound/direct_sound_samples/cries/eldegoss.wav differ diff --git a/sound/direct_sound_samples/cries/electabuzz.aif b/sound/direct_sound_samples/cries/electabuzz.aif deleted file mode 100644 index 6071f1d4a920..000000000000 Binary files a/sound/direct_sound_samples/cries/electabuzz.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/electabuzz.wav b/sound/direct_sound_samples/cries/electabuzz.wav new file mode 100644 index 000000000000..b555d6631ad5 Binary files /dev/null and b/sound/direct_sound_samples/cries/electabuzz.wav differ diff --git a/sound/direct_sound_samples/cries/electivire.aif b/sound/direct_sound_samples/cries/electivire.aif deleted file mode 100644 index 9b9c17907d23..000000000000 Binary files a/sound/direct_sound_samples/cries/electivire.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/electivire.wav b/sound/direct_sound_samples/cries/electivire.wav new file mode 100644 index 000000000000..33f250d0468e Binary files /dev/null and b/sound/direct_sound_samples/cries/electivire.wav differ diff --git a/sound/direct_sound_samples/cries/electrike.aif b/sound/direct_sound_samples/cries/electrike.aif deleted file mode 100644 index e7dcc6424840..000000000000 Binary files a/sound/direct_sound_samples/cries/electrike.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/electrike.wav b/sound/direct_sound_samples/cries/electrike.wav new file mode 100644 index 000000000000..8a210865bfbc Binary files /dev/null and b/sound/direct_sound_samples/cries/electrike.wav differ diff --git a/sound/direct_sound_samples/cries/electrode.aif b/sound/direct_sound_samples/cries/electrode.aif deleted file mode 100644 index 96e627bba50c..000000000000 Binary files a/sound/direct_sound_samples/cries/electrode.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/electrode.wav b/sound/direct_sound_samples/cries/electrode.wav new file mode 100644 index 000000000000..8f2852146413 Binary files /dev/null and b/sound/direct_sound_samples/cries/electrode.wav differ diff --git a/sound/direct_sound_samples/cries/elekid.aif b/sound/direct_sound_samples/cries/elekid.aif deleted file mode 100644 index 99b3f959d5ed..000000000000 Binary files a/sound/direct_sound_samples/cries/elekid.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/elekid.wav b/sound/direct_sound_samples/cries/elekid.wav new file mode 100644 index 000000000000..82a9a2f675ba Binary files /dev/null and b/sound/direct_sound_samples/cries/elekid.wav differ diff --git a/sound/direct_sound_samples/cries/elgyem.aif b/sound/direct_sound_samples/cries/elgyem.aif deleted file mode 100644 index 04e9ec7ab66c..000000000000 Binary files a/sound/direct_sound_samples/cries/elgyem.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/elgyem.wav b/sound/direct_sound_samples/cries/elgyem.wav new file mode 100644 index 000000000000..825cb7f86a06 Binary files /dev/null and b/sound/direct_sound_samples/cries/elgyem.wav differ diff --git a/sound/direct_sound_samples/cries/emboar.aif b/sound/direct_sound_samples/cries/emboar.aif deleted file mode 100644 index 7bf61d285eb4..000000000000 Binary files a/sound/direct_sound_samples/cries/emboar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/emboar.wav b/sound/direct_sound_samples/cries/emboar.wav new file mode 100644 index 000000000000..29d0d5dbe17f Binary files /dev/null and b/sound/direct_sound_samples/cries/emboar.wav differ diff --git a/sound/direct_sound_samples/cries/emolga.aif b/sound/direct_sound_samples/cries/emolga.aif deleted file mode 100644 index 20172f144692..000000000000 Binary files a/sound/direct_sound_samples/cries/emolga.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/emolga.wav b/sound/direct_sound_samples/cries/emolga.wav new file mode 100644 index 000000000000..a15a472d96c0 Binary files /dev/null and b/sound/direct_sound_samples/cries/emolga.wav differ diff --git a/sound/direct_sound_samples/cries/empoleon.aif b/sound/direct_sound_samples/cries/empoleon.aif deleted file mode 100644 index 742bdf812473..000000000000 Binary files a/sound/direct_sound_samples/cries/empoleon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/empoleon.wav b/sound/direct_sound_samples/cries/empoleon.wav new file mode 100644 index 000000000000..e7edb4111f52 Binary files /dev/null and b/sound/direct_sound_samples/cries/empoleon.wav differ diff --git a/sound/direct_sound_samples/cries/enamorus_incarnate.aif b/sound/direct_sound_samples/cries/enamorus_incarnate.aif deleted file mode 100644 index 71068d9b7b52..000000000000 Binary files a/sound/direct_sound_samples/cries/enamorus_incarnate.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/enamorus_incarnate.wav b/sound/direct_sound_samples/cries/enamorus_incarnate.wav new file mode 100644 index 000000000000..22cb614f7bf8 Binary files /dev/null and b/sound/direct_sound_samples/cries/enamorus_incarnate.wav differ diff --git a/sound/direct_sound_samples/cries/enamorus_therian.aif b/sound/direct_sound_samples/cries/enamorus_therian.aif deleted file mode 100644 index 4286a98b69bd..000000000000 Binary files a/sound/direct_sound_samples/cries/enamorus_therian.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/enamorus_therian.wav b/sound/direct_sound_samples/cries/enamorus_therian.wav new file mode 100644 index 000000000000..d7fa97072bd5 Binary files /dev/null and b/sound/direct_sound_samples/cries/enamorus_therian.wav differ diff --git a/sound/direct_sound_samples/cries/entei.aif b/sound/direct_sound_samples/cries/entei.aif deleted file mode 100644 index 1e5eff687675..000000000000 Binary files a/sound/direct_sound_samples/cries/entei.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/entei.wav b/sound/direct_sound_samples/cries/entei.wav new file mode 100644 index 000000000000..cf7e9c0c2fac Binary files /dev/null and b/sound/direct_sound_samples/cries/entei.wav differ diff --git a/sound/direct_sound_samples/cries/escavalier.aif b/sound/direct_sound_samples/cries/escavalier.aif deleted file mode 100644 index 7ef48d2293e2..000000000000 Binary files a/sound/direct_sound_samples/cries/escavalier.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/escavalier.wav b/sound/direct_sound_samples/cries/escavalier.wav new file mode 100644 index 000000000000..950107a7e1c5 Binary files /dev/null and b/sound/direct_sound_samples/cries/escavalier.wav differ diff --git a/sound/direct_sound_samples/cries/espathra.aif b/sound/direct_sound_samples/cries/espathra.aif deleted file mode 100644 index 5a196762b134..000000000000 Binary files a/sound/direct_sound_samples/cries/espathra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/espathra.wav b/sound/direct_sound_samples/cries/espathra.wav new file mode 100644 index 000000000000..8959b7c05ab1 Binary files /dev/null and b/sound/direct_sound_samples/cries/espathra.wav differ diff --git a/sound/direct_sound_samples/cries/espeon.aif b/sound/direct_sound_samples/cries/espeon.aif deleted file mode 100644 index bf1f52c94dd2..000000000000 Binary files a/sound/direct_sound_samples/cries/espeon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/espeon.wav b/sound/direct_sound_samples/cries/espeon.wav new file mode 100644 index 000000000000..20743268e11e Binary files /dev/null and b/sound/direct_sound_samples/cries/espeon.wav differ diff --git a/sound/direct_sound_samples/cries/espurr.aif b/sound/direct_sound_samples/cries/espurr.aif deleted file mode 100644 index 6d82769b36af..000000000000 Binary files a/sound/direct_sound_samples/cries/espurr.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/espurr.wav b/sound/direct_sound_samples/cries/espurr.wav new file mode 100644 index 000000000000..4cb90cdf66f1 Binary files /dev/null and b/sound/direct_sound_samples/cries/espurr.wav differ diff --git a/sound/direct_sound_samples/cries/eternatus.aif b/sound/direct_sound_samples/cries/eternatus.aif deleted file mode 100644 index 235bba61f9b1..000000000000 Binary files a/sound/direct_sound_samples/cries/eternatus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/eternatus.wav b/sound/direct_sound_samples/cries/eternatus.wav new file mode 100644 index 000000000000..64f43baa7855 Binary files /dev/null and b/sound/direct_sound_samples/cries/eternatus.wav differ diff --git a/sound/direct_sound_samples/cries/eternatus_eternamax.aif b/sound/direct_sound_samples/cries/eternatus_eternamax.aif deleted file mode 100644 index 7c6b292d4dce..000000000000 Binary files a/sound/direct_sound_samples/cries/eternatus_eternamax.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/eternatus_eternamax.wav b/sound/direct_sound_samples/cries/eternatus_eternamax.wav new file mode 100644 index 000000000000..3d7638de16ac Binary files /dev/null and b/sound/direct_sound_samples/cries/eternatus_eternamax.wav differ diff --git a/sound/direct_sound_samples/cries/excadrill.aif b/sound/direct_sound_samples/cries/excadrill.aif deleted file mode 100644 index cd372dffdb38..000000000000 Binary files a/sound/direct_sound_samples/cries/excadrill.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/excadrill.wav b/sound/direct_sound_samples/cries/excadrill.wav new file mode 100644 index 000000000000..4ba4a2d1ffa0 Binary files /dev/null and b/sound/direct_sound_samples/cries/excadrill.wav differ diff --git a/sound/direct_sound_samples/cries/exeggcute.aif b/sound/direct_sound_samples/cries/exeggcute.aif deleted file mode 100644 index bd634c757040..000000000000 Binary files a/sound/direct_sound_samples/cries/exeggcute.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/exeggcute.wav b/sound/direct_sound_samples/cries/exeggcute.wav new file mode 100644 index 000000000000..bfd825f8003a Binary files /dev/null and b/sound/direct_sound_samples/cries/exeggcute.wav differ diff --git a/sound/direct_sound_samples/cries/exeggutor.aif b/sound/direct_sound_samples/cries/exeggutor.aif deleted file mode 100644 index 094b27bc6f30..000000000000 Binary files a/sound/direct_sound_samples/cries/exeggutor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/exeggutor.wav b/sound/direct_sound_samples/cries/exeggutor.wav new file mode 100644 index 000000000000..f2a0d6bedc49 Binary files /dev/null and b/sound/direct_sound_samples/cries/exeggutor.wav differ diff --git a/sound/direct_sound_samples/cries/exploud.aif b/sound/direct_sound_samples/cries/exploud.aif deleted file mode 100644 index 98dafb1ee19e..000000000000 Binary files a/sound/direct_sound_samples/cries/exploud.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/exploud.wav b/sound/direct_sound_samples/cries/exploud.wav new file mode 100644 index 000000000000..9b3cbf896bd2 Binary files /dev/null and b/sound/direct_sound_samples/cries/exploud.wav differ diff --git a/sound/direct_sound_samples/cries/falinks.aif b/sound/direct_sound_samples/cries/falinks.aif deleted file mode 100644 index 6fa1af8df422..000000000000 Binary files a/sound/direct_sound_samples/cries/falinks.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/falinks.wav b/sound/direct_sound_samples/cries/falinks.wav new file mode 100644 index 000000000000..f3df8ba9cfa5 Binary files /dev/null and b/sound/direct_sound_samples/cries/falinks.wav differ diff --git a/sound/direct_sound_samples/cries/farfetchd.aif b/sound/direct_sound_samples/cries/farfetchd.aif deleted file mode 100644 index 5a710ed7de15..000000000000 Binary files a/sound/direct_sound_samples/cries/farfetchd.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/farfetchd.wav b/sound/direct_sound_samples/cries/farfetchd.wav new file mode 100644 index 000000000000..d090445d414e Binary files /dev/null and b/sound/direct_sound_samples/cries/farfetchd.wav differ diff --git a/sound/direct_sound_samples/cries/farigiraf.aif b/sound/direct_sound_samples/cries/farigiraf.aif deleted file mode 100644 index d862b0d30e2f..000000000000 Binary files a/sound/direct_sound_samples/cries/farigiraf.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/farigiraf.wav b/sound/direct_sound_samples/cries/farigiraf.wav new file mode 100644 index 000000000000..9b3c261949eb Binary files /dev/null and b/sound/direct_sound_samples/cries/farigiraf.wav differ diff --git a/sound/direct_sound_samples/cries/fearow.aif b/sound/direct_sound_samples/cries/fearow.aif deleted file mode 100644 index 792269848223..000000000000 Binary files a/sound/direct_sound_samples/cries/fearow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fearow.wav b/sound/direct_sound_samples/cries/fearow.wav new file mode 100644 index 000000000000..6ef7eadee907 Binary files /dev/null and b/sound/direct_sound_samples/cries/fearow.wav differ diff --git a/sound/direct_sound_samples/cries/feebas.aif b/sound/direct_sound_samples/cries/feebas.aif deleted file mode 100644 index fc6e757134e6..000000000000 Binary files a/sound/direct_sound_samples/cries/feebas.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/feebas.wav b/sound/direct_sound_samples/cries/feebas.wav new file mode 100644 index 000000000000..a8f60a55f6b1 Binary files /dev/null and b/sound/direct_sound_samples/cries/feebas.wav differ diff --git a/sound/direct_sound_samples/cries/fennekin.aif b/sound/direct_sound_samples/cries/fennekin.aif deleted file mode 100644 index 3feb83cdf8df..000000000000 Binary files a/sound/direct_sound_samples/cries/fennekin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fennekin.wav b/sound/direct_sound_samples/cries/fennekin.wav new file mode 100644 index 000000000000..3e187d6d1b87 Binary files /dev/null and b/sound/direct_sound_samples/cries/fennekin.wav differ diff --git a/sound/direct_sound_samples/cries/feraligatr.aif b/sound/direct_sound_samples/cries/feraligatr.aif deleted file mode 100644 index c71d66722bf0..000000000000 Binary files a/sound/direct_sound_samples/cries/feraligatr.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/feraligatr.wav b/sound/direct_sound_samples/cries/feraligatr.wav new file mode 100644 index 000000000000..d1da192f9055 Binary files /dev/null and b/sound/direct_sound_samples/cries/feraligatr.wav differ diff --git a/sound/direct_sound_samples/cries/ferroseed.aif b/sound/direct_sound_samples/cries/ferroseed.aif deleted file mode 100644 index 1acd8342d0c3..000000000000 Binary files a/sound/direct_sound_samples/cries/ferroseed.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ferroseed.wav b/sound/direct_sound_samples/cries/ferroseed.wav new file mode 100644 index 000000000000..0c74da6aeadb Binary files /dev/null and b/sound/direct_sound_samples/cries/ferroseed.wav differ diff --git a/sound/direct_sound_samples/cries/ferrothorn.aif b/sound/direct_sound_samples/cries/ferrothorn.aif deleted file mode 100644 index 7e7f1ad3ad7b..000000000000 Binary files a/sound/direct_sound_samples/cries/ferrothorn.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ferrothorn.wav b/sound/direct_sound_samples/cries/ferrothorn.wav new file mode 100644 index 000000000000..30d61a2f2b0a Binary files /dev/null and b/sound/direct_sound_samples/cries/ferrothorn.wav differ diff --git a/sound/direct_sound_samples/cries/fezandipiti.aif b/sound/direct_sound_samples/cries/fezandipiti.aif deleted file mode 100644 index d24a32b9c7d2..000000000000 Binary files a/sound/direct_sound_samples/cries/fezandipiti.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fezandipiti.wav b/sound/direct_sound_samples/cries/fezandipiti.wav new file mode 100644 index 000000000000..cb99f08edd76 Binary files /dev/null and b/sound/direct_sound_samples/cries/fezandipiti.wav differ diff --git a/sound/direct_sound_samples/cries/fidough.aif b/sound/direct_sound_samples/cries/fidough.aif deleted file mode 100644 index f2063bc79b4a..000000000000 Binary files a/sound/direct_sound_samples/cries/fidough.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fidough.wav b/sound/direct_sound_samples/cries/fidough.wav new file mode 100644 index 000000000000..d0af55bac819 Binary files /dev/null and b/sound/direct_sound_samples/cries/fidough.wav differ diff --git a/sound/direct_sound_samples/cries/finizen.aif b/sound/direct_sound_samples/cries/finizen.aif deleted file mode 100644 index 07af24f69611..000000000000 Binary files a/sound/direct_sound_samples/cries/finizen.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/finizen.wav b/sound/direct_sound_samples/cries/finizen.wav new file mode 100644 index 000000000000..f7d338dd7c4e Binary files /dev/null and b/sound/direct_sound_samples/cries/finizen.wav differ diff --git a/sound/direct_sound_samples/cries/finneon.aif b/sound/direct_sound_samples/cries/finneon.aif deleted file mode 100644 index c2fe2f38bac7..000000000000 Binary files a/sound/direct_sound_samples/cries/finneon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/finneon.wav b/sound/direct_sound_samples/cries/finneon.wav new file mode 100644 index 000000000000..d5a706b1c854 Binary files /dev/null and b/sound/direct_sound_samples/cries/finneon.wav differ diff --git a/sound/direct_sound_samples/cries/flaaffy.aif b/sound/direct_sound_samples/cries/flaaffy.aif deleted file mode 100644 index 068e82e76c05..000000000000 Binary files a/sound/direct_sound_samples/cries/flaaffy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/flaaffy.wav b/sound/direct_sound_samples/cries/flaaffy.wav new file mode 100644 index 000000000000..a0cf3df06241 Binary files /dev/null and b/sound/direct_sound_samples/cries/flaaffy.wav differ diff --git a/sound/direct_sound_samples/cries/flabebe.aif b/sound/direct_sound_samples/cries/flabebe.aif deleted file mode 100644 index a6dbe0321c6f..000000000000 Binary files a/sound/direct_sound_samples/cries/flabebe.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/flabebe.wav b/sound/direct_sound_samples/cries/flabebe.wav new file mode 100644 index 000000000000..d93a0f4a4b22 Binary files /dev/null and b/sound/direct_sound_samples/cries/flabebe.wav differ diff --git a/sound/direct_sound_samples/cries/flamigo.aif b/sound/direct_sound_samples/cries/flamigo.aif deleted file mode 100644 index 2b022da5b07f..000000000000 Binary files a/sound/direct_sound_samples/cries/flamigo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/flamigo.wav b/sound/direct_sound_samples/cries/flamigo.wav new file mode 100644 index 000000000000..1a47bf593a9e Binary files /dev/null and b/sound/direct_sound_samples/cries/flamigo.wav differ diff --git a/sound/direct_sound_samples/cries/flapple.aif b/sound/direct_sound_samples/cries/flapple.aif deleted file mode 100644 index 844318022e57..000000000000 Binary files a/sound/direct_sound_samples/cries/flapple.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/flapple.wav b/sound/direct_sound_samples/cries/flapple.wav new file mode 100644 index 000000000000..4120296cc74e Binary files /dev/null and b/sound/direct_sound_samples/cries/flapple.wav differ diff --git a/sound/direct_sound_samples/cries/flareon.aif b/sound/direct_sound_samples/cries/flareon.aif deleted file mode 100644 index b8d33df49e57..000000000000 Binary files a/sound/direct_sound_samples/cries/flareon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/flareon.wav b/sound/direct_sound_samples/cries/flareon.wav new file mode 100644 index 000000000000..6bd51168b3c8 Binary files /dev/null and b/sound/direct_sound_samples/cries/flareon.wav differ diff --git a/sound/direct_sound_samples/cries/fletchinder.aif b/sound/direct_sound_samples/cries/fletchinder.aif deleted file mode 100644 index 2267e3fdfcc1..000000000000 Binary files a/sound/direct_sound_samples/cries/fletchinder.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fletchinder.wav b/sound/direct_sound_samples/cries/fletchinder.wav new file mode 100644 index 000000000000..a5e0a7bac4f7 Binary files /dev/null and b/sound/direct_sound_samples/cries/fletchinder.wav differ diff --git a/sound/direct_sound_samples/cries/fletchling.aif b/sound/direct_sound_samples/cries/fletchling.aif deleted file mode 100644 index ce9085845fc0..000000000000 Binary files a/sound/direct_sound_samples/cries/fletchling.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fletchling.wav b/sound/direct_sound_samples/cries/fletchling.wav new file mode 100644 index 000000000000..7b8cb393ec91 Binary files /dev/null and b/sound/direct_sound_samples/cries/fletchling.wav differ diff --git a/sound/direct_sound_samples/cries/flittle.aif b/sound/direct_sound_samples/cries/flittle.aif deleted file mode 100644 index d81016a64def..000000000000 Binary files a/sound/direct_sound_samples/cries/flittle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/flittle.wav b/sound/direct_sound_samples/cries/flittle.wav new file mode 100644 index 000000000000..da2b154d2a0c Binary files /dev/null and b/sound/direct_sound_samples/cries/flittle.wav differ diff --git a/sound/direct_sound_samples/cries/floatzel.aif b/sound/direct_sound_samples/cries/floatzel.aif deleted file mode 100644 index 36f34f5e9038..000000000000 Binary files a/sound/direct_sound_samples/cries/floatzel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/floatzel.wav b/sound/direct_sound_samples/cries/floatzel.wav new file mode 100644 index 000000000000..33e8eecf4354 Binary files /dev/null and b/sound/direct_sound_samples/cries/floatzel.wav differ diff --git a/sound/direct_sound_samples/cries/floette.aif b/sound/direct_sound_samples/cries/floette.aif deleted file mode 100644 index 4244ce8eda6f..000000000000 Binary files a/sound/direct_sound_samples/cries/floette.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/floette.wav b/sound/direct_sound_samples/cries/floette.wav new file mode 100644 index 000000000000..36000d14ac47 Binary files /dev/null and b/sound/direct_sound_samples/cries/floette.wav differ diff --git a/sound/direct_sound_samples/cries/floette_eternal.aif b/sound/direct_sound_samples/cries/floette_eternal.aif deleted file mode 100644 index 386815f08208..000000000000 Binary files a/sound/direct_sound_samples/cries/floette_eternal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/floette_eternal.wav b/sound/direct_sound_samples/cries/floette_eternal.wav new file mode 100644 index 000000000000..a4cc2b3a8158 Binary files /dev/null and b/sound/direct_sound_samples/cries/floette_eternal.wav differ diff --git a/sound/direct_sound_samples/cries/floragato.aif b/sound/direct_sound_samples/cries/floragato.aif deleted file mode 100644 index 4fc883242374..000000000000 Binary files a/sound/direct_sound_samples/cries/floragato.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/floragato.wav b/sound/direct_sound_samples/cries/floragato.wav new file mode 100644 index 000000000000..64fa6df859cf Binary files /dev/null and b/sound/direct_sound_samples/cries/floragato.wav differ diff --git a/sound/direct_sound_samples/cries/florges.aif b/sound/direct_sound_samples/cries/florges.aif deleted file mode 100644 index e652e68fa931..000000000000 Binary files a/sound/direct_sound_samples/cries/florges.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/florges.wav b/sound/direct_sound_samples/cries/florges.wav new file mode 100644 index 000000000000..180c6490bbca Binary files /dev/null and b/sound/direct_sound_samples/cries/florges.wav differ diff --git a/sound/direct_sound_samples/cries/flutter_mane.aif b/sound/direct_sound_samples/cries/flutter_mane.aif deleted file mode 100644 index ad4c636fe7f5..000000000000 Binary files a/sound/direct_sound_samples/cries/flutter_mane.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/flutter_mane.wav b/sound/direct_sound_samples/cries/flutter_mane.wav new file mode 100644 index 000000000000..c52aeabc5cb1 Binary files /dev/null and b/sound/direct_sound_samples/cries/flutter_mane.wav differ diff --git a/sound/direct_sound_samples/cries/flygon.aif b/sound/direct_sound_samples/cries/flygon.aif deleted file mode 100644 index c8b793f4f971..000000000000 Binary files a/sound/direct_sound_samples/cries/flygon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/flygon.wav b/sound/direct_sound_samples/cries/flygon.wav new file mode 100644 index 000000000000..b6c5d90ba029 Binary files /dev/null and b/sound/direct_sound_samples/cries/flygon.wav differ diff --git a/sound/direct_sound_samples/cries/fomantis.aif b/sound/direct_sound_samples/cries/fomantis.aif deleted file mode 100644 index a82e4d45249b..000000000000 Binary files a/sound/direct_sound_samples/cries/fomantis.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fomantis.wav b/sound/direct_sound_samples/cries/fomantis.wav new file mode 100644 index 000000000000..d3de05db55d6 Binary files /dev/null and b/sound/direct_sound_samples/cries/fomantis.wav differ diff --git a/sound/direct_sound_samples/cries/foongus.aif b/sound/direct_sound_samples/cries/foongus.aif deleted file mode 100644 index ca83e1b475f7..000000000000 Binary files a/sound/direct_sound_samples/cries/foongus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/foongus.wav b/sound/direct_sound_samples/cries/foongus.wav new file mode 100644 index 000000000000..6c2c2381e037 Binary files /dev/null and b/sound/direct_sound_samples/cries/foongus.wav differ diff --git a/sound/direct_sound_samples/cries/forretress.aif b/sound/direct_sound_samples/cries/forretress.aif deleted file mode 100644 index 9b8af8baa4b9..000000000000 Binary files a/sound/direct_sound_samples/cries/forretress.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/forretress.wav b/sound/direct_sound_samples/cries/forretress.wav new file mode 100644 index 000000000000..3f704f65b50c Binary files /dev/null and b/sound/direct_sound_samples/cries/forretress.wav differ diff --git a/sound/direct_sound_samples/cries/fraxure.aif b/sound/direct_sound_samples/cries/fraxure.aif deleted file mode 100644 index 4586702b00f4..000000000000 Binary files a/sound/direct_sound_samples/cries/fraxure.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fraxure.wav b/sound/direct_sound_samples/cries/fraxure.wav new file mode 100644 index 000000000000..6759da7a1d03 Binary files /dev/null and b/sound/direct_sound_samples/cries/fraxure.wav differ diff --git a/sound/direct_sound_samples/cries/frigibax.aif b/sound/direct_sound_samples/cries/frigibax.aif deleted file mode 100644 index e8318a0cf123..000000000000 Binary files a/sound/direct_sound_samples/cries/frigibax.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/frigibax.wav b/sound/direct_sound_samples/cries/frigibax.wav new file mode 100644 index 000000000000..200f6f7da4e2 Binary files /dev/null and b/sound/direct_sound_samples/cries/frigibax.wav differ diff --git a/sound/direct_sound_samples/cries/frillish.aif b/sound/direct_sound_samples/cries/frillish.aif deleted file mode 100644 index 71511b8bcf9e..000000000000 Binary files a/sound/direct_sound_samples/cries/frillish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/frillish.wav b/sound/direct_sound_samples/cries/frillish.wav new file mode 100644 index 000000000000..45adf7c08c99 Binary files /dev/null and b/sound/direct_sound_samples/cries/frillish.wav differ diff --git a/sound/direct_sound_samples/cries/froakie.aif b/sound/direct_sound_samples/cries/froakie.aif deleted file mode 100644 index d6955de8bc9f..000000000000 Binary files a/sound/direct_sound_samples/cries/froakie.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/froakie.wav b/sound/direct_sound_samples/cries/froakie.wav new file mode 100644 index 000000000000..0099799d7306 Binary files /dev/null and b/sound/direct_sound_samples/cries/froakie.wav differ diff --git a/sound/direct_sound_samples/cries/frogadier.aif b/sound/direct_sound_samples/cries/frogadier.aif deleted file mode 100644 index 918abc5d845a..000000000000 Binary files a/sound/direct_sound_samples/cries/frogadier.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/frogadier.wav b/sound/direct_sound_samples/cries/frogadier.wav new file mode 100644 index 000000000000..f7fcff3f0585 Binary files /dev/null and b/sound/direct_sound_samples/cries/frogadier.wav differ diff --git a/sound/direct_sound_samples/cries/froslass.aif b/sound/direct_sound_samples/cries/froslass.aif deleted file mode 100644 index 75febf4311c9..000000000000 Binary files a/sound/direct_sound_samples/cries/froslass.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/froslass.wav b/sound/direct_sound_samples/cries/froslass.wav new file mode 100644 index 000000000000..7c1baee478c8 Binary files /dev/null and b/sound/direct_sound_samples/cries/froslass.wav differ diff --git a/sound/direct_sound_samples/cries/frosmoth.aif b/sound/direct_sound_samples/cries/frosmoth.aif deleted file mode 100644 index 324034d15eef..000000000000 Binary files a/sound/direct_sound_samples/cries/frosmoth.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/frosmoth.wav b/sound/direct_sound_samples/cries/frosmoth.wav new file mode 100644 index 000000000000..b65a91e531a3 Binary files /dev/null and b/sound/direct_sound_samples/cries/frosmoth.wav differ diff --git a/sound/direct_sound_samples/cries/fuecoco.aif b/sound/direct_sound_samples/cries/fuecoco.aif deleted file mode 100644 index ee40234e0b1f..000000000000 Binary files a/sound/direct_sound_samples/cries/fuecoco.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/fuecoco.wav b/sound/direct_sound_samples/cries/fuecoco.wav new file mode 100644 index 000000000000..7b3a68eaea8e Binary files /dev/null and b/sound/direct_sound_samples/cries/fuecoco.wav differ diff --git a/sound/direct_sound_samples/cries/furfrou.aif b/sound/direct_sound_samples/cries/furfrou.aif deleted file mode 100644 index d989bde3d394..000000000000 Binary files a/sound/direct_sound_samples/cries/furfrou.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/furfrou.wav b/sound/direct_sound_samples/cries/furfrou.wav new file mode 100644 index 000000000000..3800ae8c38e5 Binary files /dev/null and b/sound/direct_sound_samples/cries/furfrou.wav differ diff --git a/sound/direct_sound_samples/cries/furret.aif b/sound/direct_sound_samples/cries/furret.aif deleted file mode 100644 index cdf9447d734e..000000000000 Binary files a/sound/direct_sound_samples/cries/furret.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/furret.wav b/sound/direct_sound_samples/cries/furret.wav new file mode 100644 index 000000000000..e3e4ec584247 Binary files /dev/null and b/sound/direct_sound_samples/cries/furret.wav differ diff --git a/sound/direct_sound_samples/cries/gabite.aif b/sound/direct_sound_samples/cries/gabite.aif deleted file mode 100644 index 5ca21cec7ae9..000000000000 Binary files a/sound/direct_sound_samples/cries/gabite.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gabite.wav b/sound/direct_sound_samples/cries/gabite.wav new file mode 100644 index 000000000000..b8bd9061013e Binary files /dev/null and b/sound/direct_sound_samples/cries/gabite.wav differ diff --git a/sound/direct_sound_samples/cries/gallade.aif b/sound/direct_sound_samples/cries/gallade.aif deleted file mode 100644 index 1eb55aeed9c1..000000000000 Binary files a/sound/direct_sound_samples/cries/gallade.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gallade.wav b/sound/direct_sound_samples/cries/gallade.wav new file mode 100644 index 000000000000..bc0671f08f27 Binary files /dev/null and b/sound/direct_sound_samples/cries/gallade.wav differ diff --git a/sound/direct_sound_samples/cries/gallade_mega.aif b/sound/direct_sound_samples/cries/gallade_mega.aif deleted file mode 100644 index 5b0d5eb5cca2..000000000000 Binary files a/sound/direct_sound_samples/cries/gallade_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gallade_mega.wav b/sound/direct_sound_samples/cries/gallade_mega.wav new file mode 100644 index 000000000000..c1725b2a803b Binary files /dev/null and b/sound/direct_sound_samples/cries/gallade_mega.wav differ diff --git a/sound/direct_sound_samples/cries/galvantula.aif b/sound/direct_sound_samples/cries/galvantula.aif deleted file mode 100644 index 8d890a246365..000000000000 Binary files a/sound/direct_sound_samples/cries/galvantula.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/galvantula.wav b/sound/direct_sound_samples/cries/galvantula.wav new file mode 100644 index 000000000000..d08ff5388cf7 Binary files /dev/null and b/sound/direct_sound_samples/cries/galvantula.wav differ diff --git a/sound/direct_sound_samples/cries/garbodor.aif b/sound/direct_sound_samples/cries/garbodor.aif deleted file mode 100644 index 09cad5cd7f9a..000000000000 Binary files a/sound/direct_sound_samples/cries/garbodor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/garbodor.wav b/sound/direct_sound_samples/cries/garbodor.wav new file mode 100644 index 000000000000..d5c66fbf2597 Binary files /dev/null and b/sound/direct_sound_samples/cries/garbodor.wav differ diff --git a/sound/direct_sound_samples/cries/garchomp.aif b/sound/direct_sound_samples/cries/garchomp.aif deleted file mode 100644 index f96c62f93bdf..000000000000 Binary files a/sound/direct_sound_samples/cries/garchomp.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/garchomp.wav b/sound/direct_sound_samples/cries/garchomp.wav new file mode 100644 index 000000000000..828a1a49a242 Binary files /dev/null and b/sound/direct_sound_samples/cries/garchomp.wav differ diff --git a/sound/direct_sound_samples/cries/garchomp_mega.aif b/sound/direct_sound_samples/cries/garchomp_mega.aif deleted file mode 100644 index 65637139f224..000000000000 Binary files a/sound/direct_sound_samples/cries/garchomp_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/garchomp_mega.wav b/sound/direct_sound_samples/cries/garchomp_mega.wav new file mode 100644 index 000000000000..0b1f9df662b6 Binary files /dev/null and b/sound/direct_sound_samples/cries/garchomp_mega.wav differ diff --git a/sound/direct_sound_samples/cries/gardevoir.aif b/sound/direct_sound_samples/cries/gardevoir.aif deleted file mode 100644 index 9285affb9d3b..000000000000 Binary files a/sound/direct_sound_samples/cries/gardevoir.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gardevoir.wav b/sound/direct_sound_samples/cries/gardevoir.wav new file mode 100644 index 000000000000..bd3a99acc26e Binary files /dev/null and b/sound/direct_sound_samples/cries/gardevoir.wav differ diff --git a/sound/direct_sound_samples/cries/gardevoir_mega.aif b/sound/direct_sound_samples/cries/gardevoir_mega.aif deleted file mode 100644 index 71ba65d45544..000000000000 Binary files a/sound/direct_sound_samples/cries/gardevoir_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gardevoir_mega.wav b/sound/direct_sound_samples/cries/gardevoir_mega.wav new file mode 100644 index 000000000000..f94e401a96a5 Binary files /dev/null and b/sound/direct_sound_samples/cries/gardevoir_mega.wav differ diff --git a/sound/direct_sound_samples/cries/garganacl.aif b/sound/direct_sound_samples/cries/garganacl.aif deleted file mode 100644 index 3c530cea53ac..000000000000 Binary files a/sound/direct_sound_samples/cries/garganacl.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/garganacl.wav b/sound/direct_sound_samples/cries/garganacl.wav new file mode 100644 index 000000000000..5730bea3485c Binary files /dev/null and b/sound/direct_sound_samples/cries/garganacl.wav differ diff --git a/sound/direct_sound_samples/cries/gastly.aif b/sound/direct_sound_samples/cries/gastly.aif deleted file mode 100644 index 5174cabffd5a..000000000000 Binary files a/sound/direct_sound_samples/cries/gastly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gastly.wav b/sound/direct_sound_samples/cries/gastly.wav new file mode 100644 index 000000000000..1bc2ff966737 Binary files /dev/null and b/sound/direct_sound_samples/cries/gastly.wav differ diff --git a/sound/direct_sound_samples/cries/gastrodon.aif b/sound/direct_sound_samples/cries/gastrodon.aif deleted file mode 100644 index d564820e832b..000000000000 Binary files a/sound/direct_sound_samples/cries/gastrodon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gastrodon.wav b/sound/direct_sound_samples/cries/gastrodon.wav new file mode 100644 index 000000000000..164666f31405 Binary files /dev/null and b/sound/direct_sound_samples/cries/gastrodon.wav differ diff --git a/sound/direct_sound_samples/cries/genesect.aif b/sound/direct_sound_samples/cries/genesect.aif deleted file mode 100644 index 49e430ee9aed..000000000000 Binary files a/sound/direct_sound_samples/cries/genesect.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/genesect.wav b/sound/direct_sound_samples/cries/genesect.wav new file mode 100644 index 000000000000..443ea6f0df10 Binary files /dev/null and b/sound/direct_sound_samples/cries/genesect.wav differ diff --git a/sound/direct_sound_samples/cries/gengar.aif b/sound/direct_sound_samples/cries/gengar.aif deleted file mode 100644 index 3c5e291ba30e..000000000000 Binary files a/sound/direct_sound_samples/cries/gengar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gengar.wav b/sound/direct_sound_samples/cries/gengar.wav new file mode 100644 index 000000000000..9e8c24c28b8b Binary files /dev/null and b/sound/direct_sound_samples/cries/gengar.wav differ diff --git a/sound/direct_sound_samples/cries/gengar_mega.aif b/sound/direct_sound_samples/cries/gengar_mega.aif deleted file mode 100644 index 7967d6dcfb8c..000000000000 Binary files a/sound/direct_sound_samples/cries/gengar_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gengar_mega.wav b/sound/direct_sound_samples/cries/gengar_mega.wav new file mode 100644 index 000000000000..b0c8ab70c6c2 Binary files /dev/null and b/sound/direct_sound_samples/cries/gengar_mega.wav differ diff --git a/sound/direct_sound_samples/cries/geodude.aif b/sound/direct_sound_samples/cries/geodude.aif deleted file mode 100644 index a09b2ca345b8..000000000000 Binary files a/sound/direct_sound_samples/cries/geodude.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/geodude.wav b/sound/direct_sound_samples/cries/geodude.wav new file mode 100644 index 000000000000..f355fc7e1a5d Binary files /dev/null and b/sound/direct_sound_samples/cries/geodude.wav differ diff --git a/sound/direct_sound_samples/cries/gholdengo.aif b/sound/direct_sound_samples/cries/gholdengo.aif deleted file mode 100644 index 4cef67ba29f0..000000000000 Binary files a/sound/direct_sound_samples/cries/gholdengo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gholdengo.wav b/sound/direct_sound_samples/cries/gholdengo.wav new file mode 100644 index 000000000000..37bb7ed39ac6 Binary files /dev/null and b/sound/direct_sound_samples/cries/gholdengo.wav differ diff --git a/sound/direct_sound_samples/cries/gible.aif b/sound/direct_sound_samples/cries/gible.aif deleted file mode 100644 index f3d4b4882f64..000000000000 Binary files a/sound/direct_sound_samples/cries/gible.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gible.wav b/sound/direct_sound_samples/cries/gible.wav new file mode 100644 index 000000000000..49bd85b916b0 Binary files /dev/null and b/sound/direct_sound_samples/cries/gible.wav differ diff --git a/sound/direct_sound_samples/cries/gigalith.aif b/sound/direct_sound_samples/cries/gigalith.aif deleted file mode 100644 index 00ad607cc677..000000000000 Binary files a/sound/direct_sound_samples/cries/gigalith.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gigalith.wav b/sound/direct_sound_samples/cries/gigalith.wav new file mode 100644 index 000000000000..ae3b47aa7eaa Binary files /dev/null and b/sound/direct_sound_samples/cries/gigalith.wav differ diff --git a/sound/direct_sound_samples/cries/gimmighoul.aif b/sound/direct_sound_samples/cries/gimmighoul.aif deleted file mode 100644 index fe8db162c9b0..000000000000 Binary files a/sound/direct_sound_samples/cries/gimmighoul.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gimmighoul.wav b/sound/direct_sound_samples/cries/gimmighoul.wav new file mode 100644 index 000000000000..f915238a9584 Binary files /dev/null and b/sound/direct_sound_samples/cries/gimmighoul.wav differ diff --git a/sound/direct_sound_samples/cries/gimmighoul_roaming.aif b/sound/direct_sound_samples/cries/gimmighoul_roaming.aif deleted file mode 100644 index 9f3c4483e9c5..000000000000 Binary files a/sound/direct_sound_samples/cries/gimmighoul_roaming.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/girafarig.aif b/sound/direct_sound_samples/cries/girafarig.aif deleted file mode 100644 index af5af89268d7..000000000000 Binary files a/sound/direct_sound_samples/cries/girafarig.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/girafarig.wav b/sound/direct_sound_samples/cries/girafarig.wav new file mode 100644 index 000000000000..d78162a29fdb Binary files /dev/null and b/sound/direct_sound_samples/cries/girafarig.wav differ diff --git a/sound/direct_sound_samples/cries/giratina.aif b/sound/direct_sound_samples/cries/giratina.aif deleted file mode 100644 index 319e2c132324..000000000000 Binary files a/sound/direct_sound_samples/cries/giratina.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/giratina.wav b/sound/direct_sound_samples/cries/giratina.wav new file mode 100644 index 000000000000..f2b4dff5c870 Binary files /dev/null and b/sound/direct_sound_samples/cries/giratina.wav differ diff --git a/sound/direct_sound_samples/cries/glaceon.aif b/sound/direct_sound_samples/cries/glaceon.aif deleted file mode 100644 index e38ebdef914f..000000000000 Binary files a/sound/direct_sound_samples/cries/glaceon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/glaceon.wav b/sound/direct_sound_samples/cries/glaceon.wav new file mode 100644 index 000000000000..b67779f8734f Binary files /dev/null and b/sound/direct_sound_samples/cries/glaceon.wav differ diff --git a/sound/direct_sound_samples/cries/glalie.aif b/sound/direct_sound_samples/cries/glalie.aif deleted file mode 100644 index 38291bef49af..000000000000 Binary files a/sound/direct_sound_samples/cries/glalie.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/glalie.wav b/sound/direct_sound_samples/cries/glalie.wav new file mode 100644 index 000000000000..bf35bd147b85 Binary files /dev/null and b/sound/direct_sound_samples/cries/glalie.wav differ diff --git a/sound/direct_sound_samples/cries/glalie_mega.aif b/sound/direct_sound_samples/cries/glalie_mega.aif deleted file mode 100644 index cae5ba57f107..000000000000 Binary files a/sound/direct_sound_samples/cries/glalie_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/glalie_mega.wav b/sound/direct_sound_samples/cries/glalie_mega.wav new file mode 100644 index 000000000000..366b61e63045 Binary files /dev/null and b/sound/direct_sound_samples/cries/glalie_mega.wav differ diff --git a/sound/direct_sound_samples/cries/glameow.aif b/sound/direct_sound_samples/cries/glameow.aif deleted file mode 100644 index a2d7ab1fa3cc..000000000000 Binary files a/sound/direct_sound_samples/cries/glameow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/glameow.wav b/sound/direct_sound_samples/cries/glameow.wav new file mode 100644 index 000000000000..8fe17099bb4f Binary files /dev/null and b/sound/direct_sound_samples/cries/glameow.wav differ diff --git a/sound/direct_sound_samples/cries/glastrier.aif b/sound/direct_sound_samples/cries/glastrier.aif deleted file mode 100644 index 80c44e0b764a..000000000000 Binary files a/sound/direct_sound_samples/cries/glastrier.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/glastrier.wav b/sound/direct_sound_samples/cries/glastrier.wav new file mode 100644 index 000000000000..bd9885ce2bde Binary files /dev/null and b/sound/direct_sound_samples/cries/glastrier.wav differ diff --git a/sound/direct_sound_samples/cries/gligar.aif b/sound/direct_sound_samples/cries/gligar.aif deleted file mode 100644 index e2103c2ff846..000000000000 Binary files a/sound/direct_sound_samples/cries/gligar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gligar.wav b/sound/direct_sound_samples/cries/gligar.wav new file mode 100644 index 000000000000..8fa3efa6b1dc Binary files /dev/null and b/sound/direct_sound_samples/cries/gligar.wav differ diff --git a/sound/direct_sound_samples/cries/glimmet.aif b/sound/direct_sound_samples/cries/glimmet.aif deleted file mode 100644 index e89ac2ea59cd..000000000000 Binary files a/sound/direct_sound_samples/cries/glimmet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/glimmet.wav b/sound/direct_sound_samples/cries/glimmet.wav new file mode 100644 index 000000000000..37dbf6c8b178 Binary files /dev/null and b/sound/direct_sound_samples/cries/glimmet.wav differ diff --git a/sound/direct_sound_samples/cries/glimmora.aif b/sound/direct_sound_samples/cries/glimmora.aif deleted file mode 100644 index 64fb6822894f..000000000000 Binary files a/sound/direct_sound_samples/cries/glimmora.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/glimmora.wav b/sound/direct_sound_samples/cries/glimmora.wav new file mode 100644 index 000000000000..9edf26f989cd Binary files /dev/null and b/sound/direct_sound_samples/cries/glimmora.wav differ diff --git a/sound/direct_sound_samples/cries/gliscor.aif b/sound/direct_sound_samples/cries/gliscor.aif deleted file mode 100644 index 1df92dc9a932..000000000000 Binary files a/sound/direct_sound_samples/cries/gliscor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gliscor.wav b/sound/direct_sound_samples/cries/gliscor.wav new file mode 100644 index 000000000000..1146423758f9 Binary files /dev/null and b/sound/direct_sound_samples/cries/gliscor.wav differ diff --git a/sound/direct_sound_samples/cries/gloom.aif b/sound/direct_sound_samples/cries/gloom.aif deleted file mode 100644 index bcedd48d5ea3..000000000000 Binary files a/sound/direct_sound_samples/cries/gloom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gloom.wav b/sound/direct_sound_samples/cries/gloom.wav new file mode 100644 index 000000000000..abc408a0f76a Binary files /dev/null and b/sound/direct_sound_samples/cries/gloom.wav differ diff --git a/sound/direct_sound_samples/cries/gogoat.aif b/sound/direct_sound_samples/cries/gogoat.aif deleted file mode 100644 index 6717a2ff2668..000000000000 Binary files a/sound/direct_sound_samples/cries/gogoat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gogoat.wav b/sound/direct_sound_samples/cries/gogoat.wav new file mode 100644 index 000000000000..6ab6d386e403 Binary files /dev/null and b/sound/direct_sound_samples/cries/gogoat.wav differ diff --git a/sound/direct_sound_samples/cries/golbat.aif b/sound/direct_sound_samples/cries/golbat.aif deleted file mode 100644 index 2e91f76966fc..000000000000 Binary files a/sound/direct_sound_samples/cries/golbat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/golbat.wav b/sound/direct_sound_samples/cries/golbat.wav new file mode 100644 index 000000000000..20d2ecf5c986 Binary files /dev/null and b/sound/direct_sound_samples/cries/golbat.wav differ diff --git a/sound/direct_sound_samples/cries/goldeen.aif b/sound/direct_sound_samples/cries/goldeen.aif deleted file mode 100644 index 687f8d3920ae..000000000000 Binary files a/sound/direct_sound_samples/cries/goldeen.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/goldeen.wav b/sound/direct_sound_samples/cries/goldeen.wav new file mode 100644 index 000000000000..342df710c97b Binary files /dev/null and b/sound/direct_sound_samples/cries/goldeen.wav differ diff --git a/sound/direct_sound_samples/cries/golduck.aif b/sound/direct_sound_samples/cries/golduck.aif deleted file mode 100644 index bc6c5f5b1626..000000000000 Binary files a/sound/direct_sound_samples/cries/golduck.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/golduck.wav b/sound/direct_sound_samples/cries/golduck.wav new file mode 100644 index 000000000000..a9bf91b2da7f Binary files /dev/null and b/sound/direct_sound_samples/cries/golduck.wav differ diff --git a/sound/direct_sound_samples/cries/golem.aif b/sound/direct_sound_samples/cries/golem.aif deleted file mode 100644 index 95fbef9c47c6..000000000000 Binary files a/sound/direct_sound_samples/cries/golem.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/golem.wav b/sound/direct_sound_samples/cries/golem.wav new file mode 100644 index 000000000000..17ed6128e4a2 Binary files /dev/null and b/sound/direct_sound_samples/cries/golem.wav differ diff --git a/sound/direct_sound_samples/cries/golett.aif b/sound/direct_sound_samples/cries/golett.aif deleted file mode 100644 index 58c6f09cd8e8..000000000000 Binary files a/sound/direct_sound_samples/cries/golett.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/golett.wav b/sound/direct_sound_samples/cries/golett.wav new file mode 100644 index 000000000000..46c3664e65cd Binary files /dev/null and b/sound/direct_sound_samples/cries/golett.wav differ diff --git a/sound/direct_sound_samples/cries/golisopod.aif b/sound/direct_sound_samples/cries/golisopod.aif deleted file mode 100644 index 429f445ede68..000000000000 Binary files a/sound/direct_sound_samples/cries/golisopod.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/golisopod.wav b/sound/direct_sound_samples/cries/golisopod.wav new file mode 100644 index 000000000000..66912c8b082c Binary files /dev/null and b/sound/direct_sound_samples/cries/golisopod.wav differ diff --git a/sound/direct_sound_samples/cries/golurk.aif b/sound/direct_sound_samples/cries/golurk.aif deleted file mode 100644 index abc95bd80802..000000000000 Binary files a/sound/direct_sound_samples/cries/golurk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/golurk.wav b/sound/direct_sound_samples/cries/golurk.wav new file mode 100644 index 000000000000..b6e41c1fe0b9 Binary files /dev/null and b/sound/direct_sound_samples/cries/golurk.wav differ diff --git a/sound/direct_sound_samples/cries/goodra.aif b/sound/direct_sound_samples/cries/goodra.aif deleted file mode 100644 index b2f407cc94d1..000000000000 Binary files a/sound/direct_sound_samples/cries/goodra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/goodra.wav b/sound/direct_sound_samples/cries/goodra.wav new file mode 100644 index 000000000000..ffb6bd7f4449 Binary files /dev/null and b/sound/direct_sound_samples/cries/goodra.wav differ diff --git a/sound/direct_sound_samples/cries/goomy.aif b/sound/direct_sound_samples/cries/goomy.aif deleted file mode 100644 index bd2524ebe1e9..000000000000 Binary files a/sound/direct_sound_samples/cries/goomy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/goomy.wav b/sound/direct_sound_samples/cries/goomy.wav new file mode 100644 index 000000000000..d7fdac2cec27 Binary files /dev/null and b/sound/direct_sound_samples/cries/goomy.wav differ diff --git a/sound/direct_sound_samples/cries/gorebyss.aif b/sound/direct_sound_samples/cries/gorebyss.aif deleted file mode 100644 index a93b1aa6fc89..000000000000 Binary files a/sound/direct_sound_samples/cries/gorebyss.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gorebyss.wav b/sound/direct_sound_samples/cries/gorebyss.wav new file mode 100644 index 000000000000..3d375f6dcf22 Binary files /dev/null and b/sound/direct_sound_samples/cries/gorebyss.wav differ diff --git a/sound/direct_sound_samples/cries/gossifleur.aif b/sound/direct_sound_samples/cries/gossifleur.aif deleted file mode 100644 index dae1731c8fee..000000000000 Binary files a/sound/direct_sound_samples/cries/gossifleur.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gossifleur.wav b/sound/direct_sound_samples/cries/gossifleur.wav new file mode 100644 index 000000000000..a666b937c49d Binary files /dev/null and b/sound/direct_sound_samples/cries/gossifleur.wav differ diff --git a/sound/direct_sound_samples/cries/gothita.aif b/sound/direct_sound_samples/cries/gothita.aif deleted file mode 100644 index 00476d94bd77..000000000000 Binary files a/sound/direct_sound_samples/cries/gothita.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gothita.wav b/sound/direct_sound_samples/cries/gothita.wav new file mode 100644 index 000000000000..1d8ad153b4d7 Binary files /dev/null and b/sound/direct_sound_samples/cries/gothita.wav differ diff --git a/sound/direct_sound_samples/cries/gothitelle.aif b/sound/direct_sound_samples/cries/gothitelle.aif deleted file mode 100644 index d8f334784ad4..000000000000 Binary files a/sound/direct_sound_samples/cries/gothitelle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gothitelle.wav b/sound/direct_sound_samples/cries/gothitelle.wav new file mode 100644 index 000000000000..3d7c2046d028 Binary files /dev/null and b/sound/direct_sound_samples/cries/gothitelle.wav differ diff --git a/sound/direct_sound_samples/cries/gothorita.aif b/sound/direct_sound_samples/cries/gothorita.aif deleted file mode 100644 index d5491f83b51b..000000000000 Binary files a/sound/direct_sound_samples/cries/gothorita.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gothorita.wav b/sound/direct_sound_samples/cries/gothorita.wav new file mode 100644 index 000000000000..47686081f59a Binary files /dev/null and b/sound/direct_sound_samples/cries/gothorita.wav differ diff --git a/sound/direct_sound_samples/cries/gouging_fire.aif b/sound/direct_sound_samples/cries/gouging_fire.aif deleted file mode 100644 index 996a7d807047..000000000000 Binary files a/sound/direct_sound_samples/cries/gouging_fire.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gouging_fire.wav b/sound/direct_sound_samples/cries/gouging_fire.wav new file mode 100644 index 000000000000..6748b9c9d84f Binary files /dev/null and b/sound/direct_sound_samples/cries/gouging_fire.wav differ diff --git a/sound/direct_sound_samples/cries/gourgeist.aif b/sound/direct_sound_samples/cries/gourgeist.aif deleted file mode 100644 index b1790cdd3c1d..000000000000 Binary files a/sound/direct_sound_samples/cries/gourgeist.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gourgeist.wav b/sound/direct_sound_samples/cries/gourgeist.wav new file mode 100644 index 000000000000..f3db74b55438 Binary files /dev/null and b/sound/direct_sound_samples/cries/gourgeist.wav differ diff --git a/sound/direct_sound_samples/cries/gourgeist_super.aif b/sound/direct_sound_samples/cries/gourgeist_super.aif deleted file mode 100644 index cdf93aca5815..000000000000 Binary files a/sound/direct_sound_samples/cries/gourgeist_super.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gourgeist_super.wav b/sound/direct_sound_samples/cries/gourgeist_super.wav new file mode 100644 index 000000000000..e319d5ba841f Binary files /dev/null and b/sound/direct_sound_samples/cries/gourgeist_super.wav differ diff --git a/sound/direct_sound_samples/cries/grafaiai.aif b/sound/direct_sound_samples/cries/grafaiai.aif deleted file mode 100644 index d8e8511eec1e..000000000000 Binary files a/sound/direct_sound_samples/cries/grafaiai.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grafaiai.wav b/sound/direct_sound_samples/cries/grafaiai.wav new file mode 100644 index 000000000000..2d16b5e80553 Binary files /dev/null and b/sound/direct_sound_samples/cries/grafaiai.wav differ diff --git a/sound/direct_sound_samples/cries/granbull.aif b/sound/direct_sound_samples/cries/granbull.aif deleted file mode 100644 index 87ed96a84273..000000000000 Binary files a/sound/direct_sound_samples/cries/granbull.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/granbull.wav b/sound/direct_sound_samples/cries/granbull.wav new file mode 100644 index 000000000000..959793b72403 Binary files /dev/null and b/sound/direct_sound_samples/cries/granbull.wav differ diff --git a/sound/direct_sound_samples/cries/grapploct.aif b/sound/direct_sound_samples/cries/grapploct.aif deleted file mode 100644 index 289d636ecbff..000000000000 Binary files a/sound/direct_sound_samples/cries/grapploct.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grapploct.wav b/sound/direct_sound_samples/cries/grapploct.wav new file mode 100644 index 000000000000..fb3b48ccc680 Binary files /dev/null and b/sound/direct_sound_samples/cries/grapploct.wav differ diff --git a/sound/direct_sound_samples/cries/graveler.aif b/sound/direct_sound_samples/cries/graveler.aif deleted file mode 100644 index fbf463c4fd2e..000000000000 Binary files a/sound/direct_sound_samples/cries/graveler.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/graveler.wav b/sound/direct_sound_samples/cries/graveler.wav new file mode 100644 index 000000000000..6b8591406f5c Binary files /dev/null and b/sound/direct_sound_samples/cries/graveler.wav differ diff --git a/sound/direct_sound_samples/cries/great_tusk.aif b/sound/direct_sound_samples/cries/great_tusk.aif deleted file mode 100644 index 4ca76ff6c02f..000000000000 Binary files a/sound/direct_sound_samples/cries/great_tusk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/great_tusk.wav b/sound/direct_sound_samples/cries/great_tusk.wav new file mode 100644 index 000000000000..0c7d0773ea94 Binary files /dev/null and b/sound/direct_sound_samples/cries/great_tusk.wav differ diff --git a/sound/direct_sound_samples/cries/greavard.aif b/sound/direct_sound_samples/cries/greavard.aif deleted file mode 100644 index 434c1dceb0af..000000000000 Binary files a/sound/direct_sound_samples/cries/greavard.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/greavard.wav b/sound/direct_sound_samples/cries/greavard.wav new file mode 100644 index 000000000000..b93fd39327ee Binary files /dev/null and b/sound/direct_sound_samples/cries/greavard.wav differ diff --git a/sound/direct_sound_samples/cries/greedent.aif b/sound/direct_sound_samples/cries/greedent.aif deleted file mode 100644 index 523cd57c3ed9..000000000000 Binary files a/sound/direct_sound_samples/cries/greedent.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/greedent.wav b/sound/direct_sound_samples/cries/greedent.wav new file mode 100644 index 000000000000..351e21c9e32d Binary files /dev/null and b/sound/direct_sound_samples/cries/greedent.wav differ diff --git a/sound/direct_sound_samples/cries/greninja.aif b/sound/direct_sound_samples/cries/greninja.aif deleted file mode 100644 index 988d66b06282..000000000000 Binary files a/sound/direct_sound_samples/cries/greninja.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/greninja.wav b/sound/direct_sound_samples/cries/greninja.wav new file mode 100644 index 000000000000..3d097d8022c8 Binary files /dev/null and b/sound/direct_sound_samples/cries/greninja.wav differ diff --git a/sound/direct_sound_samples/cries/grimer.aif b/sound/direct_sound_samples/cries/grimer.aif deleted file mode 100644 index 050fb9620c35..000000000000 Binary files a/sound/direct_sound_samples/cries/grimer.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grimer.wav b/sound/direct_sound_samples/cries/grimer.wav new file mode 100644 index 000000000000..092dfeed61e0 Binary files /dev/null and b/sound/direct_sound_samples/cries/grimer.wav differ diff --git a/sound/direct_sound_samples/cries/grimmsnarl.aif b/sound/direct_sound_samples/cries/grimmsnarl.aif deleted file mode 100644 index 838312fde35a..000000000000 Binary files a/sound/direct_sound_samples/cries/grimmsnarl.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grimmsnarl.wav b/sound/direct_sound_samples/cries/grimmsnarl.wav new file mode 100644 index 000000000000..7fd3bb5c03ea Binary files /dev/null and b/sound/direct_sound_samples/cries/grimmsnarl.wav differ diff --git a/sound/direct_sound_samples/cries/grookey.aif b/sound/direct_sound_samples/cries/grookey.aif deleted file mode 100644 index 919063484f86..000000000000 Binary files a/sound/direct_sound_samples/cries/grookey.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grookey.wav b/sound/direct_sound_samples/cries/grookey.wav new file mode 100644 index 000000000000..42ebd7ef1ffc Binary files /dev/null and b/sound/direct_sound_samples/cries/grookey.wav differ diff --git a/sound/direct_sound_samples/cries/grotle.aif b/sound/direct_sound_samples/cries/grotle.aif deleted file mode 100644 index 2b08bca67e7a..000000000000 Binary files a/sound/direct_sound_samples/cries/grotle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grotle.wav b/sound/direct_sound_samples/cries/grotle.wav new file mode 100644 index 000000000000..65cdfe49c665 Binary files /dev/null and b/sound/direct_sound_samples/cries/grotle.wav differ diff --git a/sound/direct_sound_samples/cries/groudon.aif b/sound/direct_sound_samples/cries/groudon.aif deleted file mode 100644 index 9fe253745ae2..000000000000 Binary files a/sound/direct_sound_samples/cries/groudon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/groudon.wav b/sound/direct_sound_samples/cries/groudon.wav new file mode 100644 index 000000000000..680d0ec0474b Binary files /dev/null and b/sound/direct_sound_samples/cries/groudon.wav differ diff --git a/sound/direct_sound_samples/cries/groudon_primal.aif b/sound/direct_sound_samples/cries/groudon_primal.aif deleted file mode 100644 index a93d06a3fe93..000000000000 Binary files a/sound/direct_sound_samples/cries/groudon_primal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/groudon_primal.wav b/sound/direct_sound_samples/cries/groudon_primal.wav new file mode 100644 index 000000000000..d3e5f411914e Binary files /dev/null and b/sound/direct_sound_samples/cries/groudon_primal.wav differ diff --git a/sound/direct_sound_samples/cries/grovyle.aif b/sound/direct_sound_samples/cries/grovyle.aif deleted file mode 100644 index c21c58ad0906..000000000000 Binary files a/sound/direct_sound_samples/cries/grovyle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grovyle.wav b/sound/direct_sound_samples/cries/grovyle.wav new file mode 100644 index 000000000000..7e2f1acd0fa7 Binary files /dev/null and b/sound/direct_sound_samples/cries/grovyle.wav differ diff --git a/sound/direct_sound_samples/cries/growlithe.aif b/sound/direct_sound_samples/cries/growlithe.aif deleted file mode 100644 index 37b7233c2967..000000000000 Binary files a/sound/direct_sound_samples/cries/growlithe.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/growlithe.wav b/sound/direct_sound_samples/cries/growlithe.wav new file mode 100644 index 000000000000..3f72ea6f976a Binary files /dev/null and b/sound/direct_sound_samples/cries/growlithe.wav differ diff --git a/sound/direct_sound_samples/cries/grubbin.aif b/sound/direct_sound_samples/cries/grubbin.aif deleted file mode 100644 index 8e071f78154b..000000000000 Binary files a/sound/direct_sound_samples/cries/grubbin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grubbin.wav b/sound/direct_sound_samples/cries/grubbin.wav new file mode 100644 index 000000000000..f76a6630515f Binary files /dev/null and b/sound/direct_sound_samples/cries/grubbin.wav differ diff --git a/sound/direct_sound_samples/cries/grumpig.aif b/sound/direct_sound_samples/cries/grumpig.aif deleted file mode 100644 index d5b766f43e98..000000000000 Binary files a/sound/direct_sound_samples/cries/grumpig.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/grumpig.wav b/sound/direct_sound_samples/cries/grumpig.wav new file mode 100644 index 000000000000..e9c8157e0f65 Binary files /dev/null and b/sound/direct_sound_samples/cries/grumpig.wav differ diff --git a/sound/direct_sound_samples/cries/gulpin.aif b/sound/direct_sound_samples/cries/gulpin.aif deleted file mode 100644 index 4b0bc89b96fe..000000000000 Binary files a/sound/direct_sound_samples/cries/gulpin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gulpin.wav b/sound/direct_sound_samples/cries/gulpin.wav new file mode 100644 index 000000000000..d1ab06b6b085 Binary files /dev/null and b/sound/direct_sound_samples/cries/gulpin.wav differ diff --git a/sound/direct_sound_samples/cries/gumshoos.aif b/sound/direct_sound_samples/cries/gumshoos.aif deleted file mode 100644 index 9f078f85dbd2..000000000000 Binary files a/sound/direct_sound_samples/cries/gumshoos.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gumshoos.wav b/sound/direct_sound_samples/cries/gumshoos.wav new file mode 100644 index 000000000000..9bbfb863b648 Binary files /dev/null and b/sound/direct_sound_samples/cries/gumshoos.wav differ diff --git a/sound/direct_sound_samples/cries/gurdurr.aif b/sound/direct_sound_samples/cries/gurdurr.aif deleted file mode 100644 index 055d366a91b2..000000000000 Binary files a/sound/direct_sound_samples/cries/gurdurr.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gurdurr.wav b/sound/direct_sound_samples/cries/gurdurr.wav new file mode 100644 index 000000000000..ba73ebdcc15f Binary files /dev/null and b/sound/direct_sound_samples/cries/gurdurr.wav differ diff --git a/sound/direct_sound_samples/cries/guzzlord.aif b/sound/direct_sound_samples/cries/guzzlord.aif deleted file mode 100644 index 958e0b7ed367..000000000000 Binary files a/sound/direct_sound_samples/cries/guzzlord.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/guzzlord.wav b/sound/direct_sound_samples/cries/guzzlord.wav new file mode 100644 index 000000000000..15404dea5623 Binary files /dev/null and b/sound/direct_sound_samples/cries/guzzlord.wav differ diff --git a/sound/direct_sound_samples/cries/gyarados.aif b/sound/direct_sound_samples/cries/gyarados.aif deleted file mode 100644 index f4b5dbf94584..000000000000 Binary files a/sound/direct_sound_samples/cries/gyarados.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gyarados.wav b/sound/direct_sound_samples/cries/gyarados.wav new file mode 100644 index 000000000000..6a4124085eac Binary files /dev/null and b/sound/direct_sound_samples/cries/gyarados.wav differ diff --git a/sound/direct_sound_samples/cries/gyarados_mega.aif b/sound/direct_sound_samples/cries/gyarados_mega.aif deleted file mode 100644 index 33f9eadc3b00..000000000000 Binary files a/sound/direct_sound_samples/cries/gyarados_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/gyarados_mega.wav b/sound/direct_sound_samples/cries/gyarados_mega.wav new file mode 100644 index 000000000000..d14a015dd619 Binary files /dev/null and b/sound/direct_sound_samples/cries/gyarados_mega.wav differ diff --git a/sound/direct_sound_samples/cries/hakamo_o.aif b/sound/direct_sound_samples/cries/hakamo_o.aif deleted file mode 100644 index 03d2ff241ad4..000000000000 Binary files a/sound/direct_sound_samples/cries/hakamo_o.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hakamo_o.wav b/sound/direct_sound_samples/cries/hakamo_o.wav new file mode 100644 index 000000000000..c668cad629a5 Binary files /dev/null and b/sound/direct_sound_samples/cries/hakamo_o.wav differ diff --git a/sound/direct_sound_samples/cries/happiny.aif b/sound/direct_sound_samples/cries/happiny.aif deleted file mode 100644 index bee72680ac18..000000000000 Binary files a/sound/direct_sound_samples/cries/happiny.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/happiny.wav b/sound/direct_sound_samples/cries/happiny.wav new file mode 100644 index 000000000000..6d310d8d5967 Binary files /dev/null and b/sound/direct_sound_samples/cries/happiny.wav differ diff --git a/sound/direct_sound_samples/cries/hariyama.aif b/sound/direct_sound_samples/cries/hariyama.aif deleted file mode 100644 index 0a61e0d8ae75..000000000000 Binary files a/sound/direct_sound_samples/cries/hariyama.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hariyama.wav b/sound/direct_sound_samples/cries/hariyama.wav new file mode 100644 index 000000000000..5567aae3a14f Binary files /dev/null and b/sound/direct_sound_samples/cries/hariyama.wav differ diff --git a/sound/direct_sound_samples/cries/hatenna.aif b/sound/direct_sound_samples/cries/hatenna.aif deleted file mode 100644 index 3c431dd65f2b..000000000000 Binary files a/sound/direct_sound_samples/cries/hatenna.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hatenna.wav b/sound/direct_sound_samples/cries/hatenna.wav new file mode 100644 index 000000000000..78e63ac2b4ab Binary files /dev/null and b/sound/direct_sound_samples/cries/hatenna.wav differ diff --git a/sound/direct_sound_samples/cries/hatterene.aif b/sound/direct_sound_samples/cries/hatterene.aif deleted file mode 100644 index db21eb2e2004..000000000000 Binary files a/sound/direct_sound_samples/cries/hatterene.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hatterene.wav b/sound/direct_sound_samples/cries/hatterene.wav new file mode 100644 index 000000000000..27dfcf2db7fd Binary files /dev/null and b/sound/direct_sound_samples/cries/hatterene.wav differ diff --git a/sound/direct_sound_samples/cries/hattrem.aif b/sound/direct_sound_samples/cries/hattrem.aif deleted file mode 100644 index 444c77028352..000000000000 Binary files a/sound/direct_sound_samples/cries/hattrem.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hattrem.wav b/sound/direct_sound_samples/cries/hattrem.wav new file mode 100644 index 000000000000..5da7c40af129 Binary files /dev/null and b/sound/direct_sound_samples/cries/hattrem.wav differ diff --git a/sound/direct_sound_samples/cries/haunter.aif b/sound/direct_sound_samples/cries/haunter.aif deleted file mode 100644 index c9192cf9bcd1..000000000000 Binary files a/sound/direct_sound_samples/cries/haunter.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/haunter.wav b/sound/direct_sound_samples/cries/haunter.wav new file mode 100644 index 000000000000..e22b1cfc137e Binary files /dev/null and b/sound/direct_sound_samples/cries/haunter.wav differ diff --git a/sound/direct_sound_samples/cries/hawlucha.aif b/sound/direct_sound_samples/cries/hawlucha.aif deleted file mode 100644 index 0e4d9c78d15b..000000000000 Binary files a/sound/direct_sound_samples/cries/hawlucha.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hawlucha.wav b/sound/direct_sound_samples/cries/hawlucha.wav new file mode 100644 index 000000000000..629365ac41bb Binary files /dev/null and b/sound/direct_sound_samples/cries/hawlucha.wav differ diff --git a/sound/direct_sound_samples/cries/haxorus.aif b/sound/direct_sound_samples/cries/haxorus.aif deleted file mode 100644 index 8414951d49fe..000000000000 Binary files a/sound/direct_sound_samples/cries/haxorus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/haxorus.wav b/sound/direct_sound_samples/cries/haxorus.wav new file mode 100644 index 000000000000..7ebe8ba8d5d1 Binary files /dev/null and b/sound/direct_sound_samples/cries/haxorus.wav differ diff --git a/sound/direct_sound_samples/cries/heatmor.aif b/sound/direct_sound_samples/cries/heatmor.aif deleted file mode 100644 index 2a254ef0d96e..000000000000 Binary files a/sound/direct_sound_samples/cries/heatmor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/heatmor.wav b/sound/direct_sound_samples/cries/heatmor.wav new file mode 100644 index 000000000000..d340755c8aed Binary files /dev/null and b/sound/direct_sound_samples/cries/heatmor.wav differ diff --git a/sound/direct_sound_samples/cries/heatran.aif b/sound/direct_sound_samples/cries/heatran.aif deleted file mode 100644 index 56c373d8d862..000000000000 Binary files a/sound/direct_sound_samples/cries/heatran.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/heatran.wav b/sound/direct_sound_samples/cries/heatran.wav new file mode 100644 index 000000000000..f3388a0756a6 Binary files /dev/null and b/sound/direct_sound_samples/cries/heatran.wav differ diff --git a/sound/direct_sound_samples/cries/heliolisk.aif b/sound/direct_sound_samples/cries/heliolisk.aif deleted file mode 100644 index d87e7bfd2a94..000000000000 Binary files a/sound/direct_sound_samples/cries/heliolisk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/heliolisk.wav b/sound/direct_sound_samples/cries/heliolisk.wav new file mode 100644 index 000000000000..801d5968c362 Binary files /dev/null and b/sound/direct_sound_samples/cries/heliolisk.wav differ diff --git a/sound/direct_sound_samples/cries/helioptile.aif b/sound/direct_sound_samples/cries/helioptile.aif deleted file mode 100644 index aa1a9fb3a60d..000000000000 Binary files a/sound/direct_sound_samples/cries/helioptile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/helioptile.wav b/sound/direct_sound_samples/cries/helioptile.wav new file mode 100644 index 000000000000..39c1fc53276e Binary files /dev/null and b/sound/direct_sound_samples/cries/helioptile.wav differ diff --git a/sound/direct_sound_samples/cries/heracross.aif b/sound/direct_sound_samples/cries/heracross.aif deleted file mode 100644 index 1fe12ed52498..000000000000 Binary files a/sound/direct_sound_samples/cries/heracross.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/heracross.wav b/sound/direct_sound_samples/cries/heracross.wav new file mode 100644 index 000000000000..ed68648ba8d3 Binary files /dev/null and b/sound/direct_sound_samples/cries/heracross.wav differ diff --git a/sound/direct_sound_samples/cries/heracross_mega.aif b/sound/direct_sound_samples/cries/heracross_mega.aif deleted file mode 100644 index e1993473c20a..000000000000 Binary files a/sound/direct_sound_samples/cries/heracross_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/heracross_mega.wav b/sound/direct_sound_samples/cries/heracross_mega.wav new file mode 100644 index 000000000000..79d9a58797d4 Binary files /dev/null and b/sound/direct_sound_samples/cries/heracross_mega.wav differ diff --git a/sound/direct_sound_samples/cries/herdier.aif b/sound/direct_sound_samples/cries/herdier.aif deleted file mode 100644 index bc798f60b5c9..000000000000 Binary files a/sound/direct_sound_samples/cries/herdier.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/herdier.wav b/sound/direct_sound_samples/cries/herdier.wav new file mode 100644 index 000000000000..f272d2b01bc4 Binary files /dev/null and b/sound/direct_sound_samples/cries/herdier.wav differ diff --git a/sound/direct_sound_samples/cries/hippopotas.aif b/sound/direct_sound_samples/cries/hippopotas.aif deleted file mode 100644 index a8828805fe93..000000000000 Binary files a/sound/direct_sound_samples/cries/hippopotas.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hippopotas.wav b/sound/direct_sound_samples/cries/hippopotas.wav new file mode 100644 index 000000000000..c94da0f4398f Binary files /dev/null and b/sound/direct_sound_samples/cries/hippopotas.wav differ diff --git a/sound/direct_sound_samples/cries/hippowdon.aif b/sound/direct_sound_samples/cries/hippowdon.aif deleted file mode 100644 index 94649f3f2503..000000000000 Binary files a/sound/direct_sound_samples/cries/hippowdon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hippowdon.wav b/sound/direct_sound_samples/cries/hippowdon.wav new file mode 100644 index 000000000000..ee24375a552c Binary files /dev/null and b/sound/direct_sound_samples/cries/hippowdon.wav differ diff --git a/sound/direct_sound_samples/cries/hitmonchan.aif b/sound/direct_sound_samples/cries/hitmonchan.aif deleted file mode 100644 index 279370fc9c12..000000000000 Binary files a/sound/direct_sound_samples/cries/hitmonchan.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hitmonchan.wav b/sound/direct_sound_samples/cries/hitmonchan.wav new file mode 100644 index 000000000000..806d206d3580 Binary files /dev/null and b/sound/direct_sound_samples/cries/hitmonchan.wav differ diff --git a/sound/direct_sound_samples/cries/hitmonlee.aif b/sound/direct_sound_samples/cries/hitmonlee.aif deleted file mode 100644 index d388565df85f..000000000000 Binary files a/sound/direct_sound_samples/cries/hitmonlee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hitmonlee.wav b/sound/direct_sound_samples/cries/hitmonlee.wav new file mode 100644 index 000000000000..e40d852b998b Binary files /dev/null and b/sound/direct_sound_samples/cries/hitmonlee.wav differ diff --git a/sound/direct_sound_samples/cries/hitmontop.aif b/sound/direct_sound_samples/cries/hitmontop.aif deleted file mode 100644 index 237e0a6b0fcd..000000000000 Binary files a/sound/direct_sound_samples/cries/hitmontop.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hitmontop.wav b/sound/direct_sound_samples/cries/hitmontop.wav new file mode 100644 index 000000000000..652222dc6c5d Binary files /dev/null and b/sound/direct_sound_samples/cries/hitmontop.wav differ diff --git a/sound/direct_sound_samples/cries/ho_oh.aif b/sound/direct_sound_samples/cries/ho_oh.aif deleted file mode 100644 index 886d66813ab2..000000000000 Binary files a/sound/direct_sound_samples/cries/ho_oh.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ho_oh.wav b/sound/direct_sound_samples/cries/ho_oh.wav new file mode 100644 index 000000000000..acf881253231 Binary files /dev/null and b/sound/direct_sound_samples/cries/ho_oh.wav differ diff --git a/sound/direct_sound_samples/cries/honchkrow.aif b/sound/direct_sound_samples/cries/honchkrow.aif deleted file mode 100644 index ae3ceda67194..000000000000 Binary files a/sound/direct_sound_samples/cries/honchkrow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/honchkrow.wav b/sound/direct_sound_samples/cries/honchkrow.wav new file mode 100644 index 000000000000..6ebbb5e4291d Binary files /dev/null and b/sound/direct_sound_samples/cries/honchkrow.wav differ diff --git a/sound/direct_sound_samples/cries/honedge.aif b/sound/direct_sound_samples/cries/honedge.aif deleted file mode 100644 index e1204fddfecb..000000000000 Binary files a/sound/direct_sound_samples/cries/honedge.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/honedge.wav b/sound/direct_sound_samples/cries/honedge.wav new file mode 100644 index 000000000000..bf3136b3ad79 Binary files /dev/null and b/sound/direct_sound_samples/cries/honedge.wav differ diff --git a/sound/direct_sound_samples/cries/hoopa_confined.aif b/sound/direct_sound_samples/cries/hoopa_confined.aif deleted file mode 100644 index 2d91b4982afa..000000000000 Binary files a/sound/direct_sound_samples/cries/hoopa_confined.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hoopa_confined.wav b/sound/direct_sound_samples/cries/hoopa_confined.wav new file mode 100644 index 000000000000..d5f50a8b42cd Binary files /dev/null and b/sound/direct_sound_samples/cries/hoopa_confined.wav differ diff --git a/sound/direct_sound_samples/cries/hoopa_unbound.aif b/sound/direct_sound_samples/cries/hoopa_unbound.aif deleted file mode 100644 index 2b4d84015b03..000000000000 Binary files a/sound/direct_sound_samples/cries/hoopa_unbound.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hoopa_unbound.wav b/sound/direct_sound_samples/cries/hoopa_unbound.wav new file mode 100644 index 000000000000..319a519a8807 Binary files /dev/null and b/sound/direct_sound_samples/cries/hoopa_unbound.wav differ diff --git a/sound/direct_sound_samples/cries/hoothoot.aif b/sound/direct_sound_samples/cries/hoothoot.aif deleted file mode 100644 index 52bccc8e9103..000000000000 Binary files a/sound/direct_sound_samples/cries/hoothoot.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hoothoot.wav b/sound/direct_sound_samples/cries/hoothoot.wav new file mode 100644 index 000000000000..e7ca2f5780a6 Binary files /dev/null and b/sound/direct_sound_samples/cries/hoothoot.wav differ diff --git a/sound/direct_sound_samples/cries/hoppip.aif b/sound/direct_sound_samples/cries/hoppip.aif deleted file mode 100644 index e715705f0899..000000000000 Binary files a/sound/direct_sound_samples/cries/hoppip.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hoppip.wav b/sound/direct_sound_samples/cries/hoppip.wav new file mode 100644 index 000000000000..ab14fdaec729 Binary files /dev/null and b/sound/direct_sound_samples/cries/hoppip.wav differ diff --git a/sound/direct_sound_samples/cries/horsea.aif b/sound/direct_sound_samples/cries/horsea.aif deleted file mode 100644 index 12801a2076ed..000000000000 Binary files a/sound/direct_sound_samples/cries/horsea.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/horsea.wav b/sound/direct_sound_samples/cries/horsea.wav new file mode 100644 index 000000000000..ab67381edd35 Binary files /dev/null and b/sound/direct_sound_samples/cries/horsea.wav differ diff --git a/sound/direct_sound_samples/cries/houndoom.aif b/sound/direct_sound_samples/cries/houndoom.aif deleted file mode 100644 index 09c6e4957f48..000000000000 Binary files a/sound/direct_sound_samples/cries/houndoom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/houndoom.wav b/sound/direct_sound_samples/cries/houndoom.wav new file mode 100644 index 000000000000..a34e4cda2b44 Binary files /dev/null and b/sound/direct_sound_samples/cries/houndoom.wav differ diff --git a/sound/direct_sound_samples/cries/houndoom_mega.aif b/sound/direct_sound_samples/cries/houndoom_mega.aif deleted file mode 100644 index 102f822cc69f..000000000000 Binary files a/sound/direct_sound_samples/cries/houndoom_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/houndoom_mega.wav b/sound/direct_sound_samples/cries/houndoom_mega.wav new file mode 100644 index 000000000000..3b50f949201f Binary files /dev/null and b/sound/direct_sound_samples/cries/houndoom_mega.wav differ diff --git a/sound/direct_sound_samples/cries/houndour.aif b/sound/direct_sound_samples/cries/houndour.aif deleted file mode 100644 index 352d8fd897c6..000000000000 Binary files a/sound/direct_sound_samples/cries/houndour.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/houndour.wav b/sound/direct_sound_samples/cries/houndour.wav new file mode 100644 index 000000000000..51310524a880 Binary files /dev/null and b/sound/direct_sound_samples/cries/houndour.wav differ diff --git a/sound/direct_sound_samples/cries/houndstone.aif b/sound/direct_sound_samples/cries/houndstone.aif deleted file mode 100644 index 99e699b7bab6..000000000000 Binary files a/sound/direct_sound_samples/cries/houndstone.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/houndstone.wav b/sound/direct_sound_samples/cries/houndstone.wav new file mode 100644 index 000000000000..d70441d7bdab Binary files /dev/null and b/sound/direct_sound_samples/cries/houndstone.wav differ diff --git a/sound/direct_sound_samples/cries/huntail.aif b/sound/direct_sound_samples/cries/huntail.aif deleted file mode 100644 index b520d2b7a8c3..000000000000 Binary files a/sound/direct_sound_samples/cries/huntail.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/huntail.wav b/sound/direct_sound_samples/cries/huntail.wav new file mode 100644 index 000000000000..b2e3f99853a7 Binary files /dev/null and b/sound/direct_sound_samples/cries/huntail.wav differ diff --git a/sound/direct_sound_samples/cries/hydrapple.aif b/sound/direct_sound_samples/cries/hydrapple.aif deleted file mode 100644 index 45f5fd9ca019..000000000000 Binary files a/sound/direct_sound_samples/cries/hydrapple.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hydrapple.wav b/sound/direct_sound_samples/cries/hydrapple.wav new file mode 100644 index 000000000000..e3da4677a810 Binary files /dev/null and b/sound/direct_sound_samples/cries/hydrapple.wav differ diff --git a/sound/direct_sound_samples/cries/hydreigon.aif b/sound/direct_sound_samples/cries/hydreigon.aif deleted file mode 100644 index 8227c6d21f63..000000000000 Binary files a/sound/direct_sound_samples/cries/hydreigon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hydreigon.wav b/sound/direct_sound_samples/cries/hydreigon.wav new file mode 100644 index 000000000000..ce816dcc5810 Binary files /dev/null and b/sound/direct_sound_samples/cries/hydreigon.wav differ diff --git a/sound/direct_sound_samples/cries/hypno.aif b/sound/direct_sound_samples/cries/hypno.aif deleted file mode 100644 index 7c4bde193683..000000000000 Binary files a/sound/direct_sound_samples/cries/hypno.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/hypno.wav b/sound/direct_sound_samples/cries/hypno.wav new file mode 100644 index 000000000000..4369110c2cc6 Binary files /dev/null and b/sound/direct_sound_samples/cries/hypno.wav differ diff --git a/sound/direct_sound_samples/cries/igglybuff.aif b/sound/direct_sound_samples/cries/igglybuff.aif deleted file mode 100644 index 0f2db1e52c6c..000000000000 Binary files a/sound/direct_sound_samples/cries/igglybuff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/igglybuff.wav b/sound/direct_sound_samples/cries/igglybuff.wav new file mode 100644 index 000000000000..efec9bf4c4ea Binary files /dev/null and b/sound/direct_sound_samples/cries/igglybuff.wav differ diff --git a/sound/direct_sound_samples/cries/illumise.aif b/sound/direct_sound_samples/cries/illumise.aif deleted file mode 100644 index 26807295bd8a..000000000000 Binary files a/sound/direct_sound_samples/cries/illumise.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/illumise.wav b/sound/direct_sound_samples/cries/illumise.wav new file mode 100644 index 000000000000..6570492f7972 Binary files /dev/null and b/sound/direct_sound_samples/cries/illumise.wav differ diff --git a/sound/direct_sound_samples/cries/impidimp.aif b/sound/direct_sound_samples/cries/impidimp.aif deleted file mode 100644 index 0abad6cb1ea3..000000000000 Binary files a/sound/direct_sound_samples/cries/impidimp.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/impidimp.wav b/sound/direct_sound_samples/cries/impidimp.wav new file mode 100644 index 000000000000..1bc578a9b833 Binary files /dev/null and b/sound/direct_sound_samples/cries/impidimp.wav differ diff --git a/sound/direct_sound_samples/cries/incineroar.aif b/sound/direct_sound_samples/cries/incineroar.aif deleted file mode 100644 index b7f3e2201efb..000000000000 Binary files a/sound/direct_sound_samples/cries/incineroar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/incineroar.wav b/sound/direct_sound_samples/cries/incineroar.wav new file mode 100644 index 000000000000..f4b9bcd59899 Binary files /dev/null and b/sound/direct_sound_samples/cries/incineroar.wav differ diff --git a/sound/direct_sound_samples/cries/indeedee_female.aif b/sound/direct_sound_samples/cries/indeedee_female.aif deleted file mode 100644 index b5e5fe454739..000000000000 Binary files a/sound/direct_sound_samples/cries/indeedee_female.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/indeedee_female.wav b/sound/direct_sound_samples/cries/indeedee_female.wav new file mode 100644 index 000000000000..f7b563c1d111 Binary files /dev/null and b/sound/direct_sound_samples/cries/indeedee_female.wav differ diff --git a/sound/direct_sound_samples/cries/indeedee_male.aif b/sound/direct_sound_samples/cries/indeedee_male.aif deleted file mode 100644 index b5d950391e94..000000000000 Binary files a/sound/direct_sound_samples/cries/indeedee_male.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/indeedee_male.wav b/sound/direct_sound_samples/cries/indeedee_male.wav new file mode 100644 index 000000000000..554ec96593fc Binary files /dev/null and b/sound/direct_sound_samples/cries/indeedee_male.wav differ diff --git a/sound/direct_sound_samples/cries/infernape.aif b/sound/direct_sound_samples/cries/infernape.aif deleted file mode 100644 index d4570a8f3a60..000000000000 Binary files a/sound/direct_sound_samples/cries/infernape.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/infernape.wav b/sound/direct_sound_samples/cries/infernape.wav new file mode 100644 index 000000000000..71e4af161dfc Binary files /dev/null and b/sound/direct_sound_samples/cries/infernape.wav differ diff --git a/sound/direct_sound_samples/cries/inkay.aif b/sound/direct_sound_samples/cries/inkay.aif deleted file mode 100644 index 04753026e065..000000000000 Binary files a/sound/direct_sound_samples/cries/inkay.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/inkay.wav b/sound/direct_sound_samples/cries/inkay.wav new file mode 100644 index 000000000000..dace2b5c2487 Binary files /dev/null and b/sound/direct_sound_samples/cries/inkay.wav differ diff --git a/sound/direct_sound_samples/cries/inteleon.aif b/sound/direct_sound_samples/cries/inteleon.aif deleted file mode 100644 index 8153b02889b4..000000000000 Binary files a/sound/direct_sound_samples/cries/inteleon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/inteleon.wav b/sound/direct_sound_samples/cries/inteleon.wav new file mode 100644 index 000000000000..8bef61a449db Binary files /dev/null and b/sound/direct_sound_samples/cries/inteleon.wav differ diff --git a/sound/direct_sound_samples/cries/iron_boulder.aif b/sound/direct_sound_samples/cries/iron_boulder.aif deleted file mode 100644 index 0ffdefdffb35..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_boulder.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_boulder.wav b/sound/direct_sound_samples/cries/iron_boulder.wav new file mode 100644 index 000000000000..df02d73d5c2f Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_boulder.wav differ diff --git a/sound/direct_sound_samples/cries/iron_bundle.aif b/sound/direct_sound_samples/cries/iron_bundle.aif deleted file mode 100644 index 51c9e0b60cee..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_bundle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_bundle.wav b/sound/direct_sound_samples/cries/iron_bundle.wav new file mode 100644 index 000000000000..796ee101fe62 Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_bundle.wav differ diff --git a/sound/direct_sound_samples/cries/iron_crown.aif b/sound/direct_sound_samples/cries/iron_crown.aif deleted file mode 100644 index 8c310455dcd2..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_crown.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_crown.wav b/sound/direct_sound_samples/cries/iron_crown.wav new file mode 100644 index 000000000000..984f1c5a7901 Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_crown.wav differ diff --git a/sound/direct_sound_samples/cries/iron_hands.aif b/sound/direct_sound_samples/cries/iron_hands.aif deleted file mode 100644 index 621e4fdc19fb..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_hands.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_hands.wav b/sound/direct_sound_samples/cries/iron_hands.wav new file mode 100644 index 000000000000..c5b033226393 Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_hands.wav differ diff --git a/sound/direct_sound_samples/cries/iron_jugulis.aif b/sound/direct_sound_samples/cries/iron_jugulis.aif deleted file mode 100644 index 8409934f8935..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_jugulis.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_jugulis.wav b/sound/direct_sound_samples/cries/iron_jugulis.wav new file mode 100644 index 000000000000..a6e883a57b13 Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_jugulis.wav differ diff --git a/sound/direct_sound_samples/cries/iron_leaves.aif b/sound/direct_sound_samples/cries/iron_leaves.aif deleted file mode 100644 index 45e0a420e2d5..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_leaves.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_leaves.wav b/sound/direct_sound_samples/cries/iron_leaves.wav new file mode 100644 index 000000000000..b22f193e99b4 Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_leaves.wav differ diff --git a/sound/direct_sound_samples/cries/iron_moth.aif b/sound/direct_sound_samples/cries/iron_moth.aif deleted file mode 100644 index fb90d304815f..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_moth.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_moth.wav b/sound/direct_sound_samples/cries/iron_moth.wav new file mode 100644 index 000000000000..297be2d0b9be Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_moth.wav differ diff --git a/sound/direct_sound_samples/cries/iron_thorns.aif b/sound/direct_sound_samples/cries/iron_thorns.aif deleted file mode 100644 index ac88055c6d39..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_thorns.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_thorns.wav b/sound/direct_sound_samples/cries/iron_thorns.wav new file mode 100644 index 000000000000..b04462c057d0 Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_thorns.wav differ diff --git a/sound/direct_sound_samples/cries/iron_treads.aif b/sound/direct_sound_samples/cries/iron_treads.aif deleted file mode 100644 index e3b047171179..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_treads.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_treads.wav b/sound/direct_sound_samples/cries/iron_treads.wav new file mode 100644 index 000000000000..51f3143b5bc7 Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_treads.wav differ diff --git a/sound/direct_sound_samples/cries/iron_valiant.aif b/sound/direct_sound_samples/cries/iron_valiant.aif deleted file mode 100644 index 04220e9f627f..000000000000 Binary files a/sound/direct_sound_samples/cries/iron_valiant.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/iron_valiant.wav b/sound/direct_sound_samples/cries/iron_valiant.wav new file mode 100644 index 000000000000..bf110f88a373 Binary files /dev/null and b/sound/direct_sound_samples/cries/iron_valiant.wav differ diff --git a/sound/direct_sound_samples/cries/ivysaur.aif b/sound/direct_sound_samples/cries/ivysaur.aif deleted file mode 100644 index 40ee462805e9..000000000000 Binary files a/sound/direct_sound_samples/cries/ivysaur.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ivysaur.wav b/sound/direct_sound_samples/cries/ivysaur.wav new file mode 100644 index 000000000000..07d10c0e8d53 Binary files /dev/null and b/sound/direct_sound_samples/cries/ivysaur.wav differ diff --git a/sound/direct_sound_samples/cries/jangmo_o.aif b/sound/direct_sound_samples/cries/jangmo_o.aif deleted file mode 100644 index 29f8f86b51ce..000000000000 Binary files a/sound/direct_sound_samples/cries/jangmo_o.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/jangmo_o.wav b/sound/direct_sound_samples/cries/jangmo_o.wav new file mode 100644 index 000000000000..96e08b0c9644 Binary files /dev/null and b/sound/direct_sound_samples/cries/jangmo_o.wav differ diff --git a/sound/direct_sound_samples/cries/jellicent.aif b/sound/direct_sound_samples/cries/jellicent.aif deleted file mode 100644 index 33f6cf5aeabe..000000000000 Binary files a/sound/direct_sound_samples/cries/jellicent.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/jellicent.wav b/sound/direct_sound_samples/cries/jellicent.wav new file mode 100644 index 000000000000..221c78786452 Binary files /dev/null and b/sound/direct_sound_samples/cries/jellicent.wav differ diff --git a/sound/direct_sound_samples/cries/jigglypuff.aif b/sound/direct_sound_samples/cries/jigglypuff.aif deleted file mode 100644 index 09249f6dd65d..000000000000 Binary files a/sound/direct_sound_samples/cries/jigglypuff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/jigglypuff.wav b/sound/direct_sound_samples/cries/jigglypuff.wav new file mode 100644 index 000000000000..d3e925fe940b Binary files /dev/null and b/sound/direct_sound_samples/cries/jigglypuff.wav differ diff --git a/sound/direct_sound_samples/cries/jirachi.aif b/sound/direct_sound_samples/cries/jirachi.aif deleted file mode 100644 index 0da759794c88..000000000000 Binary files a/sound/direct_sound_samples/cries/jirachi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/jirachi.wav b/sound/direct_sound_samples/cries/jirachi.wav new file mode 100644 index 000000000000..43850cbaa01e Binary files /dev/null and b/sound/direct_sound_samples/cries/jirachi.wav differ diff --git a/sound/direct_sound_samples/cries/jolteon.aif b/sound/direct_sound_samples/cries/jolteon.aif deleted file mode 100644 index acd96714aeb2..000000000000 Binary files a/sound/direct_sound_samples/cries/jolteon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/jolteon.wav b/sound/direct_sound_samples/cries/jolteon.wav new file mode 100644 index 000000000000..8c5f8bea4c62 Binary files /dev/null and b/sound/direct_sound_samples/cries/jolteon.wav differ diff --git a/sound/direct_sound_samples/cries/joltik.aif b/sound/direct_sound_samples/cries/joltik.aif deleted file mode 100644 index a67354d74ce5..000000000000 Binary files a/sound/direct_sound_samples/cries/joltik.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/joltik.wav b/sound/direct_sound_samples/cries/joltik.wav new file mode 100644 index 000000000000..4fa360d6b6b2 Binary files /dev/null and b/sound/direct_sound_samples/cries/joltik.wav differ diff --git a/sound/direct_sound_samples/cries/jumpluff.aif b/sound/direct_sound_samples/cries/jumpluff.aif deleted file mode 100644 index 2b93dad55868..000000000000 Binary files a/sound/direct_sound_samples/cries/jumpluff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/jumpluff.wav b/sound/direct_sound_samples/cries/jumpluff.wav new file mode 100644 index 000000000000..cce951b1f72d Binary files /dev/null and b/sound/direct_sound_samples/cries/jumpluff.wav differ diff --git a/sound/direct_sound_samples/cries/jynx.aif b/sound/direct_sound_samples/cries/jynx.aif deleted file mode 100644 index cbcd7ee99de6..000000000000 Binary files a/sound/direct_sound_samples/cries/jynx.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/jynx.wav b/sound/direct_sound_samples/cries/jynx.wav new file mode 100644 index 000000000000..faacb1e95770 Binary files /dev/null and b/sound/direct_sound_samples/cries/jynx.wav differ diff --git a/sound/direct_sound_samples/cries/kabuto.aif b/sound/direct_sound_samples/cries/kabuto.aif deleted file mode 100644 index 2ed73716cbf5..000000000000 Binary files a/sound/direct_sound_samples/cries/kabuto.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kabuto.wav b/sound/direct_sound_samples/cries/kabuto.wav new file mode 100644 index 000000000000..448b17891446 Binary files /dev/null and b/sound/direct_sound_samples/cries/kabuto.wav differ diff --git a/sound/direct_sound_samples/cries/kabutops.aif b/sound/direct_sound_samples/cries/kabutops.aif deleted file mode 100644 index 79a4b304a821..000000000000 Binary files a/sound/direct_sound_samples/cries/kabutops.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kabutops.wav b/sound/direct_sound_samples/cries/kabutops.wav new file mode 100644 index 000000000000..0c7b74fea394 Binary files /dev/null and b/sound/direct_sound_samples/cries/kabutops.wav differ diff --git a/sound/direct_sound_samples/cries/kadabra.aif b/sound/direct_sound_samples/cries/kadabra.aif deleted file mode 100644 index 3f03ee03f0f1..000000000000 Binary files a/sound/direct_sound_samples/cries/kadabra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kadabra.wav b/sound/direct_sound_samples/cries/kadabra.wav new file mode 100644 index 000000000000..d7030b27a27a Binary files /dev/null and b/sound/direct_sound_samples/cries/kadabra.wav differ diff --git a/sound/direct_sound_samples/cries/kakuna.aif b/sound/direct_sound_samples/cries/kakuna.aif deleted file mode 100644 index 8331b0b0e580..000000000000 Binary files a/sound/direct_sound_samples/cries/kakuna.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kakuna.wav b/sound/direct_sound_samples/cries/kakuna.wav new file mode 100644 index 000000000000..f147428e3858 Binary files /dev/null and b/sound/direct_sound_samples/cries/kakuna.wav differ diff --git a/sound/direct_sound_samples/cries/kangaskhan.aif b/sound/direct_sound_samples/cries/kangaskhan.aif deleted file mode 100644 index 26a8ac43a404..000000000000 Binary files a/sound/direct_sound_samples/cries/kangaskhan.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kangaskhan.wav b/sound/direct_sound_samples/cries/kangaskhan.wav new file mode 100644 index 000000000000..eaf724462739 Binary files /dev/null and b/sound/direct_sound_samples/cries/kangaskhan.wav differ diff --git a/sound/direct_sound_samples/cries/kangaskhan_mega.aif b/sound/direct_sound_samples/cries/kangaskhan_mega.aif deleted file mode 100644 index 417cb04f49e5..000000000000 Binary files a/sound/direct_sound_samples/cries/kangaskhan_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kangaskhan_mega.wav b/sound/direct_sound_samples/cries/kangaskhan_mega.wav new file mode 100644 index 000000000000..5c967473812d Binary files /dev/null and b/sound/direct_sound_samples/cries/kangaskhan_mega.wav differ diff --git a/sound/direct_sound_samples/cries/karrablast.aif b/sound/direct_sound_samples/cries/karrablast.aif deleted file mode 100644 index 7b5a2c3948a6..000000000000 Binary files a/sound/direct_sound_samples/cries/karrablast.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/karrablast.wav b/sound/direct_sound_samples/cries/karrablast.wav new file mode 100644 index 000000000000..b77a4399dee2 Binary files /dev/null and b/sound/direct_sound_samples/cries/karrablast.wav differ diff --git a/sound/direct_sound_samples/cries/kartana.aif b/sound/direct_sound_samples/cries/kartana.aif deleted file mode 100644 index b43fa40d7833..000000000000 Binary files a/sound/direct_sound_samples/cries/kartana.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kartana.wav b/sound/direct_sound_samples/cries/kartana.wav new file mode 100644 index 000000000000..af53ba2608d4 Binary files /dev/null and b/sound/direct_sound_samples/cries/kartana.wav differ diff --git a/sound/direct_sound_samples/cries/kecleon.aif b/sound/direct_sound_samples/cries/kecleon.aif deleted file mode 100644 index 51dae2935044..000000000000 Binary files a/sound/direct_sound_samples/cries/kecleon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kecleon.wav b/sound/direct_sound_samples/cries/kecleon.wav new file mode 100644 index 000000000000..96ab74ff2b18 Binary files /dev/null and b/sound/direct_sound_samples/cries/kecleon.wav differ diff --git a/sound/direct_sound_samples/cries/keldeo.aif b/sound/direct_sound_samples/cries/keldeo.aif deleted file mode 100644 index 6f23ad088557..000000000000 Binary files a/sound/direct_sound_samples/cries/keldeo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/keldeo.wav b/sound/direct_sound_samples/cries/keldeo.wav new file mode 100644 index 000000000000..e1733f166027 Binary files /dev/null and b/sound/direct_sound_samples/cries/keldeo.wav differ diff --git a/sound/direct_sound_samples/cries/kilowattrel.aif b/sound/direct_sound_samples/cries/kilowattrel.aif deleted file mode 100644 index d54d4a43b5a3..000000000000 Binary files a/sound/direct_sound_samples/cries/kilowattrel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kilowattrel.wav b/sound/direct_sound_samples/cries/kilowattrel.wav new file mode 100644 index 000000000000..b1b27b8ebe79 Binary files /dev/null and b/sound/direct_sound_samples/cries/kilowattrel.wav differ diff --git a/sound/direct_sound_samples/cries/kingambit.aif b/sound/direct_sound_samples/cries/kingambit.aif deleted file mode 100644 index 38a3d1b6cc6f..000000000000 Binary files a/sound/direct_sound_samples/cries/kingambit.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kingambit.wav b/sound/direct_sound_samples/cries/kingambit.wav new file mode 100644 index 000000000000..0770f23f5a5f Binary files /dev/null and b/sound/direct_sound_samples/cries/kingambit.wav differ diff --git a/sound/direct_sound_samples/cries/kingdra.aif b/sound/direct_sound_samples/cries/kingdra.aif deleted file mode 100644 index a9cc1d9fe489..000000000000 Binary files a/sound/direct_sound_samples/cries/kingdra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kingdra.wav b/sound/direct_sound_samples/cries/kingdra.wav new file mode 100644 index 000000000000..2a47d1479d02 Binary files /dev/null and b/sound/direct_sound_samples/cries/kingdra.wav differ diff --git a/sound/direct_sound_samples/cries/kingler.aif b/sound/direct_sound_samples/cries/kingler.aif deleted file mode 100644 index b8368297313b..000000000000 Binary files a/sound/direct_sound_samples/cries/kingler.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kingler.wav b/sound/direct_sound_samples/cries/kingler.wav new file mode 100644 index 000000000000..62418456d010 Binary files /dev/null and b/sound/direct_sound_samples/cries/kingler.wav differ diff --git a/sound/direct_sound_samples/cries/kirlia.aif b/sound/direct_sound_samples/cries/kirlia.aif deleted file mode 100644 index 0beaebf16f38..000000000000 Binary files a/sound/direct_sound_samples/cries/kirlia.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kirlia.wav b/sound/direct_sound_samples/cries/kirlia.wav new file mode 100644 index 000000000000..c7dd3078c8f5 Binary files /dev/null and b/sound/direct_sound_samples/cries/kirlia.wav differ diff --git a/sound/direct_sound_samples/cries/klang.aif b/sound/direct_sound_samples/cries/klang.aif deleted file mode 100644 index 13b28861f4ae..000000000000 Binary files a/sound/direct_sound_samples/cries/klang.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/klang.wav b/sound/direct_sound_samples/cries/klang.wav new file mode 100644 index 000000000000..2524393b24ad Binary files /dev/null and b/sound/direct_sound_samples/cries/klang.wav differ diff --git a/sound/direct_sound_samples/cries/klawf.aif b/sound/direct_sound_samples/cries/klawf.aif deleted file mode 100644 index 8359e13b1786..000000000000 Binary files a/sound/direct_sound_samples/cries/klawf.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/klawf.wav b/sound/direct_sound_samples/cries/klawf.wav new file mode 100644 index 000000000000..8d557afc68f3 Binary files /dev/null and b/sound/direct_sound_samples/cries/klawf.wav differ diff --git a/sound/direct_sound_samples/cries/kleavor.aif b/sound/direct_sound_samples/cries/kleavor.aif deleted file mode 100644 index c84a31cf2ff4..000000000000 Binary files a/sound/direct_sound_samples/cries/kleavor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kleavor.wav b/sound/direct_sound_samples/cries/kleavor.wav new file mode 100644 index 000000000000..ac60149c3f51 Binary files /dev/null and b/sound/direct_sound_samples/cries/kleavor.wav differ diff --git a/sound/direct_sound_samples/cries/klink.aif b/sound/direct_sound_samples/cries/klink.aif deleted file mode 100644 index 0bd6b65f7461..000000000000 Binary files a/sound/direct_sound_samples/cries/klink.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/klink.wav b/sound/direct_sound_samples/cries/klink.wav new file mode 100644 index 000000000000..0233d44ce2bc Binary files /dev/null and b/sound/direct_sound_samples/cries/klink.wav differ diff --git a/sound/direct_sound_samples/cries/klinklang.aif b/sound/direct_sound_samples/cries/klinklang.aif deleted file mode 100644 index 35117bf30a5b..000000000000 Binary files a/sound/direct_sound_samples/cries/klinklang.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/klinklang.wav b/sound/direct_sound_samples/cries/klinklang.wav new file mode 100644 index 000000000000..6cba25f48c2c Binary files /dev/null and b/sound/direct_sound_samples/cries/klinklang.wav differ diff --git a/sound/direct_sound_samples/cries/koffing.aif b/sound/direct_sound_samples/cries/koffing.aif deleted file mode 100644 index 50d5bc978bb5..000000000000 Binary files a/sound/direct_sound_samples/cries/koffing.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/koffing.wav b/sound/direct_sound_samples/cries/koffing.wav new file mode 100644 index 000000000000..afa520c03e3c Binary files /dev/null and b/sound/direct_sound_samples/cries/koffing.wav differ diff --git a/sound/direct_sound_samples/cries/komala.aif b/sound/direct_sound_samples/cries/komala.aif deleted file mode 100644 index e084c9a7c4e0..000000000000 Binary files a/sound/direct_sound_samples/cries/komala.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/komala.wav b/sound/direct_sound_samples/cries/komala.wav new file mode 100644 index 000000000000..ce1077a9acb0 Binary files /dev/null and b/sound/direct_sound_samples/cries/komala.wav differ diff --git a/sound/direct_sound_samples/cries/kommo_o.aif b/sound/direct_sound_samples/cries/kommo_o.aif deleted file mode 100644 index 057153e907df..000000000000 Binary files a/sound/direct_sound_samples/cries/kommo_o.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kommo_o.wav b/sound/direct_sound_samples/cries/kommo_o.wav new file mode 100644 index 000000000000..0782ecd776b4 Binary files /dev/null and b/sound/direct_sound_samples/cries/kommo_o.wav differ diff --git a/sound/direct_sound_samples/cries/koraidon.aif b/sound/direct_sound_samples/cries/koraidon.aif deleted file mode 100644 index 6ab93ad73ec9..000000000000 Binary files a/sound/direct_sound_samples/cries/koraidon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/koraidon.wav b/sound/direct_sound_samples/cries/koraidon.wav new file mode 100644 index 000000000000..cf5de8aff38c Binary files /dev/null and b/sound/direct_sound_samples/cries/koraidon.wav differ diff --git a/sound/direct_sound_samples/cries/krabby.aif b/sound/direct_sound_samples/cries/krabby.aif deleted file mode 100644 index 33b8ea294b6b..000000000000 Binary files a/sound/direct_sound_samples/cries/krabby.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/krabby.wav b/sound/direct_sound_samples/cries/krabby.wav new file mode 100644 index 000000000000..0072ea777aa9 Binary files /dev/null and b/sound/direct_sound_samples/cries/krabby.wav differ diff --git a/sound/direct_sound_samples/cries/kricketot.aif b/sound/direct_sound_samples/cries/kricketot.aif deleted file mode 100644 index 7b301cc485a0..000000000000 Binary files a/sound/direct_sound_samples/cries/kricketot.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kricketot.wav b/sound/direct_sound_samples/cries/kricketot.wav new file mode 100644 index 000000000000..126bbecee8e9 Binary files /dev/null and b/sound/direct_sound_samples/cries/kricketot.wav differ diff --git a/sound/direct_sound_samples/cries/kricketune.aif b/sound/direct_sound_samples/cries/kricketune.aif deleted file mode 100644 index b3ebcbf8ae25..000000000000 Binary files a/sound/direct_sound_samples/cries/kricketune.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kricketune.wav b/sound/direct_sound_samples/cries/kricketune.wav new file mode 100644 index 000000000000..832069528a87 Binary files /dev/null and b/sound/direct_sound_samples/cries/kricketune.wav differ diff --git a/sound/direct_sound_samples/cries/krokorok.aif b/sound/direct_sound_samples/cries/krokorok.aif deleted file mode 100644 index 39765627ece1..000000000000 Binary files a/sound/direct_sound_samples/cries/krokorok.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/krokorok.wav b/sound/direct_sound_samples/cries/krokorok.wav new file mode 100644 index 000000000000..cf2f75dc8ea3 Binary files /dev/null and b/sound/direct_sound_samples/cries/krokorok.wav differ diff --git a/sound/direct_sound_samples/cries/krookodile.aif b/sound/direct_sound_samples/cries/krookodile.aif deleted file mode 100644 index 4b532b3bd1e2..000000000000 Binary files a/sound/direct_sound_samples/cries/krookodile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/krookodile.wav b/sound/direct_sound_samples/cries/krookodile.wav new file mode 100644 index 000000000000..0abdce9be762 Binary files /dev/null and b/sound/direct_sound_samples/cries/krookodile.wav differ diff --git a/sound/direct_sound_samples/cries/kubfu.aif b/sound/direct_sound_samples/cries/kubfu.aif deleted file mode 100644 index dd45534b88d7..000000000000 Binary files a/sound/direct_sound_samples/cries/kubfu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kubfu.wav b/sound/direct_sound_samples/cries/kubfu.wav new file mode 100644 index 000000000000..899b03f7a9ec Binary files /dev/null and b/sound/direct_sound_samples/cries/kubfu.wav differ diff --git a/sound/direct_sound_samples/cries/kyogre.aif b/sound/direct_sound_samples/cries/kyogre.aif deleted file mode 100644 index c20d2cf3240e..000000000000 Binary files a/sound/direct_sound_samples/cries/kyogre.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kyogre.wav b/sound/direct_sound_samples/cries/kyogre.wav new file mode 100644 index 000000000000..00db984c665e Binary files /dev/null and b/sound/direct_sound_samples/cries/kyogre.wav differ diff --git a/sound/direct_sound_samples/cries/kyogre_primal.aif b/sound/direct_sound_samples/cries/kyogre_primal.aif deleted file mode 100644 index b7999915b34a..000000000000 Binary files a/sound/direct_sound_samples/cries/kyogre_primal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kyogre_primal.wav b/sound/direct_sound_samples/cries/kyogre_primal.wav new file mode 100644 index 000000000000..1688dad88b7b Binary files /dev/null and b/sound/direct_sound_samples/cries/kyogre_primal.wav differ diff --git a/sound/direct_sound_samples/cries/kyurem.aif b/sound/direct_sound_samples/cries/kyurem.aif deleted file mode 100644 index 0345a0c17597..000000000000 Binary files a/sound/direct_sound_samples/cries/kyurem.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kyurem.wav b/sound/direct_sound_samples/cries/kyurem.wav new file mode 100644 index 000000000000..d33514448ee6 Binary files /dev/null and b/sound/direct_sound_samples/cries/kyurem.wav differ diff --git a/sound/direct_sound_samples/cries/kyurem_black.aif b/sound/direct_sound_samples/cries/kyurem_black.aif deleted file mode 100644 index 9b5320bd63f2..000000000000 Binary files a/sound/direct_sound_samples/cries/kyurem_black.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kyurem_black.wav b/sound/direct_sound_samples/cries/kyurem_black.wav new file mode 100644 index 000000000000..385bd7824f0b Binary files /dev/null and b/sound/direct_sound_samples/cries/kyurem_black.wav differ diff --git a/sound/direct_sound_samples/cries/kyurem_white.aif b/sound/direct_sound_samples/cries/kyurem_white.aif deleted file mode 100644 index 1e6f0283ec74..000000000000 Binary files a/sound/direct_sound_samples/cries/kyurem_white.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/kyurem_white.wav b/sound/direct_sound_samples/cries/kyurem_white.wav new file mode 100644 index 000000000000..7a4b8dbd7cc4 Binary files /dev/null and b/sound/direct_sound_samples/cries/kyurem_white.wav differ diff --git a/sound/direct_sound_samples/cries/lairon.aif b/sound/direct_sound_samples/cries/lairon.aif deleted file mode 100644 index 44bc57df17be..000000000000 Binary files a/sound/direct_sound_samples/cries/lairon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lairon.wav b/sound/direct_sound_samples/cries/lairon.wav new file mode 100644 index 000000000000..574ffac74564 Binary files /dev/null and b/sound/direct_sound_samples/cries/lairon.wav differ diff --git a/sound/direct_sound_samples/cries/lampent.aif b/sound/direct_sound_samples/cries/lampent.aif deleted file mode 100644 index 9d5a8a3c0196..000000000000 Binary files a/sound/direct_sound_samples/cries/lampent.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lampent.wav b/sound/direct_sound_samples/cries/lampent.wav new file mode 100644 index 000000000000..e92380e5ad32 Binary files /dev/null and b/sound/direct_sound_samples/cries/lampent.wav differ diff --git a/sound/direct_sound_samples/cries/landorus_incarnate.aif b/sound/direct_sound_samples/cries/landorus_incarnate.aif deleted file mode 100644 index 03111963d7e2..000000000000 Binary files a/sound/direct_sound_samples/cries/landorus_incarnate.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/landorus_incarnate.wav b/sound/direct_sound_samples/cries/landorus_incarnate.wav new file mode 100644 index 000000000000..82c79ea48f24 Binary files /dev/null and b/sound/direct_sound_samples/cries/landorus_incarnate.wav differ diff --git a/sound/direct_sound_samples/cries/landorus_therian.aif b/sound/direct_sound_samples/cries/landorus_therian.aif deleted file mode 100644 index 6a641cf6f4ba..000000000000 Binary files a/sound/direct_sound_samples/cries/landorus_therian.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/landorus_therian.wav b/sound/direct_sound_samples/cries/landorus_therian.wav new file mode 100644 index 000000000000..246f4b259557 Binary files /dev/null and b/sound/direct_sound_samples/cries/landorus_therian.wav differ diff --git a/sound/direct_sound_samples/cries/lanturn.aif b/sound/direct_sound_samples/cries/lanturn.aif deleted file mode 100644 index e88570f68dfa..000000000000 Binary files a/sound/direct_sound_samples/cries/lanturn.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lanturn.wav b/sound/direct_sound_samples/cries/lanturn.wav new file mode 100644 index 000000000000..6d8b21dd99e3 Binary files /dev/null and b/sound/direct_sound_samples/cries/lanturn.wav differ diff --git a/sound/direct_sound_samples/cries/lapras.aif b/sound/direct_sound_samples/cries/lapras.aif deleted file mode 100644 index 9bc9023730e1..000000000000 Binary files a/sound/direct_sound_samples/cries/lapras.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lapras.wav b/sound/direct_sound_samples/cries/lapras.wav new file mode 100644 index 000000000000..d79819a971e8 Binary files /dev/null and b/sound/direct_sound_samples/cries/lapras.wav differ diff --git a/sound/direct_sound_samples/cries/larvesta.aif b/sound/direct_sound_samples/cries/larvesta.aif deleted file mode 100644 index a025df32bf53..000000000000 Binary files a/sound/direct_sound_samples/cries/larvesta.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/larvesta.wav b/sound/direct_sound_samples/cries/larvesta.wav new file mode 100644 index 000000000000..3c1fb5a46a26 Binary files /dev/null and b/sound/direct_sound_samples/cries/larvesta.wav differ diff --git a/sound/direct_sound_samples/cries/larvitar.aif b/sound/direct_sound_samples/cries/larvitar.aif deleted file mode 100644 index fd91d5bc7d28..000000000000 Binary files a/sound/direct_sound_samples/cries/larvitar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/larvitar.wav b/sound/direct_sound_samples/cries/larvitar.wav new file mode 100644 index 000000000000..e0e22cd6f5a9 Binary files /dev/null and b/sound/direct_sound_samples/cries/larvitar.wav differ diff --git a/sound/direct_sound_samples/cries/latias.aif b/sound/direct_sound_samples/cries/latias.aif deleted file mode 100644 index 90f558abc8b3..000000000000 Binary files a/sound/direct_sound_samples/cries/latias.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/latias.wav b/sound/direct_sound_samples/cries/latias.wav new file mode 100644 index 000000000000..87e6205ada5d Binary files /dev/null and b/sound/direct_sound_samples/cries/latias.wav differ diff --git a/sound/direct_sound_samples/cries/latias_mega.aif b/sound/direct_sound_samples/cries/latias_mega.aif deleted file mode 100644 index 0dc1b8990661..000000000000 Binary files a/sound/direct_sound_samples/cries/latias_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/latias_mega.wav b/sound/direct_sound_samples/cries/latias_mega.wav new file mode 100644 index 000000000000..c1b5d482335c Binary files /dev/null and b/sound/direct_sound_samples/cries/latias_mega.wav differ diff --git a/sound/direct_sound_samples/cries/latios.aif b/sound/direct_sound_samples/cries/latios.aif deleted file mode 100644 index f42446256c15..000000000000 Binary files a/sound/direct_sound_samples/cries/latios.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/latios.wav b/sound/direct_sound_samples/cries/latios.wav new file mode 100644 index 000000000000..1409dba11ade Binary files /dev/null and b/sound/direct_sound_samples/cries/latios.wav differ diff --git a/sound/direct_sound_samples/cries/latios_mega.aif b/sound/direct_sound_samples/cries/latios_mega.aif deleted file mode 100644 index 88a896035b60..000000000000 Binary files a/sound/direct_sound_samples/cries/latios_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/latios_mega.wav b/sound/direct_sound_samples/cries/latios_mega.wav new file mode 100644 index 000000000000..9a1b9754e7cd Binary files /dev/null and b/sound/direct_sound_samples/cries/latios_mega.wav differ diff --git a/sound/direct_sound_samples/cries/leafeon.aif b/sound/direct_sound_samples/cries/leafeon.aif deleted file mode 100644 index b3e7494b69f3..000000000000 Binary files a/sound/direct_sound_samples/cries/leafeon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/leafeon.wav b/sound/direct_sound_samples/cries/leafeon.wav new file mode 100644 index 000000000000..3a248e47f871 Binary files /dev/null and b/sound/direct_sound_samples/cries/leafeon.wav differ diff --git a/sound/direct_sound_samples/cries/leavanny.aif b/sound/direct_sound_samples/cries/leavanny.aif deleted file mode 100644 index 503a08ffe809..000000000000 Binary files a/sound/direct_sound_samples/cries/leavanny.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/leavanny.wav b/sound/direct_sound_samples/cries/leavanny.wav new file mode 100644 index 000000000000..e07d790e3b1f Binary files /dev/null and b/sound/direct_sound_samples/cries/leavanny.wav differ diff --git a/sound/direct_sound_samples/cries/lechonk.aif b/sound/direct_sound_samples/cries/lechonk.aif deleted file mode 100644 index f1ab3af238f6..000000000000 Binary files a/sound/direct_sound_samples/cries/lechonk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lechonk.wav b/sound/direct_sound_samples/cries/lechonk.wav new file mode 100644 index 000000000000..7c1b4e71bdd3 Binary files /dev/null and b/sound/direct_sound_samples/cries/lechonk.wav differ diff --git a/sound/direct_sound_samples/cries/ledian.aif b/sound/direct_sound_samples/cries/ledian.aif deleted file mode 100644 index cbc86ba6ac0b..000000000000 Binary files a/sound/direct_sound_samples/cries/ledian.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ledian.wav b/sound/direct_sound_samples/cries/ledian.wav new file mode 100644 index 000000000000..554829075dd1 Binary files /dev/null and b/sound/direct_sound_samples/cries/ledian.wav differ diff --git a/sound/direct_sound_samples/cries/ledyba.aif b/sound/direct_sound_samples/cries/ledyba.aif deleted file mode 100644 index d90f6844018d..000000000000 Binary files a/sound/direct_sound_samples/cries/ledyba.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ledyba.wav b/sound/direct_sound_samples/cries/ledyba.wav new file mode 100644 index 000000000000..e539c3d60a89 Binary files /dev/null and b/sound/direct_sound_samples/cries/ledyba.wav differ diff --git a/sound/direct_sound_samples/cries/lickilicky.aif b/sound/direct_sound_samples/cries/lickilicky.aif deleted file mode 100644 index 542bbcaf8b3c..000000000000 Binary files a/sound/direct_sound_samples/cries/lickilicky.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lickilicky.wav b/sound/direct_sound_samples/cries/lickilicky.wav new file mode 100644 index 000000000000..e0e6ccf237fe Binary files /dev/null and b/sound/direct_sound_samples/cries/lickilicky.wav differ diff --git a/sound/direct_sound_samples/cries/lickitung.aif b/sound/direct_sound_samples/cries/lickitung.aif deleted file mode 100644 index c21d1b036548..000000000000 Binary files a/sound/direct_sound_samples/cries/lickitung.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lickitung.wav b/sound/direct_sound_samples/cries/lickitung.wav new file mode 100644 index 000000000000..33a0ab5ff32e Binary files /dev/null and b/sound/direct_sound_samples/cries/lickitung.wav differ diff --git a/sound/direct_sound_samples/cries/liepard.aif b/sound/direct_sound_samples/cries/liepard.aif deleted file mode 100644 index eec210c0e7c4..000000000000 Binary files a/sound/direct_sound_samples/cries/liepard.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/liepard.wav b/sound/direct_sound_samples/cries/liepard.wav new file mode 100644 index 000000000000..f88311694cde Binary files /dev/null and b/sound/direct_sound_samples/cries/liepard.wav differ diff --git a/sound/direct_sound_samples/cries/lileep.aif b/sound/direct_sound_samples/cries/lileep.aif deleted file mode 100644 index e1b750ba9480..000000000000 Binary files a/sound/direct_sound_samples/cries/lileep.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lileep.wav b/sound/direct_sound_samples/cries/lileep.wav new file mode 100644 index 000000000000..f890086d3735 Binary files /dev/null and b/sound/direct_sound_samples/cries/lileep.wav differ diff --git a/sound/direct_sound_samples/cries/lilligant.aif b/sound/direct_sound_samples/cries/lilligant.aif deleted file mode 100644 index e00b1aafc417..000000000000 Binary files a/sound/direct_sound_samples/cries/lilligant.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lilligant.wav b/sound/direct_sound_samples/cries/lilligant.wav new file mode 100644 index 000000000000..f49cd46afd5d Binary files /dev/null and b/sound/direct_sound_samples/cries/lilligant.wav differ diff --git a/sound/direct_sound_samples/cries/lillipup.aif b/sound/direct_sound_samples/cries/lillipup.aif deleted file mode 100644 index 825f5054cf8c..000000000000 Binary files a/sound/direct_sound_samples/cries/lillipup.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lillipup.wav b/sound/direct_sound_samples/cries/lillipup.wav new file mode 100644 index 000000000000..2ca638186c10 Binary files /dev/null and b/sound/direct_sound_samples/cries/lillipup.wav differ diff --git a/sound/direct_sound_samples/cries/linoone.aif b/sound/direct_sound_samples/cries/linoone.aif deleted file mode 100644 index 1db1958d4cc4..000000000000 Binary files a/sound/direct_sound_samples/cries/linoone.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/linoone.wav b/sound/direct_sound_samples/cries/linoone.wav new file mode 100644 index 000000000000..b8c191bcd0ce Binary files /dev/null and b/sound/direct_sound_samples/cries/linoone.wav differ diff --git a/sound/direct_sound_samples/cries/litleo.aif b/sound/direct_sound_samples/cries/litleo.aif deleted file mode 100644 index 417d3d470892..000000000000 Binary files a/sound/direct_sound_samples/cries/litleo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/litleo.wav b/sound/direct_sound_samples/cries/litleo.wav new file mode 100644 index 000000000000..bbd5814c1fb5 Binary files /dev/null and b/sound/direct_sound_samples/cries/litleo.wav differ diff --git a/sound/direct_sound_samples/cries/litten.aif b/sound/direct_sound_samples/cries/litten.aif deleted file mode 100644 index c2c486dd98a7..000000000000 Binary files a/sound/direct_sound_samples/cries/litten.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/litten.wav b/sound/direct_sound_samples/cries/litten.wav new file mode 100644 index 000000000000..faf794123f67 Binary files /dev/null and b/sound/direct_sound_samples/cries/litten.wav differ diff --git a/sound/direct_sound_samples/cries/litwick.aif b/sound/direct_sound_samples/cries/litwick.aif deleted file mode 100644 index c13b74920011..000000000000 Binary files a/sound/direct_sound_samples/cries/litwick.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/litwick.wav b/sound/direct_sound_samples/cries/litwick.wav new file mode 100644 index 000000000000..da405865a39e Binary files /dev/null and b/sound/direct_sound_samples/cries/litwick.wav differ diff --git a/sound/direct_sound_samples/cries/lokix.aif b/sound/direct_sound_samples/cries/lokix.aif deleted file mode 100644 index 739ae1ad5647..000000000000 Binary files a/sound/direct_sound_samples/cries/lokix.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lokix.wav b/sound/direct_sound_samples/cries/lokix.wav new file mode 100644 index 000000000000..b3d94004d713 Binary files /dev/null and b/sound/direct_sound_samples/cries/lokix.wav differ diff --git a/sound/direct_sound_samples/cries/lombre.aif b/sound/direct_sound_samples/cries/lombre.aif deleted file mode 100644 index 3839f7a32790..000000000000 Binary files a/sound/direct_sound_samples/cries/lombre.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lombre.wav b/sound/direct_sound_samples/cries/lombre.wav new file mode 100644 index 000000000000..6d7888619e14 Binary files /dev/null and b/sound/direct_sound_samples/cries/lombre.wav differ diff --git a/sound/direct_sound_samples/cries/lopunny.aif b/sound/direct_sound_samples/cries/lopunny.aif deleted file mode 100644 index f79379078500..000000000000 Binary files a/sound/direct_sound_samples/cries/lopunny.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lopunny.wav b/sound/direct_sound_samples/cries/lopunny.wav new file mode 100644 index 000000000000..8897e582a4c4 Binary files /dev/null and b/sound/direct_sound_samples/cries/lopunny.wav differ diff --git a/sound/direct_sound_samples/cries/lopunny_mega.aif b/sound/direct_sound_samples/cries/lopunny_mega.aif deleted file mode 100644 index 212df776de8a..000000000000 Binary files a/sound/direct_sound_samples/cries/lopunny_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lopunny_mega.wav b/sound/direct_sound_samples/cries/lopunny_mega.wav new file mode 100644 index 000000000000..e02e8a69ef02 Binary files /dev/null and b/sound/direct_sound_samples/cries/lopunny_mega.wav differ diff --git a/sound/direct_sound_samples/cries/lotad.aif b/sound/direct_sound_samples/cries/lotad.aif deleted file mode 100644 index 290ec548596b..000000000000 Binary files a/sound/direct_sound_samples/cries/lotad.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lotad.wav b/sound/direct_sound_samples/cries/lotad.wav new file mode 100644 index 000000000000..8e28b10f3294 Binary files /dev/null and b/sound/direct_sound_samples/cries/lotad.wav differ diff --git a/sound/direct_sound_samples/cries/loudred.aif b/sound/direct_sound_samples/cries/loudred.aif deleted file mode 100644 index d9c7465573f9..000000000000 Binary files a/sound/direct_sound_samples/cries/loudred.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/loudred.wav b/sound/direct_sound_samples/cries/loudred.wav new file mode 100644 index 000000000000..ff8b2c8104d6 Binary files /dev/null and b/sound/direct_sound_samples/cries/loudred.wav differ diff --git a/sound/direct_sound_samples/cries/lucario.aif b/sound/direct_sound_samples/cries/lucario.aif deleted file mode 100644 index 80064d64fba4..000000000000 Binary files a/sound/direct_sound_samples/cries/lucario.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lucario.wav b/sound/direct_sound_samples/cries/lucario.wav new file mode 100644 index 000000000000..78cfeac18bfa Binary files /dev/null and b/sound/direct_sound_samples/cries/lucario.wav differ diff --git a/sound/direct_sound_samples/cries/lucario_mega.aif b/sound/direct_sound_samples/cries/lucario_mega.aif deleted file mode 100644 index 1a100f4dab28..000000000000 Binary files a/sound/direct_sound_samples/cries/lucario_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lucario_mega.wav b/sound/direct_sound_samples/cries/lucario_mega.wav new file mode 100644 index 000000000000..712196516770 Binary files /dev/null and b/sound/direct_sound_samples/cries/lucario_mega.wav differ diff --git a/sound/direct_sound_samples/cries/ludicolo.aif b/sound/direct_sound_samples/cries/ludicolo.aif deleted file mode 100644 index 690cf75fe486..000000000000 Binary files a/sound/direct_sound_samples/cries/ludicolo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ludicolo.wav b/sound/direct_sound_samples/cries/ludicolo.wav new file mode 100644 index 000000000000..420ac5459513 Binary files /dev/null and b/sound/direct_sound_samples/cries/ludicolo.wav differ diff --git a/sound/direct_sound_samples/cries/lugia.aif b/sound/direct_sound_samples/cries/lugia.aif deleted file mode 100644 index 884b48591e54..000000000000 Binary files a/sound/direct_sound_samples/cries/lugia.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lugia.wav b/sound/direct_sound_samples/cries/lugia.wav new file mode 100644 index 000000000000..855920839e85 Binary files /dev/null and b/sound/direct_sound_samples/cries/lugia.wav differ diff --git a/sound/direct_sound_samples/cries/lumineon.aif b/sound/direct_sound_samples/cries/lumineon.aif deleted file mode 100644 index 0577fb557539..000000000000 Binary files a/sound/direct_sound_samples/cries/lumineon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lumineon.wav b/sound/direct_sound_samples/cries/lumineon.wav new file mode 100644 index 000000000000..fccb69a38323 Binary files /dev/null and b/sound/direct_sound_samples/cries/lumineon.wav differ diff --git a/sound/direct_sound_samples/cries/lunala.aif b/sound/direct_sound_samples/cries/lunala.aif deleted file mode 100644 index d95185de7997..000000000000 Binary files a/sound/direct_sound_samples/cries/lunala.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lunala.wav b/sound/direct_sound_samples/cries/lunala.wav new file mode 100644 index 000000000000..e82139ef1808 Binary files /dev/null and b/sound/direct_sound_samples/cries/lunala.wav differ diff --git a/sound/direct_sound_samples/cries/lunatone.aif b/sound/direct_sound_samples/cries/lunatone.aif deleted file mode 100644 index e27d7f2f6017..000000000000 Binary files a/sound/direct_sound_samples/cries/lunatone.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lunatone.wav b/sound/direct_sound_samples/cries/lunatone.wav new file mode 100644 index 000000000000..8edd9a17e19d Binary files /dev/null and b/sound/direct_sound_samples/cries/lunatone.wav differ diff --git a/sound/direct_sound_samples/cries/lurantis.aif b/sound/direct_sound_samples/cries/lurantis.aif deleted file mode 100644 index 36ab7d71e226..000000000000 Binary files a/sound/direct_sound_samples/cries/lurantis.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lurantis.wav b/sound/direct_sound_samples/cries/lurantis.wav new file mode 100644 index 000000000000..d85d414356d0 Binary files /dev/null and b/sound/direct_sound_samples/cries/lurantis.wav differ diff --git a/sound/direct_sound_samples/cries/luvdisc.aif b/sound/direct_sound_samples/cries/luvdisc.aif deleted file mode 100644 index 396aceff5e34..000000000000 Binary files a/sound/direct_sound_samples/cries/luvdisc.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/luvdisc.wav b/sound/direct_sound_samples/cries/luvdisc.wav new file mode 100644 index 000000000000..da1c84b80e5f Binary files /dev/null and b/sound/direct_sound_samples/cries/luvdisc.wav differ diff --git a/sound/direct_sound_samples/cries/luxio.aif b/sound/direct_sound_samples/cries/luxio.aif deleted file mode 100644 index f56ffe1ea0f2..000000000000 Binary files a/sound/direct_sound_samples/cries/luxio.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/luxio.wav b/sound/direct_sound_samples/cries/luxio.wav new file mode 100644 index 000000000000..9f3189f78e3f Binary files /dev/null and b/sound/direct_sound_samples/cries/luxio.wav differ diff --git a/sound/direct_sound_samples/cries/luxray.aif b/sound/direct_sound_samples/cries/luxray.aif deleted file mode 100644 index 76bf5cb5d115..000000000000 Binary files a/sound/direct_sound_samples/cries/luxray.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/luxray.wav b/sound/direct_sound_samples/cries/luxray.wav new file mode 100644 index 000000000000..7c393e1b4a61 Binary files /dev/null and b/sound/direct_sound_samples/cries/luxray.wav differ diff --git a/sound/direct_sound_samples/cries/lycanroc_dusk.aif b/sound/direct_sound_samples/cries/lycanroc_dusk.aif deleted file mode 100644 index 61d985e64aca..000000000000 Binary files a/sound/direct_sound_samples/cries/lycanroc_dusk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lycanroc_dusk.wav b/sound/direct_sound_samples/cries/lycanroc_dusk.wav new file mode 100644 index 000000000000..6f7e05e2c741 Binary files /dev/null and b/sound/direct_sound_samples/cries/lycanroc_dusk.wav differ diff --git a/sound/direct_sound_samples/cries/lycanroc_midday.aif b/sound/direct_sound_samples/cries/lycanroc_midday.aif deleted file mode 100644 index 380d192c2216..000000000000 Binary files a/sound/direct_sound_samples/cries/lycanroc_midday.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lycanroc_midday.wav b/sound/direct_sound_samples/cries/lycanroc_midday.wav new file mode 100644 index 000000000000..db29524ad493 Binary files /dev/null and b/sound/direct_sound_samples/cries/lycanroc_midday.wav differ diff --git a/sound/direct_sound_samples/cries/lycanroc_midnight.aif b/sound/direct_sound_samples/cries/lycanroc_midnight.aif deleted file mode 100644 index e81dac8c3e4c..000000000000 Binary files a/sound/direct_sound_samples/cries/lycanroc_midnight.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/lycanroc_midnight.wav b/sound/direct_sound_samples/cries/lycanroc_midnight.wav new file mode 100644 index 000000000000..19bb4175fdf5 Binary files /dev/null and b/sound/direct_sound_samples/cries/lycanroc_midnight.wav differ diff --git a/sound/direct_sound_samples/cries/mabosstiff.aif b/sound/direct_sound_samples/cries/mabosstiff.aif deleted file mode 100644 index b66bbf731f81..000000000000 Binary files a/sound/direct_sound_samples/cries/mabosstiff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mabosstiff.wav b/sound/direct_sound_samples/cries/mabosstiff.wav new file mode 100644 index 000000000000..245078423a93 Binary files /dev/null and b/sound/direct_sound_samples/cries/mabosstiff.wav differ diff --git a/sound/direct_sound_samples/cries/machamp.aif b/sound/direct_sound_samples/cries/machamp.aif deleted file mode 100644 index 99bcfea8983e..000000000000 Binary files a/sound/direct_sound_samples/cries/machamp.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/machamp.wav b/sound/direct_sound_samples/cries/machamp.wav new file mode 100644 index 000000000000..b7e091dc724b Binary files /dev/null and b/sound/direct_sound_samples/cries/machamp.wav differ diff --git a/sound/direct_sound_samples/cries/machoke.aif b/sound/direct_sound_samples/cries/machoke.aif deleted file mode 100644 index 241731b6fe09..000000000000 Binary files a/sound/direct_sound_samples/cries/machoke.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/machoke.wav b/sound/direct_sound_samples/cries/machoke.wav new file mode 100644 index 000000000000..5e0fc98bf1c2 Binary files /dev/null and b/sound/direct_sound_samples/cries/machoke.wav differ diff --git a/sound/direct_sound_samples/cries/machop.aif b/sound/direct_sound_samples/cries/machop.aif deleted file mode 100644 index c878dfe99f01..000000000000 Binary files a/sound/direct_sound_samples/cries/machop.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/machop.wav b/sound/direct_sound_samples/cries/machop.wav new file mode 100644 index 000000000000..a34a0ccc80bb Binary files /dev/null and b/sound/direct_sound_samples/cries/machop.wav differ diff --git a/sound/direct_sound_samples/cries/magby.aif b/sound/direct_sound_samples/cries/magby.aif deleted file mode 100644 index 69f77a3b356c..000000000000 Binary files a/sound/direct_sound_samples/cries/magby.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magby.wav b/sound/direct_sound_samples/cries/magby.wav new file mode 100644 index 000000000000..8b083206c271 Binary files /dev/null and b/sound/direct_sound_samples/cries/magby.wav differ diff --git a/sound/direct_sound_samples/cries/magcargo.aif b/sound/direct_sound_samples/cries/magcargo.aif deleted file mode 100644 index f1127dabc4a2..000000000000 Binary files a/sound/direct_sound_samples/cries/magcargo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magcargo.wav b/sound/direct_sound_samples/cries/magcargo.wav new file mode 100644 index 000000000000..6d97b90c1bb4 Binary files /dev/null and b/sound/direct_sound_samples/cries/magcargo.wav differ diff --git a/sound/direct_sound_samples/cries/magearna.aif b/sound/direct_sound_samples/cries/magearna.aif deleted file mode 100644 index 2e01fe5aa356..000000000000 Binary files a/sound/direct_sound_samples/cries/magearna.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magearna.wav b/sound/direct_sound_samples/cries/magearna.wav new file mode 100644 index 000000000000..121867385d4f Binary files /dev/null and b/sound/direct_sound_samples/cries/magearna.wav differ diff --git a/sound/direct_sound_samples/cries/magikarp.aif b/sound/direct_sound_samples/cries/magikarp.aif deleted file mode 100644 index 71bdbf393973..000000000000 Binary files a/sound/direct_sound_samples/cries/magikarp.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magikarp.wav b/sound/direct_sound_samples/cries/magikarp.wav new file mode 100644 index 000000000000..6c665d9e750b Binary files /dev/null and b/sound/direct_sound_samples/cries/magikarp.wav differ diff --git a/sound/direct_sound_samples/cries/magmar.aif b/sound/direct_sound_samples/cries/magmar.aif deleted file mode 100644 index c2a6a171aeb5..000000000000 Binary files a/sound/direct_sound_samples/cries/magmar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magmar.wav b/sound/direct_sound_samples/cries/magmar.wav new file mode 100644 index 000000000000..902c15bf2e10 Binary files /dev/null and b/sound/direct_sound_samples/cries/magmar.wav differ diff --git a/sound/direct_sound_samples/cries/magmortar.aif b/sound/direct_sound_samples/cries/magmortar.aif deleted file mode 100644 index ae7f0ea50290..000000000000 Binary files a/sound/direct_sound_samples/cries/magmortar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magmortar.wav b/sound/direct_sound_samples/cries/magmortar.wav new file mode 100644 index 000000000000..6db0fc45de8b Binary files /dev/null and b/sound/direct_sound_samples/cries/magmortar.wav differ diff --git a/sound/direct_sound_samples/cries/magnemite.aif b/sound/direct_sound_samples/cries/magnemite.aif deleted file mode 100644 index d468102ac934..000000000000 Binary files a/sound/direct_sound_samples/cries/magnemite.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magnemite.wav b/sound/direct_sound_samples/cries/magnemite.wav new file mode 100644 index 000000000000..4fdc93f2960f Binary files /dev/null and b/sound/direct_sound_samples/cries/magnemite.wav differ diff --git a/sound/direct_sound_samples/cries/magneton.aif b/sound/direct_sound_samples/cries/magneton.aif deleted file mode 100644 index 30327cdbc363..000000000000 Binary files a/sound/direct_sound_samples/cries/magneton.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magneton.wav b/sound/direct_sound_samples/cries/magneton.wav new file mode 100644 index 000000000000..d69c276443cd Binary files /dev/null and b/sound/direct_sound_samples/cries/magneton.wav differ diff --git a/sound/direct_sound_samples/cries/magnezone.aif b/sound/direct_sound_samples/cries/magnezone.aif deleted file mode 100644 index 750cbd3ac4a3..000000000000 Binary files a/sound/direct_sound_samples/cries/magnezone.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/magnezone.wav b/sound/direct_sound_samples/cries/magnezone.wav new file mode 100644 index 000000000000..5e6adaeeaab2 Binary files /dev/null and b/sound/direct_sound_samples/cries/magnezone.wav differ diff --git a/sound/direct_sound_samples/cries/makuhita.aif b/sound/direct_sound_samples/cries/makuhita.aif deleted file mode 100644 index 2dffab4bcc17..000000000000 Binary files a/sound/direct_sound_samples/cries/makuhita.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/makuhita.wav b/sound/direct_sound_samples/cries/makuhita.wav new file mode 100644 index 000000000000..79b055ef98f5 Binary files /dev/null and b/sound/direct_sound_samples/cries/makuhita.wav differ diff --git a/sound/direct_sound_samples/cries/malamar.aif b/sound/direct_sound_samples/cries/malamar.aif deleted file mode 100644 index 80428bfb1674..000000000000 Binary files a/sound/direct_sound_samples/cries/malamar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/malamar.wav b/sound/direct_sound_samples/cries/malamar.wav new file mode 100644 index 000000000000..37a33ffb8488 Binary files /dev/null and b/sound/direct_sound_samples/cries/malamar.wav differ diff --git a/sound/direct_sound_samples/cries/mamoswine.aif b/sound/direct_sound_samples/cries/mamoswine.aif deleted file mode 100644 index 48625c1a6f90..000000000000 Binary files a/sound/direct_sound_samples/cries/mamoswine.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mamoswine.wav b/sound/direct_sound_samples/cries/mamoswine.wav new file mode 100644 index 000000000000..ce0488818b20 Binary files /dev/null and b/sound/direct_sound_samples/cries/mamoswine.wav differ diff --git a/sound/direct_sound_samples/cries/manaphy.aif b/sound/direct_sound_samples/cries/manaphy.aif deleted file mode 100644 index 7df4dc833885..000000000000 Binary files a/sound/direct_sound_samples/cries/manaphy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/manaphy.wav b/sound/direct_sound_samples/cries/manaphy.wav new file mode 100644 index 000000000000..ddd3ea6c381f Binary files /dev/null and b/sound/direct_sound_samples/cries/manaphy.wav differ diff --git a/sound/direct_sound_samples/cries/mandibuzz.aif b/sound/direct_sound_samples/cries/mandibuzz.aif deleted file mode 100644 index 1a3a3afec3b6..000000000000 Binary files a/sound/direct_sound_samples/cries/mandibuzz.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mandibuzz.wav b/sound/direct_sound_samples/cries/mandibuzz.wav new file mode 100644 index 000000000000..2db3dfaf3902 Binary files /dev/null and b/sound/direct_sound_samples/cries/mandibuzz.wav differ diff --git a/sound/direct_sound_samples/cries/manectric.aif b/sound/direct_sound_samples/cries/manectric.aif deleted file mode 100644 index cb0783a0c92d..000000000000 Binary files a/sound/direct_sound_samples/cries/manectric.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/manectric.wav b/sound/direct_sound_samples/cries/manectric.wav new file mode 100644 index 000000000000..939fc1609312 Binary files /dev/null and b/sound/direct_sound_samples/cries/manectric.wav differ diff --git a/sound/direct_sound_samples/cries/manectric_mega.aif b/sound/direct_sound_samples/cries/manectric_mega.aif deleted file mode 100644 index 6e9717fe893e..000000000000 Binary files a/sound/direct_sound_samples/cries/manectric_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/manectric_mega.wav b/sound/direct_sound_samples/cries/manectric_mega.wav new file mode 100644 index 000000000000..cd4f1e11aade Binary files /dev/null and b/sound/direct_sound_samples/cries/manectric_mega.wav differ diff --git a/sound/direct_sound_samples/cries/mankey.aif b/sound/direct_sound_samples/cries/mankey.aif deleted file mode 100644 index b2634d3f7b84..000000000000 Binary files a/sound/direct_sound_samples/cries/mankey.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mankey.wav b/sound/direct_sound_samples/cries/mankey.wav new file mode 100644 index 000000000000..ab15ac9af691 Binary files /dev/null and b/sound/direct_sound_samples/cries/mankey.wav differ diff --git a/sound/direct_sound_samples/cries/mantine.aif b/sound/direct_sound_samples/cries/mantine.aif deleted file mode 100644 index f3f6af321339..000000000000 Binary files a/sound/direct_sound_samples/cries/mantine.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mantine.wav b/sound/direct_sound_samples/cries/mantine.wav new file mode 100644 index 000000000000..919242e8fe12 Binary files /dev/null and b/sound/direct_sound_samples/cries/mantine.wav differ diff --git a/sound/direct_sound_samples/cries/mantyke.aif b/sound/direct_sound_samples/cries/mantyke.aif deleted file mode 100644 index edf6a76ef1f5..000000000000 Binary files a/sound/direct_sound_samples/cries/mantyke.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mantyke.wav b/sound/direct_sound_samples/cries/mantyke.wav new file mode 100644 index 000000000000..6c602275d183 Binary files /dev/null and b/sound/direct_sound_samples/cries/mantyke.wav differ diff --git a/sound/direct_sound_samples/cries/maractus.aif b/sound/direct_sound_samples/cries/maractus.aif deleted file mode 100644 index ad2488ec8677..000000000000 Binary files a/sound/direct_sound_samples/cries/maractus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/maractus.wav b/sound/direct_sound_samples/cries/maractus.wav new file mode 100644 index 000000000000..944aac446597 Binary files /dev/null and b/sound/direct_sound_samples/cries/maractus.wav differ diff --git a/sound/direct_sound_samples/cries/mareanie.aif b/sound/direct_sound_samples/cries/mareanie.aif deleted file mode 100644 index 75a73d5edb28..000000000000 Binary files a/sound/direct_sound_samples/cries/mareanie.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mareanie.wav b/sound/direct_sound_samples/cries/mareanie.wav new file mode 100644 index 000000000000..8889530143e9 Binary files /dev/null and b/sound/direct_sound_samples/cries/mareanie.wav differ diff --git a/sound/direct_sound_samples/cries/mareep.aif b/sound/direct_sound_samples/cries/mareep.aif deleted file mode 100644 index 2dfc9e88bcac..000000000000 Binary files a/sound/direct_sound_samples/cries/mareep.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mareep.wav b/sound/direct_sound_samples/cries/mareep.wav new file mode 100644 index 000000000000..386925f5d5c8 Binary files /dev/null and b/sound/direct_sound_samples/cries/mareep.wav differ diff --git a/sound/direct_sound_samples/cries/marill.aif b/sound/direct_sound_samples/cries/marill.aif deleted file mode 100644 index 1c3b6bc41fc0..000000000000 Binary files a/sound/direct_sound_samples/cries/marill.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/marill.wav b/sound/direct_sound_samples/cries/marill.wav new file mode 100644 index 000000000000..93201d1c5135 Binary files /dev/null and b/sound/direct_sound_samples/cries/marill.wav differ diff --git a/sound/direct_sound_samples/cries/marowak.aif b/sound/direct_sound_samples/cries/marowak.aif deleted file mode 100644 index c081ba9f9d88..000000000000 Binary files a/sound/direct_sound_samples/cries/marowak.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/marowak.wav b/sound/direct_sound_samples/cries/marowak.wav new file mode 100644 index 000000000000..7bddb4b347d9 Binary files /dev/null and b/sound/direct_sound_samples/cries/marowak.wav differ diff --git a/sound/direct_sound_samples/cries/marshadow.aif b/sound/direct_sound_samples/cries/marshadow.aif deleted file mode 100644 index 3092b639f24e..000000000000 Binary files a/sound/direct_sound_samples/cries/marshadow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/marshadow.wav b/sound/direct_sound_samples/cries/marshadow.wav new file mode 100644 index 000000000000..a9cfdf6a141c Binary files /dev/null and b/sound/direct_sound_samples/cries/marshadow.wav differ diff --git a/sound/direct_sound_samples/cries/marshtomp.aif b/sound/direct_sound_samples/cries/marshtomp.aif deleted file mode 100644 index 79728eb0876e..000000000000 Binary files a/sound/direct_sound_samples/cries/marshtomp.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/marshtomp.wav b/sound/direct_sound_samples/cries/marshtomp.wav new file mode 100644 index 000000000000..0caa959e2906 Binary files /dev/null and b/sound/direct_sound_samples/cries/marshtomp.wav differ diff --git a/sound/direct_sound_samples/cries/maschiff.aif b/sound/direct_sound_samples/cries/maschiff.aif deleted file mode 100644 index ee93b59adefe..000000000000 Binary files a/sound/direct_sound_samples/cries/maschiff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/maschiff.wav b/sound/direct_sound_samples/cries/maschiff.wav new file mode 100644 index 000000000000..7b4412d147d0 Binary files /dev/null and b/sound/direct_sound_samples/cries/maschiff.wav differ diff --git a/sound/direct_sound_samples/cries/masquerain.aif b/sound/direct_sound_samples/cries/masquerain.aif deleted file mode 100644 index e3ef3b9d81d6..000000000000 Binary files a/sound/direct_sound_samples/cries/masquerain.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/masquerain.wav b/sound/direct_sound_samples/cries/masquerain.wav new file mode 100644 index 000000000000..b0c5372ae39e Binary files /dev/null and b/sound/direct_sound_samples/cries/masquerain.wav differ diff --git a/sound/direct_sound_samples/cries/maushold_four.aif b/sound/direct_sound_samples/cries/maushold_four.aif deleted file mode 100644 index c7c0aee6ee8c..000000000000 Binary files a/sound/direct_sound_samples/cries/maushold_four.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/maushold_four.wav b/sound/direct_sound_samples/cries/maushold_four.wav new file mode 100644 index 000000000000..b4cc4eb70fa9 Binary files /dev/null and b/sound/direct_sound_samples/cries/maushold_four.wav differ diff --git a/sound/direct_sound_samples/cries/maushold_three.aif b/sound/direct_sound_samples/cries/maushold_three.aif deleted file mode 100644 index 0e771535ea3e..000000000000 Binary files a/sound/direct_sound_samples/cries/maushold_three.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/maushold_three.wav b/sound/direct_sound_samples/cries/maushold_three.wav new file mode 100644 index 000000000000..5e62f2900332 Binary files /dev/null and b/sound/direct_sound_samples/cries/maushold_three.wav differ diff --git a/sound/direct_sound_samples/cries/mawile.aif b/sound/direct_sound_samples/cries/mawile.aif deleted file mode 100644 index 8374bf4797fd..000000000000 Binary files a/sound/direct_sound_samples/cries/mawile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mawile.wav b/sound/direct_sound_samples/cries/mawile.wav new file mode 100644 index 000000000000..9c54d40a48cc Binary files /dev/null and b/sound/direct_sound_samples/cries/mawile.wav differ diff --git a/sound/direct_sound_samples/cries/mawile_mega.aif b/sound/direct_sound_samples/cries/mawile_mega.aif deleted file mode 100644 index a6e7ec8c8394..000000000000 Binary files a/sound/direct_sound_samples/cries/mawile_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mawile_mega.wav b/sound/direct_sound_samples/cries/mawile_mega.wav new file mode 100644 index 000000000000..fd19d9e0969a Binary files /dev/null and b/sound/direct_sound_samples/cries/mawile_mega.wav differ diff --git a/sound/direct_sound_samples/cries/medicham.aif b/sound/direct_sound_samples/cries/medicham.aif deleted file mode 100644 index 02818ba0dd2d..000000000000 Binary files a/sound/direct_sound_samples/cries/medicham.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/medicham.wav b/sound/direct_sound_samples/cries/medicham.wav new file mode 100644 index 000000000000..be3668b173f6 Binary files /dev/null and b/sound/direct_sound_samples/cries/medicham.wav differ diff --git a/sound/direct_sound_samples/cries/medicham_mega.aif b/sound/direct_sound_samples/cries/medicham_mega.aif deleted file mode 100644 index 36db11b2f72b..000000000000 Binary files a/sound/direct_sound_samples/cries/medicham_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/medicham_mega.wav b/sound/direct_sound_samples/cries/medicham_mega.wav new file mode 100644 index 000000000000..c71155ae4b06 Binary files /dev/null and b/sound/direct_sound_samples/cries/medicham_mega.wav differ diff --git a/sound/direct_sound_samples/cries/meditite.aif b/sound/direct_sound_samples/cries/meditite.aif deleted file mode 100644 index e3dc9dd802f8..000000000000 Binary files a/sound/direct_sound_samples/cries/meditite.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/meditite.wav b/sound/direct_sound_samples/cries/meditite.wav new file mode 100644 index 000000000000..23db4f297f2b Binary files /dev/null and b/sound/direct_sound_samples/cries/meditite.wav differ diff --git a/sound/direct_sound_samples/cries/meganium.aif b/sound/direct_sound_samples/cries/meganium.aif deleted file mode 100644 index abada3548239..000000000000 Binary files a/sound/direct_sound_samples/cries/meganium.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/meganium.wav b/sound/direct_sound_samples/cries/meganium.wav new file mode 100644 index 000000000000..8f7920e93784 Binary files /dev/null and b/sound/direct_sound_samples/cries/meganium.wav differ diff --git a/sound/direct_sound_samples/cries/melmetal.aif b/sound/direct_sound_samples/cries/melmetal.aif deleted file mode 100644 index 5590164d1eb9..000000000000 Binary files a/sound/direct_sound_samples/cries/melmetal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/melmetal.wav b/sound/direct_sound_samples/cries/melmetal.wav new file mode 100644 index 000000000000..0d16f9494cd6 Binary files /dev/null and b/sound/direct_sound_samples/cries/melmetal.wav differ diff --git a/sound/direct_sound_samples/cries/meloetta.aif b/sound/direct_sound_samples/cries/meloetta.aif deleted file mode 100644 index 298a5214be53..000000000000 Binary files a/sound/direct_sound_samples/cries/meloetta.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/meloetta.wav b/sound/direct_sound_samples/cries/meloetta.wav new file mode 100644 index 000000000000..ff7d225b4b29 Binary files /dev/null and b/sound/direct_sound_samples/cries/meloetta.wav differ diff --git a/sound/direct_sound_samples/cries/meltan.aif b/sound/direct_sound_samples/cries/meltan.aif deleted file mode 100644 index 42b258f517d4..000000000000 Binary files a/sound/direct_sound_samples/cries/meltan.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/meltan.wav b/sound/direct_sound_samples/cries/meltan.wav new file mode 100644 index 000000000000..8b55a26e2382 Binary files /dev/null and b/sound/direct_sound_samples/cries/meltan.wav differ diff --git a/sound/direct_sound_samples/cries/meowscarada.aif b/sound/direct_sound_samples/cries/meowscarada.aif deleted file mode 100644 index 981a07a20673..000000000000 Binary files a/sound/direct_sound_samples/cries/meowscarada.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/meowscarada.wav b/sound/direct_sound_samples/cries/meowscarada.wav new file mode 100644 index 000000000000..d25194212819 Binary files /dev/null and b/sound/direct_sound_samples/cries/meowscarada.wav differ diff --git a/sound/direct_sound_samples/cries/meowstic.aif b/sound/direct_sound_samples/cries/meowstic.aif deleted file mode 100644 index a8536832b263..000000000000 Binary files a/sound/direct_sound_samples/cries/meowstic.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/meowstic.wav b/sound/direct_sound_samples/cries/meowstic.wav new file mode 100644 index 000000000000..aba57fdda03b Binary files /dev/null and b/sound/direct_sound_samples/cries/meowstic.wav differ diff --git a/sound/direct_sound_samples/cries/meowth.aif b/sound/direct_sound_samples/cries/meowth.aif deleted file mode 100644 index d919e99e63d9..000000000000 Binary files a/sound/direct_sound_samples/cries/meowth.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/meowth.wav b/sound/direct_sound_samples/cries/meowth.wav new file mode 100644 index 000000000000..bebca1c27ee5 Binary files /dev/null and b/sound/direct_sound_samples/cries/meowth.wav differ diff --git a/sound/direct_sound_samples/cries/mesprit.aif b/sound/direct_sound_samples/cries/mesprit.aif deleted file mode 100644 index 0c76a7f0f47e..000000000000 Binary files a/sound/direct_sound_samples/cries/mesprit.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mesprit.wav b/sound/direct_sound_samples/cries/mesprit.wav new file mode 100644 index 000000000000..cd85af6499d9 Binary files /dev/null and b/sound/direct_sound_samples/cries/mesprit.wav differ diff --git a/sound/direct_sound_samples/cries/metagross.aif b/sound/direct_sound_samples/cries/metagross.aif deleted file mode 100644 index bb3bc21c67cd..000000000000 Binary files a/sound/direct_sound_samples/cries/metagross.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/metagross.wav b/sound/direct_sound_samples/cries/metagross.wav new file mode 100644 index 000000000000..5112b3afa8ae Binary files /dev/null and b/sound/direct_sound_samples/cries/metagross.wav differ diff --git a/sound/direct_sound_samples/cries/metagross_mega.aif b/sound/direct_sound_samples/cries/metagross_mega.aif deleted file mode 100644 index e1125b659f50..000000000000 Binary files a/sound/direct_sound_samples/cries/metagross_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/metagross_mega.wav b/sound/direct_sound_samples/cries/metagross_mega.wav new file mode 100644 index 000000000000..56fbcfb78b36 Binary files /dev/null and b/sound/direct_sound_samples/cries/metagross_mega.wav differ diff --git a/sound/direct_sound_samples/cries/metang.aif b/sound/direct_sound_samples/cries/metang.aif deleted file mode 100644 index 225cdfbfe1ea..000000000000 Binary files a/sound/direct_sound_samples/cries/metang.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/metang.wav b/sound/direct_sound_samples/cries/metang.wav new file mode 100644 index 000000000000..700759d20747 Binary files /dev/null and b/sound/direct_sound_samples/cries/metang.wav differ diff --git a/sound/direct_sound_samples/cries/metapod.aif b/sound/direct_sound_samples/cries/metapod.aif deleted file mode 100644 index e875755db0a6..000000000000 Binary files a/sound/direct_sound_samples/cries/metapod.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/metapod.wav b/sound/direct_sound_samples/cries/metapod.wav new file mode 100644 index 000000000000..6df3b6aefbad Binary files /dev/null and b/sound/direct_sound_samples/cries/metapod.wav differ diff --git a/sound/direct_sound_samples/cries/mew.aif b/sound/direct_sound_samples/cries/mew.aif deleted file mode 100644 index f0649ee6f847..000000000000 Binary files a/sound/direct_sound_samples/cries/mew.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mew.wav b/sound/direct_sound_samples/cries/mew.wav new file mode 100644 index 000000000000..e75fa95f3572 Binary files /dev/null and b/sound/direct_sound_samples/cries/mew.wav differ diff --git a/sound/direct_sound_samples/cries/mewtwo.aif b/sound/direct_sound_samples/cries/mewtwo.aif deleted file mode 100644 index 2bafa470830d..000000000000 Binary files a/sound/direct_sound_samples/cries/mewtwo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mewtwo.wav b/sound/direct_sound_samples/cries/mewtwo.wav new file mode 100644 index 000000000000..947984f6724f Binary files /dev/null and b/sound/direct_sound_samples/cries/mewtwo.wav differ diff --git a/sound/direct_sound_samples/cries/mewtwo_mega_x.aif b/sound/direct_sound_samples/cries/mewtwo_mega_x.aif deleted file mode 100644 index c484f7b9ebca..000000000000 Binary files a/sound/direct_sound_samples/cries/mewtwo_mega_x.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mewtwo_mega_x.wav b/sound/direct_sound_samples/cries/mewtwo_mega_x.wav new file mode 100644 index 000000000000..84c83efb106f Binary files /dev/null and b/sound/direct_sound_samples/cries/mewtwo_mega_x.wav differ diff --git a/sound/direct_sound_samples/cries/mewtwo_mega_y.aif b/sound/direct_sound_samples/cries/mewtwo_mega_y.aif deleted file mode 100644 index 87a5d54ad9c1..000000000000 Binary files a/sound/direct_sound_samples/cries/mewtwo_mega_y.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mewtwo_mega_y.wav b/sound/direct_sound_samples/cries/mewtwo_mega_y.wav new file mode 100644 index 000000000000..b885771fd351 Binary files /dev/null and b/sound/direct_sound_samples/cries/mewtwo_mega_y.wav differ diff --git a/sound/direct_sound_samples/cries/mienfoo.aif b/sound/direct_sound_samples/cries/mienfoo.aif deleted file mode 100644 index 5f9525d87eb0..000000000000 Binary files a/sound/direct_sound_samples/cries/mienfoo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mienfoo.wav b/sound/direct_sound_samples/cries/mienfoo.wav new file mode 100644 index 000000000000..521448e71fdd Binary files /dev/null and b/sound/direct_sound_samples/cries/mienfoo.wav differ diff --git a/sound/direct_sound_samples/cries/mienshao.aif b/sound/direct_sound_samples/cries/mienshao.aif deleted file mode 100644 index da04c18fc9cd..000000000000 Binary files a/sound/direct_sound_samples/cries/mienshao.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mienshao.wav b/sound/direct_sound_samples/cries/mienshao.wav new file mode 100644 index 000000000000..439026ff5779 Binary files /dev/null and b/sound/direct_sound_samples/cries/mienshao.wav differ diff --git a/sound/direct_sound_samples/cries/mightyena.aif b/sound/direct_sound_samples/cries/mightyena.aif deleted file mode 100644 index 099c8b9c7b10..000000000000 Binary files a/sound/direct_sound_samples/cries/mightyena.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mightyena.wav b/sound/direct_sound_samples/cries/mightyena.wav new file mode 100644 index 000000000000..0149976e2b2b Binary files /dev/null and b/sound/direct_sound_samples/cries/mightyena.wav differ diff --git a/sound/direct_sound_samples/cries/milcery.aif b/sound/direct_sound_samples/cries/milcery.aif deleted file mode 100644 index 003fbb4a62ce..000000000000 Binary files a/sound/direct_sound_samples/cries/milcery.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/milcery.wav b/sound/direct_sound_samples/cries/milcery.wav new file mode 100644 index 000000000000..754329ea320a Binary files /dev/null and b/sound/direct_sound_samples/cries/milcery.wav differ diff --git a/sound/direct_sound_samples/cries/milotic.aif b/sound/direct_sound_samples/cries/milotic.aif deleted file mode 100644 index 796a87f35802..000000000000 Binary files a/sound/direct_sound_samples/cries/milotic.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/milotic.wav b/sound/direct_sound_samples/cries/milotic.wav new file mode 100644 index 000000000000..20db44692fe4 Binary files /dev/null and b/sound/direct_sound_samples/cries/milotic.wav differ diff --git a/sound/direct_sound_samples/cries/miltank.aif b/sound/direct_sound_samples/cries/miltank.aif deleted file mode 100644 index cb8ad93ce966..000000000000 Binary files a/sound/direct_sound_samples/cries/miltank.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/miltank.wav b/sound/direct_sound_samples/cries/miltank.wav new file mode 100644 index 000000000000..5f51f525bb50 Binary files /dev/null and b/sound/direct_sound_samples/cries/miltank.wav differ diff --git a/sound/direct_sound_samples/cries/mime_jr.aif b/sound/direct_sound_samples/cries/mime_jr.aif deleted file mode 100644 index 604c678fae99..000000000000 Binary files a/sound/direct_sound_samples/cries/mime_jr.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mime_jr.wav b/sound/direct_sound_samples/cries/mime_jr.wav new file mode 100644 index 000000000000..a02ccdb3b886 Binary files /dev/null and b/sound/direct_sound_samples/cries/mime_jr.wav differ diff --git a/sound/direct_sound_samples/cries/mimikyu.aif b/sound/direct_sound_samples/cries/mimikyu.aif deleted file mode 100644 index 15f3720dc75b..000000000000 Binary files a/sound/direct_sound_samples/cries/mimikyu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mimikyu.wav b/sound/direct_sound_samples/cries/mimikyu.wav new file mode 100644 index 000000000000..8f8eab2e6454 Binary files /dev/null and b/sound/direct_sound_samples/cries/mimikyu.wav differ diff --git a/sound/direct_sound_samples/cries/minccino.aif b/sound/direct_sound_samples/cries/minccino.aif deleted file mode 100644 index d49eb07414ad..000000000000 Binary files a/sound/direct_sound_samples/cries/minccino.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/minccino.wav b/sound/direct_sound_samples/cries/minccino.wav new file mode 100644 index 000000000000..b6c21d7d0e11 Binary files /dev/null and b/sound/direct_sound_samples/cries/minccino.wav differ diff --git a/sound/direct_sound_samples/cries/minior.aif b/sound/direct_sound_samples/cries/minior.aif deleted file mode 100644 index d739824e04e4..000000000000 Binary files a/sound/direct_sound_samples/cries/minior.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/minior.wav b/sound/direct_sound_samples/cries/minior.wav new file mode 100644 index 000000000000..a1c268922437 Binary files /dev/null and b/sound/direct_sound_samples/cries/minior.wav differ diff --git a/sound/direct_sound_samples/cries/minun.aif b/sound/direct_sound_samples/cries/minun.aif deleted file mode 100644 index 1b0d3405b99e..000000000000 Binary files a/sound/direct_sound_samples/cries/minun.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/minun.wav b/sound/direct_sound_samples/cries/minun.wav new file mode 100644 index 000000000000..9e9a62f7e8c9 Binary files /dev/null and b/sound/direct_sound_samples/cries/minun.wav differ diff --git a/sound/direct_sound_samples/cries/miraidon.aif b/sound/direct_sound_samples/cries/miraidon.aif deleted file mode 100644 index f07c1c360c1c..000000000000 Binary files a/sound/direct_sound_samples/cries/miraidon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/miraidon.wav b/sound/direct_sound_samples/cries/miraidon.wav new file mode 100644 index 000000000000..e0b09ed9f409 Binary files /dev/null and b/sound/direct_sound_samples/cries/miraidon.wav differ diff --git a/sound/direct_sound_samples/cries/misdreavus.aif b/sound/direct_sound_samples/cries/misdreavus.aif deleted file mode 100644 index 774a832ea114..000000000000 Binary files a/sound/direct_sound_samples/cries/misdreavus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/misdreavus.wav b/sound/direct_sound_samples/cries/misdreavus.wav new file mode 100644 index 000000000000..f632986da953 Binary files /dev/null and b/sound/direct_sound_samples/cries/misdreavus.wav differ diff --git a/sound/direct_sound_samples/cries/mismagius.aif b/sound/direct_sound_samples/cries/mismagius.aif deleted file mode 100644 index a9146205ba8f..000000000000 Binary files a/sound/direct_sound_samples/cries/mismagius.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mismagius.wav b/sound/direct_sound_samples/cries/mismagius.wav new file mode 100644 index 000000000000..0a19c2bff496 Binary files /dev/null and b/sound/direct_sound_samples/cries/mismagius.wav differ diff --git a/sound/direct_sound_samples/cries/moltres.aif b/sound/direct_sound_samples/cries/moltres.aif deleted file mode 100644 index 39570a316c87..000000000000 Binary files a/sound/direct_sound_samples/cries/moltres.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/moltres.wav b/sound/direct_sound_samples/cries/moltres.wav new file mode 100644 index 000000000000..7173a8cad4c7 Binary files /dev/null and b/sound/direct_sound_samples/cries/moltres.wav differ diff --git a/sound/direct_sound_samples/cries/monferno.aif b/sound/direct_sound_samples/cries/monferno.aif deleted file mode 100644 index 4f34c1de9121..000000000000 Binary files a/sound/direct_sound_samples/cries/monferno.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/monferno.wav b/sound/direct_sound_samples/cries/monferno.wav new file mode 100644 index 000000000000..030db53f08d5 Binary files /dev/null and b/sound/direct_sound_samples/cries/monferno.wav differ diff --git a/sound/direct_sound_samples/cries/morelull.aif b/sound/direct_sound_samples/cries/morelull.aif deleted file mode 100644 index 0b38baf6a496..000000000000 Binary files a/sound/direct_sound_samples/cries/morelull.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/morelull.wav b/sound/direct_sound_samples/cries/morelull.wav new file mode 100644 index 000000000000..05c6d3e75a50 Binary files /dev/null and b/sound/direct_sound_samples/cries/morelull.wav differ diff --git a/sound/direct_sound_samples/cries/morgrem.aif b/sound/direct_sound_samples/cries/morgrem.aif deleted file mode 100644 index b972242d3718..000000000000 Binary files a/sound/direct_sound_samples/cries/morgrem.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/morgrem.wav b/sound/direct_sound_samples/cries/morgrem.wav new file mode 100644 index 000000000000..d478cc0406e6 Binary files /dev/null and b/sound/direct_sound_samples/cries/morgrem.wav differ diff --git a/sound/direct_sound_samples/cries/morpeko_full_belly.aif b/sound/direct_sound_samples/cries/morpeko_full_belly.aif deleted file mode 100644 index 2feb33beb8c4..000000000000 Binary files a/sound/direct_sound_samples/cries/morpeko_full_belly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/morpeko_full_belly.wav b/sound/direct_sound_samples/cries/morpeko_full_belly.wav new file mode 100644 index 000000000000..21943e1a4db7 Binary files /dev/null and b/sound/direct_sound_samples/cries/morpeko_full_belly.wav differ diff --git a/sound/direct_sound_samples/cries/morpeko_hangry.aif b/sound/direct_sound_samples/cries/morpeko_hangry.aif deleted file mode 100644 index 84a89a2c01f4..000000000000 Binary files a/sound/direct_sound_samples/cries/morpeko_hangry.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/morpeko_hangry.wav b/sound/direct_sound_samples/cries/morpeko_hangry.wav new file mode 100644 index 000000000000..80c5eed428ff Binary files /dev/null and b/sound/direct_sound_samples/cries/morpeko_hangry.wav differ diff --git a/sound/direct_sound_samples/cries/mothim.aif b/sound/direct_sound_samples/cries/mothim.aif deleted file mode 100644 index d2a2c7b8c30a..000000000000 Binary files a/sound/direct_sound_samples/cries/mothim.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mothim.wav b/sound/direct_sound_samples/cries/mothim.wav new file mode 100644 index 000000000000..c1f085d52870 Binary files /dev/null and b/sound/direct_sound_samples/cries/mothim.wav differ diff --git a/sound/direct_sound_samples/cries/mr_mime.aif b/sound/direct_sound_samples/cries/mr_mime.aif deleted file mode 100644 index 991eeb9d1cdc..000000000000 Binary files a/sound/direct_sound_samples/cries/mr_mime.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mr_mime.wav b/sound/direct_sound_samples/cries/mr_mime.wav new file mode 100644 index 000000000000..23cf310532fb Binary files /dev/null and b/sound/direct_sound_samples/cries/mr_mime.wav differ diff --git a/sound/direct_sound_samples/cries/mr_rime.aif b/sound/direct_sound_samples/cries/mr_rime.aif deleted file mode 100644 index 86bbd33304d7..000000000000 Binary files a/sound/direct_sound_samples/cries/mr_rime.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mr_rime.wav b/sound/direct_sound_samples/cries/mr_rime.wav new file mode 100644 index 000000000000..653cb286c849 Binary files /dev/null and b/sound/direct_sound_samples/cries/mr_rime.wav differ diff --git a/sound/direct_sound_samples/cries/mudbray.aif b/sound/direct_sound_samples/cries/mudbray.aif deleted file mode 100644 index f7d0c8b28758..000000000000 Binary files a/sound/direct_sound_samples/cries/mudbray.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mudbray.wav b/sound/direct_sound_samples/cries/mudbray.wav new file mode 100644 index 000000000000..72f138c9b735 Binary files /dev/null and b/sound/direct_sound_samples/cries/mudbray.wav differ diff --git a/sound/direct_sound_samples/cries/mudkip.aif b/sound/direct_sound_samples/cries/mudkip.aif deleted file mode 100644 index 0162f94001dd..000000000000 Binary files a/sound/direct_sound_samples/cries/mudkip.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mudkip.wav b/sound/direct_sound_samples/cries/mudkip.wav new file mode 100644 index 000000000000..c965efe30c84 Binary files /dev/null and b/sound/direct_sound_samples/cries/mudkip.wav differ diff --git a/sound/direct_sound_samples/cries/mudsdale.aif b/sound/direct_sound_samples/cries/mudsdale.aif deleted file mode 100644 index 2776ec02dadb..000000000000 Binary files a/sound/direct_sound_samples/cries/mudsdale.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/mudsdale.wav b/sound/direct_sound_samples/cries/mudsdale.wav new file mode 100644 index 000000000000..01222f6e18e1 Binary files /dev/null and b/sound/direct_sound_samples/cries/mudsdale.wav differ diff --git a/sound/direct_sound_samples/cries/muk.aif b/sound/direct_sound_samples/cries/muk.aif deleted file mode 100644 index 2abfd59591b2..000000000000 Binary files a/sound/direct_sound_samples/cries/muk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/muk.wav b/sound/direct_sound_samples/cries/muk.wav new file mode 100644 index 000000000000..27cd6bdeb19b Binary files /dev/null and b/sound/direct_sound_samples/cries/muk.wav differ diff --git a/sound/direct_sound_samples/cries/munchlax.aif b/sound/direct_sound_samples/cries/munchlax.aif deleted file mode 100644 index ce347a32f472..000000000000 Binary files a/sound/direct_sound_samples/cries/munchlax.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/munchlax.wav b/sound/direct_sound_samples/cries/munchlax.wav new file mode 100644 index 000000000000..ead5eb1974b5 Binary files /dev/null and b/sound/direct_sound_samples/cries/munchlax.wav differ diff --git a/sound/direct_sound_samples/cries/munkidori.aif b/sound/direct_sound_samples/cries/munkidori.aif deleted file mode 100644 index 7cb192732e4e..000000000000 Binary files a/sound/direct_sound_samples/cries/munkidori.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/munkidori.wav b/sound/direct_sound_samples/cries/munkidori.wav new file mode 100644 index 000000000000..d37e97ac5458 Binary files /dev/null and b/sound/direct_sound_samples/cries/munkidori.wav differ diff --git a/sound/direct_sound_samples/cries/munna.aif b/sound/direct_sound_samples/cries/munna.aif deleted file mode 100644 index 443bb808998c..000000000000 Binary files a/sound/direct_sound_samples/cries/munna.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/munna.wav b/sound/direct_sound_samples/cries/munna.wav new file mode 100644 index 000000000000..2de57dd37650 Binary files /dev/null and b/sound/direct_sound_samples/cries/munna.wav differ diff --git a/sound/direct_sound_samples/cries/murkrow.aif b/sound/direct_sound_samples/cries/murkrow.aif deleted file mode 100644 index 1e7c6dd79266..000000000000 Binary files a/sound/direct_sound_samples/cries/murkrow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/murkrow.wav b/sound/direct_sound_samples/cries/murkrow.wav new file mode 100644 index 000000000000..5da336fa90f3 Binary files /dev/null and b/sound/direct_sound_samples/cries/murkrow.wav differ diff --git a/sound/direct_sound_samples/cries/musharna.aif b/sound/direct_sound_samples/cries/musharna.aif deleted file mode 100644 index 69dd2800cf36..000000000000 Binary files a/sound/direct_sound_samples/cries/musharna.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/musharna.wav b/sound/direct_sound_samples/cries/musharna.wav new file mode 100644 index 000000000000..cac55c51ff35 Binary files /dev/null and b/sound/direct_sound_samples/cries/musharna.wav differ diff --git a/sound/direct_sound_samples/cries/nacli.aif b/sound/direct_sound_samples/cries/nacli.aif deleted file mode 100644 index b29d579ee252..000000000000 Binary files a/sound/direct_sound_samples/cries/nacli.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nacli.wav b/sound/direct_sound_samples/cries/nacli.wav new file mode 100644 index 000000000000..93ec1a80f69d Binary files /dev/null and b/sound/direct_sound_samples/cries/nacli.wav differ diff --git a/sound/direct_sound_samples/cries/naclstack.aif b/sound/direct_sound_samples/cries/naclstack.aif deleted file mode 100644 index 31eca0bd4991..000000000000 Binary files a/sound/direct_sound_samples/cries/naclstack.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/naclstack.wav b/sound/direct_sound_samples/cries/naclstack.wav new file mode 100644 index 000000000000..f2232083176d Binary files /dev/null and b/sound/direct_sound_samples/cries/naclstack.wav differ diff --git a/sound/direct_sound_samples/cries/naganadel.aif b/sound/direct_sound_samples/cries/naganadel.aif deleted file mode 100644 index 4cd829612baf..000000000000 Binary files a/sound/direct_sound_samples/cries/naganadel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/naganadel.wav b/sound/direct_sound_samples/cries/naganadel.wav new file mode 100644 index 000000000000..989d068a6bd5 Binary files /dev/null and b/sound/direct_sound_samples/cries/naganadel.wav differ diff --git a/sound/direct_sound_samples/cries/natu.aif b/sound/direct_sound_samples/cries/natu.aif deleted file mode 100644 index 760943988892..000000000000 Binary files a/sound/direct_sound_samples/cries/natu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/natu.wav b/sound/direct_sound_samples/cries/natu.wav new file mode 100644 index 000000000000..4a2c85317849 Binary files /dev/null and b/sound/direct_sound_samples/cries/natu.wav differ diff --git a/sound/direct_sound_samples/cries/necrozma.aif b/sound/direct_sound_samples/cries/necrozma.aif deleted file mode 100644 index db81bc135a5b..000000000000 Binary files a/sound/direct_sound_samples/cries/necrozma.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/necrozma.wav b/sound/direct_sound_samples/cries/necrozma.wav new file mode 100644 index 000000000000..526ead7f45b4 Binary files /dev/null and b/sound/direct_sound_samples/cries/necrozma.wav differ diff --git a/sound/direct_sound_samples/cries/necrozma_dawn_wings.aif b/sound/direct_sound_samples/cries/necrozma_dawn_wings.aif deleted file mode 100644 index f33539121eed..000000000000 Binary files a/sound/direct_sound_samples/cries/necrozma_dawn_wings.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/necrozma_dawn_wings.wav b/sound/direct_sound_samples/cries/necrozma_dawn_wings.wav new file mode 100644 index 000000000000..0ffa398c79f8 Binary files /dev/null and b/sound/direct_sound_samples/cries/necrozma_dawn_wings.wav differ diff --git a/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif b/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif deleted file mode 100644 index fce3fb2f61df..000000000000 Binary files a/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/necrozma_dusk_mane.wav b/sound/direct_sound_samples/cries/necrozma_dusk_mane.wav new file mode 100644 index 000000000000..b601790ba7f1 Binary files /dev/null and b/sound/direct_sound_samples/cries/necrozma_dusk_mane.wav differ diff --git a/sound/direct_sound_samples/cries/necrozma_ultra.aif b/sound/direct_sound_samples/cries/necrozma_ultra.aif deleted file mode 100644 index cfc9c5f27b3d..000000000000 Binary files a/sound/direct_sound_samples/cries/necrozma_ultra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/necrozma_ultra.wav b/sound/direct_sound_samples/cries/necrozma_ultra.wav new file mode 100644 index 000000000000..dfbceebaf43c Binary files /dev/null and b/sound/direct_sound_samples/cries/necrozma_ultra.wav differ diff --git a/sound/direct_sound_samples/cries/nickit.aif b/sound/direct_sound_samples/cries/nickit.aif deleted file mode 100644 index a4d660bb9dbc..000000000000 Binary files a/sound/direct_sound_samples/cries/nickit.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nickit.wav b/sound/direct_sound_samples/cries/nickit.wav new file mode 100644 index 000000000000..820a0d55685e Binary files /dev/null and b/sound/direct_sound_samples/cries/nickit.wav differ diff --git a/sound/direct_sound_samples/cries/nidoking.aif b/sound/direct_sound_samples/cries/nidoking.aif deleted file mode 100644 index 5a645ca83a4f..000000000000 Binary files a/sound/direct_sound_samples/cries/nidoking.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nidoking.wav b/sound/direct_sound_samples/cries/nidoking.wav new file mode 100644 index 000000000000..556b20bdacef Binary files /dev/null and b/sound/direct_sound_samples/cries/nidoking.wav differ diff --git a/sound/direct_sound_samples/cries/nidoqueen.aif b/sound/direct_sound_samples/cries/nidoqueen.aif deleted file mode 100644 index 878570d3f68b..000000000000 Binary files a/sound/direct_sound_samples/cries/nidoqueen.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nidoqueen.wav b/sound/direct_sound_samples/cries/nidoqueen.wav new file mode 100644 index 000000000000..7c23623a1787 Binary files /dev/null and b/sound/direct_sound_samples/cries/nidoqueen.wav differ diff --git a/sound/direct_sound_samples/cries/nidoran_f.aif b/sound/direct_sound_samples/cries/nidoran_f.aif deleted file mode 100644 index cf0213394974..000000000000 Binary files a/sound/direct_sound_samples/cries/nidoran_f.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nidoran_f.wav b/sound/direct_sound_samples/cries/nidoran_f.wav new file mode 100644 index 000000000000..2997c2b5795a Binary files /dev/null and b/sound/direct_sound_samples/cries/nidoran_f.wav differ diff --git a/sound/direct_sound_samples/cries/nidoran_m.aif b/sound/direct_sound_samples/cries/nidoran_m.aif deleted file mode 100644 index 2e691595bf73..000000000000 Binary files a/sound/direct_sound_samples/cries/nidoran_m.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nidoran_m.wav b/sound/direct_sound_samples/cries/nidoran_m.wav new file mode 100644 index 000000000000..160ab71e7fdf Binary files /dev/null and b/sound/direct_sound_samples/cries/nidoran_m.wav differ diff --git a/sound/direct_sound_samples/cries/nidorina.aif b/sound/direct_sound_samples/cries/nidorina.aif deleted file mode 100644 index 3f73fd947f5c..000000000000 Binary files a/sound/direct_sound_samples/cries/nidorina.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nidorina.wav b/sound/direct_sound_samples/cries/nidorina.wav new file mode 100644 index 000000000000..a46c4167013e Binary files /dev/null and b/sound/direct_sound_samples/cries/nidorina.wav differ diff --git a/sound/direct_sound_samples/cries/nidorino.aif b/sound/direct_sound_samples/cries/nidorino.aif deleted file mode 100644 index 75e48cc72136..000000000000 Binary files a/sound/direct_sound_samples/cries/nidorino.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nidorino.wav b/sound/direct_sound_samples/cries/nidorino.wav new file mode 100644 index 000000000000..38db59c2f149 Binary files /dev/null and b/sound/direct_sound_samples/cries/nidorino.wav differ diff --git a/sound/direct_sound_samples/cries/nihilego.aif b/sound/direct_sound_samples/cries/nihilego.aif deleted file mode 100644 index 17c56e8cbf46..000000000000 Binary files a/sound/direct_sound_samples/cries/nihilego.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nihilego.wav b/sound/direct_sound_samples/cries/nihilego.wav new file mode 100644 index 000000000000..8467b70a1fc4 Binary files /dev/null and b/sound/direct_sound_samples/cries/nihilego.wav differ diff --git a/sound/direct_sound_samples/cries/nincada.aif b/sound/direct_sound_samples/cries/nincada.aif deleted file mode 100644 index d4695111cd89..000000000000 Binary files a/sound/direct_sound_samples/cries/nincada.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nincada.wav b/sound/direct_sound_samples/cries/nincada.wav new file mode 100644 index 000000000000..dd5feb818d26 Binary files /dev/null and b/sound/direct_sound_samples/cries/nincada.wav differ diff --git a/sound/direct_sound_samples/cries/ninetales.aif b/sound/direct_sound_samples/cries/ninetales.aif deleted file mode 100644 index 51a260f9e92a..000000000000 Binary files a/sound/direct_sound_samples/cries/ninetales.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ninetales.wav b/sound/direct_sound_samples/cries/ninetales.wav new file mode 100644 index 000000000000..f84b8743641f Binary files /dev/null and b/sound/direct_sound_samples/cries/ninetales.wav differ diff --git a/sound/direct_sound_samples/cries/ninjask.aif b/sound/direct_sound_samples/cries/ninjask.aif deleted file mode 100644 index 06693156a76d..000000000000 Binary files a/sound/direct_sound_samples/cries/ninjask.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ninjask.wav b/sound/direct_sound_samples/cries/ninjask.wav new file mode 100644 index 000000000000..b61f4d37f5b7 Binary files /dev/null and b/sound/direct_sound_samples/cries/ninjask.wav differ diff --git a/sound/direct_sound_samples/cries/noctowl.aif b/sound/direct_sound_samples/cries/noctowl.aif deleted file mode 100644 index 2a96488f28f4..000000000000 Binary files a/sound/direct_sound_samples/cries/noctowl.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/noctowl.wav b/sound/direct_sound_samples/cries/noctowl.wav new file mode 100644 index 000000000000..ab705b6f2cef Binary files /dev/null and b/sound/direct_sound_samples/cries/noctowl.wav differ diff --git a/sound/direct_sound_samples/cries/noibat.aif b/sound/direct_sound_samples/cries/noibat.aif deleted file mode 100644 index 6f3c18f40dc0..000000000000 Binary files a/sound/direct_sound_samples/cries/noibat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/noibat.wav b/sound/direct_sound_samples/cries/noibat.wav new file mode 100644 index 000000000000..346fb772bd28 Binary files /dev/null and b/sound/direct_sound_samples/cries/noibat.wav differ diff --git a/sound/direct_sound_samples/cries/noivern.aif b/sound/direct_sound_samples/cries/noivern.aif deleted file mode 100644 index 5806e6971361..000000000000 Binary files a/sound/direct_sound_samples/cries/noivern.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/noivern.wav b/sound/direct_sound_samples/cries/noivern.wav new file mode 100644 index 000000000000..eb44488e8abd Binary files /dev/null and b/sound/direct_sound_samples/cries/noivern.wav differ diff --git a/sound/direct_sound_samples/cries/nosepass.aif b/sound/direct_sound_samples/cries/nosepass.aif deleted file mode 100644 index 04c28caa6bbe..000000000000 Binary files a/sound/direct_sound_samples/cries/nosepass.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nosepass.wav b/sound/direct_sound_samples/cries/nosepass.wav new file mode 100644 index 000000000000..1e15fb10d39b Binary files /dev/null and b/sound/direct_sound_samples/cries/nosepass.wav differ diff --git a/sound/direct_sound_samples/cries/numel.aif b/sound/direct_sound_samples/cries/numel.aif deleted file mode 100644 index 9d6c2e051783..000000000000 Binary files a/sound/direct_sound_samples/cries/numel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/numel.wav b/sound/direct_sound_samples/cries/numel.wav new file mode 100644 index 000000000000..2d2d16f02137 Binary files /dev/null and b/sound/direct_sound_samples/cries/numel.wav differ diff --git a/sound/direct_sound_samples/cries/nuzleaf.aif b/sound/direct_sound_samples/cries/nuzleaf.aif deleted file mode 100644 index 2d836705befe..000000000000 Binary files a/sound/direct_sound_samples/cries/nuzleaf.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nuzleaf.wav b/sound/direct_sound_samples/cries/nuzleaf.wav new file mode 100644 index 000000000000..5efb6e806897 Binary files /dev/null and b/sound/direct_sound_samples/cries/nuzleaf.wav differ diff --git a/sound/direct_sound_samples/cries/nymble.aif b/sound/direct_sound_samples/cries/nymble.aif deleted file mode 100644 index bc41462fb658..000000000000 Binary files a/sound/direct_sound_samples/cries/nymble.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/nymble.wav b/sound/direct_sound_samples/cries/nymble.wav new file mode 100644 index 000000000000..aad585fc6c1b Binary files /dev/null and b/sound/direct_sound_samples/cries/nymble.wav differ diff --git a/sound/direct_sound_samples/cries/obstagoon.aif b/sound/direct_sound_samples/cries/obstagoon.aif deleted file mode 100644 index f1c4a45366eb..000000000000 Binary files a/sound/direct_sound_samples/cries/obstagoon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/obstagoon.wav b/sound/direct_sound_samples/cries/obstagoon.wav new file mode 100644 index 000000000000..2b65e063abfa Binary files /dev/null and b/sound/direct_sound_samples/cries/obstagoon.wav differ diff --git a/sound/direct_sound_samples/cries/octillery.aif b/sound/direct_sound_samples/cries/octillery.aif deleted file mode 100644 index 196400455137..000000000000 Binary files a/sound/direct_sound_samples/cries/octillery.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/octillery.wav b/sound/direct_sound_samples/cries/octillery.wav new file mode 100644 index 000000000000..190d42c6746d Binary files /dev/null and b/sound/direct_sound_samples/cries/octillery.wav differ diff --git a/sound/direct_sound_samples/cries/oddish.aif b/sound/direct_sound_samples/cries/oddish.aif deleted file mode 100644 index 4f30f7ddb452..000000000000 Binary files a/sound/direct_sound_samples/cries/oddish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/oddish.wav b/sound/direct_sound_samples/cries/oddish.wav new file mode 100644 index 000000000000..de6855d369b3 Binary files /dev/null and b/sound/direct_sound_samples/cries/oddish.wav differ diff --git a/sound/direct_sound_samples/cries/ogerpon.aif b/sound/direct_sound_samples/cries/ogerpon.aif deleted file mode 100644 index 17b9d94d62fd..000000000000 Binary files a/sound/direct_sound_samples/cries/ogerpon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ogerpon.wav b/sound/direct_sound_samples/cries/ogerpon.wav new file mode 100644 index 000000000000..82a3a54b16ce Binary files /dev/null and b/sound/direct_sound_samples/cries/ogerpon.wav differ diff --git a/sound/direct_sound_samples/cries/oinkologne_f.aif b/sound/direct_sound_samples/cries/oinkologne_f.aif deleted file mode 100644 index 885f2e3a7dd9..000000000000 Binary files a/sound/direct_sound_samples/cries/oinkologne_f.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/oinkologne_f.wav b/sound/direct_sound_samples/cries/oinkologne_f.wav new file mode 100644 index 000000000000..f075ebb3cf51 Binary files /dev/null and b/sound/direct_sound_samples/cries/oinkologne_f.wav differ diff --git a/sound/direct_sound_samples/cries/oinkologne_m.aif b/sound/direct_sound_samples/cries/oinkologne_m.aif deleted file mode 100644 index 611794de314c..000000000000 Binary files a/sound/direct_sound_samples/cries/oinkologne_m.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/oinkologne_m.wav b/sound/direct_sound_samples/cries/oinkologne_m.wav new file mode 100644 index 000000000000..ca0a7e450e32 Binary files /dev/null and b/sound/direct_sound_samples/cries/oinkologne_m.wav differ diff --git a/sound/direct_sound_samples/cries/okidogi.aif b/sound/direct_sound_samples/cries/okidogi.aif deleted file mode 100644 index f22f3ba3358b..000000000000 Binary files a/sound/direct_sound_samples/cries/okidogi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/okidogi.wav b/sound/direct_sound_samples/cries/okidogi.wav new file mode 100644 index 000000000000..1370c786d069 Binary files /dev/null and b/sound/direct_sound_samples/cries/okidogi.wav differ diff --git a/sound/direct_sound_samples/cries/omanyte.aif b/sound/direct_sound_samples/cries/omanyte.aif deleted file mode 100644 index eeedac34db7e..000000000000 Binary files a/sound/direct_sound_samples/cries/omanyte.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/omanyte.wav b/sound/direct_sound_samples/cries/omanyte.wav new file mode 100644 index 000000000000..3db237ac3f95 Binary files /dev/null and b/sound/direct_sound_samples/cries/omanyte.wav differ diff --git a/sound/direct_sound_samples/cries/omastar.aif b/sound/direct_sound_samples/cries/omastar.aif deleted file mode 100644 index 9d4f738efd1a..000000000000 Binary files a/sound/direct_sound_samples/cries/omastar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/omastar.wav b/sound/direct_sound_samples/cries/omastar.wav new file mode 100644 index 000000000000..69a4ea868f49 Binary files /dev/null and b/sound/direct_sound_samples/cries/omastar.wav differ diff --git a/sound/direct_sound_samples/cries/onix.aif b/sound/direct_sound_samples/cries/onix.aif deleted file mode 100644 index 6203ce568969..000000000000 Binary files a/sound/direct_sound_samples/cries/onix.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/onix.wav b/sound/direct_sound_samples/cries/onix.wav new file mode 100644 index 000000000000..57da6014103a Binary files /dev/null and b/sound/direct_sound_samples/cries/onix.wav differ diff --git a/sound/direct_sound_samples/cries/oranguru.aif b/sound/direct_sound_samples/cries/oranguru.aif deleted file mode 100644 index ec919ba93c69..000000000000 Binary files a/sound/direct_sound_samples/cries/oranguru.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/oranguru.wav b/sound/direct_sound_samples/cries/oranguru.wav new file mode 100644 index 000000000000..e8fa50d5d3f5 Binary files /dev/null and b/sound/direct_sound_samples/cries/oranguru.wav differ diff --git a/sound/direct_sound_samples/cries/orbeetle.aif b/sound/direct_sound_samples/cries/orbeetle.aif deleted file mode 100644 index 4b99afad159d..000000000000 Binary files a/sound/direct_sound_samples/cries/orbeetle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/orbeetle.wav b/sound/direct_sound_samples/cries/orbeetle.wav new file mode 100644 index 000000000000..384fe691d62f Binary files /dev/null and b/sound/direct_sound_samples/cries/orbeetle.wav differ diff --git a/sound/direct_sound_samples/cries/oricorio_baile.aif b/sound/direct_sound_samples/cries/oricorio_baile.aif deleted file mode 100644 index c5ec5af19b4a..000000000000 Binary files a/sound/direct_sound_samples/cries/oricorio_baile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/oricorio_baile.wav b/sound/direct_sound_samples/cries/oricorio_baile.wav new file mode 100644 index 000000000000..e1719cf8e9fc Binary files /dev/null and b/sound/direct_sound_samples/cries/oricorio_baile.wav differ diff --git a/sound/direct_sound_samples/cries/oricorio_pau.aif b/sound/direct_sound_samples/cries/oricorio_pau.aif deleted file mode 100644 index 4faa6cc083c8..000000000000 Binary files a/sound/direct_sound_samples/cries/oricorio_pau.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/oricorio_pau.wav b/sound/direct_sound_samples/cries/oricorio_pau.wav new file mode 100644 index 000000000000..71fa963187d5 Binary files /dev/null and b/sound/direct_sound_samples/cries/oricorio_pau.wav differ diff --git a/sound/direct_sound_samples/cries/oricorio_sensu.aif b/sound/direct_sound_samples/cries/oricorio_sensu.aif deleted file mode 100644 index bdc25a774970..000000000000 Binary files a/sound/direct_sound_samples/cries/oricorio_sensu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/oricorio_sensu.wav b/sound/direct_sound_samples/cries/oricorio_sensu.wav new file mode 100644 index 000000000000..dc7687252ad3 Binary files /dev/null and b/sound/direct_sound_samples/cries/oricorio_sensu.wav differ diff --git a/sound/direct_sound_samples/cries/orthworm.aif b/sound/direct_sound_samples/cries/orthworm.aif deleted file mode 100644 index f88eec62f097..000000000000 Binary files a/sound/direct_sound_samples/cries/orthworm.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/orthworm.wav b/sound/direct_sound_samples/cries/orthworm.wav new file mode 100644 index 000000000000..df86b5f9d844 Binary files /dev/null and b/sound/direct_sound_samples/cries/orthworm.wav differ diff --git a/sound/direct_sound_samples/cries/oshawott.aif b/sound/direct_sound_samples/cries/oshawott.aif deleted file mode 100644 index 81bf2917ed81..000000000000 Binary files a/sound/direct_sound_samples/cries/oshawott.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/oshawott.wav b/sound/direct_sound_samples/cries/oshawott.wav new file mode 100644 index 000000000000..8669120bb328 Binary files /dev/null and b/sound/direct_sound_samples/cries/oshawott.wav differ diff --git a/sound/direct_sound_samples/cries/overqwil.aif b/sound/direct_sound_samples/cries/overqwil.aif deleted file mode 100644 index 8b9a8a2dffce..000000000000 Binary files a/sound/direct_sound_samples/cries/overqwil.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/overqwil.wav b/sound/direct_sound_samples/cries/overqwil.wav new file mode 100644 index 000000000000..5b278516fcab Binary files /dev/null and b/sound/direct_sound_samples/cries/overqwil.wav differ diff --git a/sound/direct_sound_samples/cries/pachirisu.aif b/sound/direct_sound_samples/cries/pachirisu.aif deleted file mode 100644 index 6471363ee686..000000000000 Binary files a/sound/direct_sound_samples/cries/pachirisu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pachirisu.wav b/sound/direct_sound_samples/cries/pachirisu.wav new file mode 100644 index 000000000000..311b40aa53cb Binary files /dev/null and b/sound/direct_sound_samples/cries/pachirisu.wav differ diff --git a/sound/direct_sound_samples/cries/palafin_hero.aif b/sound/direct_sound_samples/cries/palafin_hero.aif deleted file mode 100644 index 5ef87ddeb8d4..000000000000 Binary files a/sound/direct_sound_samples/cries/palafin_hero.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/palafin_hero.wav b/sound/direct_sound_samples/cries/palafin_hero.wav new file mode 100644 index 000000000000..8ec713357d75 Binary files /dev/null and b/sound/direct_sound_samples/cries/palafin_hero.wav differ diff --git a/sound/direct_sound_samples/cries/palafin_zero.aif b/sound/direct_sound_samples/cries/palafin_zero.aif deleted file mode 100644 index 16051848beb8..000000000000 Binary files a/sound/direct_sound_samples/cries/palafin_zero.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/palafin_zero.wav b/sound/direct_sound_samples/cries/palafin_zero.wav new file mode 100644 index 000000000000..f8526574c730 Binary files /dev/null and b/sound/direct_sound_samples/cries/palafin_zero.wav differ diff --git a/sound/direct_sound_samples/cries/palkia.aif b/sound/direct_sound_samples/cries/palkia.aif deleted file mode 100644 index dee52b9a5966..000000000000 Binary files a/sound/direct_sound_samples/cries/palkia.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/palkia.wav b/sound/direct_sound_samples/cries/palkia.wav new file mode 100644 index 000000000000..b3f057c1a029 Binary files /dev/null and b/sound/direct_sound_samples/cries/palkia.wav differ diff --git a/sound/direct_sound_samples/cries/palossand.aif b/sound/direct_sound_samples/cries/palossand.aif deleted file mode 100644 index a4a1da4feeec..000000000000 Binary files a/sound/direct_sound_samples/cries/palossand.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/palossand.wav b/sound/direct_sound_samples/cries/palossand.wav new file mode 100644 index 000000000000..2908e31766d9 Binary files /dev/null and b/sound/direct_sound_samples/cries/palossand.wav differ diff --git a/sound/direct_sound_samples/cries/palpitoad.aif b/sound/direct_sound_samples/cries/palpitoad.aif deleted file mode 100644 index 054d2dba0bb1..000000000000 Binary files a/sound/direct_sound_samples/cries/palpitoad.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/palpitoad.wav b/sound/direct_sound_samples/cries/palpitoad.wav new file mode 100644 index 000000000000..04b404c1c7b4 Binary files /dev/null and b/sound/direct_sound_samples/cries/palpitoad.wav differ diff --git a/sound/direct_sound_samples/cries/pancham.aif b/sound/direct_sound_samples/cries/pancham.aif deleted file mode 100644 index 5a986eddf471..000000000000 Binary files a/sound/direct_sound_samples/cries/pancham.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pancham.wav b/sound/direct_sound_samples/cries/pancham.wav new file mode 100644 index 000000000000..dbee7918fc85 Binary files /dev/null and b/sound/direct_sound_samples/cries/pancham.wav differ diff --git a/sound/direct_sound_samples/cries/pangoro.aif b/sound/direct_sound_samples/cries/pangoro.aif deleted file mode 100644 index 47f7bcf2d055..000000000000 Binary files a/sound/direct_sound_samples/cries/pangoro.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pangoro.wav b/sound/direct_sound_samples/cries/pangoro.wav new file mode 100644 index 000000000000..e277056884c7 Binary files /dev/null and b/sound/direct_sound_samples/cries/pangoro.wav differ diff --git a/sound/direct_sound_samples/cries/panpour.aif b/sound/direct_sound_samples/cries/panpour.aif deleted file mode 100644 index 18b65158eb2f..000000000000 Binary files a/sound/direct_sound_samples/cries/panpour.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/panpour.wav b/sound/direct_sound_samples/cries/panpour.wav new file mode 100644 index 000000000000..8a2042cd638b Binary files /dev/null and b/sound/direct_sound_samples/cries/panpour.wav differ diff --git a/sound/direct_sound_samples/cries/pansage.aif b/sound/direct_sound_samples/cries/pansage.aif deleted file mode 100644 index a4d277230f73..000000000000 Binary files a/sound/direct_sound_samples/cries/pansage.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pansage.wav b/sound/direct_sound_samples/cries/pansage.wav new file mode 100644 index 000000000000..30004e063733 Binary files /dev/null and b/sound/direct_sound_samples/cries/pansage.wav differ diff --git a/sound/direct_sound_samples/cries/pansear.aif b/sound/direct_sound_samples/cries/pansear.aif deleted file mode 100644 index 4d76d6089cb9..000000000000 Binary files a/sound/direct_sound_samples/cries/pansear.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pansear.wav b/sound/direct_sound_samples/cries/pansear.wav new file mode 100644 index 000000000000..fde72b7e4535 Binary files /dev/null and b/sound/direct_sound_samples/cries/pansear.wav differ diff --git a/sound/direct_sound_samples/cries/paras.aif b/sound/direct_sound_samples/cries/paras.aif deleted file mode 100644 index fbfbfaf07b18..000000000000 Binary files a/sound/direct_sound_samples/cries/paras.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/paras.wav b/sound/direct_sound_samples/cries/paras.wav new file mode 100644 index 000000000000..ba4a051c9fbb Binary files /dev/null and b/sound/direct_sound_samples/cries/paras.wav differ diff --git a/sound/direct_sound_samples/cries/parasect.aif b/sound/direct_sound_samples/cries/parasect.aif deleted file mode 100644 index 1251cbabefb8..000000000000 Binary files a/sound/direct_sound_samples/cries/parasect.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/parasect.wav b/sound/direct_sound_samples/cries/parasect.wav new file mode 100644 index 000000000000..5ff6ac29070b Binary files /dev/null and b/sound/direct_sound_samples/cries/parasect.wav differ diff --git a/sound/direct_sound_samples/cries/passimian.aif b/sound/direct_sound_samples/cries/passimian.aif deleted file mode 100644 index ac824012e5f6..000000000000 Binary files a/sound/direct_sound_samples/cries/passimian.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/passimian.wav b/sound/direct_sound_samples/cries/passimian.wav new file mode 100644 index 000000000000..f17f2ec250b6 Binary files /dev/null and b/sound/direct_sound_samples/cries/passimian.wav differ diff --git a/sound/direct_sound_samples/cries/patrat.aif b/sound/direct_sound_samples/cries/patrat.aif deleted file mode 100644 index f1e17939ab10..000000000000 Binary files a/sound/direct_sound_samples/cries/patrat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/patrat.wav b/sound/direct_sound_samples/cries/patrat.wav new file mode 100644 index 000000000000..51982fbc7818 Binary files /dev/null and b/sound/direct_sound_samples/cries/patrat.wav differ diff --git a/sound/direct_sound_samples/cries/pawmi.aif b/sound/direct_sound_samples/cries/pawmi.aif deleted file mode 100644 index fa9a9197cb67..000000000000 Binary files a/sound/direct_sound_samples/cries/pawmi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pawmi.wav b/sound/direct_sound_samples/cries/pawmi.wav new file mode 100644 index 000000000000..ac07672b4a2d Binary files /dev/null and b/sound/direct_sound_samples/cries/pawmi.wav differ diff --git a/sound/direct_sound_samples/cries/pawmo.aif b/sound/direct_sound_samples/cries/pawmo.aif deleted file mode 100644 index 7fbf646c2f46..000000000000 Binary files a/sound/direct_sound_samples/cries/pawmo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pawmo.wav b/sound/direct_sound_samples/cries/pawmo.wav new file mode 100644 index 000000000000..8ffc03d00553 Binary files /dev/null and b/sound/direct_sound_samples/cries/pawmo.wav differ diff --git a/sound/direct_sound_samples/cries/pawmot.aif b/sound/direct_sound_samples/cries/pawmot.aif deleted file mode 100644 index 40ad2d5bf27b..000000000000 Binary files a/sound/direct_sound_samples/cries/pawmot.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pawmot.wav b/sound/direct_sound_samples/cries/pawmot.wav new file mode 100644 index 000000000000..81fe4267c83d Binary files /dev/null and b/sound/direct_sound_samples/cries/pawmot.wav differ diff --git a/sound/direct_sound_samples/cries/pawniard.aif b/sound/direct_sound_samples/cries/pawniard.aif deleted file mode 100644 index 61968928374f..000000000000 Binary files a/sound/direct_sound_samples/cries/pawniard.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pawniard.wav b/sound/direct_sound_samples/cries/pawniard.wav new file mode 100644 index 000000000000..25663a52c069 Binary files /dev/null and b/sound/direct_sound_samples/cries/pawniard.wav differ diff --git a/sound/direct_sound_samples/cries/pecharunt.aif b/sound/direct_sound_samples/cries/pecharunt.aif deleted file mode 100644 index 024e6bb587cf..000000000000 Binary files a/sound/direct_sound_samples/cries/pecharunt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pecharunt.wav b/sound/direct_sound_samples/cries/pecharunt.wav new file mode 100644 index 000000000000..9d9fadf408c4 Binary files /dev/null and b/sound/direct_sound_samples/cries/pecharunt.wav differ diff --git a/sound/direct_sound_samples/cries/pelipper.aif b/sound/direct_sound_samples/cries/pelipper.aif deleted file mode 100644 index 64a008036064..000000000000 Binary files a/sound/direct_sound_samples/cries/pelipper.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pelipper.wav b/sound/direct_sound_samples/cries/pelipper.wav new file mode 100644 index 000000000000..665dbcac9e2e Binary files /dev/null and b/sound/direct_sound_samples/cries/pelipper.wav differ diff --git a/sound/direct_sound_samples/cries/perrserker.aif b/sound/direct_sound_samples/cries/perrserker.aif deleted file mode 100644 index b790ce5c5130..000000000000 Binary files a/sound/direct_sound_samples/cries/perrserker.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/perrserker.wav b/sound/direct_sound_samples/cries/perrserker.wav new file mode 100644 index 000000000000..80845b8c0723 Binary files /dev/null and b/sound/direct_sound_samples/cries/perrserker.wav differ diff --git a/sound/direct_sound_samples/cries/persian.aif b/sound/direct_sound_samples/cries/persian.aif deleted file mode 100644 index d87fe2cbe1d1..000000000000 Binary files a/sound/direct_sound_samples/cries/persian.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/persian.wav b/sound/direct_sound_samples/cries/persian.wav new file mode 100644 index 000000000000..96acf8296ce4 Binary files /dev/null and b/sound/direct_sound_samples/cries/persian.wav differ diff --git a/sound/direct_sound_samples/cries/petilil.aif b/sound/direct_sound_samples/cries/petilil.aif deleted file mode 100644 index 6252c7624704..000000000000 Binary files a/sound/direct_sound_samples/cries/petilil.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/petilil.wav b/sound/direct_sound_samples/cries/petilil.wav new file mode 100644 index 000000000000..0bda09b259cf Binary files /dev/null and b/sound/direct_sound_samples/cries/petilil.wav differ diff --git a/sound/direct_sound_samples/cries/phanpy.aif b/sound/direct_sound_samples/cries/phanpy.aif deleted file mode 100644 index 0c541c3bf155..000000000000 Binary files a/sound/direct_sound_samples/cries/phanpy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/phanpy.wav b/sound/direct_sound_samples/cries/phanpy.wav new file mode 100644 index 000000000000..4de13cafe1c7 Binary files /dev/null and b/sound/direct_sound_samples/cries/phanpy.wav differ diff --git a/sound/direct_sound_samples/cries/phantump.aif b/sound/direct_sound_samples/cries/phantump.aif deleted file mode 100644 index 1afccc074c53..000000000000 Binary files a/sound/direct_sound_samples/cries/phantump.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/phantump.wav b/sound/direct_sound_samples/cries/phantump.wav new file mode 100644 index 000000000000..3f0db048adf3 Binary files /dev/null and b/sound/direct_sound_samples/cries/phantump.wav differ diff --git a/sound/direct_sound_samples/cries/pheromosa.aif b/sound/direct_sound_samples/cries/pheromosa.aif deleted file mode 100644 index bcf57050d3e6..000000000000 Binary files a/sound/direct_sound_samples/cries/pheromosa.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pheromosa.wav b/sound/direct_sound_samples/cries/pheromosa.wav new file mode 100644 index 000000000000..a8f41396d373 Binary files /dev/null and b/sound/direct_sound_samples/cries/pheromosa.wav differ diff --git a/sound/direct_sound_samples/cries/phione.aif b/sound/direct_sound_samples/cries/phione.aif deleted file mode 100644 index ba31bd9a5d6d..000000000000 Binary files a/sound/direct_sound_samples/cries/phione.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/phione.wav b/sound/direct_sound_samples/cries/phione.wav new file mode 100644 index 000000000000..bbc661c9eb30 Binary files /dev/null and b/sound/direct_sound_samples/cries/phione.wav differ diff --git a/sound/direct_sound_samples/cries/pichu.aif b/sound/direct_sound_samples/cries/pichu.aif deleted file mode 100644 index a0cff3f6f388..000000000000 Binary files a/sound/direct_sound_samples/cries/pichu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pichu.wav b/sound/direct_sound_samples/cries/pichu.wav new file mode 100644 index 000000000000..d325103719a7 Binary files /dev/null and b/sound/direct_sound_samples/cries/pichu.wav differ diff --git a/sound/direct_sound_samples/cries/pidgeot.aif b/sound/direct_sound_samples/cries/pidgeot.aif deleted file mode 100644 index 67f49406a94a..000000000000 Binary files a/sound/direct_sound_samples/cries/pidgeot.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pidgeot.wav b/sound/direct_sound_samples/cries/pidgeot.wav new file mode 100644 index 000000000000..f93ed996567b Binary files /dev/null and b/sound/direct_sound_samples/cries/pidgeot.wav differ diff --git a/sound/direct_sound_samples/cries/pidgeot_mega.aif b/sound/direct_sound_samples/cries/pidgeot_mega.aif deleted file mode 100644 index a1639ba4e913..000000000000 Binary files a/sound/direct_sound_samples/cries/pidgeot_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pidgeot_mega.wav b/sound/direct_sound_samples/cries/pidgeot_mega.wav new file mode 100644 index 000000000000..1cbd3d7a6226 Binary files /dev/null and b/sound/direct_sound_samples/cries/pidgeot_mega.wav differ diff --git a/sound/direct_sound_samples/cries/pidgeotto.aif b/sound/direct_sound_samples/cries/pidgeotto.aif deleted file mode 100644 index f31d3df8cf8b..000000000000 Binary files a/sound/direct_sound_samples/cries/pidgeotto.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pidgeotto.wav b/sound/direct_sound_samples/cries/pidgeotto.wav new file mode 100644 index 000000000000..8b40a41e99cc Binary files /dev/null and b/sound/direct_sound_samples/cries/pidgeotto.wav differ diff --git a/sound/direct_sound_samples/cries/pidgey.aif b/sound/direct_sound_samples/cries/pidgey.aif deleted file mode 100644 index 3b4b6ece2757..000000000000 Binary files a/sound/direct_sound_samples/cries/pidgey.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pidgey.wav b/sound/direct_sound_samples/cries/pidgey.wav new file mode 100644 index 000000000000..34a1d1bd6a4a Binary files /dev/null and b/sound/direct_sound_samples/cries/pidgey.wav differ diff --git a/sound/direct_sound_samples/cries/pidove.aif b/sound/direct_sound_samples/cries/pidove.aif deleted file mode 100644 index b2bd5590bc8d..000000000000 Binary files a/sound/direct_sound_samples/cries/pidove.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pidove.wav b/sound/direct_sound_samples/cries/pidove.wav new file mode 100644 index 000000000000..56527c92c585 Binary files /dev/null and b/sound/direct_sound_samples/cries/pidove.wav differ diff --git a/sound/direct_sound_samples/cries/pignite.aif b/sound/direct_sound_samples/cries/pignite.aif deleted file mode 100644 index 8e1f78ae2f3e..000000000000 Binary files a/sound/direct_sound_samples/cries/pignite.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pignite.wav b/sound/direct_sound_samples/cries/pignite.wav new file mode 100644 index 000000000000..94095d937369 Binary files /dev/null and b/sound/direct_sound_samples/cries/pignite.wav differ diff --git a/sound/direct_sound_samples/cries/pikachu.aif b/sound/direct_sound_samples/cries/pikachu.aif deleted file mode 100644 index 4a7b27024562..000000000000 Binary files a/sound/direct_sound_samples/cries/pikachu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pikachu.wav b/sound/direct_sound_samples/cries/pikachu.wav new file mode 100644 index 000000000000..d5f68416f2f2 Binary files /dev/null and b/sound/direct_sound_samples/cries/pikachu.wav differ diff --git a/sound/direct_sound_samples/cries/pikipek.aif b/sound/direct_sound_samples/cries/pikipek.aif deleted file mode 100644 index 04efe56a4cb7..000000000000 Binary files a/sound/direct_sound_samples/cries/pikipek.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pikipek.wav b/sound/direct_sound_samples/cries/pikipek.wav new file mode 100644 index 000000000000..67d05ca2d9fb Binary files /dev/null and b/sound/direct_sound_samples/cries/pikipek.wav differ diff --git a/sound/direct_sound_samples/cries/piloswine.aif b/sound/direct_sound_samples/cries/piloswine.aif deleted file mode 100644 index 2511d3fd701b..000000000000 Binary files a/sound/direct_sound_samples/cries/piloswine.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/piloswine.wav b/sound/direct_sound_samples/cries/piloswine.wav new file mode 100644 index 000000000000..4f181b7ec690 Binary files /dev/null and b/sound/direct_sound_samples/cries/piloswine.wav differ diff --git a/sound/direct_sound_samples/cries/pincurchin.aif b/sound/direct_sound_samples/cries/pincurchin.aif deleted file mode 100644 index 76f68e21110c..000000000000 Binary files a/sound/direct_sound_samples/cries/pincurchin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pincurchin.wav b/sound/direct_sound_samples/cries/pincurchin.wav new file mode 100644 index 000000000000..070485416f76 Binary files /dev/null and b/sound/direct_sound_samples/cries/pincurchin.wav differ diff --git a/sound/direct_sound_samples/cries/pineco.aif b/sound/direct_sound_samples/cries/pineco.aif deleted file mode 100644 index acb6de8a0c67..000000000000 Binary files a/sound/direct_sound_samples/cries/pineco.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pineco.wav b/sound/direct_sound_samples/cries/pineco.wav new file mode 100644 index 000000000000..70d841b9e5e2 Binary files /dev/null and b/sound/direct_sound_samples/cries/pineco.wav differ diff --git a/sound/direct_sound_samples/cries/pinsir.aif b/sound/direct_sound_samples/cries/pinsir.aif deleted file mode 100644 index bfbb268d68ce..000000000000 Binary files a/sound/direct_sound_samples/cries/pinsir.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pinsir.wav b/sound/direct_sound_samples/cries/pinsir.wav new file mode 100644 index 000000000000..3d3dcc792907 Binary files /dev/null and b/sound/direct_sound_samples/cries/pinsir.wav differ diff --git a/sound/direct_sound_samples/cries/pinsir_mega.aif b/sound/direct_sound_samples/cries/pinsir_mega.aif deleted file mode 100644 index c2e57d2a39ea..000000000000 Binary files a/sound/direct_sound_samples/cries/pinsir_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pinsir_mega.wav b/sound/direct_sound_samples/cries/pinsir_mega.wav new file mode 100644 index 000000000000..36815cbc710d Binary files /dev/null and b/sound/direct_sound_samples/cries/pinsir_mega.wav differ diff --git a/sound/direct_sound_samples/cries/piplup.aif b/sound/direct_sound_samples/cries/piplup.aif deleted file mode 100644 index e8c161eb3518..000000000000 Binary files a/sound/direct_sound_samples/cries/piplup.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/piplup.wav b/sound/direct_sound_samples/cries/piplup.wav new file mode 100644 index 000000000000..aacf7d92a033 Binary files /dev/null and b/sound/direct_sound_samples/cries/piplup.wav differ diff --git a/sound/direct_sound_samples/cries/plusle.aif b/sound/direct_sound_samples/cries/plusle.aif deleted file mode 100644 index e584201a8f38..000000000000 Binary files a/sound/direct_sound_samples/cries/plusle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/plusle.wav b/sound/direct_sound_samples/cries/plusle.wav new file mode 100644 index 000000000000..1b3cf8749702 Binary files /dev/null and b/sound/direct_sound_samples/cries/plusle.wav differ diff --git a/sound/direct_sound_samples/cries/poipole.aif b/sound/direct_sound_samples/cries/poipole.aif deleted file mode 100644 index c2a141ac85ef..000000000000 Binary files a/sound/direct_sound_samples/cries/poipole.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/poipole.wav b/sound/direct_sound_samples/cries/poipole.wav new file mode 100644 index 000000000000..9e0ad029c98b Binary files /dev/null and b/sound/direct_sound_samples/cries/poipole.wav differ diff --git a/sound/direct_sound_samples/cries/politoed.aif b/sound/direct_sound_samples/cries/politoed.aif deleted file mode 100644 index 2739c2a4282d..000000000000 Binary files a/sound/direct_sound_samples/cries/politoed.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/politoed.wav b/sound/direct_sound_samples/cries/politoed.wav new file mode 100644 index 000000000000..6472a08f5538 Binary files /dev/null and b/sound/direct_sound_samples/cries/politoed.wav differ diff --git a/sound/direct_sound_samples/cries/poliwag.aif b/sound/direct_sound_samples/cries/poliwag.aif deleted file mode 100644 index d76e2094953e..000000000000 Binary files a/sound/direct_sound_samples/cries/poliwag.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/poliwag.wav b/sound/direct_sound_samples/cries/poliwag.wav new file mode 100644 index 000000000000..d35c8f4d8f63 Binary files /dev/null and b/sound/direct_sound_samples/cries/poliwag.wav differ diff --git a/sound/direct_sound_samples/cries/poliwhirl.aif b/sound/direct_sound_samples/cries/poliwhirl.aif deleted file mode 100644 index 4aee053d7f8f..000000000000 Binary files a/sound/direct_sound_samples/cries/poliwhirl.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/poliwhirl.wav b/sound/direct_sound_samples/cries/poliwhirl.wav new file mode 100644 index 000000000000..0c59fbed64ff Binary files /dev/null and b/sound/direct_sound_samples/cries/poliwhirl.wav differ diff --git a/sound/direct_sound_samples/cries/poliwrath.aif b/sound/direct_sound_samples/cries/poliwrath.aif deleted file mode 100644 index bb9d78f3c39f..000000000000 Binary files a/sound/direct_sound_samples/cries/poliwrath.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/poliwrath.wav b/sound/direct_sound_samples/cries/poliwrath.wav new file mode 100644 index 000000000000..c32bd448591a Binary files /dev/null and b/sound/direct_sound_samples/cries/poliwrath.wav differ diff --git a/sound/direct_sound_samples/cries/poltchageist.aif b/sound/direct_sound_samples/cries/poltchageist.aif deleted file mode 100644 index 855eb010cebf..000000000000 Binary files a/sound/direct_sound_samples/cries/poltchageist.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/poltchageist.wav b/sound/direct_sound_samples/cries/poltchageist.wav new file mode 100644 index 000000000000..33d929e811b2 Binary files /dev/null and b/sound/direct_sound_samples/cries/poltchageist.wav differ diff --git a/sound/direct_sound_samples/cries/polteageist.aif b/sound/direct_sound_samples/cries/polteageist.aif deleted file mode 100644 index f9051a25c4ab..000000000000 Binary files a/sound/direct_sound_samples/cries/polteageist.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/polteageist.wav b/sound/direct_sound_samples/cries/polteageist.wav new file mode 100644 index 000000000000..94131a981b11 Binary files /dev/null and b/sound/direct_sound_samples/cries/polteageist.wav differ diff --git a/sound/direct_sound_samples/cries/ponyta.aif b/sound/direct_sound_samples/cries/ponyta.aif deleted file mode 100644 index ec66a33faf46..000000000000 Binary files a/sound/direct_sound_samples/cries/ponyta.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ponyta.wav b/sound/direct_sound_samples/cries/ponyta.wav new file mode 100644 index 000000000000..911954226d75 Binary files /dev/null and b/sound/direct_sound_samples/cries/ponyta.wav differ diff --git a/sound/direct_sound_samples/cries/poochyena.aif b/sound/direct_sound_samples/cries/poochyena.aif deleted file mode 100644 index bfa6a00ae20a..000000000000 Binary files a/sound/direct_sound_samples/cries/poochyena.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/poochyena.wav b/sound/direct_sound_samples/cries/poochyena.wav new file mode 100644 index 000000000000..16cabc29c6ec Binary files /dev/null and b/sound/direct_sound_samples/cries/poochyena.wav differ diff --git a/sound/direct_sound_samples/cries/popplio.aif b/sound/direct_sound_samples/cries/popplio.aif deleted file mode 100644 index cbb3a0ff30e0..000000000000 Binary files a/sound/direct_sound_samples/cries/popplio.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/popplio.wav b/sound/direct_sound_samples/cries/popplio.wav new file mode 100644 index 000000000000..f3226c862a3a Binary files /dev/null and b/sound/direct_sound_samples/cries/popplio.wav differ diff --git a/sound/direct_sound_samples/cries/porygon.aif b/sound/direct_sound_samples/cries/porygon.aif deleted file mode 100644 index 79160cdbbb45..000000000000 Binary files a/sound/direct_sound_samples/cries/porygon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/porygon.wav b/sound/direct_sound_samples/cries/porygon.wav new file mode 100644 index 000000000000..11dd528dda51 Binary files /dev/null and b/sound/direct_sound_samples/cries/porygon.wav differ diff --git a/sound/direct_sound_samples/cries/porygon2.aif b/sound/direct_sound_samples/cries/porygon2.aif deleted file mode 100644 index 94237057b1ab..000000000000 Binary files a/sound/direct_sound_samples/cries/porygon2.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/porygon2.wav b/sound/direct_sound_samples/cries/porygon2.wav new file mode 100644 index 000000000000..5699d8e45057 Binary files /dev/null and b/sound/direct_sound_samples/cries/porygon2.wav differ diff --git a/sound/direct_sound_samples/cries/porygon_z.aif b/sound/direct_sound_samples/cries/porygon_z.aif deleted file mode 100644 index 55448d13c056..000000000000 Binary files a/sound/direct_sound_samples/cries/porygon_z.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/porygon_z.wav b/sound/direct_sound_samples/cries/porygon_z.wav new file mode 100644 index 000000000000..215d9b7e6d87 Binary files /dev/null and b/sound/direct_sound_samples/cries/porygon_z.wav differ diff --git a/sound/direct_sound_samples/cries/primarina.aif b/sound/direct_sound_samples/cries/primarina.aif deleted file mode 100644 index 7952fda82e79..000000000000 Binary files a/sound/direct_sound_samples/cries/primarina.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/primarina.wav b/sound/direct_sound_samples/cries/primarina.wav new file mode 100644 index 000000000000..60e0cef0b6cc Binary files /dev/null and b/sound/direct_sound_samples/cries/primarina.wav differ diff --git a/sound/direct_sound_samples/cries/primeape.aif b/sound/direct_sound_samples/cries/primeape.aif deleted file mode 100644 index 35898bf2e64e..000000000000 Binary files a/sound/direct_sound_samples/cries/primeape.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/primeape.wav b/sound/direct_sound_samples/cries/primeape.wav new file mode 100644 index 000000000000..bcd98e6bb4a6 Binary files /dev/null and b/sound/direct_sound_samples/cries/primeape.wav differ diff --git a/sound/direct_sound_samples/cries/prinplup.aif b/sound/direct_sound_samples/cries/prinplup.aif deleted file mode 100644 index 62311c1cbf2c..000000000000 Binary files a/sound/direct_sound_samples/cries/prinplup.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/prinplup.wav b/sound/direct_sound_samples/cries/prinplup.wav new file mode 100644 index 000000000000..8b914e4addd5 Binary files /dev/null and b/sound/direct_sound_samples/cries/prinplup.wav differ diff --git a/sound/direct_sound_samples/cries/probopass.aif b/sound/direct_sound_samples/cries/probopass.aif deleted file mode 100644 index ac831dbf2032..000000000000 Binary files a/sound/direct_sound_samples/cries/probopass.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/probopass.wav b/sound/direct_sound_samples/cries/probopass.wav new file mode 100644 index 000000000000..b749429c8ac3 Binary files /dev/null and b/sound/direct_sound_samples/cries/probopass.wav differ diff --git a/sound/direct_sound_samples/cries/psyduck.aif b/sound/direct_sound_samples/cries/psyduck.aif deleted file mode 100644 index e99270f05fd4..000000000000 Binary files a/sound/direct_sound_samples/cries/psyduck.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/psyduck.wav b/sound/direct_sound_samples/cries/psyduck.wav new file mode 100644 index 000000000000..bdc0d673e3ac Binary files /dev/null and b/sound/direct_sound_samples/cries/psyduck.wav differ diff --git a/sound/direct_sound_samples/cries/pumpkaboo.aif b/sound/direct_sound_samples/cries/pumpkaboo.aif deleted file mode 100644 index 6960875e58b8..000000000000 Binary files a/sound/direct_sound_samples/cries/pumpkaboo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pumpkaboo.wav b/sound/direct_sound_samples/cries/pumpkaboo.wav new file mode 100644 index 000000000000..ac870aaa2325 Binary files /dev/null and b/sound/direct_sound_samples/cries/pumpkaboo.wav differ diff --git a/sound/direct_sound_samples/cries/pumpkaboo_super.aif b/sound/direct_sound_samples/cries/pumpkaboo_super.aif deleted file mode 100644 index f6c7500f68ab..000000000000 Binary files a/sound/direct_sound_samples/cries/pumpkaboo_super.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pumpkaboo_super.wav b/sound/direct_sound_samples/cries/pumpkaboo_super.wav new file mode 100644 index 000000000000..62b4bc3743ef Binary files /dev/null and b/sound/direct_sound_samples/cries/pumpkaboo_super.wav differ diff --git a/sound/direct_sound_samples/cries/pupitar.aif b/sound/direct_sound_samples/cries/pupitar.aif deleted file mode 100644 index eb4674d5214c..000000000000 Binary files a/sound/direct_sound_samples/cries/pupitar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pupitar.wav b/sound/direct_sound_samples/cries/pupitar.wav new file mode 100644 index 000000000000..5e797d420fdc Binary files /dev/null and b/sound/direct_sound_samples/cries/pupitar.wav differ diff --git a/sound/direct_sound_samples/cries/purrloin.aif b/sound/direct_sound_samples/cries/purrloin.aif deleted file mode 100644 index ceb00874c529..000000000000 Binary files a/sound/direct_sound_samples/cries/purrloin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/purrloin.wav b/sound/direct_sound_samples/cries/purrloin.wav new file mode 100644 index 000000000000..1abbc33d2107 Binary files /dev/null and b/sound/direct_sound_samples/cries/purrloin.wav differ diff --git a/sound/direct_sound_samples/cries/purugly.aif b/sound/direct_sound_samples/cries/purugly.aif deleted file mode 100644 index 9f6460a63078..000000000000 Binary files a/sound/direct_sound_samples/cries/purugly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/purugly.wav b/sound/direct_sound_samples/cries/purugly.wav new file mode 100644 index 000000000000..662bdaafe85a Binary files /dev/null and b/sound/direct_sound_samples/cries/purugly.wav differ diff --git a/sound/direct_sound_samples/cries/pyroar.aif b/sound/direct_sound_samples/cries/pyroar.aif deleted file mode 100644 index 7bf77d50cb6e..000000000000 Binary files a/sound/direct_sound_samples/cries/pyroar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pyroar.wav b/sound/direct_sound_samples/cries/pyroar.wav new file mode 100644 index 000000000000..9e145824f10f Binary files /dev/null and b/sound/direct_sound_samples/cries/pyroar.wav differ diff --git a/sound/direct_sound_samples/cries/pyukumuku.aif b/sound/direct_sound_samples/cries/pyukumuku.aif deleted file mode 100644 index ad1d740c31d4..000000000000 Binary files a/sound/direct_sound_samples/cries/pyukumuku.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/pyukumuku.wav b/sound/direct_sound_samples/cries/pyukumuku.wav new file mode 100644 index 000000000000..eb2a7eaf4fd7 Binary files /dev/null and b/sound/direct_sound_samples/cries/pyukumuku.wav differ diff --git a/sound/direct_sound_samples/cries/quagsire.aif b/sound/direct_sound_samples/cries/quagsire.aif deleted file mode 100644 index 7373b6bb0c9c..000000000000 Binary files a/sound/direct_sound_samples/cries/quagsire.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/quagsire.wav b/sound/direct_sound_samples/cries/quagsire.wav new file mode 100644 index 000000000000..e4a8c0aad372 Binary files /dev/null and b/sound/direct_sound_samples/cries/quagsire.wav differ diff --git a/sound/direct_sound_samples/cries/quaquaval.aif b/sound/direct_sound_samples/cries/quaquaval.aif deleted file mode 100644 index d04fac23ff28..000000000000 Binary files a/sound/direct_sound_samples/cries/quaquaval.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/quaquaval.wav b/sound/direct_sound_samples/cries/quaquaval.wav new file mode 100644 index 000000000000..65cce8b82981 Binary files /dev/null and b/sound/direct_sound_samples/cries/quaquaval.wav differ diff --git a/sound/direct_sound_samples/cries/quaxly.aif b/sound/direct_sound_samples/cries/quaxly.aif deleted file mode 100644 index 81606b4a194d..000000000000 Binary files a/sound/direct_sound_samples/cries/quaxly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/quaxly.wav b/sound/direct_sound_samples/cries/quaxly.wav new file mode 100644 index 000000000000..b886a0b8ce0b Binary files /dev/null and b/sound/direct_sound_samples/cries/quaxly.wav differ diff --git a/sound/direct_sound_samples/cries/quaxwell.aif b/sound/direct_sound_samples/cries/quaxwell.aif deleted file mode 100644 index 62669362ea77..000000000000 Binary files a/sound/direct_sound_samples/cries/quaxwell.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/quaxwell.wav b/sound/direct_sound_samples/cries/quaxwell.wav new file mode 100644 index 000000000000..f0ff99f2aa02 Binary files /dev/null and b/sound/direct_sound_samples/cries/quaxwell.wav differ diff --git a/sound/direct_sound_samples/cries/quilava.aif b/sound/direct_sound_samples/cries/quilava.aif deleted file mode 100644 index 40d3db5594d4..000000000000 Binary files a/sound/direct_sound_samples/cries/quilava.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/quilava.wav b/sound/direct_sound_samples/cries/quilava.wav new file mode 100644 index 000000000000..ef0bd7381fc1 Binary files /dev/null and b/sound/direct_sound_samples/cries/quilava.wav differ diff --git a/sound/direct_sound_samples/cries/quilladin.aif b/sound/direct_sound_samples/cries/quilladin.aif deleted file mode 100644 index 9b6dfabdc603..000000000000 Binary files a/sound/direct_sound_samples/cries/quilladin.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/quilladin.wav b/sound/direct_sound_samples/cries/quilladin.wav new file mode 100644 index 000000000000..1cce00c5ca89 Binary files /dev/null and b/sound/direct_sound_samples/cries/quilladin.wav differ diff --git a/sound/direct_sound_samples/cries/qwilfish.aif b/sound/direct_sound_samples/cries/qwilfish.aif deleted file mode 100644 index a5a56480f18d..000000000000 Binary files a/sound/direct_sound_samples/cries/qwilfish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/qwilfish.wav b/sound/direct_sound_samples/cries/qwilfish.wav new file mode 100644 index 000000000000..0b11276dec60 Binary files /dev/null and b/sound/direct_sound_samples/cries/qwilfish.wav differ diff --git a/sound/direct_sound_samples/cries/raboot.aif b/sound/direct_sound_samples/cries/raboot.aif deleted file mode 100644 index b1a6d09892f5..000000000000 Binary files a/sound/direct_sound_samples/cries/raboot.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/raboot.wav b/sound/direct_sound_samples/cries/raboot.wav new file mode 100644 index 000000000000..02fa5e376120 Binary files /dev/null and b/sound/direct_sound_samples/cries/raboot.wav differ diff --git a/sound/direct_sound_samples/cries/rabsca.aif b/sound/direct_sound_samples/cries/rabsca.aif deleted file mode 100644 index 5665f798656a..000000000000 Binary files a/sound/direct_sound_samples/cries/rabsca.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rabsca.wav b/sound/direct_sound_samples/cries/rabsca.wav new file mode 100644 index 000000000000..ca041c6cee9c Binary files /dev/null and b/sound/direct_sound_samples/cries/rabsca.wav differ diff --git a/sound/direct_sound_samples/cries/raging_bolt.aif b/sound/direct_sound_samples/cries/raging_bolt.aif deleted file mode 100644 index 5b787e8116d2..000000000000 Binary files a/sound/direct_sound_samples/cries/raging_bolt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/raging_bolt.wav b/sound/direct_sound_samples/cries/raging_bolt.wav new file mode 100644 index 000000000000..f7e920d1b068 Binary files /dev/null and b/sound/direct_sound_samples/cries/raging_bolt.wav differ diff --git a/sound/direct_sound_samples/cries/raichu.aif b/sound/direct_sound_samples/cries/raichu.aif deleted file mode 100644 index 001dcba62708..000000000000 Binary files a/sound/direct_sound_samples/cries/raichu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/raichu.wav b/sound/direct_sound_samples/cries/raichu.wav new file mode 100644 index 000000000000..4e5dbaeb4087 Binary files /dev/null and b/sound/direct_sound_samples/cries/raichu.wav differ diff --git a/sound/direct_sound_samples/cries/raikou.aif b/sound/direct_sound_samples/cries/raikou.aif deleted file mode 100644 index ac1e84669110..000000000000 Binary files a/sound/direct_sound_samples/cries/raikou.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/raikou.wav b/sound/direct_sound_samples/cries/raikou.wav new file mode 100644 index 000000000000..fefeb1e3a506 Binary files /dev/null and b/sound/direct_sound_samples/cries/raikou.wav differ diff --git a/sound/direct_sound_samples/cries/ralts.aif b/sound/direct_sound_samples/cries/ralts.aif deleted file mode 100644 index 660438548c8b..000000000000 Binary files a/sound/direct_sound_samples/cries/ralts.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ralts.wav b/sound/direct_sound_samples/cries/ralts.wav new file mode 100644 index 000000000000..4327c13a1240 Binary files /dev/null and b/sound/direct_sound_samples/cries/ralts.wav differ diff --git a/sound/direct_sound_samples/cries/rampardos.aif b/sound/direct_sound_samples/cries/rampardos.aif deleted file mode 100644 index edec1aac4f34..000000000000 Binary files a/sound/direct_sound_samples/cries/rampardos.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rampardos.wav b/sound/direct_sound_samples/cries/rampardos.wav new file mode 100644 index 000000000000..de2cfc500288 Binary files /dev/null and b/sound/direct_sound_samples/cries/rampardos.wav differ diff --git a/sound/direct_sound_samples/cries/rapidash.aif b/sound/direct_sound_samples/cries/rapidash.aif deleted file mode 100644 index c070475d183d..000000000000 Binary files a/sound/direct_sound_samples/cries/rapidash.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rapidash.wav b/sound/direct_sound_samples/cries/rapidash.wav new file mode 100644 index 000000000000..14ce75be7500 Binary files /dev/null and b/sound/direct_sound_samples/cries/rapidash.wav differ diff --git a/sound/direct_sound_samples/cries/raticate.aif b/sound/direct_sound_samples/cries/raticate.aif deleted file mode 100644 index fd726b655f33..000000000000 Binary files a/sound/direct_sound_samples/cries/raticate.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/raticate.wav b/sound/direct_sound_samples/cries/raticate.wav new file mode 100644 index 000000000000..545ebfcf1212 Binary files /dev/null and b/sound/direct_sound_samples/cries/raticate.wav differ diff --git a/sound/direct_sound_samples/cries/rattata.aif b/sound/direct_sound_samples/cries/rattata.aif deleted file mode 100644 index af6a4f246822..000000000000 Binary files a/sound/direct_sound_samples/cries/rattata.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rattata.wav b/sound/direct_sound_samples/cries/rattata.wav new file mode 100644 index 000000000000..9e7a6b3cf630 Binary files /dev/null and b/sound/direct_sound_samples/cries/rattata.wav differ diff --git a/sound/direct_sound_samples/cries/rayquaza.aif b/sound/direct_sound_samples/cries/rayquaza.aif deleted file mode 100644 index ba7a73c7eece..000000000000 Binary files a/sound/direct_sound_samples/cries/rayquaza.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rayquaza.wav b/sound/direct_sound_samples/cries/rayquaza.wav new file mode 100644 index 000000000000..c4e50535fc97 Binary files /dev/null and b/sound/direct_sound_samples/cries/rayquaza.wav differ diff --git a/sound/direct_sound_samples/cries/rayquaza_mega.aif b/sound/direct_sound_samples/cries/rayquaza_mega.aif deleted file mode 100644 index 1b78a94e933f..000000000000 Binary files a/sound/direct_sound_samples/cries/rayquaza_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rayquaza_mega.wav b/sound/direct_sound_samples/cries/rayquaza_mega.wav new file mode 100644 index 000000000000..ee9804b9ada8 Binary files /dev/null and b/sound/direct_sound_samples/cries/rayquaza_mega.wav differ diff --git a/sound/direct_sound_samples/cries/regice.aif b/sound/direct_sound_samples/cries/regice.aif deleted file mode 100644 index 812737a80575..000000000000 Binary files a/sound/direct_sound_samples/cries/regice.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/regice.wav b/sound/direct_sound_samples/cries/regice.wav new file mode 100644 index 000000000000..b65a79b4d430 Binary files /dev/null and b/sound/direct_sound_samples/cries/regice.wav differ diff --git a/sound/direct_sound_samples/cries/regidrago.aif b/sound/direct_sound_samples/cries/regidrago.aif deleted file mode 100644 index d67dbe0ce3a5..000000000000 Binary files a/sound/direct_sound_samples/cries/regidrago.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/regidrago.wav b/sound/direct_sound_samples/cries/regidrago.wav new file mode 100644 index 000000000000..2231254c3092 Binary files /dev/null and b/sound/direct_sound_samples/cries/regidrago.wav differ diff --git a/sound/direct_sound_samples/cries/regieleki.aif b/sound/direct_sound_samples/cries/regieleki.aif deleted file mode 100644 index 75061bccff4e..000000000000 Binary files a/sound/direct_sound_samples/cries/regieleki.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/regieleki.wav b/sound/direct_sound_samples/cries/regieleki.wav new file mode 100644 index 000000000000..036545f82e78 Binary files /dev/null and b/sound/direct_sound_samples/cries/regieleki.wav differ diff --git a/sound/direct_sound_samples/cries/regigigas.aif b/sound/direct_sound_samples/cries/regigigas.aif deleted file mode 100644 index 9de9e451d832..000000000000 Binary files a/sound/direct_sound_samples/cries/regigigas.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/regigigas.wav b/sound/direct_sound_samples/cries/regigigas.wav new file mode 100644 index 000000000000..379ea8393664 Binary files /dev/null and b/sound/direct_sound_samples/cries/regigigas.wav differ diff --git a/sound/direct_sound_samples/cries/regirock.aif b/sound/direct_sound_samples/cries/regirock.aif deleted file mode 100644 index b9c294809599..000000000000 Binary files a/sound/direct_sound_samples/cries/regirock.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/regirock.wav b/sound/direct_sound_samples/cries/regirock.wav new file mode 100644 index 000000000000..0df3c1a720a7 Binary files /dev/null and b/sound/direct_sound_samples/cries/regirock.wav differ diff --git a/sound/direct_sound_samples/cries/registeel.aif b/sound/direct_sound_samples/cries/registeel.aif deleted file mode 100644 index 5afe87279e47..000000000000 Binary files a/sound/direct_sound_samples/cries/registeel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/registeel.wav b/sound/direct_sound_samples/cries/registeel.wav new file mode 100644 index 000000000000..0e2b21beb230 Binary files /dev/null and b/sound/direct_sound_samples/cries/registeel.wav differ diff --git a/sound/direct_sound_samples/cries/relicanth.aif b/sound/direct_sound_samples/cries/relicanth.aif deleted file mode 100644 index a9c2b69e607e..000000000000 Binary files a/sound/direct_sound_samples/cries/relicanth.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/relicanth.wav b/sound/direct_sound_samples/cries/relicanth.wav new file mode 100644 index 000000000000..1a8c04473c31 Binary files /dev/null and b/sound/direct_sound_samples/cries/relicanth.wav differ diff --git a/sound/direct_sound_samples/cries/rellor.aif b/sound/direct_sound_samples/cries/rellor.aif deleted file mode 100644 index 0a2f79805f99..000000000000 Binary files a/sound/direct_sound_samples/cries/rellor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rellor.wav b/sound/direct_sound_samples/cries/rellor.wav new file mode 100644 index 000000000000..813e82b3ac05 Binary files /dev/null and b/sound/direct_sound_samples/cries/rellor.wav differ diff --git a/sound/direct_sound_samples/cries/remoraid.aif b/sound/direct_sound_samples/cries/remoraid.aif deleted file mode 100644 index f879cf28350e..000000000000 Binary files a/sound/direct_sound_samples/cries/remoraid.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/remoraid.wav b/sound/direct_sound_samples/cries/remoraid.wav new file mode 100644 index 000000000000..0465e033f13f Binary files /dev/null and b/sound/direct_sound_samples/cries/remoraid.wav differ diff --git a/sound/direct_sound_samples/cries/reshiram.aif b/sound/direct_sound_samples/cries/reshiram.aif deleted file mode 100644 index 870d3cf515d8..000000000000 Binary files a/sound/direct_sound_samples/cries/reshiram.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/reshiram.wav b/sound/direct_sound_samples/cries/reshiram.wav new file mode 100644 index 000000000000..7dc4f6d0fe01 Binary files /dev/null and b/sound/direct_sound_samples/cries/reshiram.wav differ diff --git a/sound/direct_sound_samples/cries/reuniclus.aif b/sound/direct_sound_samples/cries/reuniclus.aif deleted file mode 100644 index ab22f0f97e5f..000000000000 Binary files a/sound/direct_sound_samples/cries/reuniclus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/reuniclus.wav b/sound/direct_sound_samples/cries/reuniclus.wav new file mode 100644 index 000000000000..addb5c3a1c82 Binary files /dev/null and b/sound/direct_sound_samples/cries/reuniclus.wav differ diff --git a/sound/direct_sound_samples/cries/revavroom.aif b/sound/direct_sound_samples/cries/revavroom.aif deleted file mode 100644 index e52bf1c6fe7b..000000000000 Binary files a/sound/direct_sound_samples/cries/revavroom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/revavroom.wav b/sound/direct_sound_samples/cries/revavroom.wav new file mode 100644 index 000000000000..a9457ee01857 Binary files /dev/null and b/sound/direct_sound_samples/cries/revavroom.wav differ diff --git a/sound/direct_sound_samples/cries/rhydon.aif b/sound/direct_sound_samples/cries/rhydon.aif deleted file mode 100644 index c02623703d4c..000000000000 Binary files a/sound/direct_sound_samples/cries/rhydon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rhydon.wav b/sound/direct_sound_samples/cries/rhydon.wav new file mode 100644 index 000000000000..e4f024f3126b Binary files /dev/null and b/sound/direct_sound_samples/cries/rhydon.wav differ diff --git a/sound/direct_sound_samples/cries/rhyhorn.aif b/sound/direct_sound_samples/cries/rhyhorn.aif deleted file mode 100644 index 9a80e08f0163..000000000000 Binary files a/sound/direct_sound_samples/cries/rhyhorn.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rhyhorn.wav b/sound/direct_sound_samples/cries/rhyhorn.wav new file mode 100644 index 000000000000..10c6841f436b Binary files /dev/null and b/sound/direct_sound_samples/cries/rhyhorn.wav differ diff --git a/sound/direct_sound_samples/cries/rhyperior.aif b/sound/direct_sound_samples/cries/rhyperior.aif deleted file mode 100644 index 210a7c8fd3f2..000000000000 Binary files a/sound/direct_sound_samples/cries/rhyperior.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rhyperior.wav b/sound/direct_sound_samples/cries/rhyperior.wav new file mode 100644 index 000000000000..57a5002684e2 Binary files /dev/null and b/sound/direct_sound_samples/cries/rhyperior.wav differ diff --git a/sound/direct_sound_samples/cries/ribombee.aif b/sound/direct_sound_samples/cries/ribombee.aif deleted file mode 100644 index fb7dcd1f87ca..000000000000 Binary files a/sound/direct_sound_samples/cries/ribombee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ribombee.wav b/sound/direct_sound_samples/cries/ribombee.wav new file mode 100644 index 000000000000..36e292cc32ba Binary files /dev/null and b/sound/direct_sound_samples/cries/ribombee.wav differ diff --git a/sound/direct_sound_samples/cries/rillaboom.aif b/sound/direct_sound_samples/cries/rillaboom.aif deleted file mode 100644 index f7e4624e8807..000000000000 Binary files a/sound/direct_sound_samples/cries/rillaboom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rillaboom.wav b/sound/direct_sound_samples/cries/rillaboom.wav new file mode 100644 index 000000000000..2757ed87cb1c Binary files /dev/null and b/sound/direct_sound_samples/cries/rillaboom.wav differ diff --git a/sound/direct_sound_samples/cries/riolu.aif b/sound/direct_sound_samples/cries/riolu.aif deleted file mode 100644 index cd25b09faf4f..000000000000 Binary files a/sound/direct_sound_samples/cries/riolu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/riolu.wav b/sound/direct_sound_samples/cries/riolu.wav new file mode 100644 index 000000000000..051e7e2acf90 Binary files /dev/null and b/sound/direct_sound_samples/cries/riolu.wav differ diff --git a/sound/direct_sound_samples/cries/roaring_moon.aif b/sound/direct_sound_samples/cries/roaring_moon.aif deleted file mode 100644 index 3c258496dce1..000000000000 Binary files a/sound/direct_sound_samples/cries/roaring_moon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/roaring_moon.wav b/sound/direct_sound_samples/cries/roaring_moon.wav new file mode 100644 index 000000000000..72ed1c91391d Binary files /dev/null and b/sound/direct_sound_samples/cries/roaring_moon.wav differ diff --git a/sound/direct_sound_samples/cries/rockruff.aif b/sound/direct_sound_samples/cries/rockruff.aif deleted file mode 100644 index 90f6bed36b2d..000000000000 Binary files a/sound/direct_sound_samples/cries/rockruff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rockruff.wav b/sound/direct_sound_samples/cries/rockruff.wav new file mode 100644 index 000000000000..520eaf194fcc Binary files /dev/null and b/sound/direct_sound_samples/cries/rockruff.wav differ diff --git a/sound/direct_sound_samples/cries/roggenrola.aif b/sound/direct_sound_samples/cries/roggenrola.aif deleted file mode 100644 index 8f2f7c8fa0d3..000000000000 Binary files a/sound/direct_sound_samples/cries/roggenrola.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/roggenrola.wav b/sound/direct_sound_samples/cries/roggenrola.wav new file mode 100644 index 000000000000..34e9fe2f4a19 Binary files /dev/null and b/sound/direct_sound_samples/cries/roggenrola.wav differ diff --git a/sound/direct_sound_samples/cries/rolycoly.aif b/sound/direct_sound_samples/cries/rolycoly.aif deleted file mode 100644 index cf6a7cefa65e..000000000000 Binary files a/sound/direct_sound_samples/cries/rolycoly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rolycoly.wav b/sound/direct_sound_samples/cries/rolycoly.wav new file mode 100644 index 000000000000..bae65dde29e6 Binary files /dev/null and b/sound/direct_sound_samples/cries/rolycoly.wav differ diff --git a/sound/direct_sound_samples/cries/rookidee.aif b/sound/direct_sound_samples/cries/rookidee.aif deleted file mode 100644 index 6fba48730a5a..000000000000 Binary files a/sound/direct_sound_samples/cries/rookidee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rookidee.wav b/sound/direct_sound_samples/cries/rookidee.wav new file mode 100644 index 000000000000..42217ed7eb3f Binary files /dev/null and b/sound/direct_sound_samples/cries/rookidee.wav differ diff --git a/sound/direct_sound_samples/cries/roselia.aif b/sound/direct_sound_samples/cries/roselia.aif deleted file mode 100644 index c6c53f3c1f8d..000000000000 Binary files a/sound/direct_sound_samples/cries/roselia.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/roselia.wav b/sound/direct_sound_samples/cries/roselia.wav new file mode 100644 index 000000000000..cd01f19f685e Binary files /dev/null and b/sound/direct_sound_samples/cries/roselia.wav differ diff --git a/sound/direct_sound_samples/cries/roserade.aif b/sound/direct_sound_samples/cries/roserade.aif deleted file mode 100644 index 7c9de96a0e1c..000000000000 Binary files a/sound/direct_sound_samples/cries/roserade.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/roserade.wav b/sound/direct_sound_samples/cries/roserade.wav new file mode 100644 index 000000000000..25faa520919a Binary files /dev/null and b/sound/direct_sound_samples/cries/roserade.wav differ diff --git a/sound/direct_sound_samples/cries/rotom.aif b/sound/direct_sound_samples/cries/rotom.aif deleted file mode 100644 index 81080115c2ee..000000000000 Binary files a/sound/direct_sound_samples/cries/rotom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rotom.wav b/sound/direct_sound_samples/cries/rotom.wav new file mode 100644 index 000000000000..621aeeae9944 Binary files /dev/null and b/sound/direct_sound_samples/cries/rotom.wav differ diff --git a/sound/direct_sound_samples/cries/rowlet.aif b/sound/direct_sound_samples/cries/rowlet.aif deleted file mode 100644 index c201336015f3..000000000000 Binary files a/sound/direct_sound_samples/cries/rowlet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rowlet.wav b/sound/direct_sound_samples/cries/rowlet.wav new file mode 100644 index 000000000000..82b82415ce75 Binary files /dev/null and b/sound/direct_sound_samples/cries/rowlet.wav differ diff --git a/sound/direct_sound_samples/cries/rufflet.aif b/sound/direct_sound_samples/cries/rufflet.aif deleted file mode 100644 index b7cc6cab12eb..000000000000 Binary files a/sound/direct_sound_samples/cries/rufflet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/rufflet.wav b/sound/direct_sound_samples/cries/rufflet.wav new file mode 100644 index 000000000000..5b113009839f Binary files /dev/null and b/sound/direct_sound_samples/cries/rufflet.wav differ diff --git a/sound/direct_sound_samples/cries/runerigus.aif b/sound/direct_sound_samples/cries/runerigus.aif deleted file mode 100644 index c04d5003c4a8..000000000000 Binary files a/sound/direct_sound_samples/cries/runerigus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/runerigus.wav b/sound/direct_sound_samples/cries/runerigus.wav new file mode 100644 index 000000000000..405d3d46446d Binary files /dev/null and b/sound/direct_sound_samples/cries/runerigus.wav differ diff --git a/sound/direct_sound_samples/cries/sableye.aif b/sound/direct_sound_samples/cries/sableye.aif deleted file mode 100644 index 885a3b0b35c3..000000000000 Binary files a/sound/direct_sound_samples/cries/sableye.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sableye.wav b/sound/direct_sound_samples/cries/sableye.wav new file mode 100644 index 000000000000..9f32fbdd60d3 Binary files /dev/null and b/sound/direct_sound_samples/cries/sableye.wav differ diff --git a/sound/direct_sound_samples/cries/sableye_mega.aif b/sound/direct_sound_samples/cries/sableye_mega.aif deleted file mode 100644 index 7f869cd7b813..000000000000 Binary files a/sound/direct_sound_samples/cries/sableye_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sableye_mega.wav b/sound/direct_sound_samples/cries/sableye_mega.wav new file mode 100644 index 000000000000..6a5bb8f9bf5a Binary files /dev/null and b/sound/direct_sound_samples/cries/sableye_mega.wav differ diff --git a/sound/direct_sound_samples/cries/salamence.aif b/sound/direct_sound_samples/cries/salamence.aif deleted file mode 100644 index f733e098dd9a..000000000000 Binary files a/sound/direct_sound_samples/cries/salamence.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/salamence.wav b/sound/direct_sound_samples/cries/salamence.wav new file mode 100644 index 000000000000..1c426adfad51 Binary files /dev/null and b/sound/direct_sound_samples/cries/salamence.wav differ diff --git a/sound/direct_sound_samples/cries/salamence_mega.aif b/sound/direct_sound_samples/cries/salamence_mega.aif deleted file mode 100644 index 90ce0b6ff8a9..000000000000 Binary files a/sound/direct_sound_samples/cries/salamence_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/salamence_mega.wav b/sound/direct_sound_samples/cries/salamence_mega.wav new file mode 100644 index 000000000000..dc0b96bc5e15 Binary files /dev/null and b/sound/direct_sound_samples/cries/salamence_mega.wav differ diff --git a/sound/direct_sound_samples/cries/salandit.aif b/sound/direct_sound_samples/cries/salandit.aif deleted file mode 100644 index 90de8f0573a5..000000000000 Binary files a/sound/direct_sound_samples/cries/salandit.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/salandit.wav b/sound/direct_sound_samples/cries/salandit.wav new file mode 100644 index 000000000000..631129c5534a Binary files /dev/null and b/sound/direct_sound_samples/cries/salandit.wav differ diff --git a/sound/direct_sound_samples/cries/salazzle.aif b/sound/direct_sound_samples/cries/salazzle.aif deleted file mode 100644 index 7447bfc0bf15..000000000000 Binary files a/sound/direct_sound_samples/cries/salazzle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/salazzle.wav b/sound/direct_sound_samples/cries/salazzle.wav new file mode 100644 index 000000000000..0fbb0268f617 Binary files /dev/null and b/sound/direct_sound_samples/cries/salazzle.wav differ diff --git a/sound/direct_sound_samples/cries/samurott.aif b/sound/direct_sound_samples/cries/samurott.aif deleted file mode 100644 index fc8aa1c7c8cf..000000000000 Binary files a/sound/direct_sound_samples/cries/samurott.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/samurott.wav b/sound/direct_sound_samples/cries/samurott.wav new file mode 100644 index 000000000000..e8c54366faf1 Binary files /dev/null and b/sound/direct_sound_samples/cries/samurott.wav differ diff --git a/sound/direct_sound_samples/cries/sandaconda.aif b/sound/direct_sound_samples/cries/sandaconda.aif deleted file mode 100644 index 3fd1b08d960d..000000000000 Binary files a/sound/direct_sound_samples/cries/sandaconda.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sandaconda.wav b/sound/direct_sound_samples/cries/sandaconda.wav new file mode 100644 index 000000000000..24d92b705a0a Binary files /dev/null and b/sound/direct_sound_samples/cries/sandaconda.wav differ diff --git a/sound/direct_sound_samples/cries/sandile.aif b/sound/direct_sound_samples/cries/sandile.aif deleted file mode 100644 index 316b66aec954..000000000000 Binary files a/sound/direct_sound_samples/cries/sandile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sandile.wav b/sound/direct_sound_samples/cries/sandile.wav new file mode 100644 index 000000000000..e57af83a74a3 Binary files /dev/null and b/sound/direct_sound_samples/cries/sandile.wav differ diff --git a/sound/direct_sound_samples/cries/sandshrew.aif b/sound/direct_sound_samples/cries/sandshrew.aif deleted file mode 100644 index 02dd3c11822a..000000000000 Binary files a/sound/direct_sound_samples/cries/sandshrew.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sandshrew.wav b/sound/direct_sound_samples/cries/sandshrew.wav new file mode 100644 index 000000000000..8c324ed3d660 Binary files /dev/null and b/sound/direct_sound_samples/cries/sandshrew.wav differ diff --git a/sound/direct_sound_samples/cries/sandslash.aif b/sound/direct_sound_samples/cries/sandslash.aif deleted file mode 100644 index 59304e2dfea9..000000000000 Binary files a/sound/direct_sound_samples/cries/sandslash.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sandslash.wav b/sound/direct_sound_samples/cries/sandslash.wav new file mode 100644 index 000000000000..95bcdb8698f5 Binary files /dev/null and b/sound/direct_sound_samples/cries/sandslash.wav differ diff --git a/sound/direct_sound_samples/cries/sandy_shocks.aif b/sound/direct_sound_samples/cries/sandy_shocks.aif deleted file mode 100644 index d26cfc8817cc..000000000000 Binary files a/sound/direct_sound_samples/cries/sandy_shocks.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sandy_shocks.wav b/sound/direct_sound_samples/cries/sandy_shocks.wav new file mode 100644 index 000000000000..694ffe888f3e Binary files /dev/null and b/sound/direct_sound_samples/cries/sandy_shocks.wav differ diff --git a/sound/direct_sound_samples/cries/sandygast.aif b/sound/direct_sound_samples/cries/sandygast.aif deleted file mode 100644 index b99472bbaf34..000000000000 Binary files a/sound/direct_sound_samples/cries/sandygast.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sandygast.wav b/sound/direct_sound_samples/cries/sandygast.wav new file mode 100644 index 000000000000..88997b8ed5f9 Binary files /dev/null and b/sound/direct_sound_samples/cries/sandygast.wav differ diff --git a/sound/direct_sound_samples/cries/sawk.aif b/sound/direct_sound_samples/cries/sawk.aif deleted file mode 100644 index c040994edcde..000000000000 Binary files a/sound/direct_sound_samples/cries/sawk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sawk.wav b/sound/direct_sound_samples/cries/sawk.wav new file mode 100644 index 000000000000..b8ea99944406 Binary files /dev/null and b/sound/direct_sound_samples/cries/sawk.wav differ diff --git a/sound/direct_sound_samples/cries/sawsbuck.aif b/sound/direct_sound_samples/cries/sawsbuck.aif deleted file mode 100644 index 9dcc4f927c8f..000000000000 Binary files a/sound/direct_sound_samples/cries/sawsbuck.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sawsbuck.wav b/sound/direct_sound_samples/cries/sawsbuck.wav new file mode 100644 index 000000000000..562bc74a4f03 Binary files /dev/null and b/sound/direct_sound_samples/cries/sawsbuck.wav differ diff --git a/sound/direct_sound_samples/cries/scatterbug.aif b/sound/direct_sound_samples/cries/scatterbug.aif deleted file mode 100644 index c553fb4771ab..000000000000 Binary files a/sound/direct_sound_samples/cries/scatterbug.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scatterbug.wav b/sound/direct_sound_samples/cries/scatterbug.wav new file mode 100644 index 000000000000..8afef83e923d Binary files /dev/null and b/sound/direct_sound_samples/cries/scatterbug.wav differ diff --git a/sound/direct_sound_samples/cries/sceptile.aif b/sound/direct_sound_samples/cries/sceptile.aif deleted file mode 100644 index c460e445d513..000000000000 Binary files a/sound/direct_sound_samples/cries/sceptile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sceptile.wav b/sound/direct_sound_samples/cries/sceptile.wav new file mode 100644 index 000000000000..32673bc77360 Binary files /dev/null and b/sound/direct_sound_samples/cries/sceptile.wav differ diff --git a/sound/direct_sound_samples/cries/sceptile_mega.aif b/sound/direct_sound_samples/cries/sceptile_mega.aif deleted file mode 100644 index 50a16a1ee3f4..000000000000 Binary files a/sound/direct_sound_samples/cries/sceptile_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sceptile_mega.wav b/sound/direct_sound_samples/cries/sceptile_mega.wav new file mode 100644 index 000000000000..228b21d4ed7a Binary files /dev/null and b/sound/direct_sound_samples/cries/sceptile_mega.wav differ diff --git a/sound/direct_sound_samples/cries/scizor.aif b/sound/direct_sound_samples/cries/scizor.aif deleted file mode 100644 index eb423f61ddc1..000000000000 Binary files a/sound/direct_sound_samples/cries/scizor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scizor.wav b/sound/direct_sound_samples/cries/scizor.wav new file mode 100644 index 000000000000..8196df16b2e1 Binary files /dev/null and b/sound/direct_sound_samples/cries/scizor.wav differ diff --git a/sound/direct_sound_samples/cries/scizor_mega.aif b/sound/direct_sound_samples/cries/scizor_mega.aif deleted file mode 100644 index c970f8083bb5..000000000000 Binary files a/sound/direct_sound_samples/cries/scizor_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scizor_mega.wav b/sound/direct_sound_samples/cries/scizor_mega.wav new file mode 100644 index 000000000000..010cb05e6669 Binary files /dev/null and b/sound/direct_sound_samples/cries/scizor_mega.wav differ diff --git a/sound/direct_sound_samples/cries/scolipede.aif b/sound/direct_sound_samples/cries/scolipede.aif deleted file mode 100644 index 0372641b70b6..000000000000 Binary files a/sound/direct_sound_samples/cries/scolipede.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scolipede.wav b/sound/direct_sound_samples/cries/scolipede.wav new file mode 100644 index 000000000000..1b493ce18d45 Binary files /dev/null and b/sound/direct_sound_samples/cries/scolipede.wav differ diff --git a/sound/direct_sound_samples/cries/scorbunny.aif b/sound/direct_sound_samples/cries/scorbunny.aif deleted file mode 100644 index c0963bbc1cca..000000000000 Binary files a/sound/direct_sound_samples/cries/scorbunny.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scorbunny.wav b/sound/direct_sound_samples/cries/scorbunny.wav new file mode 100644 index 000000000000..dd9e54c72250 Binary files /dev/null and b/sound/direct_sound_samples/cries/scorbunny.wav differ diff --git a/sound/direct_sound_samples/cries/scovillain.aif b/sound/direct_sound_samples/cries/scovillain.aif deleted file mode 100644 index d84cb24087a5..000000000000 Binary files a/sound/direct_sound_samples/cries/scovillain.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scovillain.wav b/sound/direct_sound_samples/cries/scovillain.wav new file mode 100644 index 000000000000..a7d8f058e874 Binary files /dev/null and b/sound/direct_sound_samples/cries/scovillain.wav differ diff --git a/sound/direct_sound_samples/cries/scrafty.aif b/sound/direct_sound_samples/cries/scrafty.aif deleted file mode 100644 index bc351aa3de3d..000000000000 Binary files a/sound/direct_sound_samples/cries/scrafty.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scrafty.wav b/sound/direct_sound_samples/cries/scrafty.wav new file mode 100644 index 000000000000..e64613dfb891 Binary files /dev/null and b/sound/direct_sound_samples/cries/scrafty.wav differ diff --git a/sound/direct_sound_samples/cries/scraggy.aif b/sound/direct_sound_samples/cries/scraggy.aif deleted file mode 100644 index bd836ebc465d..000000000000 Binary files a/sound/direct_sound_samples/cries/scraggy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scraggy.wav b/sound/direct_sound_samples/cries/scraggy.wav new file mode 100644 index 000000000000..e5c014a43248 Binary files /dev/null and b/sound/direct_sound_samples/cries/scraggy.wav differ diff --git a/sound/direct_sound_samples/cries/scream_tail.aif b/sound/direct_sound_samples/cries/scream_tail.aif deleted file mode 100644 index a64bbdb05191..000000000000 Binary files a/sound/direct_sound_samples/cries/scream_tail.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scream_tail.wav b/sound/direct_sound_samples/cries/scream_tail.wav new file mode 100644 index 000000000000..c7f133809d61 Binary files /dev/null and b/sound/direct_sound_samples/cries/scream_tail.wav differ diff --git a/sound/direct_sound_samples/cries/scyther.aif b/sound/direct_sound_samples/cries/scyther.aif deleted file mode 100644 index 88bc85cdbbaf..000000000000 Binary files a/sound/direct_sound_samples/cries/scyther.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/scyther.wav b/sound/direct_sound_samples/cries/scyther.wav new file mode 100644 index 000000000000..5b6ba415a17f Binary files /dev/null and b/sound/direct_sound_samples/cries/scyther.wav differ diff --git a/sound/direct_sound_samples/cries/seadra.aif b/sound/direct_sound_samples/cries/seadra.aif deleted file mode 100644 index 19852ad2312f..000000000000 Binary files a/sound/direct_sound_samples/cries/seadra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/seadra.wav b/sound/direct_sound_samples/cries/seadra.wav new file mode 100644 index 000000000000..c68a68a19607 Binary files /dev/null and b/sound/direct_sound_samples/cries/seadra.wav differ diff --git a/sound/direct_sound_samples/cries/seaking.aif b/sound/direct_sound_samples/cries/seaking.aif deleted file mode 100644 index f572ce5dd421..000000000000 Binary files a/sound/direct_sound_samples/cries/seaking.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/seaking.wav b/sound/direct_sound_samples/cries/seaking.wav new file mode 100644 index 000000000000..6f2533e9463d Binary files /dev/null and b/sound/direct_sound_samples/cries/seaking.wav differ diff --git a/sound/direct_sound_samples/cries/sealeo.aif b/sound/direct_sound_samples/cries/sealeo.aif deleted file mode 100644 index 9a0aedda624e..000000000000 Binary files a/sound/direct_sound_samples/cries/sealeo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sealeo.wav b/sound/direct_sound_samples/cries/sealeo.wav new file mode 100644 index 000000000000..ad01a5fed30c Binary files /dev/null and b/sound/direct_sound_samples/cries/sealeo.wav differ diff --git a/sound/direct_sound_samples/cries/seedot.aif b/sound/direct_sound_samples/cries/seedot.aif deleted file mode 100644 index eac082184f33..000000000000 Binary files a/sound/direct_sound_samples/cries/seedot.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/seedot.wav b/sound/direct_sound_samples/cries/seedot.wav new file mode 100644 index 000000000000..b4d74f65d618 Binary files /dev/null and b/sound/direct_sound_samples/cries/seedot.wav differ diff --git a/sound/direct_sound_samples/cries/seel.aif b/sound/direct_sound_samples/cries/seel.aif deleted file mode 100644 index 1cc31998f2df..000000000000 Binary files a/sound/direct_sound_samples/cries/seel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/seel.wav b/sound/direct_sound_samples/cries/seel.wav new file mode 100644 index 000000000000..6e252b375a29 Binary files /dev/null and b/sound/direct_sound_samples/cries/seel.wav differ diff --git a/sound/direct_sound_samples/cries/seismitoad.aif b/sound/direct_sound_samples/cries/seismitoad.aif deleted file mode 100644 index 521f9b741b9b..000000000000 Binary files a/sound/direct_sound_samples/cries/seismitoad.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/seismitoad.wav b/sound/direct_sound_samples/cries/seismitoad.wav new file mode 100644 index 000000000000..ad833ea8e0e9 Binary files /dev/null and b/sound/direct_sound_samples/cries/seismitoad.wav differ diff --git a/sound/direct_sound_samples/cries/sentret.aif b/sound/direct_sound_samples/cries/sentret.aif deleted file mode 100644 index ffbce9c7c57d..000000000000 Binary files a/sound/direct_sound_samples/cries/sentret.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sentret.wav b/sound/direct_sound_samples/cries/sentret.wav new file mode 100644 index 000000000000..0c6746c4566d Binary files /dev/null and b/sound/direct_sound_samples/cries/sentret.wav differ diff --git a/sound/direct_sound_samples/cries/serperior.aif b/sound/direct_sound_samples/cries/serperior.aif deleted file mode 100644 index 9a2eb0baadca..000000000000 Binary files a/sound/direct_sound_samples/cries/serperior.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/serperior.wav b/sound/direct_sound_samples/cries/serperior.wav new file mode 100644 index 000000000000..427443c56fdb Binary files /dev/null and b/sound/direct_sound_samples/cries/serperior.wav differ diff --git a/sound/direct_sound_samples/cries/servine.aif b/sound/direct_sound_samples/cries/servine.aif deleted file mode 100644 index 7098f526d9f9..000000000000 Binary files a/sound/direct_sound_samples/cries/servine.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/servine.wav b/sound/direct_sound_samples/cries/servine.wav new file mode 100644 index 000000000000..61da20ea83fb Binary files /dev/null and b/sound/direct_sound_samples/cries/servine.wav differ diff --git a/sound/direct_sound_samples/cries/seviper.aif b/sound/direct_sound_samples/cries/seviper.aif deleted file mode 100644 index 5e3968db6d2a..000000000000 Binary files a/sound/direct_sound_samples/cries/seviper.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/seviper.wav b/sound/direct_sound_samples/cries/seviper.wav new file mode 100644 index 000000000000..b467378f4ce2 Binary files /dev/null and b/sound/direct_sound_samples/cries/seviper.wav differ diff --git a/sound/direct_sound_samples/cries/sewaddle.aif b/sound/direct_sound_samples/cries/sewaddle.aif deleted file mode 100644 index 9a3ac1272149..000000000000 Binary files a/sound/direct_sound_samples/cries/sewaddle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sewaddle.wav b/sound/direct_sound_samples/cries/sewaddle.wav new file mode 100644 index 000000000000..9751d50cf120 Binary files /dev/null and b/sound/direct_sound_samples/cries/sewaddle.wav differ diff --git a/sound/direct_sound_samples/cries/sharpedo.aif b/sound/direct_sound_samples/cries/sharpedo.aif deleted file mode 100644 index b68c24bb812a..000000000000 Binary files a/sound/direct_sound_samples/cries/sharpedo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sharpedo.wav b/sound/direct_sound_samples/cries/sharpedo.wav new file mode 100644 index 000000000000..26c52b43c3e9 Binary files /dev/null and b/sound/direct_sound_samples/cries/sharpedo.wav differ diff --git a/sound/direct_sound_samples/cries/sharpedo_mega.aif b/sound/direct_sound_samples/cries/sharpedo_mega.aif deleted file mode 100644 index 3fa5b49e9223..000000000000 Binary files a/sound/direct_sound_samples/cries/sharpedo_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sharpedo_mega.wav b/sound/direct_sound_samples/cries/sharpedo_mega.wav new file mode 100644 index 000000000000..232b0c524126 Binary files /dev/null and b/sound/direct_sound_samples/cries/sharpedo_mega.wav differ diff --git a/sound/direct_sound_samples/cries/shaymin_land.aif b/sound/direct_sound_samples/cries/shaymin_land.aif deleted file mode 100644 index ab0c40f156d0..000000000000 Binary files a/sound/direct_sound_samples/cries/shaymin_land.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shaymin_land.wav b/sound/direct_sound_samples/cries/shaymin_land.wav new file mode 100644 index 000000000000..9665e3b2ac9f Binary files /dev/null and b/sound/direct_sound_samples/cries/shaymin_land.wav differ diff --git a/sound/direct_sound_samples/cries/shaymin_sky.aif b/sound/direct_sound_samples/cries/shaymin_sky.aif deleted file mode 100644 index ee3dfa8457f4..000000000000 Binary files a/sound/direct_sound_samples/cries/shaymin_sky.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shaymin_sky.wav b/sound/direct_sound_samples/cries/shaymin_sky.wav new file mode 100644 index 000000000000..54f116f4b5b6 Binary files /dev/null and b/sound/direct_sound_samples/cries/shaymin_sky.wav differ diff --git a/sound/direct_sound_samples/cries/shedinja.aif b/sound/direct_sound_samples/cries/shedinja.aif deleted file mode 100644 index d891bd382c39..000000000000 Binary files a/sound/direct_sound_samples/cries/shedinja.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shedinja.wav b/sound/direct_sound_samples/cries/shedinja.wav new file mode 100644 index 000000000000..956ae0be9f64 Binary files /dev/null and b/sound/direct_sound_samples/cries/shedinja.wav differ diff --git a/sound/direct_sound_samples/cries/shelgon.aif b/sound/direct_sound_samples/cries/shelgon.aif deleted file mode 100644 index b202dc037625..000000000000 Binary files a/sound/direct_sound_samples/cries/shelgon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shelgon.wav b/sound/direct_sound_samples/cries/shelgon.wav new file mode 100644 index 000000000000..7648d06f9a0b Binary files /dev/null and b/sound/direct_sound_samples/cries/shelgon.wav differ diff --git a/sound/direct_sound_samples/cries/shellder.aif b/sound/direct_sound_samples/cries/shellder.aif deleted file mode 100644 index 3f2df4a82ca5..000000000000 Binary files a/sound/direct_sound_samples/cries/shellder.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shellder.wav b/sound/direct_sound_samples/cries/shellder.wav new file mode 100644 index 000000000000..1fe4367d78c5 Binary files /dev/null and b/sound/direct_sound_samples/cries/shellder.wav differ diff --git a/sound/direct_sound_samples/cries/shellos.aif b/sound/direct_sound_samples/cries/shellos.aif deleted file mode 100644 index f59073120229..000000000000 Binary files a/sound/direct_sound_samples/cries/shellos.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shellos.wav b/sound/direct_sound_samples/cries/shellos.wav new file mode 100644 index 000000000000..99e925434752 Binary files /dev/null and b/sound/direct_sound_samples/cries/shellos.wav differ diff --git a/sound/direct_sound_samples/cries/shelmet.aif b/sound/direct_sound_samples/cries/shelmet.aif deleted file mode 100644 index 472b6658c07e..000000000000 Binary files a/sound/direct_sound_samples/cries/shelmet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shelmet.wav b/sound/direct_sound_samples/cries/shelmet.wav new file mode 100644 index 000000000000..3cb2bcecc640 Binary files /dev/null and b/sound/direct_sound_samples/cries/shelmet.wav differ diff --git a/sound/direct_sound_samples/cries/shieldon.aif b/sound/direct_sound_samples/cries/shieldon.aif deleted file mode 100644 index 5ea98bf1748a..000000000000 Binary files a/sound/direct_sound_samples/cries/shieldon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shieldon.wav b/sound/direct_sound_samples/cries/shieldon.wav new file mode 100644 index 000000000000..dc7c1c5a3bf0 Binary files /dev/null and b/sound/direct_sound_samples/cries/shieldon.wav differ diff --git a/sound/direct_sound_samples/cries/shiftry.aif b/sound/direct_sound_samples/cries/shiftry.aif deleted file mode 100644 index dbc65b749ed5..000000000000 Binary files a/sound/direct_sound_samples/cries/shiftry.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shiftry.wav b/sound/direct_sound_samples/cries/shiftry.wav new file mode 100644 index 000000000000..533115f4042d Binary files /dev/null and b/sound/direct_sound_samples/cries/shiftry.wav differ diff --git a/sound/direct_sound_samples/cries/shiinotic.aif b/sound/direct_sound_samples/cries/shiinotic.aif deleted file mode 100644 index 972aef0769fe..000000000000 Binary files a/sound/direct_sound_samples/cries/shiinotic.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shiinotic.wav b/sound/direct_sound_samples/cries/shiinotic.wav new file mode 100644 index 000000000000..32ce94263680 Binary files /dev/null and b/sound/direct_sound_samples/cries/shiinotic.wav differ diff --git a/sound/direct_sound_samples/cries/shinx.aif b/sound/direct_sound_samples/cries/shinx.aif deleted file mode 100644 index 08f7ad8a4caf..000000000000 Binary files a/sound/direct_sound_samples/cries/shinx.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shinx.wav b/sound/direct_sound_samples/cries/shinx.wav new file mode 100644 index 000000000000..2f62c5d9664f Binary files /dev/null and b/sound/direct_sound_samples/cries/shinx.wav differ diff --git a/sound/direct_sound_samples/cries/shroodle.aif b/sound/direct_sound_samples/cries/shroodle.aif deleted file mode 100644 index b60ef3ade3f8..000000000000 Binary files a/sound/direct_sound_samples/cries/shroodle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shroodle.wav b/sound/direct_sound_samples/cries/shroodle.wav new file mode 100644 index 000000000000..0166fa68ca85 Binary files /dev/null and b/sound/direct_sound_samples/cries/shroodle.wav differ diff --git a/sound/direct_sound_samples/cries/shroomish.aif b/sound/direct_sound_samples/cries/shroomish.aif deleted file mode 100644 index 9c092ae07231..000000000000 Binary files a/sound/direct_sound_samples/cries/shroomish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shroomish.wav b/sound/direct_sound_samples/cries/shroomish.wav new file mode 100644 index 000000000000..07658c880109 Binary files /dev/null and b/sound/direct_sound_samples/cries/shroomish.wav differ diff --git a/sound/direct_sound_samples/cries/shuckle.aif b/sound/direct_sound_samples/cries/shuckle.aif deleted file mode 100644 index a5523506b571..000000000000 Binary files a/sound/direct_sound_samples/cries/shuckle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shuckle.wav b/sound/direct_sound_samples/cries/shuckle.wav new file mode 100644 index 000000000000..bb196dbfe94a Binary files /dev/null and b/sound/direct_sound_samples/cries/shuckle.wav differ diff --git a/sound/direct_sound_samples/cries/shuppet.aif b/sound/direct_sound_samples/cries/shuppet.aif deleted file mode 100644 index 8f48e8b5fd19..000000000000 Binary files a/sound/direct_sound_samples/cries/shuppet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/shuppet.wav b/sound/direct_sound_samples/cries/shuppet.wav new file mode 100644 index 000000000000..6b043a2772b4 Binary files /dev/null and b/sound/direct_sound_samples/cries/shuppet.wav differ diff --git a/sound/direct_sound_samples/cries/sigilyph.aif b/sound/direct_sound_samples/cries/sigilyph.aif deleted file mode 100644 index cf84e7dcf9eb..000000000000 Binary files a/sound/direct_sound_samples/cries/sigilyph.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sigilyph.wav b/sound/direct_sound_samples/cries/sigilyph.wav new file mode 100644 index 000000000000..5d43af49f5b8 Binary files /dev/null and b/sound/direct_sound_samples/cries/sigilyph.wav differ diff --git a/sound/direct_sound_samples/cries/silcoon.aif b/sound/direct_sound_samples/cries/silcoon.aif deleted file mode 100644 index 89cd186676b6..000000000000 Binary files a/sound/direct_sound_samples/cries/silcoon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/silcoon.wav b/sound/direct_sound_samples/cries/silcoon.wav new file mode 100644 index 000000000000..15827329e484 Binary files /dev/null and b/sound/direct_sound_samples/cries/silcoon.wav differ diff --git a/sound/direct_sound_samples/cries/silicobra.aif b/sound/direct_sound_samples/cries/silicobra.aif deleted file mode 100644 index 3b9f5e13fcb8..000000000000 Binary files a/sound/direct_sound_samples/cries/silicobra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/silicobra.wav b/sound/direct_sound_samples/cries/silicobra.wav new file mode 100644 index 000000000000..92392561ef63 Binary files /dev/null and b/sound/direct_sound_samples/cries/silicobra.wav differ diff --git a/sound/direct_sound_samples/cries/silvally.aif b/sound/direct_sound_samples/cries/silvally.aif deleted file mode 100644 index 48856c7d1647..000000000000 Binary files a/sound/direct_sound_samples/cries/silvally.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/silvally.wav b/sound/direct_sound_samples/cries/silvally.wav new file mode 100644 index 000000000000..833dbb928646 Binary files /dev/null and b/sound/direct_sound_samples/cries/silvally.wav differ diff --git a/sound/direct_sound_samples/cries/simipour.aif b/sound/direct_sound_samples/cries/simipour.aif deleted file mode 100644 index 91e891b63fbf..000000000000 Binary files a/sound/direct_sound_samples/cries/simipour.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/simipour.wav b/sound/direct_sound_samples/cries/simipour.wav new file mode 100644 index 000000000000..f5507327b097 Binary files /dev/null and b/sound/direct_sound_samples/cries/simipour.wav differ diff --git a/sound/direct_sound_samples/cries/simisage.aif b/sound/direct_sound_samples/cries/simisage.aif deleted file mode 100644 index 944f5ff83101..000000000000 Binary files a/sound/direct_sound_samples/cries/simisage.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/simisage.wav b/sound/direct_sound_samples/cries/simisage.wav new file mode 100644 index 000000000000..91bcf71d9d43 Binary files /dev/null and b/sound/direct_sound_samples/cries/simisage.wav differ diff --git a/sound/direct_sound_samples/cries/simisear.aif b/sound/direct_sound_samples/cries/simisear.aif deleted file mode 100644 index e3e8eb860aa8..000000000000 Binary files a/sound/direct_sound_samples/cries/simisear.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/simisear.wav b/sound/direct_sound_samples/cries/simisear.wav new file mode 100644 index 000000000000..737b37ba78df Binary files /dev/null and b/sound/direct_sound_samples/cries/simisear.wav differ diff --git a/sound/direct_sound_samples/cries/sinistcha.aif b/sound/direct_sound_samples/cries/sinistcha.aif deleted file mode 100644 index e9a619c3f034..000000000000 Binary files a/sound/direct_sound_samples/cries/sinistcha.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sinistcha.wav b/sound/direct_sound_samples/cries/sinistcha.wav new file mode 100644 index 000000000000..f3cb98dd7b58 Binary files /dev/null and b/sound/direct_sound_samples/cries/sinistcha.wav differ diff --git a/sound/direct_sound_samples/cries/sinistea.aif b/sound/direct_sound_samples/cries/sinistea.aif deleted file mode 100644 index 912a0800f985..000000000000 Binary files a/sound/direct_sound_samples/cries/sinistea.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sinistea.wav b/sound/direct_sound_samples/cries/sinistea.wav new file mode 100644 index 000000000000..b91d77cae27d Binary files /dev/null and b/sound/direct_sound_samples/cries/sinistea.wav differ diff --git a/sound/direct_sound_samples/cries/sirfetchd.aif b/sound/direct_sound_samples/cries/sirfetchd.aif deleted file mode 100644 index a5ca065a7502..000000000000 Binary files a/sound/direct_sound_samples/cries/sirfetchd.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sirfetchd.wav b/sound/direct_sound_samples/cries/sirfetchd.wav new file mode 100644 index 000000000000..cfa590d2cae2 Binary files /dev/null and b/sound/direct_sound_samples/cries/sirfetchd.wav differ diff --git a/sound/direct_sound_samples/cries/sizzlipede.aif b/sound/direct_sound_samples/cries/sizzlipede.aif deleted file mode 100644 index 99aade0666df..000000000000 Binary files a/sound/direct_sound_samples/cries/sizzlipede.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sizzlipede.wav b/sound/direct_sound_samples/cries/sizzlipede.wav new file mode 100644 index 000000000000..d2ee4859fc2c Binary files /dev/null and b/sound/direct_sound_samples/cries/sizzlipede.wav differ diff --git a/sound/direct_sound_samples/cries/skarmory.aif b/sound/direct_sound_samples/cries/skarmory.aif deleted file mode 100644 index 56414862344a..000000000000 Binary files a/sound/direct_sound_samples/cries/skarmory.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skarmory.wav b/sound/direct_sound_samples/cries/skarmory.wav new file mode 100644 index 000000000000..29249730232a Binary files /dev/null and b/sound/direct_sound_samples/cries/skarmory.wav differ diff --git a/sound/direct_sound_samples/cries/skeledirge.aif b/sound/direct_sound_samples/cries/skeledirge.aif deleted file mode 100644 index 720e102019db..000000000000 Binary files a/sound/direct_sound_samples/cries/skeledirge.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skeledirge.wav b/sound/direct_sound_samples/cries/skeledirge.wav new file mode 100644 index 000000000000..284cd7f5fd8c Binary files /dev/null and b/sound/direct_sound_samples/cries/skeledirge.wav differ diff --git a/sound/direct_sound_samples/cries/skiddo.aif b/sound/direct_sound_samples/cries/skiddo.aif deleted file mode 100644 index 5b2dc104f73c..000000000000 Binary files a/sound/direct_sound_samples/cries/skiddo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skiddo.wav b/sound/direct_sound_samples/cries/skiddo.wav new file mode 100644 index 000000000000..ce3e1e35ef28 Binary files /dev/null and b/sound/direct_sound_samples/cries/skiddo.wav differ diff --git a/sound/direct_sound_samples/cries/skiploom.aif b/sound/direct_sound_samples/cries/skiploom.aif deleted file mode 100644 index 4517e39c7a70..000000000000 Binary files a/sound/direct_sound_samples/cries/skiploom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skiploom.wav b/sound/direct_sound_samples/cries/skiploom.wav new file mode 100644 index 000000000000..30f9c266620a Binary files /dev/null and b/sound/direct_sound_samples/cries/skiploom.wav differ diff --git a/sound/direct_sound_samples/cries/skitty.aif b/sound/direct_sound_samples/cries/skitty.aif deleted file mode 100644 index 0f903b53779e..000000000000 Binary files a/sound/direct_sound_samples/cries/skitty.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skitty.wav b/sound/direct_sound_samples/cries/skitty.wav new file mode 100644 index 000000000000..02aaa4fcbd23 Binary files /dev/null and b/sound/direct_sound_samples/cries/skitty.wav differ diff --git a/sound/direct_sound_samples/cries/skorupi.aif b/sound/direct_sound_samples/cries/skorupi.aif deleted file mode 100644 index a638cb464532..000000000000 Binary files a/sound/direct_sound_samples/cries/skorupi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skorupi.wav b/sound/direct_sound_samples/cries/skorupi.wav new file mode 100644 index 000000000000..ae1317e26403 Binary files /dev/null and b/sound/direct_sound_samples/cries/skorupi.wav differ diff --git a/sound/direct_sound_samples/cries/skrelp.aif b/sound/direct_sound_samples/cries/skrelp.aif deleted file mode 100644 index 12bb27c043b2..000000000000 Binary files a/sound/direct_sound_samples/cries/skrelp.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skrelp.wav b/sound/direct_sound_samples/cries/skrelp.wav new file mode 100644 index 000000000000..4bbecd7a6295 Binary files /dev/null and b/sound/direct_sound_samples/cries/skrelp.wav differ diff --git a/sound/direct_sound_samples/cries/skuntank.aif b/sound/direct_sound_samples/cries/skuntank.aif deleted file mode 100644 index 354f2af92ca0..000000000000 Binary files a/sound/direct_sound_samples/cries/skuntank.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skuntank.wav b/sound/direct_sound_samples/cries/skuntank.wav new file mode 100644 index 000000000000..315c8a41cf06 Binary files /dev/null and b/sound/direct_sound_samples/cries/skuntank.wav differ diff --git a/sound/direct_sound_samples/cries/skwovet.aif b/sound/direct_sound_samples/cries/skwovet.aif deleted file mode 100644 index b5a27241d528..000000000000 Binary files a/sound/direct_sound_samples/cries/skwovet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/skwovet.wav b/sound/direct_sound_samples/cries/skwovet.wav new file mode 100644 index 000000000000..7765154b9125 Binary files /dev/null and b/sound/direct_sound_samples/cries/skwovet.wav differ diff --git a/sound/direct_sound_samples/cries/slaking.aif b/sound/direct_sound_samples/cries/slaking.aif deleted file mode 100644 index d023af76817e..000000000000 Binary files a/sound/direct_sound_samples/cries/slaking.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slaking.wav b/sound/direct_sound_samples/cries/slaking.wav new file mode 100644 index 000000000000..ef34d94d690b Binary files /dev/null and b/sound/direct_sound_samples/cries/slaking.wav differ diff --git a/sound/direct_sound_samples/cries/slakoth.aif b/sound/direct_sound_samples/cries/slakoth.aif deleted file mode 100644 index 54248b2d8545..000000000000 Binary files a/sound/direct_sound_samples/cries/slakoth.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slakoth.wav b/sound/direct_sound_samples/cries/slakoth.wav new file mode 100644 index 000000000000..d4588b3a2193 Binary files /dev/null and b/sound/direct_sound_samples/cries/slakoth.wav differ diff --git a/sound/direct_sound_samples/cries/sliggoo.aif b/sound/direct_sound_samples/cries/sliggoo.aif deleted file mode 100644 index ed141e69c576..000000000000 Binary files a/sound/direct_sound_samples/cries/sliggoo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sliggoo.wav b/sound/direct_sound_samples/cries/sliggoo.wav new file mode 100644 index 000000000000..c988d4244a1f Binary files /dev/null and b/sound/direct_sound_samples/cries/sliggoo.wav differ diff --git a/sound/direct_sound_samples/cries/slither_wing.aif b/sound/direct_sound_samples/cries/slither_wing.aif deleted file mode 100644 index 699f74f2f956..000000000000 Binary files a/sound/direct_sound_samples/cries/slither_wing.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slither_wing.wav b/sound/direct_sound_samples/cries/slither_wing.wav new file mode 100644 index 000000000000..35baf10669da Binary files /dev/null and b/sound/direct_sound_samples/cries/slither_wing.wav differ diff --git a/sound/direct_sound_samples/cries/slowbro.aif b/sound/direct_sound_samples/cries/slowbro.aif deleted file mode 100644 index c3778734e395..000000000000 Binary files a/sound/direct_sound_samples/cries/slowbro.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slowbro.wav b/sound/direct_sound_samples/cries/slowbro.wav new file mode 100644 index 000000000000..fe03ab4cdd8c Binary files /dev/null and b/sound/direct_sound_samples/cries/slowbro.wav differ diff --git a/sound/direct_sound_samples/cries/slowbro_mega.aif b/sound/direct_sound_samples/cries/slowbro_mega.aif deleted file mode 100644 index 6ae2a0fb6835..000000000000 Binary files a/sound/direct_sound_samples/cries/slowbro_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slowbro_mega.wav b/sound/direct_sound_samples/cries/slowbro_mega.wav new file mode 100644 index 000000000000..4dee27f96e97 Binary files /dev/null and b/sound/direct_sound_samples/cries/slowbro_mega.wav differ diff --git a/sound/direct_sound_samples/cries/slowking.aif b/sound/direct_sound_samples/cries/slowking.aif deleted file mode 100644 index e135c9e0db95..000000000000 Binary files a/sound/direct_sound_samples/cries/slowking.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slowking.wav b/sound/direct_sound_samples/cries/slowking.wav new file mode 100644 index 000000000000..f802796282ad Binary files /dev/null and b/sound/direct_sound_samples/cries/slowking.wav differ diff --git a/sound/direct_sound_samples/cries/slowpoke.aif b/sound/direct_sound_samples/cries/slowpoke.aif deleted file mode 100644 index e92ed0c20883..000000000000 Binary files a/sound/direct_sound_samples/cries/slowpoke.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slowpoke.wav b/sound/direct_sound_samples/cries/slowpoke.wav new file mode 100644 index 000000000000..b3a45bef0a7d Binary files /dev/null and b/sound/direct_sound_samples/cries/slowpoke.wav differ diff --git a/sound/direct_sound_samples/cries/slowpoke_galar.aif b/sound/direct_sound_samples/cries/slowpoke_galar.aif deleted file mode 100644 index 30251a2e8c7b..000000000000 Binary files a/sound/direct_sound_samples/cries/slowpoke_galar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slowpoke_galar.wav b/sound/direct_sound_samples/cries/slowpoke_galar.wav new file mode 100644 index 000000000000..8e72b6d83e33 Binary files /dev/null and b/sound/direct_sound_samples/cries/slowpoke_galar.wav differ diff --git a/sound/direct_sound_samples/cries/slugma.aif b/sound/direct_sound_samples/cries/slugma.aif deleted file mode 100644 index 3526b7f6e7bd..000000000000 Binary files a/sound/direct_sound_samples/cries/slugma.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slugma.wav b/sound/direct_sound_samples/cries/slugma.wav new file mode 100644 index 000000000000..389bc8865710 Binary files /dev/null and b/sound/direct_sound_samples/cries/slugma.wav differ diff --git a/sound/direct_sound_samples/cries/slurpuff.aif b/sound/direct_sound_samples/cries/slurpuff.aif deleted file mode 100644 index 93b59e8e3527..000000000000 Binary files a/sound/direct_sound_samples/cries/slurpuff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/slurpuff.wav b/sound/direct_sound_samples/cries/slurpuff.wav new file mode 100644 index 000000000000..e7f4be98763f Binary files /dev/null and b/sound/direct_sound_samples/cries/slurpuff.wav differ diff --git a/sound/direct_sound_samples/cries/smeargle.aif b/sound/direct_sound_samples/cries/smeargle.aif deleted file mode 100644 index 76cc479ccccb..000000000000 Binary files a/sound/direct_sound_samples/cries/smeargle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/smeargle.wav b/sound/direct_sound_samples/cries/smeargle.wav new file mode 100644 index 000000000000..e206f8f61b15 Binary files /dev/null and b/sound/direct_sound_samples/cries/smeargle.wav differ diff --git a/sound/direct_sound_samples/cries/smoliv.aif b/sound/direct_sound_samples/cries/smoliv.aif deleted file mode 100644 index 44b688aff915..000000000000 Binary files a/sound/direct_sound_samples/cries/smoliv.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/smoliv.wav b/sound/direct_sound_samples/cries/smoliv.wav new file mode 100644 index 000000000000..9662fc1e5213 Binary files /dev/null and b/sound/direct_sound_samples/cries/smoliv.wav differ diff --git a/sound/direct_sound_samples/cries/smoochum.aif b/sound/direct_sound_samples/cries/smoochum.aif deleted file mode 100644 index 812586940cfb..000000000000 Binary files a/sound/direct_sound_samples/cries/smoochum.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/smoochum.wav b/sound/direct_sound_samples/cries/smoochum.wav new file mode 100644 index 000000000000..a4abdde7ec68 Binary files /dev/null and b/sound/direct_sound_samples/cries/smoochum.wav differ diff --git a/sound/direct_sound_samples/cries/sneasel.aif b/sound/direct_sound_samples/cries/sneasel.aif deleted file mode 100644 index e4bf7129c444..000000000000 Binary files a/sound/direct_sound_samples/cries/sneasel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sneasel.wav b/sound/direct_sound_samples/cries/sneasel.wav new file mode 100644 index 000000000000..da76aefb71f3 Binary files /dev/null and b/sound/direct_sound_samples/cries/sneasel.wav differ diff --git a/sound/direct_sound_samples/cries/sneasler.aif b/sound/direct_sound_samples/cries/sneasler.aif deleted file mode 100644 index b8537fef07cf..000000000000 Binary files a/sound/direct_sound_samples/cries/sneasler.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sneasler.wav b/sound/direct_sound_samples/cries/sneasler.wav new file mode 100644 index 000000000000..4dbc8c5eea1f Binary files /dev/null and b/sound/direct_sound_samples/cries/sneasler.wav differ diff --git a/sound/direct_sound_samples/cries/snivy.aif b/sound/direct_sound_samples/cries/snivy.aif deleted file mode 100644 index cd0335decbd2..000000000000 Binary files a/sound/direct_sound_samples/cries/snivy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/snivy.wav b/sound/direct_sound_samples/cries/snivy.wav new file mode 100644 index 000000000000..1d9ba8c4a693 Binary files /dev/null and b/sound/direct_sound_samples/cries/snivy.wav differ diff --git a/sound/direct_sound_samples/cries/snom.aif b/sound/direct_sound_samples/cries/snom.aif deleted file mode 100644 index 9591fa1d7d60..000000000000 Binary files a/sound/direct_sound_samples/cries/snom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/snom.wav b/sound/direct_sound_samples/cries/snom.wav new file mode 100644 index 000000000000..384269745a32 Binary files /dev/null and b/sound/direct_sound_samples/cries/snom.wav differ diff --git a/sound/direct_sound_samples/cries/snorlax.aif b/sound/direct_sound_samples/cries/snorlax.aif deleted file mode 100644 index d65557c79867..000000000000 Binary files a/sound/direct_sound_samples/cries/snorlax.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/snorlax.wav b/sound/direct_sound_samples/cries/snorlax.wav new file mode 100644 index 000000000000..12e717be1744 Binary files /dev/null and b/sound/direct_sound_samples/cries/snorlax.wav differ diff --git a/sound/direct_sound_samples/cries/snorunt.aif b/sound/direct_sound_samples/cries/snorunt.aif deleted file mode 100644 index 21bae9fc67a7..000000000000 Binary files a/sound/direct_sound_samples/cries/snorunt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/snorunt.wav b/sound/direct_sound_samples/cries/snorunt.wav new file mode 100644 index 000000000000..b4ecc4537fb1 Binary files /dev/null and b/sound/direct_sound_samples/cries/snorunt.wav differ diff --git a/sound/direct_sound_samples/cries/snover.aif b/sound/direct_sound_samples/cries/snover.aif deleted file mode 100644 index d02aceda4cb4..000000000000 Binary files a/sound/direct_sound_samples/cries/snover.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/snover.wav b/sound/direct_sound_samples/cries/snover.wav new file mode 100644 index 000000000000..1ddb86c7bcab Binary files /dev/null and b/sound/direct_sound_samples/cries/snover.wav differ diff --git a/sound/direct_sound_samples/cries/snubbull.aif b/sound/direct_sound_samples/cries/snubbull.aif deleted file mode 100644 index 5e2ca9adb0da..000000000000 Binary files a/sound/direct_sound_samples/cries/snubbull.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/snubbull.wav b/sound/direct_sound_samples/cries/snubbull.wav new file mode 100644 index 000000000000..37cacda8f77a Binary files /dev/null and b/sound/direct_sound_samples/cries/snubbull.wav differ diff --git a/sound/direct_sound_samples/cries/sobble.aif b/sound/direct_sound_samples/cries/sobble.aif deleted file mode 100644 index bdb1d937fa31..000000000000 Binary files a/sound/direct_sound_samples/cries/sobble.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sobble.wav b/sound/direct_sound_samples/cries/sobble.wav new file mode 100644 index 000000000000..6a384d1de25d Binary files /dev/null and b/sound/direct_sound_samples/cries/sobble.wav differ diff --git a/sound/direct_sound_samples/cries/solgaleo.aif b/sound/direct_sound_samples/cries/solgaleo.aif deleted file mode 100644 index 8cb9ad0cb5a3..000000000000 Binary files a/sound/direct_sound_samples/cries/solgaleo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/solgaleo.wav b/sound/direct_sound_samples/cries/solgaleo.wav new file mode 100644 index 000000000000..575978e635bc Binary files /dev/null and b/sound/direct_sound_samples/cries/solgaleo.wav differ diff --git a/sound/direct_sound_samples/cries/solosis.aif b/sound/direct_sound_samples/cries/solosis.aif deleted file mode 100644 index 701424bbd6dc..000000000000 Binary files a/sound/direct_sound_samples/cries/solosis.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/solosis.wav b/sound/direct_sound_samples/cries/solosis.wav new file mode 100644 index 000000000000..edb4b6ba7aff Binary files /dev/null and b/sound/direct_sound_samples/cries/solosis.wav differ diff --git a/sound/direct_sound_samples/cries/solrock.aif b/sound/direct_sound_samples/cries/solrock.aif deleted file mode 100644 index ed58aeecaec6..000000000000 Binary files a/sound/direct_sound_samples/cries/solrock.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/solrock.wav b/sound/direct_sound_samples/cries/solrock.wav new file mode 100644 index 000000000000..12f766af714a Binary files /dev/null and b/sound/direct_sound_samples/cries/solrock.wav differ diff --git a/sound/direct_sound_samples/cries/spearow.aif b/sound/direct_sound_samples/cries/spearow.aif deleted file mode 100644 index 9fb8d0cc8f10..000000000000 Binary files a/sound/direct_sound_samples/cries/spearow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spearow.wav b/sound/direct_sound_samples/cries/spearow.wav new file mode 100644 index 000000000000..a64848136810 Binary files /dev/null and b/sound/direct_sound_samples/cries/spearow.wav differ diff --git a/sound/direct_sound_samples/cries/spectrier.aif b/sound/direct_sound_samples/cries/spectrier.aif deleted file mode 100644 index a43dc77a6cde..000000000000 Binary files a/sound/direct_sound_samples/cries/spectrier.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spectrier.wav b/sound/direct_sound_samples/cries/spectrier.wav new file mode 100644 index 000000000000..dbfbfef08dc3 Binary files /dev/null and b/sound/direct_sound_samples/cries/spectrier.wav differ diff --git a/sound/direct_sound_samples/cries/spewpa.aif b/sound/direct_sound_samples/cries/spewpa.aif deleted file mode 100644 index 34cd82b98983..000000000000 Binary files a/sound/direct_sound_samples/cries/spewpa.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spewpa.wav b/sound/direct_sound_samples/cries/spewpa.wav new file mode 100644 index 000000000000..f260c20c6421 Binary files /dev/null and b/sound/direct_sound_samples/cries/spewpa.wav differ diff --git a/sound/direct_sound_samples/cries/spheal.aif b/sound/direct_sound_samples/cries/spheal.aif deleted file mode 100644 index 44d21a97390d..000000000000 Binary files a/sound/direct_sound_samples/cries/spheal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spheal.wav b/sound/direct_sound_samples/cries/spheal.wav new file mode 100644 index 000000000000..818caf8cd829 Binary files /dev/null and b/sound/direct_sound_samples/cries/spheal.wav differ diff --git a/sound/direct_sound_samples/cries/spidops.aif b/sound/direct_sound_samples/cries/spidops.aif deleted file mode 100644 index 626aa0c3f547..000000000000 Binary files a/sound/direct_sound_samples/cries/spidops.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spidops.wav b/sound/direct_sound_samples/cries/spidops.wav new file mode 100644 index 000000000000..cfde8c39b305 Binary files /dev/null and b/sound/direct_sound_samples/cries/spidops.wav differ diff --git a/sound/direct_sound_samples/cries/spinarak.aif b/sound/direct_sound_samples/cries/spinarak.aif deleted file mode 100644 index f49c856acacd..000000000000 Binary files a/sound/direct_sound_samples/cries/spinarak.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spinarak.wav b/sound/direct_sound_samples/cries/spinarak.wav new file mode 100644 index 000000000000..3c45731327d5 Binary files /dev/null and b/sound/direct_sound_samples/cries/spinarak.wav differ diff --git a/sound/direct_sound_samples/cries/spinda.aif b/sound/direct_sound_samples/cries/spinda.aif deleted file mode 100644 index 01914a5d09d3..000000000000 Binary files a/sound/direct_sound_samples/cries/spinda.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spinda.wav b/sound/direct_sound_samples/cries/spinda.wav new file mode 100644 index 000000000000..4481e3a88717 Binary files /dev/null and b/sound/direct_sound_samples/cries/spinda.wav differ diff --git a/sound/direct_sound_samples/cries/spiritomb.aif b/sound/direct_sound_samples/cries/spiritomb.aif deleted file mode 100644 index 7a504adfb096..000000000000 Binary files a/sound/direct_sound_samples/cries/spiritomb.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spiritomb.wav b/sound/direct_sound_samples/cries/spiritomb.wav new file mode 100644 index 000000000000..45b657423275 Binary files /dev/null and b/sound/direct_sound_samples/cries/spiritomb.wav differ diff --git a/sound/direct_sound_samples/cries/spoink.aif b/sound/direct_sound_samples/cries/spoink.aif deleted file mode 100644 index 102f53d8f1ff..000000000000 Binary files a/sound/direct_sound_samples/cries/spoink.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spoink.wav b/sound/direct_sound_samples/cries/spoink.wav new file mode 100644 index 000000000000..36447fb84b33 Binary files /dev/null and b/sound/direct_sound_samples/cries/spoink.wav differ diff --git a/sound/direct_sound_samples/cries/sprigatito.aif b/sound/direct_sound_samples/cries/sprigatito.aif deleted file mode 100644 index 13616f9686e6..000000000000 Binary files a/sound/direct_sound_samples/cries/sprigatito.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sprigatito.wav b/sound/direct_sound_samples/cries/sprigatito.wav new file mode 100644 index 000000000000..822c2d70fcff Binary files /dev/null and b/sound/direct_sound_samples/cries/sprigatito.wav differ diff --git a/sound/direct_sound_samples/cries/spritzee.aif b/sound/direct_sound_samples/cries/spritzee.aif deleted file mode 100644 index 3bf2499d72e1..000000000000 Binary files a/sound/direct_sound_samples/cries/spritzee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/spritzee.wav b/sound/direct_sound_samples/cries/spritzee.wav new file mode 100644 index 000000000000..18dc72256f4a Binary files /dev/null and b/sound/direct_sound_samples/cries/spritzee.wav differ diff --git a/sound/direct_sound_samples/cries/squawkabilly.aif b/sound/direct_sound_samples/cries/squawkabilly.aif deleted file mode 100644 index 0c88f36f7414..000000000000 Binary files a/sound/direct_sound_samples/cries/squawkabilly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/squawkabilly.wav b/sound/direct_sound_samples/cries/squawkabilly.wav new file mode 100644 index 000000000000..77d90d6f4dfa Binary files /dev/null and b/sound/direct_sound_samples/cries/squawkabilly.wav differ diff --git a/sound/direct_sound_samples/cries/squirtle.aif b/sound/direct_sound_samples/cries/squirtle.aif deleted file mode 100644 index 8e6cf8644d18..000000000000 Binary files a/sound/direct_sound_samples/cries/squirtle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/squirtle.wav b/sound/direct_sound_samples/cries/squirtle.wav new file mode 100644 index 000000000000..0cf32c6b6ce2 Binary files /dev/null and b/sound/direct_sound_samples/cries/squirtle.wav differ diff --git a/sound/direct_sound_samples/cries/stakataka.aif b/sound/direct_sound_samples/cries/stakataka.aif deleted file mode 100644 index cabe903b43b4..000000000000 Binary files a/sound/direct_sound_samples/cries/stakataka.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/stakataka.wav b/sound/direct_sound_samples/cries/stakataka.wav new file mode 100644 index 000000000000..c5ca06ea5815 Binary files /dev/null and b/sound/direct_sound_samples/cries/stakataka.wav differ diff --git a/sound/direct_sound_samples/cries/stantler.aif b/sound/direct_sound_samples/cries/stantler.aif deleted file mode 100644 index 231466ebea8d..000000000000 Binary files a/sound/direct_sound_samples/cries/stantler.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/stantler.wav b/sound/direct_sound_samples/cries/stantler.wav new file mode 100644 index 000000000000..f59953beb034 Binary files /dev/null and b/sound/direct_sound_samples/cries/stantler.wav differ diff --git a/sound/direct_sound_samples/cries/staraptor.aif b/sound/direct_sound_samples/cries/staraptor.aif deleted file mode 100644 index 05ccd1f0246e..000000000000 Binary files a/sound/direct_sound_samples/cries/staraptor.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/staraptor.wav b/sound/direct_sound_samples/cries/staraptor.wav new file mode 100644 index 000000000000..acbbdc0ece35 Binary files /dev/null and b/sound/direct_sound_samples/cries/staraptor.wav differ diff --git a/sound/direct_sound_samples/cries/staravia.aif b/sound/direct_sound_samples/cries/staravia.aif deleted file mode 100644 index 235d14eaf813..000000000000 Binary files a/sound/direct_sound_samples/cries/staravia.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/staravia.wav b/sound/direct_sound_samples/cries/staravia.wav new file mode 100644 index 000000000000..97d6bfe631a5 Binary files /dev/null and b/sound/direct_sound_samples/cries/staravia.wav differ diff --git a/sound/direct_sound_samples/cries/starly.aif b/sound/direct_sound_samples/cries/starly.aif deleted file mode 100644 index 2b0dd3960af4..000000000000 Binary files a/sound/direct_sound_samples/cries/starly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/starly.wav b/sound/direct_sound_samples/cries/starly.wav new file mode 100644 index 000000000000..f897be9a811e Binary files /dev/null and b/sound/direct_sound_samples/cries/starly.wav differ diff --git a/sound/direct_sound_samples/cries/starmie.aif b/sound/direct_sound_samples/cries/starmie.aif deleted file mode 100644 index a2daf8680075..000000000000 Binary files a/sound/direct_sound_samples/cries/starmie.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/starmie.wav b/sound/direct_sound_samples/cries/starmie.wav new file mode 100644 index 000000000000..e3ace4fcf2ff Binary files /dev/null and b/sound/direct_sound_samples/cries/starmie.wav differ diff --git a/sound/direct_sound_samples/cries/staryu.aif b/sound/direct_sound_samples/cries/staryu.aif deleted file mode 100644 index cd0cbc6b2b53..000000000000 Binary files a/sound/direct_sound_samples/cries/staryu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/staryu.wav b/sound/direct_sound_samples/cries/staryu.wav new file mode 100644 index 000000000000..c726206f43b0 Binary files /dev/null and b/sound/direct_sound_samples/cries/staryu.wav differ diff --git a/sound/direct_sound_samples/cries/steelix.aif b/sound/direct_sound_samples/cries/steelix.aif deleted file mode 100644 index 060cd00be473..000000000000 Binary files a/sound/direct_sound_samples/cries/steelix.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/steelix.wav b/sound/direct_sound_samples/cries/steelix.wav new file mode 100644 index 000000000000..8683e3d24282 Binary files /dev/null and b/sound/direct_sound_samples/cries/steelix.wav differ diff --git a/sound/direct_sound_samples/cries/steelix_mega.aif b/sound/direct_sound_samples/cries/steelix_mega.aif deleted file mode 100644 index dfb068e1617f..000000000000 Binary files a/sound/direct_sound_samples/cries/steelix_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/steelix_mega.wav b/sound/direct_sound_samples/cries/steelix_mega.wav new file mode 100644 index 000000000000..1ce3f8a0e3c5 Binary files /dev/null and b/sound/direct_sound_samples/cries/steelix_mega.wav differ diff --git a/sound/direct_sound_samples/cries/steenee.aif b/sound/direct_sound_samples/cries/steenee.aif deleted file mode 100644 index 54b9df83b76d..000000000000 Binary files a/sound/direct_sound_samples/cries/steenee.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/steenee.wav b/sound/direct_sound_samples/cries/steenee.wav new file mode 100644 index 000000000000..c6749208e94e Binary files /dev/null and b/sound/direct_sound_samples/cries/steenee.wav differ diff --git a/sound/direct_sound_samples/cries/stonjourner.aif b/sound/direct_sound_samples/cries/stonjourner.aif deleted file mode 100644 index c1a24f377947..000000000000 Binary files a/sound/direct_sound_samples/cries/stonjourner.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/stonjourner.wav b/sound/direct_sound_samples/cries/stonjourner.wav new file mode 100644 index 000000000000..81064b70cf56 Binary files /dev/null and b/sound/direct_sound_samples/cries/stonjourner.wav differ diff --git a/sound/direct_sound_samples/cries/stoutland.aif b/sound/direct_sound_samples/cries/stoutland.aif deleted file mode 100644 index 5479323d49d8..000000000000 Binary files a/sound/direct_sound_samples/cries/stoutland.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/stoutland.wav b/sound/direct_sound_samples/cries/stoutland.wav new file mode 100644 index 000000000000..f95b522660f8 Binary files /dev/null and b/sound/direct_sound_samples/cries/stoutland.wav differ diff --git a/sound/direct_sound_samples/cries/stufful.aif b/sound/direct_sound_samples/cries/stufful.aif deleted file mode 100644 index abd70624f062..000000000000 Binary files a/sound/direct_sound_samples/cries/stufful.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/stufful.wav b/sound/direct_sound_samples/cries/stufful.wav new file mode 100644 index 000000000000..f03666ef8f12 Binary files /dev/null and b/sound/direct_sound_samples/cries/stufful.wav differ diff --git a/sound/direct_sound_samples/cries/stunfisk.aif b/sound/direct_sound_samples/cries/stunfisk.aif deleted file mode 100644 index 3d7f116cfd33..000000000000 Binary files a/sound/direct_sound_samples/cries/stunfisk.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/stunfisk.wav b/sound/direct_sound_samples/cries/stunfisk.wav new file mode 100644 index 000000000000..68165add7968 Binary files /dev/null and b/sound/direct_sound_samples/cries/stunfisk.wav differ diff --git a/sound/direct_sound_samples/cries/stunky.aif b/sound/direct_sound_samples/cries/stunky.aif deleted file mode 100644 index bb9a34bc6254..000000000000 Binary files a/sound/direct_sound_samples/cries/stunky.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/stunky.wav b/sound/direct_sound_samples/cries/stunky.wav new file mode 100644 index 000000000000..50faa537e649 Binary files /dev/null and b/sound/direct_sound_samples/cries/stunky.wav differ diff --git a/sound/direct_sound_samples/cries/sudowoodo.aif b/sound/direct_sound_samples/cries/sudowoodo.aif deleted file mode 100644 index 64ef66ef0c23..000000000000 Binary files a/sound/direct_sound_samples/cries/sudowoodo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sudowoodo.wav b/sound/direct_sound_samples/cries/sudowoodo.wav new file mode 100644 index 000000000000..48661df94ed9 Binary files /dev/null and b/sound/direct_sound_samples/cries/sudowoodo.wav differ diff --git a/sound/direct_sound_samples/cries/suicune.aif b/sound/direct_sound_samples/cries/suicune.aif deleted file mode 100644 index 10840f92c190..000000000000 Binary files a/sound/direct_sound_samples/cries/suicune.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/suicune.wav b/sound/direct_sound_samples/cries/suicune.wav new file mode 100644 index 000000000000..f675d8fdc4ba Binary files /dev/null and b/sound/direct_sound_samples/cries/suicune.wav differ diff --git a/sound/direct_sound_samples/cries/sunflora.aif b/sound/direct_sound_samples/cries/sunflora.aif deleted file mode 100644 index e64c7ab4e4b7..000000000000 Binary files a/sound/direct_sound_samples/cries/sunflora.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sunflora.wav b/sound/direct_sound_samples/cries/sunflora.wav new file mode 100644 index 000000000000..613422881cc6 Binary files /dev/null and b/sound/direct_sound_samples/cries/sunflora.wav differ diff --git a/sound/direct_sound_samples/cries/sunkern.aif b/sound/direct_sound_samples/cries/sunkern.aif deleted file mode 100644 index ecead99e9919..000000000000 Binary files a/sound/direct_sound_samples/cries/sunkern.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sunkern.wav b/sound/direct_sound_samples/cries/sunkern.wav new file mode 100644 index 000000000000..b183f9ee947c Binary files /dev/null and b/sound/direct_sound_samples/cries/sunkern.wav differ diff --git a/sound/direct_sound_samples/cries/surskit.aif b/sound/direct_sound_samples/cries/surskit.aif deleted file mode 100644 index 445daa612950..000000000000 Binary files a/sound/direct_sound_samples/cries/surskit.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/surskit.wav b/sound/direct_sound_samples/cries/surskit.wav new file mode 100644 index 000000000000..04b1be882d0f Binary files /dev/null and b/sound/direct_sound_samples/cries/surskit.wav differ diff --git a/sound/direct_sound_samples/cries/swablu.aif b/sound/direct_sound_samples/cries/swablu.aif deleted file mode 100644 index 0940910ce3bd..000000000000 Binary files a/sound/direct_sound_samples/cries/swablu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swablu.wav b/sound/direct_sound_samples/cries/swablu.wav new file mode 100644 index 000000000000..f24d34930742 Binary files /dev/null and b/sound/direct_sound_samples/cries/swablu.wav differ diff --git a/sound/direct_sound_samples/cries/swadloon.aif b/sound/direct_sound_samples/cries/swadloon.aif deleted file mode 100644 index d2606953b2cb..000000000000 Binary files a/sound/direct_sound_samples/cries/swadloon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swadloon.wav b/sound/direct_sound_samples/cries/swadloon.wav new file mode 100644 index 000000000000..c2d2ff2eb421 Binary files /dev/null and b/sound/direct_sound_samples/cries/swadloon.wav differ diff --git a/sound/direct_sound_samples/cries/swalot.aif b/sound/direct_sound_samples/cries/swalot.aif deleted file mode 100644 index 87e57c9b70ef..000000000000 Binary files a/sound/direct_sound_samples/cries/swalot.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swalot.wav b/sound/direct_sound_samples/cries/swalot.wav new file mode 100644 index 000000000000..cfed97934289 Binary files /dev/null and b/sound/direct_sound_samples/cries/swalot.wav differ diff --git a/sound/direct_sound_samples/cries/swampert.aif b/sound/direct_sound_samples/cries/swampert.aif deleted file mode 100644 index 132844c70517..000000000000 Binary files a/sound/direct_sound_samples/cries/swampert.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swampert.wav b/sound/direct_sound_samples/cries/swampert.wav new file mode 100644 index 000000000000..a06f15992faa Binary files /dev/null and b/sound/direct_sound_samples/cries/swampert.wav differ diff --git a/sound/direct_sound_samples/cries/swampert_mega.aif b/sound/direct_sound_samples/cries/swampert_mega.aif deleted file mode 100644 index c19ec99835ae..000000000000 Binary files a/sound/direct_sound_samples/cries/swampert_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swampert_mega.wav b/sound/direct_sound_samples/cries/swampert_mega.wav new file mode 100644 index 000000000000..6abd49881955 Binary files /dev/null and b/sound/direct_sound_samples/cries/swampert_mega.wav differ diff --git a/sound/direct_sound_samples/cries/swanna.aif b/sound/direct_sound_samples/cries/swanna.aif deleted file mode 100644 index 9b2ef724f6c7..000000000000 Binary files a/sound/direct_sound_samples/cries/swanna.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swanna.wav b/sound/direct_sound_samples/cries/swanna.wav new file mode 100644 index 000000000000..f2390b1fc45b Binary files /dev/null and b/sound/direct_sound_samples/cries/swanna.wav differ diff --git a/sound/direct_sound_samples/cries/swellow.aif b/sound/direct_sound_samples/cries/swellow.aif deleted file mode 100644 index a5bf66627d1e..000000000000 Binary files a/sound/direct_sound_samples/cries/swellow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swellow.wav b/sound/direct_sound_samples/cries/swellow.wav new file mode 100644 index 000000000000..637ff465403f Binary files /dev/null and b/sound/direct_sound_samples/cries/swellow.wav differ diff --git a/sound/direct_sound_samples/cries/swinub.aif b/sound/direct_sound_samples/cries/swinub.aif deleted file mode 100644 index 7b2a08bf6fae..000000000000 Binary files a/sound/direct_sound_samples/cries/swinub.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swinub.wav b/sound/direct_sound_samples/cries/swinub.wav new file mode 100644 index 000000000000..93eafa458d93 Binary files /dev/null and b/sound/direct_sound_samples/cries/swinub.wav differ diff --git a/sound/direct_sound_samples/cries/swirlix.aif b/sound/direct_sound_samples/cries/swirlix.aif deleted file mode 100644 index 89fa6ecd16b3..000000000000 Binary files a/sound/direct_sound_samples/cries/swirlix.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swirlix.wav b/sound/direct_sound_samples/cries/swirlix.wav new file mode 100644 index 000000000000..e1340299c507 Binary files /dev/null and b/sound/direct_sound_samples/cries/swirlix.wav differ diff --git a/sound/direct_sound_samples/cries/swoobat.aif b/sound/direct_sound_samples/cries/swoobat.aif deleted file mode 100644 index 32f8d406c56d..000000000000 Binary files a/sound/direct_sound_samples/cries/swoobat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/swoobat.wav b/sound/direct_sound_samples/cries/swoobat.wav new file mode 100644 index 000000000000..be69ad24306d Binary files /dev/null and b/sound/direct_sound_samples/cries/swoobat.wav differ diff --git a/sound/direct_sound_samples/cries/sylveon.aif b/sound/direct_sound_samples/cries/sylveon.aif deleted file mode 100644 index 0ded5d19d187..000000000000 Binary files a/sound/direct_sound_samples/cries/sylveon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/sylveon.wav b/sound/direct_sound_samples/cries/sylveon.wav new file mode 100644 index 000000000000..765219906189 Binary files /dev/null and b/sound/direct_sound_samples/cries/sylveon.wav differ diff --git a/sound/direct_sound_samples/cries/tadbulb.aif b/sound/direct_sound_samples/cries/tadbulb.aif deleted file mode 100644 index 4680059cde52..000000000000 Binary files a/sound/direct_sound_samples/cries/tadbulb.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tadbulb.wav b/sound/direct_sound_samples/cries/tadbulb.wav new file mode 100644 index 000000000000..42eec08df86a Binary files /dev/null and b/sound/direct_sound_samples/cries/tadbulb.wav differ diff --git a/sound/direct_sound_samples/cries/taillow.aif b/sound/direct_sound_samples/cries/taillow.aif deleted file mode 100644 index c30cdb275bc4..000000000000 Binary files a/sound/direct_sound_samples/cries/taillow.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/taillow.wav b/sound/direct_sound_samples/cries/taillow.wav new file mode 100644 index 000000000000..9f1bb25f487b Binary files /dev/null and b/sound/direct_sound_samples/cries/taillow.wav differ diff --git a/sound/direct_sound_samples/cries/talonflame.aif b/sound/direct_sound_samples/cries/talonflame.aif deleted file mode 100644 index d16a4a2128c6..000000000000 Binary files a/sound/direct_sound_samples/cries/talonflame.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/talonflame.wav b/sound/direct_sound_samples/cries/talonflame.wav new file mode 100644 index 000000000000..b418813d109d Binary files /dev/null and b/sound/direct_sound_samples/cries/talonflame.wav differ diff --git a/sound/direct_sound_samples/cries/tandemaus.aif b/sound/direct_sound_samples/cries/tandemaus.aif deleted file mode 100644 index c6aeb27e0c38..000000000000 Binary files a/sound/direct_sound_samples/cries/tandemaus.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tandemaus.wav b/sound/direct_sound_samples/cries/tandemaus.wav new file mode 100644 index 000000000000..88ddc1735371 Binary files /dev/null and b/sound/direct_sound_samples/cries/tandemaus.wav differ diff --git a/sound/direct_sound_samples/cries/tangela.aif b/sound/direct_sound_samples/cries/tangela.aif deleted file mode 100644 index e463f2b7e621..000000000000 Binary files a/sound/direct_sound_samples/cries/tangela.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tangela.wav b/sound/direct_sound_samples/cries/tangela.wav new file mode 100644 index 000000000000..023a0362f953 Binary files /dev/null and b/sound/direct_sound_samples/cries/tangela.wav differ diff --git a/sound/direct_sound_samples/cries/tangrowth.aif b/sound/direct_sound_samples/cries/tangrowth.aif deleted file mode 100644 index 23e3d995b798..000000000000 Binary files a/sound/direct_sound_samples/cries/tangrowth.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tangrowth.wav b/sound/direct_sound_samples/cries/tangrowth.wav new file mode 100644 index 000000000000..941a8d9d2478 Binary files /dev/null and b/sound/direct_sound_samples/cries/tangrowth.wav differ diff --git a/sound/direct_sound_samples/cries/tapu_bulu.aif b/sound/direct_sound_samples/cries/tapu_bulu.aif deleted file mode 100644 index ab84791fa7b1..000000000000 Binary files a/sound/direct_sound_samples/cries/tapu_bulu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tapu_bulu.wav b/sound/direct_sound_samples/cries/tapu_bulu.wav new file mode 100644 index 000000000000..45b7a0ff6930 Binary files /dev/null and b/sound/direct_sound_samples/cries/tapu_bulu.wav differ diff --git a/sound/direct_sound_samples/cries/tapu_fini.aif b/sound/direct_sound_samples/cries/tapu_fini.aif deleted file mode 100644 index 301b0a70b8a5..000000000000 Binary files a/sound/direct_sound_samples/cries/tapu_fini.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tapu_fini.wav b/sound/direct_sound_samples/cries/tapu_fini.wav new file mode 100644 index 000000000000..6a9a1fea48e8 Binary files /dev/null and b/sound/direct_sound_samples/cries/tapu_fini.wav differ diff --git a/sound/direct_sound_samples/cries/tapu_koko.aif b/sound/direct_sound_samples/cries/tapu_koko.aif deleted file mode 100644 index 2fae1a3b0b75..000000000000 Binary files a/sound/direct_sound_samples/cries/tapu_koko.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tapu_koko.wav b/sound/direct_sound_samples/cries/tapu_koko.wav new file mode 100644 index 000000000000..2f93829ee1a6 Binary files /dev/null and b/sound/direct_sound_samples/cries/tapu_koko.wav differ diff --git a/sound/direct_sound_samples/cries/tapu_lele.aif b/sound/direct_sound_samples/cries/tapu_lele.aif deleted file mode 100644 index c15bb3186275..000000000000 Binary files a/sound/direct_sound_samples/cries/tapu_lele.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tapu_lele.wav b/sound/direct_sound_samples/cries/tapu_lele.wav new file mode 100644 index 000000000000..6e93a9a4de45 Binary files /dev/null and b/sound/direct_sound_samples/cries/tapu_lele.wav differ diff --git a/sound/direct_sound_samples/cries/tarountula.aif b/sound/direct_sound_samples/cries/tarountula.aif deleted file mode 100644 index d8d24385657b..000000000000 Binary files a/sound/direct_sound_samples/cries/tarountula.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tarountula.wav b/sound/direct_sound_samples/cries/tarountula.wav new file mode 100644 index 000000000000..13aa6c89f8f8 Binary files /dev/null and b/sound/direct_sound_samples/cries/tarountula.wav differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_curly.aif b/sound/direct_sound_samples/cries/tatsugiri_curly.aif deleted file mode 100644 index 16c03553abc2..000000000000 Binary files a/sound/direct_sound_samples/cries/tatsugiri_curly.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_curly.wav b/sound/direct_sound_samples/cries/tatsugiri_curly.wav new file mode 100644 index 000000000000..c8eb9c892906 Binary files /dev/null and b/sound/direct_sound_samples/cries/tatsugiri_curly.wav differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_droopy.aif b/sound/direct_sound_samples/cries/tatsugiri_droopy.aif deleted file mode 100644 index 20131039e5a6..000000000000 Binary files a/sound/direct_sound_samples/cries/tatsugiri_droopy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_droopy.wav b/sound/direct_sound_samples/cries/tatsugiri_droopy.wav new file mode 100644 index 000000000000..999a8463110e Binary files /dev/null and b/sound/direct_sound_samples/cries/tatsugiri_droopy.wav differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif b/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif deleted file mode 100644 index 08e568043354..000000000000 Binary files a/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tatsugiri_stretchy.wav b/sound/direct_sound_samples/cries/tatsugiri_stretchy.wav new file mode 100644 index 000000000000..62653400ae31 Binary files /dev/null and b/sound/direct_sound_samples/cries/tatsugiri_stretchy.wav differ diff --git a/sound/direct_sound_samples/cries/tauros.aif b/sound/direct_sound_samples/cries/tauros.aif deleted file mode 100644 index 1b4bdfa5c438..000000000000 Binary files a/sound/direct_sound_samples/cries/tauros.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tauros.wav b/sound/direct_sound_samples/cries/tauros.wav new file mode 100644 index 000000000000..a982d052d955 Binary files /dev/null and b/sound/direct_sound_samples/cries/tauros.wav differ diff --git a/sound/direct_sound_samples/cries/teddiursa.aif b/sound/direct_sound_samples/cries/teddiursa.aif deleted file mode 100644 index 19ba558c3b94..000000000000 Binary files a/sound/direct_sound_samples/cries/teddiursa.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/teddiursa.wav b/sound/direct_sound_samples/cries/teddiursa.wav new file mode 100644 index 000000000000..adc9b80d9ce5 Binary files /dev/null and b/sound/direct_sound_samples/cries/teddiursa.wav differ diff --git a/sound/direct_sound_samples/cries/tentacool.aif b/sound/direct_sound_samples/cries/tentacool.aif deleted file mode 100644 index 8918f25627f7..000000000000 Binary files a/sound/direct_sound_samples/cries/tentacool.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tentacool.wav b/sound/direct_sound_samples/cries/tentacool.wav new file mode 100644 index 000000000000..cd8f5afc7ae2 Binary files /dev/null and b/sound/direct_sound_samples/cries/tentacool.wav differ diff --git a/sound/direct_sound_samples/cries/tentacruel.aif b/sound/direct_sound_samples/cries/tentacruel.aif deleted file mode 100644 index 2497d178df3c..000000000000 Binary files a/sound/direct_sound_samples/cries/tentacruel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tentacruel.wav b/sound/direct_sound_samples/cries/tentacruel.wav new file mode 100644 index 000000000000..dfbc8c7f097b Binary files /dev/null and b/sound/direct_sound_samples/cries/tentacruel.wav differ diff --git a/sound/direct_sound_samples/cries/tepig.aif b/sound/direct_sound_samples/cries/tepig.aif deleted file mode 100644 index 45b7b4ecdaf4..000000000000 Binary files a/sound/direct_sound_samples/cries/tepig.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tepig.wav b/sound/direct_sound_samples/cries/tepig.wav new file mode 100644 index 000000000000..766107639ead Binary files /dev/null and b/sound/direct_sound_samples/cries/tepig.wav differ diff --git a/sound/direct_sound_samples/cries/terapagos.aif b/sound/direct_sound_samples/cries/terapagos.aif deleted file mode 100644 index a99810cca9f4..000000000000 Binary files a/sound/direct_sound_samples/cries/terapagos.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/terapagos.wav b/sound/direct_sound_samples/cries/terapagos.wav new file mode 100644 index 000000000000..bbda64cb645e Binary files /dev/null and b/sound/direct_sound_samples/cries/terapagos.wav differ diff --git a/sound/direct_sound_samples/cries/terrakion.aif b/sound/direct_sound_samples/cries/terrakion.aif deleted file mode 100644 index e567be0f1eed..000000000000 Binary files a/sound/direct_sound_samples/cries/terrakion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/terrakion.wav b/sound/direct_sound_samples/cries/terrakion.wav new file mode 100644 index 000000000000..ec3d1e52a613 Binary files /dev/null and b/sound/direct_sound_samples/cries/terrakion.wav differ diff --git a/sound/direct_sound_samples/cries/thievul.aif b/sound/direct_sound_samples/cries/thievul.aif deleted file mode 100644 index 8bf63fd88845..000000000000 Binary files a/sound/direct_sound_samples/cries/thievul.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/thievul.wav b/sound/direct_sound_samples/cries/thievul.wav new file mode 100644 index 000000000000..2a3fc4e49c77 Binary files /dev/null and b/sound/direct_sound_samples/cries/thievul.wav differ diff --git a/sound/direct_sound_samples/cries/throh.aif b/sound/direct_sound_samples/cries/throh.aif deleted file mode 100644 index eeeba64e4b29..000000000000 Binary files a/sound/direct_sound_samples/cries/throh.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/throh.wav b/sound/direct_sound_samples/cries/throh.wav new file mode 100644 index 000000000000..9568bd7ca1b8 Binary files /dev/null and b/sound/direct_sound_samples/cries/throh.wav differ diff --git a/sound/direct_sound_samples/cries/thundurus_incarnate.aif b/sound/direct_sound_samples/cries/thundurus_incarnate.aif deleted file mode 100644 index 8b1c81b9f94a..000000000000 Binary files a/sound/direct_sound_samples/cries/thundurus_incarnate.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/thundurus_incarnate.wav b/sound/direct_sound_samples/cries/thundurus_incarnate.wav new file mode 100644 index 000000000000..bee2249eef27 Binary files /dev/null and b/sound/direct_sound_samples/cries/thundurus_incarnate.wav differ diff --git a/sound/direct_sound_samples/cries/thundurus_therian.aif b/sound/direct_sound_samples/cries/thundurus_therian.aif deleted file mode 100644 index f5ac69f17725..000000000000 Binary files a/sound/direct_sound_samples/cries/thundurus_therian.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/thundurus_therian.wav b/sound/direct_sound_samples/cries/thundurus_therian.wav new file mode 100644 index 000000000000..e31bda03bc4f Binary files /dev/null and b/sound/direct_sound_samples/cries/thundurus_therian.wav differ diff --git a/sound/direct_sound_samples/cries/thwackey.aif b/sound/direct_sound_samples/cries/thwackey.aif deleted file mode 100644 index 579df5c965b0..000000000000 Binary files a/sound/direct_sound_samples/cries/thwackey.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/thwackey.wav b/sound/direct_sound_samples/cries/thwackey.wav new file mode 100644 index 000000000000..d91325a3873e Binary files /dev/null and b/sound/direct_sound_samples/cries/thwackey.wav differ diff --git a/sound/direct_sound_samples/cries/timburr.aif b/sound/direct_sound_samples/cries/timburr.aif deleted file mode 100644 index 49edb74efb85..000000000000 Binary files a/sound/direct_sound_samples/cries/timburr.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/timburr.wav b/sound/direct_sound_samples/cries/timburr.wav new file mode 100644 index 000000000000..4a332408a192 Binary files /dev/null and b/sound/direct_sound_samples/cries/timburr.wav differ diff --git a/sound/direct_sound_samples/cries/ting_lu.aif b/sound/direct_sound_samples/cries/ting_lu.aif deleted file mode 100644 index a4a5ed211847..000000000000 Binary files a/sound/direct_sound_samples/cries/ting_lu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ting_lu.wav b/sound/direct_sound_samples/cries/ting_lu.wav new file mode 100644 index 000000000000..5f262d014e4e Binary files /dev/null and b/sound/direct_sound_samples/cries/ting_lu.wav differ diff --git a/sound/direct_sound_samples/cries/tinkatink.aif b/sound/direct_sound_samples/cries/tinkatink.aif deleted file mode 100644 index a6229c133856..000000000000 Binary files a/sound/direct_sound_samples/cries/tinkatink.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tinkatink.wav b/sound/direct_sound_samples/cries/tinkatink.wav new file mode 100644 index 000000000000..e20cf339335a Binary files /dev/null and b/sound/direct_sound_samples/cries/tinkatink.wav differ diff --git a/sound/direct_sound_samples/cries/tinkaton.aif b/sound/direct_sound_samples/cries/tinkaton.aif deleted file mode 100644 index fd88cb84596c..000000000000 Binary files a/sound/direct_sound_samples/cries/tinkaton.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tinkaton.wav b/sound/direct_sound_samples/cries/tinkaton.wav new file mode 100644 index 000000000000..eaac1993bd9c Binary files /dev/null and b/sound/direct_sound_samples/cries/tinkaton.wav differ diff --git a/sound/direct_sound_samples/cries/tinkatuff.aif b/sound/direct_sound_samples/cries/tinkatuff.aif deleted file mode 100644 index aa096ef11322..000000000000 Binary files a/sound/direct_sound_samples/cries/tinkatuff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tinkatuff.wav b/sound/direct_sound_samples/cries/tinkatuff.wav new file mode 100644 index 000000000000..e077d63a2d37 Binary files /dev/null and b/sound/direct_sound_samples/cries/tinkatuff.wav differ diff --git a/sound/direct_sound_samples/cries/tirtouga.aif b/sound/direct_sound_samples/cries/tirtouga.aif deleted file mode 100644 index 2233557d229c..000000000000 Binary files a/sound/direct_sound_samples/cries/tirtouga.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tirtouga.wav b/sound/direct_sound_samples/cries/tirtouga.wav new file mode 100644 index 000000000000..c22f08784214 Binary files /dev/null and b/sound/direct_sound_samples/cries/tirtouga.wav differ diff --git a/sound/direct_sound_samples/cries/toedscool.aif b/sound/direct_sound_samples/cries/toedscool.aif deleted file mode 100644 index a153ed4d87d0..000000000000 Binary files a/sound/direct_sound_samples/cries/toedscool.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/toedscool.wav b/sound/direct_sound_samples/cries/toedscool.wav new file mode 100644 index 000000000000..21c119feec47 Binary files /dev/null and b/sound/direct_sound_samples/cries/toedscool.wav differ diff --git a/sound/direct_sound_samples/cries/toedscruel.aif b/sound/direct_sound_samples/cries/toedscruel.aif deleted file mode 100644 index 1f2fade60c6f..000000000000 Binary files a/sound/direct_sound_samples/cries/toedscruel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/toedscruel.wav b/sound/direct_sound_samples/cries/toedscruel.wav new file mode 100644 index 000000000000..7e1b4a63210d Binary files /dev/null and b/sound/direct_sound_samples/cries/toedscruel.wav differ diff --git a/sound/direct_sound_samples/cries/togedemaru.aif b/sound/direct_sound_samples/cries/togedemaru.aif deleted file mode 100644 index 366ce2be960c..000000000000 Binary files a/sound/direct_sound_samples/cries/togedemaru.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/togedemaru.wav b/sound/direct_sound_samples/cries/togedemaru.wav new file mode 100644 index 000000000000..7249f3eb6e9f Binary files /dev/null and b/sound/direct_sound_samples/cries/togedemaru.wav differ diff --git a/sound/direct_sound_samples/cries/togekiss.aif b/sound/direct_sound_samples/cries/togekiss.aif deleted file mode 100644 index c66baeaf552f..000000000000 Binary files a/sound/direct_sound_samples/cries/togekiss.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/togekiss.wav b/sound/direct_sound_samples/cries/togekiss.wav new file mode 100644 index 000000000000..84ae1d7bc902 Binary files /dev/null and b/sound/direct_sound_samples/cries/togekiss.wav differ diff --git a/sound/direct_sound_samples/cries/togepi.aif b/sound/direct_sound_samples/cries/togepi.aif deleted file mode 100644 index 0785a662ab91..000000000000 Binary files a/sound/direct_sound_samples/cries/togepi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/togepi.wav b/sound/direct_sound_samples/cries/togepi.wav new file mode 100644 index 000000000000..e13355c55414 Binary files /dev/null and b/sound/direct_sound_samples/cries/togepi.wav differ diff --git a/sound/direct_sound_samples/cries/togetic.aif b/sound/direct_sound_samples/cries/togetic.aif deleted file mode 100644 index f577120c6d39..000000000000 Binary files a/sound/direct_sound_samples/cries/togetic.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/togetic.wav b/sound/direct_sound_samples/cries/togetic.wav new file mode 100644 index 000000000000..957a45dc94e8 Binary files /dev/null and b/sound/direct_sound_samples/cries/togetic.wav differ diff --git a/sound/direct_sound_samples/cries/torchic.aif b/sound/direct_sound_samples/cries/torchic.aif deleted file mode 100644 index 3accc1b3c880..000000000000 Binary files a/sound/direct_sound_samples/cries/torchic.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/torchic.wav b/sound/direct_sound_samples/cries/torchic.wav new file mode 100644 index 000000000000..39a2522b3282 Binary files /dev/null and b/sound/direct_sound_samples/cries/torchic.wav differ diff --git a/sound/direct_sound_samples/cries/torkoal.aif b/sound/direct_sound_samples/cries/torkoal.aif deleted file mode 100644 index b73d06ef5e44..000000000000 Binary files a/sound/direct_sound_samples/cries/torkoal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/torkoal.wav b/sound/direct_sound_samples/cries/torkoal.wav new file mode 100644 index 000000000000..497e92af20e9 Binary files /dev/null and b/sound/direct_sound_samples/cries/torkoal.wav differ diff --git a/sound/direct_sound_samples/cries/tornadus_incarnate.aif b/sound/direct_sound_samples/cries/tornadus_incarnate.aif deleted file mode 100644 index b980ce2bb5c3..000000000000 Binary files a/sound/direct_sound_samples/cries/tornadus_incarnate.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tornadus_incarnate.wav b/sound/direct_sound_samples/cries/tornadus_incarnate.wav new file mode 100644 index 000000000000..46c02fa1127c Binary files /dev/null and b/sound/direct_sound_samples/cries/tornadus_incarnate.wav differ diff --git a/sound/direct_sound_samples/cries/tornadus_therian.aif b/sound/direct_sound_samples/cries/tornadus_therian.aif deleted file mode 100644 index a1d98062b688..000000000000 Binary files a/sound/direct_sound_samples/cries/tornadus_therian.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tornadus_therian.wav b/sound/direct_sound_samples/cries/tornadus_therian.wav new file mode 100644 index 000000000000..3d6d421d2d0b Binary files /dev/null and b/sound/direct_sound_samples/cries/tornadus_therian.wav differ diff --git a/sound/direct_sound_samples/cries/torracat.aif b/sound/direct_sound_samples/cries/torracat.aif deleted file mode 100644 index 44bb00137593..000000000000 Binary files a/sound/direct_sound_samples/cries/torracat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/torracat.wav b/sound/direct_sound_samples/cries/torracat.wav new file mode 100644 index 000000000000..fb8cf24c6121 Binary files /dev/null and b/sound/direct_sound_samples/cries/torracat.wav differ diff --git a/sound/direct_sound_samples/cries/torterra.aif b/sound/direct_sound_samples/cries/torterra.aif deleted file mode 100644 index e659181e2383..000000000000 Binary files a/sound/direct_sound_samples/cries/torterra.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/torterra.wav b/sound/direct_sound_samples/cries/torterra.wav new file mode 100644 index 000000000000..3fdb2e6d1268 Binary files /dev/null and b/sound/direct_sound_samples/cries/torterra.wav differ diff --git a/sound/direct_sound_samples/cries/totodile.aif b/sound/direct_sound_samples/cries/totodile.aif deleted file mode 100644 index 98fbb528bead..000000000000 Binary files a/sound/direct_sound_samples/cries/totodile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/totodile.wav b/sound/direct_sound_samples/cries/totodile.wav new file mode 100644 index 000000000000..93c07884732c Binary files /dev/null and b/sound/direct_sound_samples/cries/totodile.wav differ diff --git a/sound/direct_sound_samples/cries/toucannon.aif b/sound/direct_sound_samples/cries/toucannon.aif deleted file mode 100644 index 83a90bab9cdb..000000000000 Binary files a/sound/direct_sound_samples/cries/toucannon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/toucannon.wav b/sound/direct_sound_samples/cries/toucannon.wav new file mode 100644 index 000000000000..f8b393848302 Binary files /dev/null and b/sound/direct_sound_samples/cries/toucannon.wav differ diff --git a/sound/direct_sound_samples/cries/toxapex.aif b/sound/direct_sound_samples/cries/toxapex.aif deleted file mode 100644 index 3369da2f70f7..000000000000 Binary files a/sound/direct_sound_samples/cries/toxapex.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/toxapex.wav b/sound/direct_sound_samples/cries/toxapex.wav new file mode 100644 index 000000000000..a2e759b11d00 Binary files /dev/null and b/sound/direct_sound_samples/cries/toxapex.wav differ diff --git a/sound/direct_sound_samples/cries/toxel.aif b/sound/direct_sound_samples/cries/toxel.aif deleted file mode 100644 index 0f917edddb81..000000000000 Binary files a/sound/direct_sound_samples/cries/toxel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/toxel.wav b/sound/direct_sound_samples/cries/toxel.wav new file mode 100644 index 000000000000..2f43210fab58 Binary files /dev/null and b/sound/direct_sound_samples/cries/toxel.wav differ diff --git a/sound/direct_sound_samples/cries/toxicroak.aif b/sound/direct_sound_samples/cries/toxicroak.aif deleted file mode 100644 index ada83b0a2b0b..000000000000 Binary files a/sound/direct_sound_samples/cries/toxicroak.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/toxicroak.wav b/sound/direct_sound_samples/cries/toxicroak.wav new file mode 100644 index 000000000000..5dd49163fed2 Binary files /dev/null and b/sound/direct_sound_samples/cries/toxicroak.wav differ diff --git a/sound/direct_sound_samples/cries/toxtricity_amped.aif b/sound/direct_sound_samples/cries/toxtricity_amped.aif deleted file mode 100644 index 0775c8a0492d..000000000000 Binary files a/sound/direct_sound_samples/cries/toxtricity_amped.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/toxtricity_amped.wav b/sound/direct_sound_samples/cries/toxtricity_amped.wav new file mode 100644 index 000000000000..236fc8841789 Binary files /dev/null and b/sound/direct_sound_samples/cries/toxtricity_amped.wav differ diff --git a/sound/direct_sound_samples/cries/toxtricity_low_key.aif b/sound/direct_sound_samples/cries/toxtricity_low_key.aif deleted file mode 100644 index 57740d974d52..000000000000 Binary files a/sound/direct_sound_samples/cries/toxtricity_low_key.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/toxtricity_low_key.wav b/sound/direct_sound_samples/cries/toxtricity_low_key.wav new file mode 100644 index 000000000000..6c1bb8a111d1 Binary files /dev/null and b/sound/direct_sound_samples/cries/toxtricity_low_key.wav differ diff --git a/sound/direct_sound_samples/cries/tranquill.aif b/sound/direct_sound_samples/cries/tranquill.aif deleted file mode 100644 index 6a4e8a7661ca..000000000000 Binary files a/sound/direct_sound_samples/cries/tranquill.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tranquill.wav b/sound/direct_sound_samples/cries/tranquill.wav new file mode 100644 index 000000000000..d8ade54fc141 Binary files /dev/null and b/sound/direct_sound_samples/cries/tranquill.wav differ diff --git a/sound/direct_sound_samples/cries/trapinch.aif b/sound/direct_sound_samples/cries/trapinch.aif deleted file mode 100644 index cc27653fd44d..000000000000 Binary files a/sound/direct_sound_samples/cries/trapinch.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/trapinch.wav b/sound/direct_sound_samples/cries/trapinch.wav new file mode 100644 index 000000000000..5cad4ad23e90 Binary files /dev/null and b/sound/direct_sound_samples/cries/trapinch.wav differ diff --git a/sound/direct_sound_samples/cries/treecko.aif b/sound/direct_sound_samples/cries/treecko.aif deleted file mode 100644 index e9a47979e0e0..000000000000 Binary files a/sound/direct_sound_samples/cries/treecko.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/treecko.wav b/sound/direct_sound_samples/cries/treecko.wav new file mode 100644 index 000000000000..0c982f8408d3 Binary files /dev/null and b/sound/direct_sound_samples/cries/treecko.wav differ diff --git a/sound/direct_sound_samples/cries/trevenant.aif b/sound/direct_sound_samples/cries/trevenant.aif deleted file mode 100644 index 018a80e8c2de..000000000000 Binary files a/sound/direct_sound_samples/cries/trevenant.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/trevenant.wav b/sound/direct_sound_samples/cries/trevenant.wav new file mode 100644 index 000000000000..da2efb459418 Binary files /dev/null and b/sound/direct_sound_samples/cries/trevenant.wav differ diff --git a/sound/direct_sound_samples/cries/tropius.aif b/sound/direct_sound_samples/cries/tropius.aif deleted file mode 100644 index 81046fe1cfdb..000000000000 Binary files a/sound/direct_sound_samples/cries/tropius.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tropius.wav b/sound/direct_sound_samples/cries/tropius.wav new file mode 100644 index 000000000000..55de362aa725 Binary files /dev/null and b/sound/direct_sound_samples/cries/tropius.wav differ diff --git a/sound/direct_sound_samples/cries/trubbish.aif b/sound/direct_sound_samples/cries/trubbish.aif deleted file mode 100644 index 09c1aac572b8..000000000000 Binary files a/sound/direct_sound_samples/cries/trubbish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/trubbish.wav b/sound/direct_sound_samples/cries/trubbish.wav new file mode 100644 index 000000000000..5ee879913b85 Binary files /dev/null and b/sound/direct_sound_samples/cries/trubbish.wav differ diff --git a/sound/direct_sound_samples/cries/trumbeak.aif b/sound/direct_sound_samples/cries/trumbeak.aif deleted file mode 100644 index c6e477c4017a..000000000000 Binary files a/sound/direct_sound_samples/cries/trumbeak.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/trumbeak.wav b/sound/direct_sound_samples/cries/trumbeak.wav new file mode 100644 index 000000000000..389e543a1fa6 Binary files /dev/null and b/sound/direct_sound_samples/cries/trumbeak.wav differ diff --git a/sound/direct_sound_samples/cries/tsareena.aif b/sound/direct_sound_samples/cries/tsareena.aif deleted file mode 100644 index bff64b0f3f7b..000000000000 Binary files a/sound/direct_sound_samples/cries/tsareena.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tsareena.wav b/sound/direct_sound_samples/cries/tsareena.wav new file mode 100644 index 000000000000..f0629866776c Binary files /dev/null and b/sound/direct_sound_samples/cries/tsareena.wav differ diff --git a/sound/direct_sound_samples/cries/turtonator.aif b/sound/direct_sound_samples/cries/turtonator.aif deleted file mode 100644 index b5d27b630f43..000000000000 Binary files a/sound/direct_sound_samples/cries/turtonator.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/turtonator.wav b/sound/direct_sound_samples/cries/turtonator.wav new file mode 100644 index 000000000000..0bc247246a78 Binary files /dev/null and b/sound/direct_sound_samples/cries/turtonator.wav differ diff --git a/sound/direct_sound_samples/cries/turtwig.aif b/sound/direct_sound_samples/cries/turtwig.aif deleted file mode 100644 index a2e4ad60b378..000000000000 Binary files a/sound/direct_sound_samples/cries/turtwig.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/turtwig.wav b/sound/direct_sound_samples/cries/turtwig.wav new file mode 100644 index 000000000000..afa0b439691a Binary files /dev/null and b/sound/direct_sound_samples/cries/turtwig.wav differ diff --git a/sound/direct_sound_samples/cries/tympole.aif b/sound/direct_sound_samples/cries/tympole.aif deleted file mode 100644 index d643216736d1..000000000000 Binary files a/sound/direct_sound_samples/cries/tympole.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tympole.wav b/sound/direct_sound_samples/cries/tympole.wav new file mode 100644 index 000000000000..f8455239eb27 Binary files /dev/null and b/sound/direct_sound_samples/cries/tympole.wav differ diff --git a/sound/direct_sound_samples/cries/tynamo.aif b/sound/direct_sound_samples/cries/tynamo.aif deleted file mode 100644 index ca9e2962fcb8..000000000000 Binary files a/sound/direct_sound_samples/cries/tynamo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tynamo.wav b/sound/direct_sound_samples/cries/tynamo.wav new file mode 100644 index 000000000000..031a336a6c5e Binary files /dev/null and b/sound/direct_sound_samples/cries/tynamo.wav differ diff --git a/sound/direct_sound_samples/cries/type_null.aif b/sound/direct_sound_samples/cries/type_null.aif deleted file mode 100644 index 6b6be2dcfb15..000000000000 Binary files a/sound/direct_sound_samples/cries/type_null.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/type_null.wav b/sound/direct_sound_samples/cries/type_null.wav new file mode 100644 index 000000000000..9850d88e4aad Binary files /dev/null and b/sound/direct_sound_samples/cries/type_null.wav differ diff --git a/sound/direct_sound_samples/cries/typhlosion.aif b/sound/direct_sound_samples/cries/typhlosion.aif deleted file mode 100644 index cc993c805223..000000000000 Binary files a/sound/direct_sound_samples/cries/typhlosion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/typhlosion.wav b/sound/direct_sound_samples/cries/typhlosion.wav new file mode 100644 index 000000000000..f1759989d720 Binary files /dev/null and b/sound/direct_sound_samples/cries/typhlosion.wav differ diff --git a/sound/direct_sound_samples/cries/tyranitar.aif b/sound/direct_sound_samples/cries/tyranitar.aif deleted file mode 100644 index 3572da76678c..000000000000 Binary files a/sound/direct_sound_samples/cries/tyranitar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tyranitar.wav b/sound/direct_sound_samples/cries/tyranitar.wav new file mode 100644 index 000000000000..5bec5f7279e0 Binary files /dev/null and b/sound/direct_sound_samples/cries/tyranitar.wav differ diff --git a/sound/direct_sound_samples/cries/tyranitar_mega.aif b/sound/direct_sound_samples/cries/tyranitar_mega.aif deleted file mode 100644 index 020118b388e7..000000000000 Binary files a/sound/direct_sound_samples/cries/tyranitar_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tyranitar_mega.wav b/sound/direct_sound_samples/cries/tyranitar_mega.wav new file mode 100644 index 000000000000..dedb9d2560a0 Binary files /dev/null and b/sound/direct_sound_samples/cries/tyranitar_mega.wav differ diff --git a/sound/direct_sound_samples/cries/tyrantrum.aif b/sound/direct_sound_samples/cries/tyrantrum.aif deleted file mode 100644 index 88e9506129d0..000000000000 Binary files a/sound/direct_sound_samples/cries/tyrantrum.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tyrantrum.wav b/sound/direct_sound_samples/cries/tyrantrum.wav new file mode 100644 index 000000000000..766cbab20477 Binary files /dev/null and b/sound/direct_sound_samples/cries/tyrantrum.wav differ diff --git a/sound/direct_sound_samples/cries/tyrogue.aif b/sound/direct_sound_samples/cries/tyrogue.aif deleted file mode 100644 index 7caea851b3f9..000000000000 Binary files a/sound/direct_sound_samples/cries/tyrogue.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tyrogue.wav b/sound/direct_sound_samples/cries/tyrogue.wav new file mode 100644 index 000000000000..46d032063da7 Binary files /dev/null and b/sound/direct_sound_samples/cries/tyrogue.wav differ diff --git a/sound/direct_sound_samples/cries/tyrunt.aif b/sound/direct_sound_samples/cries/tyrunt.aif deleted file mode 100644 index e69373600537..000000000000 Binary files a/sound/direct_sound_samples/cries/tyrunt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/tyrunt.wav b/sound/direct_sound_samples/cries/tyrunt.wav new file mode 100644 index 000000000000..9cb0531dadc3 Binary files /dev/null and b/sound/direct_sound_samples/cries/tyrunt.wav differ diff --git a/sound/direct_sound_samples/cries/umbreon.aif b/sound/direct_sound_samples/cries/umbreon.aif deleted file mode 100644 index 93c739dd7477..000000000000 Binary files a/sound/direct_sound_samples/cries/umbreon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/umbreon.wav b/sound/direct_sound_samples/cries/umbreon.wav new file mode 100644 index 000000000000..48f62064afbe Binary files /dev/null and b/sound/direct_sound_samples/cries/umbreon.wav differ diff --git a/sound/direct_sound_samples/cries/uncomp_klefki.aif b/sound/direct_sound_samples/cries/uncomp_klefki.aif deleted file mode 100644 index c059b5662890..000000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_klefki.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_klefki.wav b/sound/direct_sound_samples/cries/uncomp_klefki.wav new file mode 100644 index 000000000000..9e606820eba5 Binary files /dev/null and b/sound/direct_sound_samples/cries/uncomp_klefki.wav differ diff --git a/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif b/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif deleted file mode 100644 index aa5fce23b6a3..000000000000 Binary files a/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.wav b/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.wav new file mode 100644 index 000000000000..912a9f3831c4 Binary files /dev/null and b/sound/direct_sound_samples/cries/uncomp_oricorio_pom_pom.wav differ diff --git a/sound/direct_sound_samples/cries/unfezant.aif b/sound/direct_sound_samples/cries/unfezant.aif deleted file mode 100644 index 1fde88bf0eeb..000000000000 Binary files a/sound/direct_sound_samples/cries/unfezant.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/unfezant.wav b/sound/direct_sound_samples/cries/unfezant.wav new file mode 100644 index 000000000000..fa21282be08e Binary files /dev/null and b/sound/direct_sound_samples/cries/unfezant.wav differ diff --git a/sound/direct_sound_samples/cries/unown.aif b/sound/direct_sound_samples/cries/unown.aif deleted file mode 100644 index 0b3edf577fb2..000000000000 Binary files a/sound/direct_sound_samples/cries/unown.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/unown.wav b/sound/direct_sound_samples/cries/unown.wav new file mode 100644 index 000000000000..1956ecef7575 Binary files /dev/null and b/sound/direct_sound_samples/cries/unown.wav differ diff --git a/sound/direct_sound_samples/cries/unused_265.wav b/sound/direct_sound_samples/cries/unused_265.wav new file mode 100644 index 000000000000..12c3d8640f69 Binary files /dev/null and b/sound/direct_sound_samples/cries/unused_265.wav differ diff --git a/sound/direct_sound_samples/cries/unused_268.wav b/sound/direct_sound_samples/cries/unused_268.wav new file mode 100644 index 000000000000..3501b24ef8dd Binary files /dev/null and b/sound/direct_sound_samples/cries/unused_268.wav differ diff --git a/sound/direct_sound_samples/cries/ursaluna.aif b/sound/direct_sound_samples/cries/ursaluna.aif deleted file mode 100644 index 7ce14c630e5b..000000000000 Binary files a/sound/direct_sound_samples/cries/ursaluna.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ursaluna.wav b/sound/direct_sound_samples/cries/ursaluna.wav new file mode 100644 index 000000000000..b6e99a6015fb Binary files /dev/null and b/sound/direct_sound_samples/cries/ursaluna.wav differ diff --git a/sound/direct_sound_samples/cries/ursaring.aif b/sound/direct_sound_samples/cries/ursaring.aif deleted file mode 100644 index 7837ba65973d..000000000000 Binary files a/sound/direct_sound_samples/cries/ursaring.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/ursaring.wav b/sound/direct_sound_samples/cries/ursaring.wav new file mode 100644 index 000000000000..b3d4a99cb704 Binary files /dev/null and b/sound/direct_sound_samples/cries/ursaring.wav differ diff --git a/sound/direct_sound_samples/cries/urshifu_rapid_strike.aif b/sound/direct_sound_samples/cries/urshifu_rapid_strike.aif deleted file mode 100644 index 8ac12bc90965..000000000000 Binary files a/sound/direct_sound_samples/cries/urshifu_rapid_strike.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/urshifu_rapid_strike.wav b/sound/direct_sound_samples/cries/urshifu_rapid_strike.wav new file mode 100644 index 000000000000..74a7f3520650 Binary files /dev/null and b/sound/direct_sound_samples/cries/urshifu_rapid_strike.wav differ diff --git a/sound/direct_sound_samples/cries/urshifu_single_strike.aif b/sound/direct_sound_samples/cries/urshifu_single_strike.aif deleted file mode 100644 index 7dec47854a00..000000000000 Binary files a/sound/direct_sound_samples/cries/urshifu_single_strike.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/urshifu_single_strike.wav b/sound/direct_sound_samples/cries/urshifu_single_strike.wav new file mode 100644 index 000000000000..549e5cd2dc23 Binary files /dev/null and b/sound/direct_sound_samples/cries/urshifu_single_strike.wav differ diff --git a/sound/direct_sound_samples/cries/uxie.aif b/sound/direct_sound_samples/cries/uxie.aif deleted file mode 100644 index da67cfc9960b..000000000000 Binary files a/sound/direct_sound_samples/cries/uxie.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/uxie.wav b/sound/direct_sound_samples/cries/uxie.wav new file mode 100644 index 000000000000..336ff25f5874 Binary files /dev/null and b/sound/direct_sound_samples/cries/uxie.wav differ diff --git a/sound/direct_sound_samples/cries/vanillish.aif b/sound/direct_sound_samples/cries/vanillish.aif deleted file mode 100644 index 625921a24b60..000000000000 Binary files a/sound/direct_sound_samples/cries/vanillish.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vanillish.wav b/sound/direct_sound_samples/cries/vanillish.wav new file mode 100644 index 000000000000..29f2e853c430 Binary files /dev/null and b/sound/direct_sound_samples/cries/vanillish.wav differ diff --git a/sound/direct_sound_samples/cries/vanillite.aif b/sound/direct_sound_samples/cries/vanillite.aif deleted file mode 100644 index 03d25f96154e..000000000000 Binary files a/sound/direct_sound_samples/cries/vanillite.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vanillite.wav b/sound/direct_sound_samples/cries/vanillite.wav new file mode 100644 index 000000000000..db303dd8e72e Binary files /dev/null and b/sound/direct_sound_samples/cries/vanillite.wav differ diff --git a/sound/direct_sound_samples/cries/vanilluxe.aif b/sound/direct_sound_samples/cries/vanilluxe.aif deleted file mode 100644 index e515359ee0ab..000000000000 Binary files a/sound/direct_sound_samples/cries/vanilluxe.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vanilluxe.wav b/sound/direct_sound_samples/cries/vanilluxe.wav new file mode 100644 index 000000000000..d75e877475da Binary files /dev/null and b/sound/direct_sound_samples/cries/vanilluxe.wav differ diff --git a/sound/direct_sound_samples/cries/vaporeon.aif b/sound/direct_sound_samples/cries/vaporeon.aif deleted file mode 100644 index 3c9bf7ee8b79..000000000000 Binary files a/sound/direct_sound_samples/cries/vaporeon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vaporeon.wav b/sound/direct_sound_samples/cries/vaporeon.wav new file mode 100644 index 000000000000..8ec30948512d Binary files /dev/null and b/sound/direct_sound_samples/cries/vaporeon.wav differ diff --git a/sound/direct_sound_samples/cries/varoom.aif b/sound/direct_sound_samples/cries/varoom.aif deleted file mode 100644 index 731bdce2d6be..000000000000 Binary files a/sound/direct_sound_samples/cries/varoom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/varoom.wav b/sound/direct_sound_samples/cries/varoom.wav new file mode 100644 index 000000000000..1774dd3dc477 Binary files /dev/null and b/sound/direct_sound_samples/cries/varoom.wav differ diff --git a/sound/direct_sound_samples/cries/veluza.aif b/sound/direct_sound_samples/cries/veluza.aif deleted file mode 100644 index d76ed74b6698..000000000000 Binary files a/sound/direct_sound_samples/cries/veluza.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/veluza.wav b/sound/direct_sound_samples/cries/veluza.wav new file mode 100644 index 000000000000..731b664ac346 Binary files /dev/null and b/sound/direct_sound_samples/cries/veluza.wav differ diff --git a/sound/direct_sound_samples/cries/venipede.aif b/sound/direct_sound_samples/cries/venipede.aif deleted file mode 100644 index d1c1e04e7bad..000000000000 Binary files a/sound/direct_sound_samples/cries/venipede.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/venipede.wav b/sound/direct_sound_samples/cries/venipede.wav new file mode 100644 index 000000000000..c1b88a3e25ce Binary files /dev/null and b/sound/direct_sound_samples/cries/venipede.wav differ diff --git a/sound/direct_sound_samples/cries/venomoth.aif b/sound/direct_sound_samples/cries/venomoth.aif deleted file mode 100644 index eb4ad02af793..000000000000 Binary files a/sound/direct_sound_samples/cries/venomoth.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/venomoth.wav b/sound/direct_sound_samples/cries/venomoth.wav new file mode 100644 index 000000000000..ab5179df661b Binary files /dev/null and b/sound/direct_sound_samples/cries/venomoth.wav differ diff --git a/sound/direct_sound_samples/cries/venonat.aif b/sound/direct_sound_samples/cries/venonat.aif deleted file mode 100644 index 5bf36808c417..000000000000 Binary files a/sound/direct_sound_samples/cries/venonat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/venonat.wav b/sound/direct_sound_samples/cries/venonat.wav new file mode 100644 index 000000000000..450c2bb22240 Binary files /dev/null and b/sound/direct_sound_samples/cries/venonat.wav differ diff --git a/sound/direct_sound_samples/cries/venusaur.aif b/sound/direct_sound_samples/cries/venusaur.aif deleted file mode 100644 index 91386c177ddc..000000000000 Binary files a/sound/direct_sound_samples/cries/venusaur.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/venusaur.wav b/sound/direct_sound_samples/cries/venusaur.wav new file mode 100644 index 000000000000..fdd299ae2771 Binary files /dev/null and b/sound/direct_sound_samples/cries/venusaur.wav differ diff --git a/sound/direct_sound_samples/cries/venusaur_mega.aif b/sound/direct_sound_samples/cries/venusaur_mega.aif deleted file mode 100644 index cec11aaae2a2..000000000000 Binary files a/sound/direct_sound_samples/cries/venusaur_mega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/venusaur_mega.wav b/sound/direct_sound_samples/cries/venusaur_mega.wav new file mode 100644 index 000000000000..e8e01ee0c3b5 Binary files /dev/null and b/sound/direct_sound_samples/cries/venusaur_mega.wav differ diff --git a/sound/direct_sound_samples/cries/vespiquen.aif b/sound/direct_sound_samples/cries/vespiquen.aif deleted file mode 100644 index c86e9a403bbb..000000000000 Binary files a/sound/direct_sound_samples/cries/vespiquen.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vespiquen.wav b/sound/direct_sound_samples/cries/vespiquen.wav new file mode 100644 index 000000000000..a1fdfe215c9e Binary files /dev/null and b/sound/direct_sound_samples/cries/vespiquen.wav differ diff --git a/sound/direct_sound_samples/cries/vibrava.aif b/sound/direct_sound_samples/cries/vibrava.aif deleted file mode 100644 index 7e0a13c6df52..000000000000 Binary files a/sound/direct_sound_samples/cries/vibrava.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vibrava.wav b/sound/direct_sound_samples/cries/vibrava.wav new file mode 100644 index 000000000000..537010487544 Binary files /dev/null and b/sound/direct_sound_samples/cries/vibrava.wav differ diff --git a/sound/direct_sound_samples/cries/victini.aif b/sound/direct_sound_samples/cries/victini.aif deleted file mode 100644 index cada6fbf078f..000000000000 Binary files a/sound/direct_sound_samples/cries/victini.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/victini.wav b/sound/direct_sound_samples/cries/victini.wav new file mode 100644 index 000000000000..381efef3f63e Binary files /dev/null and b/sound/direct_sound_samples/cries/victini.wav differ diff --git a/sound/direct_sound_samples/cries/victreebel.aif b/sound/direct_sound_samples/cries/victreebel.aif deleted file mode 100644 index 62bb048d4c70..000000000000 Binary files a/sound/direct_sound_samples/cries/victreebel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/victreebel.wav b/sound/direct_sound_samples/cries/victreebel.wav new file mode 100644 index 000000000000..19f11202f95e Binary files /dev/null and b/sound/direct_sound_samples/cries/victreebel.wav differ diff --git a/sound/direct_sound_samples/cries/vigoroth.aif b/sound/direct_sound_samples/cries/vigoroth.aif deleted file mode 100644 index 8e3560ab1dfc..000000000000 Binary files a/sound/direct_sound_samples/cries/vigoroth.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vigoroth.wav b/sound/direct_sound_samples/cries/vigoroth.wav new file mode 100644 index 000000000000..5d21bd23b0ca Binary files /dev/null and b/sound/direct_sound_samples/cries/vigoroth.wav differ diff --git a/sound/direct_sound_samples/cries/vikavolt.aif b/sound/direct_sound_samples/cries/vikavolt.aif deleted file mode 100644 index badd95c3c51a..000000000000 Binary files a/sound/direct_sound_samples/cries/vikavolt.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vikavolt.wav b/sound/direct_sound_samples/cries/vikavolt.wav new file mode 100644 index 000000000000..ac1d36312019 Binary files /dev/null and b/sound/direct_sound_samples/cries/vikavolt.wav differ diff --git a/sound/direct_sound_samples/cries/vileplume.aif b/sound/direct_sound_samples/cries/vileplume.aif deleted file mode 100644 index e190e2151172..000000000000 Binary files a/sound/direct_sound_samples/cries/vileplume.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vileplume.wav b/sound/direct_sound_samples/cries/vileplume.wav new file mode 100644 index 000000000000..7189097b1849 Binary files /dev/null and b/sound/direct_sound_samples/cries/vileplume.wav differ diff --git a/sound/direct_sound_samples/cries/virizion.aif b/sound/direct_sound_samples/cries/virizion.aif deleted file mode 100644 index 7f1d8292b022..000000000000 Binary files a/sound/direct_sound_samples/cries/virizion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/virizion.wav b/sound/direct_sound_samples/cries/virizion.wav new file mode 100644 index 000000000000..4254006b8cc1 Binary files /dev/null and b/sound/direct_sound_samples/cries/virizion.wav differ diff --git a/sound/direct_sound_samples/cries/vivillon.aif b/sound/direct_sound_samples/cries/vivillon.aif deleted file mode 100644 index bf7474dd9544..000000000000 Binary files a/sound/direct_sound_samples/cries/vivillon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vivillon.wav b/sound/direct_sound_samples/cries/vivillon.wav new file mode 100644 index 000000000000..e681a1011a58 Binary files /dev/null and b/sound/direct_sound_samples/cries/vivillon.wav differ diff --git a/sound/direct_sound_samples/cries/volbeat.aif b/sound/direct_sound_samples/cries/volbeat.aif deleted file mode 100644 index 8d73e2c21db4..000000000000 Binary files a/sound/direct_sound_samples/cries/volbeat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/volbeat.wav b/sound/direct_sound_samples/cries/volbeat.wav new file mode 100644 index 000000000000..ae6375b95f9a Binary files /dev/null and b/sound/direct_sound_samples/cries/volbeat.wav differ diff --git a/sound/direct_sound_samples/cries/volcanion.aif b/sound/direct_sound_samples/cries/volcanion.aif deleted file mode 100644 index 72c78807a6ee..000000000000 Binary files a/sound/direct_sound_samples/cries/volcanion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/volcanion.wav b/sound/direct_sound_samples/cries/volcanion.wav new file mode 100644 index 000000000000..47b59afb3eba Binary files /dev/null and b/sound/direct_sound_samples/cries/volcanion.wav differ diff --git a/sound/direct_sound_samples/cries/volcarona.aif b/sound/direct_sound_samples/cries/volcarona.aif deleted file mode 100644 index f62e6e9e38a1..000000000000 Binary files a/sound/direct_sound_samples/cries/volcarona.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/volcarona.wav b/sound/direct_sound_samples/cries/volcarona.wav new file mode 100644 index 000000000000..53b0fde6bce0 Binary files /dev/null and b/sound/direct_sound_samples/cries/volcarona.wav differ diff --git a/sound/direct_sound_samples/cries/voltorb.aif b/sound/direct_sound_samples/cries/voltorb.aif deleted file mode 100644 index 832429cbf2cb..000000000000 Binary files a/sound/direct_sound_samples/cries/voltorb.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/voltorb.wav b/sound/direct_sound_samples/cries/voltorb.wav new file mode 100644 index 000000000000..e303a3db73d6 Binary files /dev/null and b/sound/direct_sound_samples/cries/voltorb.wav differ diff --git a/sound/direct_sound_samples/cries/vullaby.aif b/sound/direct_sound_samples/cries/vullaby.aif deleted file mode 100644 index 49d0648e9ff8..000000000000 Binary files a/sound/direct_sound_samples/cries/vullaby.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vullaby.wav b/sound/direct_sound_samples/cries/vullaby.wav new file mode 100644 index 000000000000..7be4f722c6f8 Binary files /dev/null and b/sound/direct_sound_samples/cries/vullaby.wav differ diff --git a/sound/direct_sound_samples/cries/vulpix.aif b/sound/direct_sound_samples/cries/vulpix.aif deleted file mode 100644 index 32b149999e29..000000000000 Binary files a/sound/direct_sound_samples/cries/vulpix.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/vulpix.wav b/sound/direct_sound_samples/cries/vulpix.wav new file mode 100644 index 000000000000..71d58b0a72a3 Binary files /dev/null and b/sound/direct_sound_samples/cries/vulpix.wav differ diff --git a/sound/direct_sound_samples/cries/wailmer.aif b/sound/direct_sound_samples/cries/wailmer.aif deleted file mode 100644 index 8bada495e4c4..000000000000 Binary files a/sound/direct_sound_samples/cries/wailmer.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wailmer.wav b/sound/direct_sound_samples/cries/wailmer.wav new file mode 100644 index 000000000000..ef43c515fd1b Binary files /dev/null and b/sound/direct_sound_samples/cries/wailmer.wav differ diff --git a/sound/direct_sound_samples/cries/wailord.aif b/sound/direct_sound_samples/cries/wailord.aif deleted file mode 100644 index ea0f553cf843..000000000000 Binary files a/sound/direct_sound_samples/cries/wailord.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wailord.wav b/sound/direct_sound_samples/cries/wailord.wav new file mode 100644 index 000000000000..a7e9d89f695c Binary files /dev/null and b/sound/direct_sound_samples/cries/wailord.wav differ diff --git a/sound/direct_sound_samples/cries/walking_wake.aif b/sound/direct_sound_samples/cries/walking_wake.aif deleted file mode 100644 index 88518dd20053..000000000000 Binary files a/sound/direct_sound_samples/cries/walking_wake.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/walking_wake.wav b/sound/direct_sound_samples/cries/walking_wake.wav new file mode 100644 index 000000000000..ea856c0cf70b Binary files /dev/null and b/sound/direct_sound_samples/cries/walking_wake.wav differ diff --git a/sound/direct_sound_samples/cries/walrein.aif b/sound/direct_sound_samples/cries/walrein.aif deleted file mode 100644 index 2843617fbfe0..000000000000 Binary files a/sound/direct_sound_samples/cries/walrein.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/walrein.wav b/sound/direct_sound_samples/cries/walrein.wav new file mode 100644 index 000000000000..cbc5fa8cb42a Binary files /dev/null and b/sound/direct_sound_samples/cries/walrein.wav differ diff --git a/sound/direct_sound_samples/cries/wartortle.aif b/sound/direct_sound_samples/cries/wartortle.aif deleted file mode 100644 index de2aa254805b..000000000000 Binary files a/sound/direct_sound_samples/cries/wartortle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wartortle.wav b/sound/direct_sound_samples/cries/wartortle.wav new file mode 100644 index 000000000000..950f87d74b2e Binary files /dev/null and b/sound/direct_sound_samples/cries/wartortle.wav differ diff --git a/sound/direct_sound_samples/cries/watchog.aif b/sound/direct_sound_samples/cries/watchog.aif deleted file mode 100644 index df08e7a29649..000000000000 Binary files a/sound/direct_sound_samples/cries/watchog.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/watchog.wav b/sound/direct_sound_samples/cries/watchog.wav new file mode 100644 index 000000000000..f69adc8aefc1 Binary files /dev/null and b/sound/direct_sound_samples/cries/watchog.wav differ diff --git a/sound/direct_sound_samples/cries/wattrel.aif b/sound/direct_sound_samples/cries/wattrel.aif deleted file mode 100644 index 361ead83565c..000000000000 Binary files a/sound/direct_sound_samples/cries/wattrel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wattrel.wav b/sound/direct_sound_samples/cries/wattrel.wav new file mode 100644 index 000000000000..b803ef40421a Binary files /dev/null and b/sound/direct_sound_samples/cries/wattrel.wav differ diff --git a/sound/direct_sound_samples/cries/weavile.aif b/sound/direct_sound_samples/cries/weavile.aif deleted file mode 100644 index 5bfb5019dfd7..000000000000 Binary files a/sound/direct_sound_samples/cries/weavile.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/weavile.wav b/sound/direct_sound_samples/cries/weavile.wav new file mode 100644 index 000000000000..36b88753739f Binary files /dev/null and b/sound/direct_sound_samples/cries/weavile.wav differ diff --git a/sound/direct_sound_samples/cries/weedle.aif b/sound/direct_sound_samples/cries/weedle.aif deleted file mode 100644 index ac5b0eb76524..000000000000 Binary files a/sound/direct_sound_samples/cries/weedle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/weedle.wav b/sound/direct_sound_samples/cries/weedle.wav new file mode 100644 index 000000000000..6a209fede123 Binary files /dev/null and b/sound/direct_sound_samples/cries/weedle.wav differ diff --git a/sound/direct_sound_samples/cries/weepinbell.aif b/sound/direct_sound_samples/cries/weepinbell.aif deleted file mode 100644 index 0b20df8089fe..000000000000 Binary files a/sound/direct_sound_samples/cries/weepinbell.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/weepinbell.wav b/sound/direct_sound_samples/cries/weepinbell.wav new file mode 100644 index 000000000000..48f7225cf581 Binary files /dev/null and b/sound/direct_sound_samples/cries/weepinbell.wav differ diff --git a/sound/direct_sound_samples/cries/weezing.aif b/sound/direct_sound_samples/cries/weezing.aif deleted file mode 100644 index b7b8d93da517..000000000000 Binary files a/sound/direct_sound_samples/cries/weezing.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/weezing.wav b/sound/direct_sound_samples/cries/weezing.wav new file mode 100644 index 000000000000..b5a7b189d038 Binary files /dev/null and b/sound/direct_sound_samples/cries/weezing.wav differ diff --git a/sound/direct_sound_samples/cries/whimsicott.aif b/sound/direct_sound_samples/cries/whimsicott.aif deleted file mode 100644 index 873d8a1b4197..000000000000 Binary files a/sound/direct_sound_samples/cries/whimsicott.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/whimsicott.wav b/sound/direct_sound_samples/cries/whimsicott.wav new file mode 100644 index 000000000000..712aab7154a2 Binary files /dev/null and b/sound/direct_sound_samples/cries/whimsicott.wav differ diff --git a/sound/direct_sound_samples/cries/whirlipede.aif b/sound/direct_sound_samples/cries/whirlipede.aif deleted file mode 100644 index c9b64404b8af..000000000000 Binary files a/sound/direct_sound_samples/cries/whirlipede.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/whirlipede.wav b/sound/direct_sound_samples/cries/whirlipede.wav new file mode 100644 index 000000000000..c468feb0f5b6 Binary files /dev/null and b/sound/direct_sound_samples/cries/whirlipede.wav differ diff --git a/sound/direct_sound_samples/cries/whiscash.aif b/sound/direct_sound_samples/cries/whiscash.aif deleted file mode 100644 index 71cd9fd00a8b..000000000000 Binary files a/sound/direct_sound_samples/cries/whiscash.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/whiscash.wav b/sound/direct_sound_samples/cries/whiscash.wav new file mode 100644 index 000000000000..ebec93d188a7 Binary files /dev/null and b/sound/direct_sound_samples/cries/whiscash.wav differ diff --git a/sound/direct_sound_samples/cries/whismur.aif b/sound/direct_sound_samples/cries/whismur.aif deleted file mode 100644 index c5a2369ba9d5..000000000000 Binary files a/sound/direct_sound_samples/cries/whismur.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/whismur.wav b/sound/direct_sound_samples/cries/whismur.wav new file mode 100644 index 000000000000..af3e3e0e31cd Binary files /dev/null and b/sound/direct_sound_samples/cries/whismur.wav differ diff --git a/sound/direct_sound_samples/cries/wigglytuff.aif b/sound/direct_sound_samples/cries/wigglytuff.aif deleted file mode 100644 index 07fcc8ebd318..000000000000 Binary files a/sound/direct_sound_samples/cries/wigglytuff.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wigglytuff.wav b/sound/direct_sound_samples/cries/wigglytuff.wav new file mode 100644 index 000000000000..a6b632a6ce37 Binary files /dev/null and b/sound/direct_sound_samples/cries/wigglytuff.wav differ diff --git a/sound/direct_sound_samples/cries/wiglett.aif b/sound/direct_sound_samples/cries/wiglett.aif deleted file mode 100644 index d377681aef48..000000000000 Binary files a/sound/direct_sound_samples/cries/wiglett.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wiglett.wav b/sound/direct_sound_samples/cries/wiglett.wav new file mode 100644 index 000000000000..c555b6035ef2 Binary files /dev/null and b/sound/direct_sound_samples/cries/wiglett.wav differ diff --git a/sound/direct_sound_samples/cries/wimpod.aif b/sound/direct_sound_samples/cries/wimpod.aif deleted file mode 100644 index 5b7596409657..000000000000 Binary files a/sound/direct_sound_samples/cries/wimpod.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wimpod.wav b/sound/direct_sound_samples/cries/wimpod.wav new file mode 100644 index 000000000000..36b28c501dad Binary files /dev/null and b/sound/direct_sound_samples/cries/wimpod.wav differ diff --git a/sound/direct_sound_samples/cries/wingull.aif b/sound/direct_sound_samples/cries/wingull.aif deleted file mode 100644 index 49b04d9d96ca..000000000000 Binary files a/sound/direct_sound_samples/cries/wingull.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wingull.wav b/sound/direct_sound_samples/cries/wingull.wav new file mode 100644 index 000000000000..4e158409add4 Binary files /dev/null and b/sound/direct_sound_samples/cries/wingull.wav differ diff --git a/sound/direct_sound_samples/cries/wishiwashi_school.aif b/sound/direct_sound_samples/cries/wishiwashi_school.aif deleted file mode 100644 index e63ce913a26a..000000000000 Binary files a/sound/direct_sound_samples/cries/wishiwashi_school.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wishiwashi_school.wav b/sound/direct_sound_samples/cries/wishiwashi_school.wav new file mode 100644 index 000000000000..ef49075f1cb2 Binary files /dev/null and b/sound/direct_sound_samples/cries/wishiwashi_school.wav differ diff --git a/sound/direct_sound_samples/cries/wishiwashi_solo.aif b/sound/direct_sound_samples/cries/wishiwashi_solo.aif deleted file mode 100644 index e6e26b75c6b9..000000000000 Binary files a/sound/direct_sound_samples/cries/wishiwashi_solo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wishiwashi_solo.wav b/sound/direct_sound_samples/cries/wishiwashi_solo.wav new file mode 100644 index 000000000000..456a7c74f81e Binary files /dev/null and b/sound/direct_sound_samples/cries/wishiwashi_solo.wav differ diff --git a/sound/direct_sound_samples/cries/wo_chien.aif b/sound/direct_sound_samples/cries/wo_chien.aif deleted file mode 100644 index f50bd73e8d42..000000000000 Binary files a/sound/direct_sound_samples/cries/wo_chien.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wo_chien.wav b/sound/direct_sound_samples/cries/wo_chien.wav new file mode 100644 index 000000000000..562665fee38f Binary files /dev/null and b/sound/direct_sound_samples/cries/wo_chien.wav differ diff --git a/sound/direct_sound_samples/cries/wobbuffet.aif b/sound/direct_sound_samples/cries/wobbuffet.aif deleted file mode 100644 index 8e50da47bbf5..000000000000 Binary files a/sound/direct_sound_samples/cries/wobbuffet.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wobbuffet.wav b/sound/direct_sound_samples/cries/wobbuffet.wav new file mode 100644 index 000000000000..17e7464ad978 Binary files /dev/null and b/sound/direct_sound_samples/cries/wobbuffet.wav differ diff --git a/sound/direct_sound_samples/cries/woobat.aif b/sound/direct_sound_samples/cries/woobat.aif deleted file mode 100644 index db8ae140e219..000000000000 Binary files a/sound/direct_sound_samples/cries/woobat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/woobat.wav b/sound/direct_sound_samples/cries/woobat.wav new file mode 100644 index 000000000000..e8d3523e83be Binary files /dev/null and b/sound/direct_sound_samples/cries/woobat.wav differ diff --git a/sound/direct_sound_samples/cries/wooloo.aif b/sound/direct_sound_samples/cries/wooloo.aif deleted file mode 100644 index db1360386c13..000000000000 Binary files a/sound/direct_sound_samples/cries/wooloo.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wooloo.wav b/sound/direct_sound_samples/cries/wooloo.wav new file mode 100644 index 000000000000..adc8ad4ade09 Binary files /dev/null and b/sound/direct_sound_samples/cries/wooloo.wav differ diff --git a/sound/direct_sound_samples/cries/wooper.aif b/sound/direct_sound_samples/cries/wooper.aif deleted file mode 100644 index d4b9ea1b4a25..000000000000 Binary files a/sound/direct_sound_samples/cries/wooper.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wooper.wav b/sound/direct_sound_samples/cries/wooper.wav new file mode 100644 index 000000000000..83c7e589df12 Binary files /dev/null and b/sound/direct_sound_samples/cries/wooper.wav differ diff --git a/sound/direct_sound_samples/cries/wormadam.aif b/sound/direct_sound_samples/cries/wormadam.aif deleted file mode 100644 index 364510820687..000000000000 Binary files a/sound/direct_sound_samples/cries/wormadam.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wormadam.wav b/sound/direct_sound_samples/cries/wormadam.wav new file mode 100644 index 000000000000..f03247f1dd41 Binary files /dev/null and b/sound/direct_sound_samples/cries/wormadam.wav differ diff --git a/sound/direct_sound_samples/cries/wugtrio.aif b/sound/direct_sound_samples/cries/wugtrio.aif deleted file mode 100644 index 6c92cae87391..000000000000 Binary files a/sound/direct_sound_samples/cries/wugtrio.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wugtrio.wav b/sound/direct_sound_samples/cries/wugtrio.wav new file mode 100644 index 000000000000..d885b422f383 Binary files /dev/null and b/sound/direct_sound_samples/cries/wugtrio.wav differ diff --git a/sound/direct_sound_samples/cries/wurmple.aif b/sound/direct_sound_samples/cries/wurmple.aif deleted file mode 100644 index 1754d7e2b7e2..000000000000 Binary files a/sound/direct_sound_samples/cries/wurmple.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wurmple.wav b/sound/direct_sound_samples/cries/wurmple.wav new file mode 100644 index 000000000000..b58d5007cf3b Binary files /dev/null and b/sound/direct_sound_samples/cries/wurmple.wav differ diff --git a/sound/direct_sound_samples/cries/wynaut.aif b/sound/direct_sound_samples/cries/wynaut.aif deleted file mode 100644 index ddd289f9a485..000000000000 Binary files a/sound/direct_sound_samples/cries/wynaut.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wynaut.wav b/sound/direct_sound_samples/cries/wynaut.wav new file mode 100644 index 000000000000..6febe26aa483 Binary files /dev/null and b/sound/direct_sound_samples/cries/wynaut.wav differ diff --git a/sound/direct_sound_samples/cries/wyrdeer.aif b/sound/direct_sound_samples/cries/wyrdeer.aif deleted file mode 100644 index 597df62ab82e..000000000000 Binary files a/sound/direct_sound_samples/cries/wyrdeer.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/wyrdeer.wav b/sound/direct_sound_samples/cries/wyrdeer.wav new file mode 100644 index 000000000000..50bba2a433ec Binary files /dev/null and b/sound/direct_sound_samples/cries/wyrdeer.wav differ diff --git a/sound/direct_sound_samples/cries/xatu.aif b/sound/direct_sound_samples/cries/xatu.aif deleted file mode 100644 index da4afe62caf5..000000000000 Binary files a/sound/direct_sound_samples/cries/xatu.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/xatu.wav b/sound/direct_sound_samples/cries/xatu.wav new file mode 100644 index 000000000000..7c84f65723bb Binary files /dev/null and b/sound/direct_sound_samples/cries/xatu.wav differ diff --git a/sound/direct_sound_samples/cries/xerneas.aif b/sound/direct_sound_samples/cries/xerneas.aif deleted file mode 100644 index 4745e8e68568..000000000000 Binary files a/sound/direct_sound_samples/cries/xerneas.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/xerneas.wav b/sound/direct_sound_samples/cries/xerneas.wav new file mode 100644 index 000000000000..f08dd0ca933e Binary files /dev/null and b/sound/direct_sound_samples/cries/xerneas.wav differ diff --git a/sound/direct_sound_samples/cries/xurkitree.aif b/sound/direct_sound_samples/cries/xurkitree.aif deleted file mode 100644 index 3b0f5f381258..000000000000 Binary files a/sound/direct_sound_samples/cries/xurkitree.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/xurkitree.wav b/sound/direct_sound_samples/cries/xurkitree.wav new file mode 100644 index 000000000000..2c521b1f2c7f Binary files /dev/null and b/sound/direct_sound_samples/cries/xurkitree.wav differ diff --git a/sound/direct_sound_samples/cries/yamask.aif b/sound/direct_sound_samples/cries/yamask.aif deleted file mode 100644 index 51f07034b860..000000000000 Binary files a/sound/direct_sound_samples/cries/yamask.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/yamask.wav b/sound/direct_sound_samples/cries/yamask.wav new file mode 100644 index 000000000000..e04533c5af56 Binary files /dev/null and b/sound/direct_sound_samples/cries/yamask.wav differ diff --git a/sound/direct_sound_samples/cries/yamper.aif b/sound/direct_sound_samples/cries/yamper.aif deleted file mode 100644 index c57246e4adff..000000000000 Binary files a/sound/direct_sound_samples/cries/yamper.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/yamper.wav b/sound/direct_sound_samples/cries/yamper.wav new file mode 100644 index 000000000000..ad8491f1f10b Binary files /dev/null and b/sound/direct_sound_samples/cries/yamper.wav differ diff --git a/sound/direct_sound_samples/cries/yanma.aif b/sound/direct_sound_samples/cries/yanma.aif deleted file mode 100644 index 3d8354bb5921..000000000000 Binary files a/sound/direct_sound_samples/cries/yanma.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/yanma.wav b/sound/direct_sound_samples/cries/yanma.wav new file mode 100644 index 000000000000..166b3736168e Binary files /dev/null and b/sound/direct_sound_samples/cries/yanma.wav differ diff --git a/sound/direct_sound_samples/cries/yanmega.aif b/sound/direct_sound_samples/cries/yanmega.aif deleted file mode 100644 index 6f3a3eb2dd93..000000000000 Binary files a/sound/direct_sound_samples/cries/yanmega.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/yanmega.wav b/sound/direct_sound_samples/cries/yanmega.wav new file mode 100644 index 000000000000..b46468671318 Binary files /dev/null and b/sound/direct_sound_samples/cries/yanmega.wav differ diff --git a/sound/direct_sound_samples/cries/yungoos.aif b/sound/direct_sound_samples/cries/yungoos.aif deleted file mode 100644 index 13b633a98af8..000000000000 Binary files a/sound/direct_sound_samples/cries/yungoos.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/yungoos.wav b/sound/direct_sound_samples/cries/yungoos.wav new file mode 100644 index 000000000000..94a83e9223e6 Binary files /dev/null and b/sound/direct_sound_samples/cries/yungoos.wav differ diff --git a/sound/direct_sound_samples/cries/yveltal.aif b/sound/direct_sound_samples/cries/yveltal.aif deleted file mode 100644 index 3c2bbcb02116..000000000000 Binary files a/sound/direct_sound_samples/cries/yveltal.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/yveltal.wav b/sound/direct_sound_samples/cries/yveltal.wav new file mode 100644 index 000000000000..5bc4fec4fee9 Binary files /dev/null and b/sound/direct_sound_samples/cries/yveltal.wav differ diff --git a/sound/direct_sound_samples/cries/zacian_crowned_sword.aif b/sound/direct_sound_samples/cries/zacian_crowned_sword.aif deleted file mode 100644 index 597c5ddd2661..000000000000 Binary files a/sound/direct_sound_samples/cries/zacian_crowned_sword.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zacian_crowned_sword.wav b/sound/direct_sound_samples/cries/zacian_crowned_sword.wav new file mode 100644 index 000000000000..ee135a12bc19 Binary files /dev/null and b/sound/direct_sound_samples/cries/zacian_crowned_sword.wav differ diff --git a/sound/direct_sound_samples/cries/zacian_hero_of_many_battles.aif b/sound/direct_sound_samples/cries/zacian_hero_of_many_battles.aif deleted file mode 100644 index f67d8573324f..000000000000 Binary files a/sound/direct_sound_samples/cries/zacian_hero_of_many_battles.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zacian_hero_of_many_battles.wav b/sound/direct_sound_samples/cries/zacian_hero_of_many_battles.wav new file mode 100644 index 000000000000..d3354b55a2c6 Binary files /dev/null and b/sound/direct_sound_samples/cries/zacian_hero_of_many_battles.wav differ diff --git a/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif b/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif deleted file mode 100644 index 05d170baba4a..000000000000 Binary files a/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zamazenta_crowned_shield.wav b/sound/direct_sound_samples/cries/zamazenta_crowned_shield.wav new file mode 100644 index 000000000000..f4fad6e6b0fc Binary files /dev/null and b/sound/direct_sound_samples/cries/zamazenta_crowned_shield.wav differ diff --git a/sound/direct_sound_samples/cries/zamazenta_hero_of_many_battles.aif b/sound/direct_sound_samples/cries/zamazenta_hero_of_many_battles.aif deleted file mode 100644 index 3674b2937fbb..000000000000 Binary files a/sound/direct_sound_samples/cries/zamazenta_hero_of_many_battles.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zamazenta_hero_of_many_battles.wav b/sound/direct_sound_samples/cries/zamazenta_hero_of_many_battles.wav new file mode 100644 index 000000000000..50c1b217a01e Binary files /dev/null and b/sound/direct_sound_samples/cries/zamazenta_hero_of_many_battles.wav differ diff --git a/sound/direct_sound_samples/cries/zangoose.aif b/sound/direct_sound_samples/cries/zangoose.aif deleted file mode 100644 index dc6182b784c0..000000000000 Binary files a/sound/direct_sound_samples/cries/zangoose.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zangoose.wav b/sound/direct_sound_samples/cries/zangoose.wav new file mode 100644 index 000000000000..b1e3e9ffc376 Binary files /dev/null and b/sound/direct_sound_samples/cries/zangoose.wav differ diff --git a/sound/direct_sound_samples/cries/zapdos.aif b/sound/direct_sound_samples/cries/zapdos.aif deleted file mode 100644 index 83bbd043e427..000000000000 Binary files a/sound/direct_sound_samples/cries/zapdos.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zapdos.wav b/sound/direct_sound_samples/cries/zapdos.wav new file mode 100644 index 000000000000..58415b934444 Binary files /dev/null and b/sound/direct_sound_samples/cries/zapdos.wav differ diff --git a/sound/direct_sound_samples/cries/zarude.aif b/sound/direct_sound_samples/cries/zarude.aif deleted file mode 100644 index d1a2a76aa4a0..000000000000 Binary files a/sound/direct_sound_samples/cries/zarude.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zarude.wav b/sound/direct_sound_samples/cries/zarude.wav new file mode 100644 index 000000000000..252ff5257307 Binary files /dev/null and b/sound/direct_sound_samples/cries/zarude.wav differ diff --git a/sound/direct_sound_samples/cries/zebstrika.aif b/sound/direct_sound_samples/cries/zebstrika.aif deleted file mode 100644 index 0609b145b21e..000000000000 Binary files a/sound/direct_sound_samples/cries/zebstrika.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zebstrika.wav b/sound/direct_sound_samples/cries/zebstrika.wav new file mode 100644 index 000000000000..f6f305f66cd2 Binary files /dev/null and b/sound/direct_sound_samples/cries/zebstrika.wav differ diff --git a/sound/direct_sound_samples/cries/zekrom.aif b/sound/direct_sound_samples/cries/zekrom.aif deleted file mode 100644 index dd74f8091109..000000000000 Binary files a/sound/direct_sound_samples/cries/zekrom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zekrom.wav b/sound/direct_sound_samples/cries/zekrom.wav new file mode 100644 index 000000000000..61a2b1e6c36c Binary files /dev/null and b/sound/direct_sound_samples/cries/zekrom.wav differ diff --git a/sound/direct_sound_samples/cries/zeraora.aif b/sound/direct_sound_samples/cries/zeraora.aif deleted file mode 100644 index b1455a010052..000000000000 Binary files a/sound/direct_sound_samples/cries/zeraora.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zeraora.wav b/sound/direct_sound_samples/cries/zeraora.wav new file mode 100644 index 000000000000..570cb398bbff Binary files /dev/null and b/sound/direct_sound_samples/cries/zeraora.wav differ diff --git a/sound/direct_sound_samples/cries/zigzagoon.aif b/sound/direct_sound_samples/cries/zigzagoon.aif deleted file mode 100644 index 8f7b32f8189a..000000000000 Binary files a/sound/direct_sound_samples/cries/zigzagoon.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zigzagoon.wav b/sound/direct_sound_samples/cries/zigzagoon.wav new file mode 100644 index 000000000000..ac0b68edcde0 Binary files /dev/null and b/sound/direct_sound_samples/cries/zigzagoon.wav differ diff --git a/sound/direct_sound_samples/cries/zoroark.aif b/sound/direct_sound_samples/cries/zoroark.aif deleted file mode 100644 index 91e7ab0ce97f..000000000000 Binary files a/sound/direct_sound_samples/cries/zoroark.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zoroark.wav b/sound/direct_sound_samples/cries/zoroark.wav new file mode 100644 index 000000000000..34b6f1241d66 Binary files /dev/null and b/sound/direct_sound_samples/cries/zoroark.wav differ diff --git a/sound/direct_sound_samples/cries/zorua.aif b/sound/direct_sound_samples/cries/zorua.aif deleted file mode 100644 index 674681f5bc46..000000000000 Binary files a/sound/direct_sound_samples/cries/zorua.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zorua.wav b/sound/direct_sound_samples/cries/zorua.wav new file mode 100644 index 000000000000..fe7c4ed8c60d Binary files /dev/null and b/sound/direct_sound_samples/cries/zorua.wav differ diff --git a/sound/direct_sound_samples/cries/zubat.aif b/sound/direct_sound_samples/cries/zubat.aif deleted file mode 100644 index 9ba4d364891c..000000000000 Binary files a/sound/direct_sound_samples/cries/zubat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zubat.wav b/sound/direct_sound_samples/cries/zubat.wav new file mode 100644 index 000000000000..dc0756a06de0 Binary files /dev/null and b/sound/direct_sound_samples/cries/zubat.wav differ diff --git a/sound/direct_sound_samples/cries/zweilous.aif b/sound/direct_sound_samples/cries/zweilous.aif deleted file mode 100644 index fc9a366ce9e9..000000000000 Binary files a/sound/direct_sound_samples/cries/zweilous.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zweilous.wav b/sound/direct_sound_samples/cries/zweilous.wav new file mode 100644 index 000000000000..5474c4681c6a Binary files /dev/null and b/sound/direct_sound_samples/cries/zweilous.wav differ diff --git a/sound/direct_sound_samples/cries/zygarde_10.aif b/sound/direct_sound_samples/cries/zygarde_10.aif deleted file mode 100644 index a8301cdc16ba..000000000000 Binary files a/sound/direct_sound_samples/cries/zygarde_10.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zygarde_10.wav b/sound/direct_sound_samples/cries/zygarde_10.wav new file mode 100644 index 000000000000..da90abe5bb78 Binary files /dev/null and b/sound/direct_sound_samples/cries/zygarde_10.wav differ diff --git a/sound/direct_sound_samples/cries/zygarde_50.aif b/sound/direct_sound_samples/cries/zygarde_50.aif deleted file mode 100644 index 92daba8bcb0b..000000000000 Binary files a/sound/direct_sound_samples/cries/zygarde_50.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zygarde_50.wav b/sound/direct_sound_samples/cries/zygarde_50.wav new file mode 100644 index 000000000000..5bfe28b2ac69 Binary files /dev/null and b/sound/direct_sound_samples/cries/zygarde_50.wav differ diff --git a/sound/direct_sound_samples/cries/zygarde_complete.aif b/sound/direct_sound_samples/cries/zygarde_complete.aif deleted file mode 100644 index 2eae63203b66..000000000000 Binary files a/sound/direct_sound_samples/cries/zygarde_complete.aif and /dev/null differ diff --git a/sound/direct_sound_samples/cries/zygarde_complete.wav b/sound/direct_sound_samples/cries/zygarde_complete.wav new file mode 100644 index 000000000000..5e295a06450a Binary files /dev/null and b/sound/direct_sound_samples/cries/zygarde_complete.wav differ diff --git a/sound/direct_sound_samples/dance_drums_ride_bell.aif b/sound/direct_sound_samples/dance_drums_ride_bell.aif deleted file mode 100644 index db36a54bd056..000000000000 Binary files a/sound/direct_sound_samples/dance_drums_ride_bell.aif and /dev/null differ diff --git a/sound/direct_sound_samples/dance_drums_ride_bell.wav b/sound/direct_sound_samples/dance_drums_ride_bell.wav new file mode 100644 index 000000000000..a79a5c26f9a0 Binary files /dev/null and b/sound/direct_sound_samples/dance_drums_ride_bell.wav differ diff --git a/sound/direct_sound_samples/drum_and_percussion_kick.aif b/sound/direct_sound_samples/drum_and_percussion_kick.aif deleted file mode 100644 index 628421990e3f..000000000000 Binary files a/sound/direct_sound_samples/drum_and_percussion_kick.aif and /dev/null differ diff --git a/sound/direct_sound_samples/drum_and_percussion_kick.wav b/sound/direct_sound_samples/drum_and_percussion_kick.wav new file mode 100644 index 000000000000..49ba617f0c14 Binary files /dev/null and b/sound/direct_sound_samples/drum_and_percussion_kick.wav differ diff --git a/sound/direct_sound_samples/ethnic_flavours_atarigane.aif b/sound/direct_sound_samples/ethnic_flavours_atarigane.aif deleted file mode 100644 index 4a4268210efe..000000000000 Binary files a/sound/direct_sound_samples/ethnic_flavours_atarigane.aif and /dev/null differ diff --git a/sound/direct_sound_samples/ethnic_flavours_atarigane.wav b/sound/direct_sound_samples/ethnic_flavours_atarigane.wav new file mode 100644 index 000000000000..d1fb2c1a4fdc Binary files /dev/null and b/sound/direct_sound_samples/ethnic_flavours_atarigane.wav differ diff --git a/sound/direct_sound_samples/ethnic_flavours_hyoushigi.aif b/sound/direct_sound_samples/ethnic_flavours_hyoushigi.aif deleted file mode 100644 index 5219bdf5d542..000000000000 Binary files a/sound/direct_sound_samples/ethnic_flavours_hyoushigi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/ethnic_flavours_hyoushigi.wav b/sound/direct_sound_samples/ethnic_flavours_hyoushigi.wav new file mode 100644 index 000000000000..18731f50341d Binary files /dev/null and b/sound/direct_sound_samples/ethnic_flavours_hyoushigi.wav differ diff --git a/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.aif b/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.aif deleted file mode 100644 index 1696bd02e0a9..000000000000 Binary files a/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.wav b/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.wav new file mode 100644 index 000000000000..5c99fedf38e7 Binary files /dev/null and b/sound/direct_sound_samples/ethnic_flavours_kotsuzumi.wav differ diff --git a/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.aif b/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.aif deleted file mode 100644 index 69267ca1c63a..000000000000 Binary files a/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav b/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav new file mode 100644 index 000000000000..c12ae6de34e0 Binary files /dev/null and b/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav differ diff --git a/sound/direct_sound_samples/heart_of_asia_gamelan.aif b/sound/direct_sound_samples/heart_of_asia_gamelan.aif deleted file mode 100644 index adaf6a0c53c1..000000000000 Binary files a/sound/direct_sound_samples/heart_of_asia_gamelan.aif and /dev/null differ diff --git a/sound/direct_sound_samples/heart_of_asia_gamelan.wav b/sound/direct_sound_samples/heart_of_asia_gamelan.wav new file mode 100644 index 000000000000..a6258c97d415 Binary files /dev/null and b/sound/direct_sound_samples/heart_of_asia_gamelan.wav differ diff --git a/sound/direct_sound_samples/phonemes/01.aif b/sound/direct_sound_samples/phonemes/01.aif deleted file mode 100644 index 4b15a94b7781..000000000000 Binary files a/sound/direct_sound_samples/phonemes/01.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/01.wav b/sound/direct_sound_samples/phonemes/01.wav new file mode 100644 index 000000000000..d7f43544f519 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/01.wav differ diff --git a/sound/direct_sound_samples/phonemes/02.aif b/sound/direct_sound_samples/phonemes/02.aif deleted file mode 100644 index 74c1290730e5..000000000000 Binary files a/sound/direct_sound_samples/phonemes/02.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/02.wav b/sound/direct_sound_samples/phonemes/02.wav new file mode 100644 index 000000000000..6b9e4134c859 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/02.wav differ diff --git a/sound/direct_sound_samples/phonemes/03.aif b/sound/direct_sound_samples/phonemes/03.aif deleted file mode 100644 index 359972c169b0..000000000000 Binary files a/sound/direct_sound_samples/phonemes/03.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/03.wav b/sound/direct_sound_samples/phonemes/03.wav new file mode 100644 index 000000000000..a080496adbed Binary files /dev/null and b/sound/direct_sound_samples/phonemes/03.wav differ diff --git a/sound/direct_sound_samples/phonemes/04.aif b/sound/direct_sound_samples/phonemes/04.aif deleted file mode 100644 index 3b136fa43479..000000000000 Binary files a/sound/direct_sound_samples/phonemes/04.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/04.wav b/sound/direct_sound_samples/phonemes/04.wav new file mode 100644 index 000000000000..0525f8f5d3db Binary files /dev/null and b/sound/direct_sound_samples/phonemes/04.wav differ diff --git a/sound/direct_sound_samples/phonemes/05.aif b/sound/direct_sound_samples/phonemes/05.aif deleted file mode 100644 index fd72512cf175..000000000000 Binary files a/sound/direct_sound_samples/phonemes/05.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/05.wav b/sound/direct_sound_samples/phonemes/05.wav new file mode 100644 index 000000000000..5df5562768b9 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/05.wav differ diff --git a/sound/direct_sound_samples/phonemes/06.aif b/sound/direct_sound_samples/phonemes/06.aif deleted file mode 100644 index 6f7794bec845..000000000000 Binary files a/sound/direct_sound_samples/phonemes/06.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/06.wav b/sound/direct_sound_samples/phonemes/06.wav new file mode 100644 index 000000000000..3774664d97cf Binary files /dev/null and b/sound/direct_sound_samples/phonemes/06.wav differ diff --git a/sound/direct_sound_samples/phonemes/07.aif b/sound/direct_sound_samples/phonemes/07.aif deleted file mode 100644 index 89b845f21b61..000000000000 Binary files a/sound/direct_sound_samples/phonemes/07.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/07.wav b/sound/direct_sound_samples/phonemes/07.wav new file mode 100644 index 000000000000..fc44b7f77189 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/07.wav differ diff --git a/sound/direct_sound_samples/phonemes/08.aif b/sound/direct_sound_samples/phonemes/08.aif deleted file mode 100644 index 1d99a3a9326b..000000000000 Binary files a/sound/direct_sound_samples/phonemes/08.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/08.wav b/sound/direct_sound_samples/phonemes/08.wav new file mode 100644 index 000000000000..47c50d63b052 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/08.wav differ diff --git a/sound/direct_sound_samples/phonemes/09.aif b/sound/direct_sound_samples/phonemes/09.aif deleted file mode 100644 index 883398129834..000000000000 Binary files a/sound/direct_sound_samples/phonemes/09.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/09.wav b/sound/direct_sound_samples/phonemes/09.wav new file mode 100644 index 000000000000..762ece0dd8a3 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/09.wav differ diff --git a/sound/direct_sound_samples/phonemes/10.aif b/sound/direct_sound_samples/phonemes/10.aif deleted file mode 100644 index 776815e6364b..000000000000 Binary files a/sound/direct_sound_samples/phonemes/10.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/10.wav b/sound/direct_sound_samples/phonemes/10.wav new file mode 100644 index 000000000000..da9fa6727c9d Binary files /dev/null and b/sound/direct_sound_samples/phonemes/10.wav differ diff --git a/sound/direct_sound_samples/phonemes/11.aif b/sound/direct_sound_samples/phonemes/11.aif deleted file mode 100644 index 545bd12920f6..000000000000 Binary files a/sound/direct_sound_samples/phonemes/11.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/11.wav b/sound/direct_sound_samples/phonemes/11.wav new file mode 100644 index 000000000000..5cd1904b4245 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/11.wav differ diff --git a/sound/direct_sound_samples/phonemes/12.aif b/sound/direct_sound_samples/phonemes/12.aif deleted file mode 100644 index c0a3be10d090..000000000000 Binary files a/sound/direct_sound_samples/phonemes/12.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/12.wav b/sound/direct_sound_samples/phonemes/12.wav new file mode 100644 index 000000000000..da638d82b042 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/12.wav differ diff --git a/sound/direct_sound_samples/phonemes/13.aif b/sound/direct_sound_samples/phonemes/13.aif deleted file mode 100644 index d26ecdd6de2d..000000000000 Binary files a/sound/direct_sound_samples/phonemes/13.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/13.wav b/sound/direct_sound_samples/phonemes/13.wav new file mode 100644 index 000000000000..2eb58a5f3ffb Binary files /dev/null and b/sound/direct_sound_samples/phonemes/13.wav differ diff --git a/sound/direct_sound_samples/phonemes/14.aif b/sound/direct_sound_samples/phonemes/14.aif deleted file mode 100644 index 2b51201a484b..000000000000 Binary files a/sound/direct_sound_samples/phonemes/14.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/14.wav b/sound/direct_sound_samples/phonemes/14.wav new file mode 100644 index 000000000000..fef0bb0ded7c Binary files /dev/null and b/sound/direct_sound_samples/phonemes/14.wav differ diff --git a/sound/direct_sound_samples/phonemes/15.aif b/sound/direct_sound_samples/phonemes/15.aif deleted file mode 100644 index cf5ac4e038bd..000000000000 Binary files a/sound/direct_sound_samples/phonemes/15.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/15.wav b/sound/direct_sound_samples/phonemes/15.wav new file mode 100644 index 000000000000..1dbe8cbfa3de Binary files /dev/null and b/sound/direct_sound_samples/phonemes/15.wav differ diff --git a/sound/direct_sound_samples/phonemes/16.aif b/sound/direct_sound_samples/phonemes/16.aif deleted file mode 100644 index 606742e608f6..000000000000 Binary files a/sound/direct_sound_samples/phonemes/16.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/16.wav b/sound/direct_sound_samples/phonemes/16.wav new file mode 100644 index 000000000000..83f18185823f Binary files /dev/null and b/sound/direct_sound_samples/phonemes/16.wav differ diff --git a/sound/direct_sound_samples/phonemes/17.aif b/sound/direct_sound_samples/phonemes/17.aif deleted file mode 100644 index 71d4987d64ac..000000000000 Binary files a/sound/direct_sound_samples/phonemes/17.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/17.wav b/sound/direct_sound_samples/phonemes/17.wav new file mode 100644 index 000000000000..ad55b8bda591 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/17.wav differ diff --git a/sound/direct_sound_samples/phonemes/18.aif b/sound/direct_sound_samples/phonemes/18.aif deleted file mode 100644 index 070c44a37c47..000000000000 Binary files a/sound/direct_sound_samples/phonemes/18.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/18.wav b/sound/direct_sound_samples/phonemes/18.wav new file mode 100644 index 000000000000..ecadb6f608f2 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/18.wav differ diff --git a/sound/direct_sound_samples/phonemes/19.aif b/sound/direct_sound_samples/phonemes/19.aif deleted file mode 100644 index b0ca84a38fd9..000000000000 Binary files a/sound/direct_sound_samples/phonemes/19.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/19.wav b/sound/direct_sound_samples/phonemes/19.wav new file mode 100644 index 000000000000..ff905abe22d5 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/19.wav differ diff --git a/sound/direct_sound_samples/phonemes/20.aif b/sound/direct_sound_samples/phonemes/20.aif deleted file mode 100644 index f44101b23c09..000000000000 Binary files a/sound/direct_sound_samples/phonemes/20.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/20.wav b/sound/direct_sound_samples/phonemes/20.wav new file mode 100644 index 000000000000..595702e08479 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/20.wav differ diff --git a/sound/direct_sound_samples/phonemes/21.aif b/sound/direct_sound_samples/phonemes/21.aif deleted file mode 100644 index a33809d423a3..000000000000 Binary files a/sound/direct_sound_samples/phonemes/21.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/21.wav b/sound/direct_sound_samples/phonemes/21.wav new file mode 100644 index 000000000000..7d1709212c44 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/21.wav differ diff --git a/sound/direct_sound_samples/phonemes/22.aif b/sound/direct_sound_samples/phonemes/22.aif deleted file mode 100644 index 6a005efccf9a..000000000000 Binary files a/sound/direct_sound_samples/phonemes/22.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/22.wav b/sound/direct_sound_samples/phonemes/22.wav new file mode 100644 index 000000000000..274f6137aaf3 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/22.wav differ diff --git a/sound/direct_sound_samples/phonemes/23.aif b/sound/direct_sound_samples/phonemes/23.aif deleted file mode 100644 index 62f9493fdbb1..000000000000 Binary files a/sound/direct_sound_samples/phonemes/23.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/23.wav b/sound/direct_sound_samples/phonemes/23.wav new file mode 100644 index 000000000000..72633f73c1cc Binary files /dev/null and b/sound/direct_sound_samples/phonemes/23.wav differ diff --git a/sound/direct_sound_samples/phonemes/24.aif b/sound/direct_sound_samples/phonemes/24.aif deleted file mode 100644 index 5767bd6d9aff..000000000000 Binary files a/sound/direct_sound_samples/phonemes/24.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/24.wav b/sound/direct_sound_samples/phonemes/24.wav new file mode 100644 index 000000000000..1d0e7b1a14f5 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/24.wav differ diff --git a/sound/direct_sound_samples/phonemes/25.aif b/sound/direct_sound_samples/phonemes/25.aif deleted file mode 100644 index 33e328a82e9e..000000000000 Binary files a/sound/direct_sound_samples/phonemes/25.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/25.wav b/sound/direct_sound_samples/phonemes/25.wav new file mode 100644 index 000000000000..135bb246dd98 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/25.wav differ diff --git a/sound/direct_sound_samples/phonemes/26.aif b/sound/direct_sound_samples/phonemes/26.aif deleted file mode 100644 index 548e740c8d82..000000000000 Binary files a/sound/direct_sound_samples/phonemes/26.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/26.wav b/sound/direct_sound_samples/phonemes/26.wav new file mode 100644 index 000000000000..e466df4d86c7 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/26.wav differ diff --git a/sound/direct_sound_samples/phonemes/27.aif b/sound/direct_sound_samples/phonemes/27.aif deleted file mode 100644 index cbbe09266aec..000000000000 Binary files a/sound/direct_sound_samples/phonemes/27.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/27.wav b/sound/direct_sound_samples/phonemes/27.wav new file mode 100644 index 000000000000..c4d4ce800887 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/27.wav differ diff --git a/sound/direct_sound_samples/phonemes/28.aif b/sound/direct_sound_samples/phonemes/28.aif deleted file mode 100644 index 8bdf7faaae8f..000000000000 Binary files a/sound/direct_sound_samples/phonemes/28.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/28.wav b/sound/direct_sound_samples/phonemes/28.wav new file mode 100644 index 000000000000..fe9dde8e3520 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/28.wav differ diff --git a/sound/direct_sound_samples/phonemes/29.aif b/sound/direct_sound_samples/phonemes/29.aif deleted file mode 100644 index f96f8853b287..000000000000 Binary files a/sound/direct_sound_samples/phonemes/29.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/29.wav b/sound/direct_sound_samples/phonemes/29.wav new file mode 100644 index 000000000000..d05658c97edb Binary files /dev/null and b/sound/direct_sound_samples/phonemes/29.wav differ diff --git a/sound/direct_sound_samples/phonemes/30.aif b/sound/direct_sound_samples/phonemes/30.aif deleted file mode 100644 index ab9abbf79565..000000000000 Binary files a/sound/direct_sound_samples/phonemes/30.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/30.wav b/sound/direct_sound_samples/phonemes/30.wav new file mode 100644 index 000000000000..aaf163ae9795 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/30.wav differ diff --git a/sound/direct_sound_samples/phonemes/31.aif b/sound/direct_sound_samples/phonemes/31.aif deleted file mode 100644 index 9d21d0ab49a2..000000000000 Binary files a/sound/direct_sound_samples/phonemes/31.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/31.wav b/sound/direct_sound_samples/phonemes/31.wav new file mode 100644 index 000000000000..64b2c7f6db1e Binary files /dev/null and b/sound/direct_sound_samples/phonemes/31.wav differ diff --git a/sound/direct_sound_samples/phonemes/32.aif b/sound/direct_sound_samples/phonemes/32.aif deleted file mode 100644 index c037ed4afc97..000000000000 Binary files a/sound/direct_sound_samples/phonemes/32.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/32.wav b/sound/direct_sound_samples/phonemes/32.wav new file mode 100644 index 000000000000..98862f1b64ce Binary files /dev/null and b/sound/direct_sound_samples/phonemes/32.wav differ diff --git a/sound/direct_sound_samples/phonemes/33.aif b/sound/direct_sound_samples/phonemes/33.aif deleted file mode 100644 index ac1f8b66f062..000000000000 Binary files a/sound/direct_sound_samples/phonemes/33.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/33.wav b/sound/direct_sound_samples/phonemes/33.wav new file mode 100644 index 000000000000..f96a5e49fd4b Binary files /dev/null and b/sound/direct_sound_samples/phonemes/33.wav differ diff --git a/sound/direct_sound_samples/phonemes/34.aif b/sound/direct_sound_samples/phonemes/34.aif deleted file mode 100644 index 1fd9111c8bb1..000000000000 Binary files a/sound/direct_sound_samples/phonemes/34.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/34.wav b/sound/direct_sound_samples/phonemes/34.wav new file mode 100644 index 000000000000..1439810d44fa Binary files /dev/null and b/sound/direct_sound_samples/phonemes/34.wav differ diff --git a/sound/direct_sound_samples/phonemes/35.aif b/sound/direct_sound_samples/phonemes/35.aif deleted file mode 100644 index 5d6ae2282f04..000000000000 Binary files a/sound/direct_sound_samples/phonemes/35.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/35.wav b/sound/direct_sound_samples/phonemes/35.wav new file mode 100644 index 000000000000..aa6599bcc8dd Binary files /dev/null and b/sound/direct_sound_samples/phonemes/35.wav differ diff --git a/sound/direct_sound_samples/phonemes/36.aif b/sound/direct_sound_samples/phonemes/36.aif deleted file mode 100644 index f267006907cc..000000000000 Binary files a/sound/direct_sound_samples/phonemes/36.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/36.wav b/sound/direct_sound_samples/phonemes/36.wav new file mode 100644 index 000000000000..59f90f461416 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/36.wav differ diff --git a/sound/direct_sound_samples/phonemes/37.aif b/sound/direct_sound_samples/phonemes/37.aif deleted file mode 100644 index 3ba97a9fc384..000000000000 Binary files a/sound/direct_sound_samples/phonemes/37.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/37.wav b/sound/direct_sound_samples/phonemes/37.wav new file mode 100644 index 000000000000..4df9cffee687 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/37.wav differ diff --git a/sound/direct_sound_samples/phonemes/38.aif b/sound/direct_sound_samples/phonemes/38.aif deleted file mode 100644 index 37f1be4b149b..000000000000 Binary files a/sound/direct_sound_samples/phonemes/38.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/38.wav b/sound/direct_sound_samples/phonemes/38.wav new file mode 100644 index 000000000000..759a23d514c5 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/38.wav differ diff --git a/sound/direct_sound_samples/phonemes/39.aif b/sound/direct_sound_samples/phonemes/39.aif deleted file mode 100644 index 4b3facb99a65..000000000000 Binary files a/sound/direct_sound_samples/phonemes/39.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/39.wav b/sound/direct_sound_samples/phonemes/39.wav new file mode 100644 index 000000000000..da335b269055 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/39.wav differ diff --git a/sound/direct_sound_samples/phonemes/40.aif b/sound/direct_sound_samples/phonemes/40.aif deleted file mode 100644 index 8a4d7653bac4..000000000000 Binary files a/sound/direct_sound_samples/phonemes/40.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/40.wav b/sound/direct_sound_samples/phonemes/40.wav new file mode 100644 index 000000000000..14944784a4d0 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/40.wav differ diff --git a/sound/direct_sound_samples/phonemes/41.aif b/sound/direct_sound_samples/phonemes/41.aif deleted file mode 100644 index db5bae244936..000000000000 Binary files a/sound/direct_sound_samples/phonemes/41.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/41.wav b/sound/direct_sound_samples/phonemes/41.wav new file mode 100644 index 000000000000..57e38fb3c828 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/41.wav differ diff --git a/sound/direct_sound_samples/phonemes/42.aif b/sound/direct_sound_samples/phonemes/42.aif deleted file mode 100644 index 6612dd54dbbd..000000000000 Binary files a/sound/direct_sound_samples/phonemes/42.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/42.wav b/sound/direct_sound_samples/phonemes/42.wav new file mode 100644 index 000000000000..a990969146c5 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/42.wav differ diff --git a/sound/direct_sound_samples/phonemes/43.aif b/sound/direct_sound_samples/phonemes/43.aif deleted file mode 100644 index 441eecfcda03..000000000000 Binary files a/sound/direct_sound_samples/phonemes/43.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/43.wav b/sound/direct_sound_samples/phonemes/43.wav new file mode 100644 index 000000000000..ab4a046743d3 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/43.wav differ diff --git a/sound/direct_sound_samples/phonemes/44.aif b/sound/direct_sound_samples/phonemes/44.aif deleted file mode 100644 index 95670cf0a2c0..000000000000 Binary files a/sound/direct_sound_samples/phonemes/44.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/44.wav b/sound/direct_sound_samples/phonemes/44.wav new file mode 100644 index 000000000000..efca4e3f9732 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/44.wav differ diff --git a/sound/direct_sound_samples/phonemes/45.aif b/sound/direct_sound_samples/phonemes/45.aif deleted file mode 100644 index 0fadcba8e8fc..000000000000 Binary files a/sound/direct_sound_samples/phonemes/45.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/45.wav b/sound/direct_sound_samples/phonemes/45.wav new file mode 100644 index 000000000000..0369d3c2a1fa Binary files /dev/null and b/sound/direct_sound_samples/phonemes/45.wav differ diff --git a/sound/direct_sound_samples/phonemes/46.aif b/sound/direct_sound_samples/phonemes/46.aif deleted file mode 100644 index 6017c55b4a14..000000000000 Binary files a/sound/direct_sound_samples/phonemes/46.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/46.wav b/sound/direct_sound_samples/phonemes/46.wav new file mode 100644 index 000000000000..0fa8eb1f88b0 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/46.wav differ diff --git a/sound/direct_sound_samples/phonemes/47.aif b/sound/direct_sound_samples/phonemes/47.aif deleted file mode 100644 index 2327b6d6575c..000000000000 Binary files a/sound/direct_sound_samples/phonemes/47.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/47.wav b/sound/direct_sound_samples/phonemes/47.wav new file mode 100644 index 000000000000..a55f03a1535c Binary files /dev/null and b/sound/direct_sound_samples/phonemes/47.wav differ diff --git a/sound/direct_sound_samples/phonemes/48.aif b/sound/direct_sound_samples/phonemes/48.aif deleted file mode 100644 index 19ceca0d08d5..000000000000 Binary files a/sound/direct_sound_samples/phonemes/48.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/48.wav b/sound/direct_sound_samples/phonemes/48.wav new file mode 100644 index 000000000000..f6c7dd4502b8 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/48.wav differ diff --git a/sound/direct_sound_samples/phonemes/49.aif b/sound/direct_sound_samples/phonemes/49.aif deleted file mode 100644 index 8438d301ab45..000000000000 Binary files a/sound/direct_sound_samples/phonemes/49.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/49.wav b/sound/direct_sound_samples/phonemes/49.wav new file mode 100644 index 000000000000..4168f2e137a8 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/49.wav differ diff --git a/sound/direct_sound_samples/phonemes/50.aif b/sound/direct_sound_samples/phonemes/50.aif deleted file mode 100644 index 74d4bcf4afb2..000000000000 Binary files a/sound/direct_sound_samples/phonemes/50.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/50.wav b/sound/direct_sound_samples/phonemes/50.wav new file mode 100644 index 000000000000..88ce07d9d766 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/50.wav differ diff --git a/sound/direct_sound_samples/phonemes/51.aif b/sound/direct_sound_samples/phonemes/51.aif deleted file mode 100644 index dfef8a82beb8..000000000000 Binary files a/sound/direct_sound_samples/phonemes/51.aif and /dev/null differ diff --git a/sound/direct_sound_samples/phonemes/51.wav b/sound/direct_sound_samples/phonemes/51.wav new file mode 100644 index 000000000000..bd1a514180a7 Binary files /dev/null and b/sound/direct_sound_samples/phonemes/51.wav differ diff --git a/sound/direct_sound_samples/phonemes/shared.wav b/sound/direct_sound_samples/phonemes/shared.wav new file mode 100644 index 000000000000..63207e6e229d Binary files /dev/null and b/sound/direct_sound_samples/phonemes/shared.wav differ diff --git a/sound/direct_sound_samples/register_noise.aif b/sound/direct_sound_samples/register_noise.aif deleted file mode 100644 index e56c5c13110a..000000000000 Binary files a/sound/direct_sound_samples/register_noise.aif and /dev/null differ diff --git a/sound/direct_sound_samples/register_noise.wav b/sound/direct_sound_samples/register_noise.wav new file mode 100644 index 000000000000..89d94e61cc34 Binary files /dev/null and b/sound/direct_sound_samples/register_noise.wav differ diff --git a/sound/direct_sound_samples/sc88pro_accordion.aif b/sound/direct_sound_samples/sc88pro_accordion.aif deleted file mode 100644 index 6d6c2e998b3f..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_accordion.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_accordion.wav b/sound/direct_sound_samples/sc88pro_accordion.wav new file mode 100644 index 000000000000..f19a98d27766 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_accordion.wav differ diff --git a/sound/direct_sound_samples/sc88pro_accordion_duplicate.aif b/sound/direct_sound_samples/sc88pro_accordion_duplicate.aif deleted file mode 100644 index 6d6c2e998b3f..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_accordion_duplicate.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav b/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav new file mode 100644 index 000000000000..f19a98d27766 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav differ diff --git a/sound/direct_sound_samples/sc88pro_bubbles.aif b/sound/direct_sound_samples/sc88pro_bubbles.aif deleted file mode 100644 index 89872bf55877..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_bubbles.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_bubbles.wav b/sound/direct_sound_samples/sc88pro_bubbles.wav new file mode 100644 index 000000000000..d6e61596d59e Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_bubbles.wav differ diff --git a/sound/direct_sound_samples/sc88pro_church_organ3_high.aif b/sound/direct_sound_samples/sc88pro_church_organ3_high.aif deleted file mode 100644 index 8663a62614e9..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_church_organ3_high.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_church_organ3_high.wav b/sound/direct_sound_samples/sc88pro_church_organ3_high.wav new file mode 100644 index 000000000000..0766a8503de2 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_church_organ3_high.wav differ diff --git a/sound/direct_sound_samples/sc88pro_church_organ3_low.aif b/sound/direct_sound_samples/sc88pro_church_organ3_low.aif deleted file mode 100644 index a2618653f6e5..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_church_organ3_low.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_church_organ3_low.wav b/sound/direct_sound_samples/sc88pro_church_organ3_low.wav new file mode 100644 index 000000000000..afc9c18907cf Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_church_organ3_low.wav differ diff --git a/sound/direct_sound_samples/sc88pro_fingered_bass.aif b/sound/direct_sound_samples/sc88pro_fingered_bass.aif deleted file mode 100644 index f244a9982da1..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_fingered_bass.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_fingered_bass.wav b/sound/direct_sound_samples/sc88pro_fingered_bass.wav new file mode 100644 index 000000000000..0e723b742b5e Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_fingered_bass.wav differ diff --git a/sound/direct_sound_samples/sc88pro_flute.aif b/sound/direct_sound_samples/sc88pro_flute.aif deleted file mode 100644 index 703f3adbd0ca..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_flute.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_flute.wav b/sound/direct_sound_samples/sc88pro_flute.wav new file mode 100644 index 000000000000..409ce0f744d1 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_flute.wav differ diff --git a/sound/direct_sound_samples/sc88pro_french_horn_60.aif b/sound/direct_sound_samples/sc88pro_french_horn_60.aif deleted file mode 100644 index 742c4385e914..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_french_horn_60.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_french_horn_60.wav b/sound/direct_sound_samples/sc88pro_french_horn_60.wav new file mode 100644 index 000000000000..105c186a2a0f Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_french_horn_60.wav differ diff --git a/sound/direct_sound_samples/sc88pro_french_horn_72.aif b/sound/direct_sound_samples/sc88pro_french_horn_72.aif deleted file mode 100644 index 004fda6a1801..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_french_horn_72.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_french_horn_72.wav b/sound/direct_sound_samples/sc88pro_french_horn_72.wav new file mode 100644 index 000000000000..380d7963073e Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_french_horn_72.wav differ diff --git a/sound/direct_sound_samples/sc88pro_fretless_bass.aif b/sound/direct_sound_samples/sc88pro_fretless_bass.aif deleted file mode 100644 index f3aa47d91367..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_fretless_bass.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_fretless_bass.wav b/sound/direct_sound_samples/sc88pro_fretless_bass.wav new file mode 100644 index 000000000000..f639d5ccf280 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_fretless_bass.wav differ diff --git a/sound/direct_sound_samples/sc88pro_glockenspiel.aif b/sound/direct_sound_samples/sc88pro_glockenspiel.aif deleted file mode 100644 index 199ead811211..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_glockenspiel.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_glockenspiel.wav b/sound/direct_sound_samples/sc88pro_glockenspiel.wav new file mode 100644 index 000000000000..4c9cbae14942 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_glockenspiel.wav differ diff --git a/sound/direct_sound_samples/sc88pro_harp.aif b/sound/direct_sound_samples/sc88pro_harp.aif deleted file mode 100644 index 083c45e3da74..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_harp.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_harp.wav b/sound/direct_sound_samples/sc88pro_harp.wav new file mode 100644 index 000000000000..bdb176720cc3 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_harp.wav differ diff --git a/sound/direct_sound_samples/sc88pro_jingle_bell.aif b/sound/direct_sound_samples/sc88pro_jingle_bell.aif deleted file mode 100644 index 0eaf313093bd..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_jingle_bell.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_jingle_bell.wav b/sound/direct_sound_samples/sc88pro_jingle_bell.wav new file mode 100644 index 000000000000..1eb6b1de1aef Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_jingle_bell.wav differ diff --git a/sound/direct_sound_samples/sc88pro_mute_high_conga.aif b/sound/direct_sound_samples/sc88pro_mute_high_conga.aif deleted file mode 100644 index 2e1bf9c64157..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_mute_high_conga.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_mute_high_conga.wav b/sound/direct_sound_samples/sc88pro_mute_high_conga.wav new file mode 100644 index 000000000000..c009d7265c38 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_mute_high_conga.wav differ diff --git a/sound/direct_sound_samples/sc88pro_nylon_str_guitar.aif b/sound/direct_sound_samples/sc88pro_nylon_str_guitar.aif deleted file mode 100644 index dea429a25459..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_nylon_str_guitar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav b/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav new file mode 100644 index 000000000000..7538f508ad97 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav differ diff --git a/sound/direct_sound_samples/sc88pro_open_low_conga.aif b/sound/direct_sound_samples/sc88pro_open_low_conga.aif deleted file mode 100644 index 8e1cb620a6ad..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_open_low_conga.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_open_low_conga.wav b/sound/direct_sound_samples/sc88pro_open_low_conga.wav new file mode 100644 index 000000000000..34a1e3f32a9b Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_open_low_conga.wav differ diff --git a/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.aif b/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.aif deleted file mode 100644 index 576e3e19e12c..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav b/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav new file mode 100644 index 000000000000..c3f89f9c7860 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav differ diff --git a/sound/direct_sound_samples/sc88pro_orchestra_snare.aif b/sound/direct_sound_samples/sc88pro_orchestra_snare.aif deleted file mode 100644 index 36b640758815..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_orchestra_snare.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_orchestra_snare.wav b/sound/direct_sound_samples/sc88pro_orchestra_snare.wav new file mode 100644 index 000000000000..96b10bb05fbb Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_orchestra_snare.wav differ diff --git a/sound/direct_sound_samples/sc88pro_organ2.aif b/sound/direct_sound_samples/sc88pro_organ2.aif deleted file mode 100644 index 6372bbc32471..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_organ2.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_organ2.wav b/sound/direct_sound_samples/sc88pro_organ2.wav new file mode 100644 index 000000000000..bf6f2ba52033 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_organ2.wav differ diff --git a/sound/direct_sound_samples/sc88pro_piano1_48.aif b/sound/direct_sound_samples/sc88pro_piano1_48.aif deleted file mode 100644 index c2b3757b096f..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_piano1_48.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_piano1_48.wav b/sound/direct_sound_samples/sc88pro_piano1_48.wav new file mode 100644 index 000000000000..c7bcfca13882 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_piano1_48.wav differ diff --git a/sound/direct_sound_samples/sc88pro_piano1_60.aif b/sound/direct_sound_samples/sc88pro_piano1_60.aif deleted file mode 100644 index 7de586c9bde3..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_piano1_60.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_piano1_60.wav b/sound/direct_sound_samples/sc88pro_piano1_60.wav new file mode 100644 index 000000000000..7199386c7b40 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_piano1_60.wav differ diff --git a/sound/direct_sound_samples/sc88pro_piano1_72.aif b/sound/direct_sound_samples/sc88pro_piano1_72.aif deleted file mode 100644 index 5236141ba692..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_piano1_72.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_piano1_72.wav b/sound/direct_sound_samples/sc88pro_piano1_72.wav new file mode 100644 index 000000000000..603006eb6ff4 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_piano1_72.wav differ diff --git a/sound/direct_sound_samples/sc88pro_piano1_84.aif b/sound/direct_sound_samples/sc88pro_piano1_84.aif deleted file mode 100644 index a7c4e94f8f29..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_piano1_84.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_piano1_84.wav b/sound/direct_sound_samples/sc88pro_piano1_84.wav new file mode 100644 index 000000000000..0d76370756a4 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_piano1_84.wav differ diff --git a/sound/direct_sound_samples/sc88pro_pizzicato_strings.aif b/sound/direct_sound_samples/sc88pro_pizzicato_strings.aif deleted file mode 100644 index 1c0a027f7a22..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_pizzicato_strings.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_pizzicato_strings.wav b/sound/direct_sound_samples/sc88pro_pizzicato_strings.wav new file mode 100644 index 000000000000..6bb6bc74a987 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_pizzicato_strings.wav differ diff --git a/sound/direct_sound_samples/sc88pro_rnd_kick.aif b/sound/direct_sound_samples/sc88pro_rnd_kick.aif deleted file mode 100644 index 9c504e3d0549..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_rnd_kick.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_rnd_kick.wav b/sound/direct_sound_samples/sc88pro_rnd_kick.wav new file mode 100644 index 000000000000..b05d88a812b4 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_rnd_kick.wav differ diff --git a/sound/direct_sound_samples/sc88pro_rnd_snare.aif b/sound/direct_sound_samples/sc88pro_rnd_snare.aif deleted file mode 100644 index 544b187d5eaa..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_rnd_snare.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_rnd_snare.wav b/sound/direct_sound_samples/sc88pro_rnd_snare.wav new file mode 100644 index 000000000000..c00ee759f79f Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_rnd_snare.wav differ diff --git a/sound/direct_sound_samples/sc88pro_slap_bass.aif b/sound/direct_sound_samples/sc88pro_slap_bass.aif deleted file mode 100644 index 9175b63c5b01..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_slap_bass.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_slap_bass.wav b/sound/direct_sound_samples/sc88pro_slap_bass.wav new file mode 100644 index 000000000000..41d747259e38 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_slap_bass.wav differ diff --git a/sound/direct_sound_samples/sc88pro_square_wave.aif b/sound/direct_sound_samples/sc88pro_square_wave.aif deleted file mode 100644 index 09e17f0ca797..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_square_wave.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_square_wave.wav b/sound/direct_sound_samples/sc88pro_square_wave.wav new file mode 100644 index 000000000000..020dae03a492 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_square_wave.wav differ diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_60.aif b/sound/direct_sound_samples/sc88pro_string_ensemble_60.aif deleted file mode 100644 index bfaa5c196c54..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_string_ensemble_60.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav b/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav new file mode 100644 index 000000000000..26e9db076c3c Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav differ diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_72.aif b/sound/direct_sound_samples/sc88pro_string_ensemble_72.aif deleted file mode 100644 index 3e76cacddc80..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_string_ensemble_72.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_72.wav b/sound/direct_sound_samples/sc88pro_string_ensemble_72.wav new file mode 100644 index 000000000000..1699f831caed Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_string_ensemble_72.wav differ diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_84.aif b/sound/direct_sound_samples/sc88pro_string_ensemble_84.aif deleted file mode 100644 index 2647c78ecbe6..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_string_ensemble_84.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_84.wav b/sound/direct_sound_samples/sc88pro_string_ensemble_84.wav new file mode 100644 index 000000000000..5616d094a0bf Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_string_ensemble_84.wav differ diff --git a/sound/direct_sound_samples/sc88pro_synth_bass.aif b/sound/direct_sound_samples/sc88pro_synth_bass.aif deleted file mode 100644 index f39931a7e413..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_synth_bass.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_synth_bass.wav b/sound/direct_sound_samples/sc88pro_synth_bass.wav new file mode 100644 index 000000000000..5aa61ab8caa8 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_synth_bass.wav differ diff --git a/sound/direct_sound_samples/sc88pro_taiko.aif b/sound/direct_sound_samples/sc88pro_taiko.aif deleted file mode 100644 index a8046cee8c58..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_taiko.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_taiko.wav b/sound/direct_sound_samples/sc88pro_taiko.wav new file mode 100644 index 000000000000..af01253368bd Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_taiko.wav differ diff --git a/sound/direct_sound_samples/sc88pro_tambourine.aif b/sound/direct_sound_samples/sc88pro_tambourine.aif deleted file mode 100644 index 39ec57d29b9b..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_tambourine.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_tambourine.wav b/sound/direct_sound_samples/sc88pro_tambourine.wav new file mode 100644 index 000000000000..016b2cc209dc Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_tambourine.wav differ diff --git a/sound/direct_sound_samples/sc88pro_timpani.aif b/sound/direct_sound_samples/sc88pro_timpani.aif deleted file mode 100644 index dfdfd702e082..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_timpani.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_timpani.wav b/sound/direct_sound_samples/sc88pro_timpani.wav new file mode 100644 index 000000000000..bed5f113a13e Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_timpani.wav differ diff --git a/sound/direct_sound_samples/sc88pro_timpani_with_snare.aif b/sound/direct_sound_samples/sc88pro_timpani_with_snare.aif deleted file mode 100644 index 7270872d643f..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_timpani_with_snare.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav b/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav new file mode 100644 index 000000000000..8ab1862d021c Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav differ diff --git a/sound/direct_sound_samples/sc88pro_tr909_hand_clap.aif b/sound/direct_sound_samples/sc88pro_tr909_hand_clap.aif deleted file mode 100644 index b11787ffc8f9..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_tr909_hand_clap.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav b/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav new file mode 100644 index 000000000000..2e07040cb409 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav differ diff --git a/sound/direct_sound_samples/sc88pro_trumpet_60.aif b/sound/direct_sound_samples/sc88pro_trumpet_60.aif deleted file mode 100644 index e56df7f605cc..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_trumpet_60.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_trumpet_60.wav b/sound/direct_sound_samples/sc88pro_trumpet_60.wav new file mode 100644 index 000000000000..0c857d971d43 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_trumpet_60.wav differ diff --git a/sound/direct_sound_samples/sc88pro_trumpet_72.aif b/sound/direct_sound_samples/sc88pro_trumpet_72.aif deleted file mode 100644 index 8c68a83b317c..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_trumpet_72.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_trumpet_72.wav b/sound/direct_sound_samples/sc88pro_trumpet_72.wav new file mode 100644 index 000000000000..93a62dc0efaf Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_trumpet_72.wav differ diff --git a/sound/direct_sound_samples/sc88pro_trumpet_84.aif b/sound/direct_sound_samples/sc88pro_trumpet_84.aif deleted file mode 100644 index a03bafc97439..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_trumpet_84.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_trumpet_84.wav b/sound/direct_sound_samples/sc88pro_trumpet_84.wav new file mode 100644 index 000000000000..12549376b579 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_trumpet_84.wav differ diff --git a/sound/direct_sound_samples/sc88pro_tuba_39.aif b/sound/direct_sound_samples/sc88pro_tuba_39.aif deleted file mode 100644 index d4077b48164d..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_tuba_39.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_tuba_39.wav b/sound/direct_sound_samples/sc88pro_tuba_39.wav new file mode 100644 index 000000000000..c3b78eea55d4 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_tuba_39.wav differ diff --git a/sound/direct_sound_samples/sc88pro_tuba_51.aif b/sound/direct_sound_samples/sc88pro_tuba_51.aif deleted file mode 100644 index 2ad86876be93..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_tuba_51.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_tuba_51.wav b/sound/direct_sound_samples/sc88pro_tuba_51.wav new file mode 100644 index 000000000000..fed8c72f435e Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_tuba_51.wav differ diff --git a/sound/direct_sound_samples/sc88pro_tubular_bell.aif b/sound/direct_sound_samples/sc88pro_tubular_bell.aif deleted file mode 100644 index 9d00ecae6bc6..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_tubular_bell.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_tubular_bell.wav b/sound/direct_sound_samples/sc88pro_tubular_bell.wav new file mode 100644 index 000000000000..8c892236b96b Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_tubular_bell.wav differ diff --git a/sound/direct_sound_samples/sc88pro_wind.aif b/sound/direct_sound_samples/sc88pro_wind.aif deleted file mode 100644 index ece919ea5137..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_wind.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_wind.wav b/sound/direct_sound_samples/sc88pro_wind.wav new file mode 100644 index 000000000000..3856a4af1f46 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_wind.wav differ diff --git a/sound/direct_sound_samples/sc88pro_xylophone.aif b/sound/direct_sound_samples/sc88pro_xylophone.aif deleted file mode 100644 index 1bd43ca92e39..000000000000 Binary files a/sound/direct_sound_samples/sc88pro_xylophone.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sc88pro_xylophone.wav b/sound/direct_sound_samples/sc88pro_xylophone.wav new file mode 100644 index 000000000000..a08296baa150 Binary files /dev/null and b/sound/direct_sound_samples/sc88pro_xylophone.wav differ diff --git a/sound/direct_sound_samples/sd90_ambient_tom.aif b/sound/direct_sound_samples/sd90_ambient_tom.aif deleted file mode 100644 index 08f1acf38868..000000000000 Binary files a/sound/direct_sound_samples/sd90_ambient_tom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_ambient_tom.wav b/sound/direct_sound_samples/sd90_ambient_tom.wav new file mode 100644 index 000000000000..6f390959fc05 Binary files /dev/null and b/sound/direct_sound_samples/sd90_ambient_tom.wav differ diff --git a/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.aif b/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.aif deleted file mode 100644 index 86ea0fa7609c..000000000000 Binary files a/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav b/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav new file mode 100644 index 000000000000..3c96f1cbca5a Binary files /dev/null and b/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav differ diff --git a/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.aif b/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.aif deleted file mode 100644 index fced0371228a..000000000000 Binary files a/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav b/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav new file mode 100644 index 000000000000..39e25a89ce0f Binary files /dev/null and b/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav differ diff --git a/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.aif b/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.aif deleted file mode 100644 index b0f0e82a1a16..000000000000 Binary files a/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav b/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav new file mode 100644 index 000000000000..097d91f734fd Binary files /dev/null and b/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav differ diff --git a/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.aif b/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.aif deleted file mode 100644 index c4f7082ed784..000000000000 Binary files a/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav b/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav new file mode 100644 index 000000000000..d281d77572ae Binary files /dev/null and b/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav differ diff --git a/sound/direct_sound_samples/sd90_classical_oboe.aif b/sound/direct_sound_samples/sd90_classical_oboe.aif deleted file mode 100644 index 41b6fec12f48..000000000000 Binary files a/sound/direct_sound_samples/sd90_classical_oboe.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_classical_oboe.wav b/sound/direct_sound_samples/sd90_classical_oboe.wav new file mode 100644 index 000000000000..2b9e96afc404 Binary files /dev/null and b/sound/direct_sound_samples/sd90_classical_oboe.wav differ diff --git a/sound/direct_sound_samples/sd90_classical_overdrive_guitar.aif b/sound/direct_sound_samples/sd90_classical_overdrive_guitar.aif deleted file mode 100644 index d37c79c05698..000000000000 Binary files a/sound/direct_sound_samples/sd90_classical_overdrive_guitar.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav b/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav new file mode 100644 index 000000000000..7380be1e1b36 Binary files /dev/null and b/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav differ diff --git a/sound/direct_sound_samples/sd90_classical_shakuhachi.aif b/sound/direct_sound_samples/sd90_classical_shakuhachi.aif deleted file mode 100644 index e04a34f6429a..000000000000 Binary files a/sound/direct_sound_samples/sd90_classical_shakuhachi.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_classical_shakuhachi.wav b/sound/direct_sound_samples/sd90_classical_shakuhachi.wav new file mode 100644 index 000000000000..587cee2cb7e3 Binary files /dev/null and b/sound/direct_sound_samples/sd90_classical_shakuhachi.wav differ diff --git a/sound/direct_sound_samples/sd90_classical_whistle.aif b/sound/direct_sound_samples/sd90_classical_whistle.aif deleted file mode 100644 index b4be7482f012..000000000000 Binary files a/sound/direct_sound_samples/sd90_classical_whistle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_classical_whistle.wav b/sound/direct_sound_samples/sd90_classical_whistle.wav new file mode 100644 index 000000000000..61a58445bf10 Binary files /dev/null and b/sound/direct_sound_samples/sd90_classical_whistle.wav differ diff --git a/sound/direct_sound_samples/sd90_cowbell.aif b/sound/direct_sound_samples/sd90_cowbell.aif deleted file mode 100644 index 43515f542778..000000000000 Binary files a/sound/direct_sound_samples/sd90_cowbell.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_cowbell.wav b/sound/direct_sound_samples/sd90_cowbell.wav new file mode 100644 index 000000000000..9c35bf654104 Binary files /dev/null and b/sound/direct_sound_samples/sd90_cowbell.wav differ diff --git a/sound/direct_sound_samples/sd90_enhanced_delay_shaku.aif b/sound/direct_sound_samples/sd90_enhanced_delay_shaku.aif deleted file mode 100644 index c64ef6b03756..000000000000 Binary files a/sound/direct_sound_samples/sd90_enhanced_delay_shaku.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_enhanced_delay_shaku.wav b/sound/direct_sound_samples/sd90_enhanced_delay_shaku.wav new file mode 100644 index 000000000000..d87fc68b2be1 Binary files /dev/null and b/sound/direct_sound_samples/sd90_enhanced_delay_shaku.wav differ diff --git a/sound/direct_sound_samples/sd90_open_triangle.aif b/sound/direct_sound_samples/sd90_open_triangle.aif deleted file mode 100644 index 0d0b3e3ca295..000000000000 Binary files a/sound/direct_sound_samples/sd90_open_triangle.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_open_triangle.wav b/sound/direct_sound_samples/sd90_open_triangle.wav new file mode 100644 index 000000000000..92df2b30741f Binary files /dev/null and b/sound/direct_sound_samples/sd90_open_triangle.wav differ diff --git a/sound/direct_sound_samples/sd90_solo_snare.aif b/sound/direct_sound_samples/sd90_solo_snare.aif deleted file mode 100644 index 93b679358405..000000000000 Binary files a/sound/direct_sound_samples/sd90_solo_snare.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_solo_snare.wav b/sound/direct_sound_samples/sd90_solo_snare.wav new file mode 100644 index 000000000000..ad5d87284451 Binary files /dev/null and b/sound/direct_sound_samples/sd90_solo_snare.wav differ diff --git a/sound/direct_sound_samples/sd90_special_scream_drive.aif b/sound/direct_sound_samples/sd90_special_scream_drive.aif deleted file mode 100644 index 8b7a7da40554..000000000000 Binary files a/sound/direct_sound_samples/sd90_special_scream_drive.aif and /dev/null differ diff --git a/sound/direct_sound_samples/sd90_special_scream_drive.wav b/sound/direct_sound_samples/sd90_special_scream_drive.wav new file mode 100644 index 000000000000..8b4b563ac75d Binary files /dev/null and b/sound/direct_sound_samples/sd90_special_scream_drive.wav differ diff --git a/sound/direct_sound_samples/steinway_b_piano.aif b/sound/direct_sound_samples/steinway_b_piano.aif deleted file mode 100644 index e98c64db4d1a..000000000000 Binary files a/sound/direct_sound_samples/steinway_b_piano.aif and /dev/null differ diff --git a/sound/direct_sound_samples/steinway_b_piano.wav b/sound/direct_sound_samples/steinway_b_piano.wav new file mode 100644 index 000000000000..5a4d94b0a897 Binary files /dev/null and b/sound/direct_sound_samples/steinway_b_piano.wav differ diff --git a/sound/direct_sound_samples/trinity_30303_mega_bass.aif b/sound/direct_sound_samples/trinity_30303_mega_bass.aif deleted file mode 100644 index 09fe6f12ead0..000000000000 Binary files a/sound/direct_sound_samples/trinity_30303_mega_bass.aif and /dev/null differ diff --git a/sound/direct_sound_samples/trinity_30303_mega_bass.wav b/sound/direct_sound_samples/trinity_30303_mega_bass.wav new file mode 100644 index 000000000000..6ad677b7d849 Binary files /dev/null and b/sound/direct_sound_samples/trinity_30303_mega_bass.wav differ diff --git a/sound/direct_sound_samples/trinity_big_boned.aif b/sound/direct_sound_samples/trinity_big_boned.aif deleted file mode 100644 index 455ced13e987..000000000000 Binary files a/sound/direct_sound_samples/trinity_big_boned.aif and /dev/null differ diff --git a/sound/direct_sound_samples/trinity_big_boned.wav b/sound/direct_sound_samples/trinity_big_boned.wav new file mode 100644 index 000000000000..7f42b9fcd985 Binary files /dev/null and b/sound/direct_sound_samples/trinity_big_boned.wav differ diff --git a/sound/direct_sound_samples/trinity_cymbal_crash.aif b/sound/direct_sound_samples/trinity_cymbal_crash.aif deleted file mode 100644 index 4aec6882fff7..000000000000 Binary files a/sound/direct_sound_samples/trinity_cymbal_crash.aif and /dev/null differ diff --git a/sound/direct_sound_samples/trinity_cymbal_crash.wav b/sound/direct_sound_samples/trinity_cymbal_crash.wav new file mode 100644 index 000000000000..c3e52d3e2901 Binary files /dev/null and b/sound/direct_sound_samples/trinity_cymbal_crash.wav differ diff --git a/sound/direct_sound_samples/unknown_01.aif b/sound/direct_sound_samples/unknown_01.aif deleted file mode 100644 index ee6ff45b7f6a..000000000000 Binary files a/sound/direct_sound_samples/unknown_01.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_01.wav b/sound/direct_sound_samples/unknown_01.wav new file mode 100644 index 000000000000..75d05e7f4d1d Binary files /dev/null and b/sound/direct_sound_samples/unknown_01.wav differ diff --git a/sound/direct_sound_samples/unknown_02.aif b/sound/direct_sound_samples/unknown_02.aif deleted file mode 100644 index 2e09d08223ef..000000000000 Binary files a/sound/direct_sound_samples/unknown_02.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_02.wav b/sound/direct_sound_samples/unknown_02.wav new file mode 100644 index 000000000000..1a25b1fe18a9 Binary files /dev/null and b/sound/direct_sound_samples/unknown_02.wav differ diff --git a/sound/direct_sound_samples/unknown_03.aif b/sound/direct_sound_samples/unknown_03.aif deleted file mode 100644 index 49f24936fa62..000000000000 Binary files a/sound/direct_sound_samples/unknown_03.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_03.wav b/sound/direct_sound_samples/unknown_03.wav new file mode 100644 index 000000000000..1a64c4b25de0 Binary files /dev/null and b/sound/direct_sound_samples/unknown_03.wav differ diff --git a/sound/direct_sound_samples/unknown_04.aif b/sound/direct_sound_samples/unknown_04.aif deleted file mode 100644 index 5c55d91ed889..000000000000 Binary files a/sound/direct_sound_samples/unknown_04.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_04.wav b/sound/direct_sound_samples/unknown_04.wav new file mode 100644 index 000000000000..a278be2758cb Binary files /dev/null and b/sound/direct_sound_samples/unknown_04.wav differ diff --git a/sound/direct_sound_samples/unknown_05.aif b/sound/direct_sound_samples/unknown_05.aif deleted file mode 100644 index 515818a4daec..000000000000 Binary files a/sound/direct_sound_samples/unknown_05.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_05.wav b/sound/direct_sound_samples/unknown_05.wav new file mode 100644 index 000000000000..dd5eee1d2c37 Binary files /dev/null and b/sound/direct_sound_samples/unknown_05.wav differ diff --git a/sound/direct_sound_samples/unknown_06.aif b/sound/direct_sound_samples/unknown_06.aif deleted file mode 100644 index 102830efa598..000000000000 Binary files a/sound/direct_sound_samples/unknown_06.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_06.wav b/sound/direct_sound_samples/unknown_06.wav new file mode 100644 index 000000000000..396eb3e72148 Binary files /dev/null and b/sound/direct_sound_samples/unknown_06.wav differ diff --git a/sound/direct_sound_samples/unknown_07.aif b/sound/direct_sound_samples/unknown_07.aif deleted file mode 100644 index 556be0238295..000000000000 Binary files a/sound/direct_sound_samples/unknown_07.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_07.wav b/sound/direct_sound_samples/unknown_07.wav new file mode 100644 index 000000000000..b1e0a0d08f55 Binary files /dev/null and b/sound/direct_sound_samples/unknown_07.wav differ diff --git a/sound/direct_sound_samples/unknown_08.aif b/sound/direct_sound_samples/unknown_08.aif deleted file mode 100644 index dd80b1185a90..000000000000 Binary files a/sound/direct_sound_samples/unknown_08.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_08.wav b/sound/direct_sound_samples/unknown_08.wav new file mode 100644 index 000000000000..420ee23ce372 Binary files /dev/null and b/sound/direct_sound_samples/unknown_08.wav differ diff --git a/sound/direct_sound_samples/unknown_09.aif b/sound/direct_sound_samples/unknown_09.aif deleted file mode 100644 index ebd46eeaa205..000000000000 Binary files a/sound/direct_sound_samples/unknown_09.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_09.wav b/sound/direct_sound_samples/unknown_09.wav new file mode 100644 index 000000000000..fd1ee4dd7802 Binary files /dev/null and b/sound/direct_sound_samples/unknown_09.wav differ diff --git a/sound/direct_sound_samples/unknown_10.aif b/sound/direct_sound_samples/unknown_10.aif deleted file mode 100644 index 6a11945c55b0..000000000000 Binary files a/sound/direct_sound_samples/unknown_10.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_10.wav b/sound/direct_sound_samples/unknown_10.wav new file mode 100644 index 000000000000..63cf6043cb22 Binary files /dev/null and b/sound/direct_sound_samples/unknown_10.wav differ diff --git a/sound/direct_sound_samples/unknown_11.aif b/sound/direct_sound_samples/unknown_11.aif deleted file mode 100644 index a0fb49f89b3a..000000000000 Binary files a/sound/direct_sound_samples/unknown_11.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_11.wav b/sound/direct_sound_samples/unknown_11.wav new file mode 100644 index 000000000000..f2e648045bd6 Binary files /dev/null and b/sound/direct_sound_samples/unknown_11.wav differ diff --git a/sound/direct_sound_samples/unknown_12.aif b/sound/direct_sound_samples/unknown_12.aif deleted file mode 100644 index 9521d0b6e861..000000000000 Binary files a/sound/direct_sound_samples/unknown_12.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_12.wav b/sound/direct_sound_samples/unknown_12.wav new file mode 100644 index 000000000000..146db2c348a4 Binary files /dev/null and b/sound/direct_sound_samples/unknown_12.wav differ diff --git a/sound/direct_sound_samples/unknown_13.aif b/sound/direct_sound_samples/unknown_13.aif deleted file mode 100644 index 2519572e2c95..000000000000 Binary files a/sound/direct_sound_samples/unknown_13.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_13.wav b/sound/direct_sound_samples/unknown_13.wav new file mode 100644 index 000000000000..1618ea28b51c Binary files /dev/null and b/sound/direct_sound_samples/unknown_13.wav differ diff --git a/sound/direct_sound_samples/unknown_14.aif b/sound/direct_sound_samples/unknown_14.aif deleted file mode 100644 index d411e6612884..000000000000 Binary files a/sound/direct_sound_samples/unknown_14.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_14.wav b/sound/direct_sound_samples/unknown_14.wav new file mode 100644 index 000000000000..4c509795adb2 Binary files /dev/null and b/sound/direct_sound_samples/unknown_14.wav differ diff --git a/sound/direct_sound_samples/unknown_15.aif b/sound/direct_sound_samples/unknown_15.aif deleted file mode 100644 index 3bc1aa839b1d..000000000000 Binary files a/sound/direct_sound_samples/unknown_15.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_15.wav b/sound/direct_sound_samples/unknown_15.wav new file mode 100644 index 000000000000..080c4ad841da Binary files /dev/null and b/sound/direct_sound_samples/unknown_15.wav differ diff --git a/sound/direct_sound_samples/unknown_16.aif b/sound/direct_sound_samples/unknown_16.aif deleted file mode 100644 index 3bacf367651d..000000000000 Binary files a/sound/direct_sound_samples/unknown_16.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_16.wav b/sound/direct_sound_samples/unknown_16.wav new file mode 100644 index 000000000000..72cf7dcc952b Binary files /dev/null and b/sound/direct_sound_samples/unknown_16.wav differ diff --git a/sound/direct_sound_samples/unknown_17.aif b/sound/direct_sound_samples/unknown_17.aif deleted file mode 100644 index 5ddaa153da35..000000000000 Binary files a/sound/direct_sound_samples/unknown_17.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_17.wav b/sound/direct_sound_samples/unknown_17.wav new file mode 100644 index 000000000000..5a277f7d44bf Binary files /dev/null and b/sound/direct_sound_samples/unknown_17.wav differ diff --git a/sound/direct_sound_samples/unknown_18.aif b/sound/direct_sound_samples/unknown_18.aif deleted file mode 100644 index e1715fd03022..000000000000 Binary files a/sound/direct_sound_samples/unknown_18.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_18.wav b/sound/direct_sound_samples/unknown_18.wav new file mode 100644 index 000000000000..9ee002792194 Binary files /dev/null and b/sound/direct_sound_samples/unknown_18.wav differ diff --git a/sound/direct_sound_samples/unknown_bell.aif b/sound/direct_sound_samples/unknown_bell.aif deleted file mode 100644 index 7de79e74786e..000000000000 Binary files a/sound/direct_sound_samples/unknown_bell.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_bell.wav b/sound/direct_sound_samples/unknown_bell.wav new file mode 100644 index 000000000000..4dc82a170bb8 Binary files /dev/null and b/sound/direct_sound_samples/unknown_bell.wav differ diff --git a/sound/direct_sound_samples/unknown_close_hihat.aif b/sound/direct_sound_samples/unknown_close_hihat.aif deleted file mode 100644 index 8747aef28de4..000000000000 Binary files a/sound/direct_sound_samples/unknown_close_hihat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_close_hihat.wav b/sound/direct_sound_samples/unknown_close_hihat.wav new file mode 100644 index 000000000000..86774ce3ce5d Binary files /dev/null and b/sound/direct_sound_samples/unknown_close_hihat.wav differ diff --git a/sound/direct_sound_samples/unknown_female_voice.aif b/sound/direct_sound_samples/unknown_female_voice.aif deleted file mode 100644 index b310823a79ec..000000000000 Binary files a/sound/direct_sound_samples/unknown_female_voice.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_female_voice.wav b/sound/direct_sound_samples/unknown_female_voice.wav new file mode 100644 index 000000000000..44e73b3395e5 Binary files /dev/null and b/sound/direct_sound_samples/unknown_female_voice.wav differ diff --git a/sound/direct_sound_samples/unknown_koto_high.aif b/sound/direct_sound_samples/unknown_koto_high.aif deleted file mode 100644 index 9c531de11329..000000000000 Binary files a/sound/direct_sound_samples/unknown_koto_high.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_koto_high.wav b/sound/direct_sound_samples/unknown_koto_high.wav new file mode 100644 index 000000000000..b9591a098f6d Binary files /dev/null and b/sound/direct_sound_samples/unknown_koto_high.wav differ diff --git a/sound/direct_sound_samples/unknown_koto_low.aif b/sound/direct_sound_samples/unknown_koto_low.aif deleted file mode 100644 index 67c40f1966d5..000000000000 Binary files a/sound/direct_sound_samples/unknown_koto_low.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_koto_low.wav b/sound/direct_sound_samples/unknown_koto_low.wav new file mode 100644 index 000000000000..a1736cafc7b1 Binary files /dev/null and b/sound/direct_sound_samples/unknown_koto_low.wav differ diff --git a/sound/direct_sound_samples/unknown_open_hihat.aif b/sound/direct_sound_samples/unknown_open_hihat.aif deleted file mode 100644 index 5ad9410d001a..000000000000 Binary files a/sound/direct_sound_samples/unknown_open_hihat.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_open_hihat.wav b/sound/direct_sound_samples/unknown_open_hihat.wav new file mode 100644 index 000000000000..3a9ee824c154 Binary files /dev/null and b/sound/direct_sound_samples/unknown_open_hihat.wav differ diff --git a/sound/direct_sound_samples/unknown_snare.aif b/sound/direct_sound_samples/unknown_snare.aif deleted file mode 100644 index e7184ec6f635..000000000000 Binary files a/sound/direct_sound_samples/unknown_snare.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_snare.wav b/sound/direct_sound_samples/unknown_snare.wav new file mode 100644 index 000000000000..03295e476333 Binary files /dev/null and b/sound/direct_sound_samples/unknown_snare.wav differ diff --git a/sound/direct_sound_samples/unknown_synth_snare.aif b/sound/direct_sound_samples/unknown_synth_snare.aif deleted file mode 100644 index b3122457de36..000000000000 Binary files a/sound/direct_sound_samples/unknown_synth_snare.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unknown_synth_snare.wav b/sound/direct_sound_samples/unknown_synth_snare.wav new file mode 100644 index 000000000000..774194423df0 Binary files /dev/null and b/sound/direct_sound_samples/unknown_synth_snare.wav differ diff --git a/sound/direct_sound_samples/unused_guitar_separates_power_chord.aif b/sound/direct_sound_samples/unused_guitar_separates_power_chord.aif deleted file mode 100644 index 7647a74a7073..000000000000 Binary files a/sound/direct_sound_samples/unused_guitar_separates_power_chord.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav b/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav new file mode 100644 index 000000000000..c75373087bac Binary files /dev/null and b/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav differ diff --git a/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.aif b/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.aif deleted file mode 100644 index 2e67f1d7376e..000000000000 Binary files a/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.wav b/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.wav new file mode 100644 index 000000000000..49d67a30f3b5 Binary files /dev/null and b/sound/direct_sound_samples/unused_heart_of_asia_indian_drum.wav differ diff --git a/sound/direct_sound_samples/unused_sc55_tom.aif b/sound/direct_sound_samples/unused_sc55_tom.aif deleted file mode 100644 index 04f990b13cd4..000000000000 Binary files a/sound/direct_sound_samples/unused_sc55_tom.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unused_sc55_tom.wav b/sound/direct_sound_samples/unused_sc55_tom.wav new file mode 100644 index 000000000000..b4c225827fd1 Binary files /dev/null and b/sound/direct_sound_samples/unused_sc55_tom.wav differ diff --git a/sound/direct_sound_samples/unused_sc88pro_unison_slap.aif b/sound/direct_sound_samples/unused_sc88pro_unison_slap.aif deleted file mode 100644 index 46d6e7d1311b..000000000000 Binary files a/sound/direct_sound_samples/unused_sc88pro_unison_slap.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav b/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav new file mode 100644 index 000000000000..690cbc9183ba Binary files /dev/null and b/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav differ diff --git a/sound/direct_sound_samples/unused_sd90_oboe.aif b/sound/direct_sound_samples/unused_sd90_oboe.aif deleted file mode 100644 index 2a0ea2a26618..000000000000 Binary files a/sound/direct_sound_samples/unused_sd90_oboe.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unused_sd90_oboe.wav b/sound/direct_sound_samples/unused_sd90_oboe.wav new file mode 100644 index 000000000000..e7609ed53dd2 Binary files /dev/null and b/sound/direct_sound_samples/unused_sd90_oboe.wav differ diff --git a/sound/direct_sound_samples/unused_unknown_male_voice.aif b/sound/direct_sound_samples/unused_unknown_male_voice.aif deleted file mode 100644 index a2382d700fbf..000000000000 Binary files a/sound/direct_sound_samples/unused_unknown_male_voice.aif and /dev/null differ diff --git a/sound/direct_sound_samples/unused_unknown_male_voice.wav b/sound/direct_sound_samples/unused_unknown_male_voice.wav new file mode 100644 index 000000000000..7612c9b61d47 Binary files /dev/null and b/sound/direct_sound_samples/unused_unknown_male_voice.wav differ diff --git a/sound/keysplit_tables.inc b/sound/keysplit_tables.inc index 81301ef62b66..a3145e64d23a 100644 --- a/sound/keysplit_tables.inc +++ b/sound/keysplit_tables.inc @@ -1,6 +1,6 @@ @ Due to the way mks4agb (Nintendo's tool) works, key split table labels can @ appear before the actual start of the key split table data. If you look at -@ the first keysplit table (KeySplitTable1), you'll notice it's offset backwards +@ the first keysplit table (keysplit_piano), you'll notice it's offset backwards @ by 36 bytes. This is because the key split tables don't map instruments @ for the entire note range (0-127)--they only map subsets, and the upper @ and lower ranges aren't necessarily 0 or 127. @@ -10,384 +10,26 @@ @ begins. Therefore, the notes naturally map to the key split table without @ any extra offset calculation. -.set KeySplitTable1, . - 36 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 0 @ 42 - .byte 0 @ 43 - .byte 0 @ 44 - .byte 0 @ 45 - .byte 0 @ 46 - .byte 0 @ 47 - .byte 0 @ 48 - .byte 0 @ 49 - .byte 0 @ 50 - .byte 0 @ 51 - .byte 0 @ 52 - .byte 0 @ 53 - .byte 0 @ 54 - .byte 1 @ 55 - .byte 1 @ 56 - .byte 1 @ 57 - .byte 1 @ 58 - .byte 1 @ 59 - .byte 1 @ 60 - .byte 1 @ 61 - .byte 1 @ 62 - .byte 1 @ 63 - .byte 1 @ 64 - .byte 1 @ 65 - .byte 1 @ 66 - .byte 1 @ 67 - .byte 1 @ 68 - .byte 1 @ 69 - .byte 2 @ 70 - .byte 2 @ 71 - .byte 2 @ 72 - .byte 2 @ 73 - .byte 2 @ 74 - .byte 2 @ 75 - .byte 2 @ 76 - .byte 2 @ 77 - .byte 2 @ 78 - .byte 2 @ 79 - .byte 2 @ 80 - .byte 2 @ 81 - .byte 2 @ 82 - .byte 2 @ 83 - .byte 2 @ 84 - .byte 2 @ 85 - .byte 2 @ 86 - .byte 2 @ 87 - .byte 2 @ 88 - .byte 2 @ 89 - .byte 2 @ 90 - .byte 3 @ 91 - .byte 3 @ 92 - .byte 3 @ 93 - .byte 3 @ 94 - .byte 3 @ 95 - .byte 3 @ 96 - .byte 3 @ 97 - .byte 3 @ 98 - .byte 3 @ 99 - .byte 3 @ 100 - .byte 3 @ 101 - .byte 3 @ 102 - .byte 3 @ 103 - .byte 3 @ 104 - .byte 3 @ 105 - .byte 3 @ 106 - .byte 3 @ 107 +keysplit piano, 36 + split 0, 55 + split 1, 70 + split 2, 91 + split 3, 108 -.set KeySplitTable2, . - 36 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 0 @ 42 - .byte 0 @ 43 - .byte 0 @ 44 - .byte 0 @ 45 - .byte 0 @ 46 - .byte 0 @ 47 - .byte 0 @ 48 - .byte 0 @ 49 - .byte 0 @ 50 - .byte 0 @ 51 - .byte 0 @ 52 - .byte 0 @ 53 - .byte 0 @ 54 - .byte 0 @ 55 - .byte 0 @ 56 - .byte 0 @ 57 - .byte 0 @ 58 - .byte 0 @ 59 - .byte 0 @ 60 - .byte 0 @ 61 - .byte 0 @ 62 - .byte 0 @ 63 - .byte 0 @ 64 - .byte 0 @ 65 - .byte 0 @ 66 - .byte 0 @ 67 - .byte 0 @ 68 - .byte 1 @ 69 - .byte 1 @ 70 - .byte 1 @ 71 - .byte 1 @ 72 - .byte 1 @ 73 - .byte 1 @ 74 - .byte 1 @ 75 - .byte 1 @ 76 - .byte 1 @ 77 - .byte 1 @ 78 - .byte 1 @ 79 - .byte 1 @ 80 - .byte 2 @ 81 - .byte 2 @ 82 - .byte 2 @ 83 - .byte 2 @ 84 - .byte 2 @ 85 - .byte 2 @ 86 - .byte 2 @ 87 - .byte 2 @ 88 - .byte 2 @ 89 - .byte 2 @ 90 - .byte 2 @ 91 - .byte 2 @ 92 - .byte 2 @ 93 - .byte 2 @ 94 - .byte 2 @ 95 - .byte 2 @ 96 - .byte 2 @ 97 - .byte 2 @ 98 - .byte 2 @ 99 - .byte 2 @ 100 - .byte 2 @ 101 - .byte 2 @ 102 - .byte 2 @ 103 - .byte 2 @ 104 - .byte 2 @ 105 - .byte 2 @ 106 - .byte 2 @ 107 +keysplit strings, 36 + split 0, 69 + split 1, 81 + split 2, 108 -.set KeySplitTable3, . - 36 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 0 @ 42 - .byte 0 @ 43 - .byte 0 @ 44 - .byte 0 @ 45 - .byte 0 @ 46 - .byte 0 @ 47 - .byte 0 @ 48 - .byte 0 @ 49 - .byte 0 @ 50 - .byte 0 @ 51 - .byte 0 @ 52 - .byte 0 @ 53 - .byte 0 @ 54 - .byte 0 @ 55 - .byte 0 @ 56 - .byte 0 @ 57 - .byte 0 @ 58 - .byte 0 @ 59 - .byte 0 @ 60 - .byte 0 @ 61 - .byte 0 @ 62 - .byte 0 @ 63 - .byte 0 @ 64 - .byte 0 @ 65 - .byte 1 @ 66 - .byte 1 @ 67 - .byte 1 @ 68 - .byte 1 @ 69 - .byte 1 @ 70 - .byte 1 @ 71 - .byte 1 @ 72 - .byte 1 @ 73 - .byte 1 @ 74 - .byte 1 @ 75 - .byte 1 @ 76 - .byte 1 @ 77 - .byte 1 @ 78 - .byte 1 @ 79 - .byte 1 @ 80 - .byte 1 @ 81 - .byte 1 @ 82 - .byte 1 @ 83 - .byte 2 @ 84 - .byte 2 @ 85 - .byte 2 @ 86 - .byte 2 @ 87 - .byte 2 @ 88 - .byte 2 @ 89 - .byte 2 @ 90 - .byte 2 @ 91 - .byte 2 @ 92 - .byte 2 @ 93 - .byte 2 @ 94 - .byte 2 @ 95 - .byte 2 @ 96 - .byte 2 @ 97 - .byte 2 @ 98 - .byte 2 @ 99 - .byte 2 @ 100 - .byte 2 @ 101 - .byte 2 @ 102 - .byte 2 @ 103 - .byte 2 @ 104 - .byte 2 @ 105 - .byte 2 @ 106 - .byte 2 @ 107 +keysplit trumpet, 36 + split 0, 66 + split 1, 84 + split 2, 108 -.set KeySplitTable4, . - 24 - .byte 0 @ 24 - .byte 0 @ 25 - .byte 0 @ 26 - .byte 0 @ 27 - .byte 0 @ 28 - .byte 0 @ 29 - .byte 0 @ 30 - .byte 0 @ 31 - .byte 0 @ 32 - .byte 0 @ 33 - .byte 0 @ 34 - .byte 0 @ 35 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 1 @ 42 - .byte 1 @ 43 - .byte 1 @ 44 - .byte 1 @ 45 - .byte 1 @ 46 - .byte 1 @ 47 - .byte 1 @ 48 - .byte 1 @ 49 - .byte 1 @ 50 - .byte 1 @ 51 - .byte 1 @ 52 - .byte 1 @ 53 - .byte 1 @ 54 - .byte 1 @ 55 - .byte 1 @ 56 - .byte 1 @ 57 - .byte 1 @ 58 - .byte 1 @ 59 - .byte 1 @ 60 - .byte 1 @ 61 - .byte 1 @ 62 - .byte 1 @ 63 - .byte 1 @ 64 - .byte 1 @ 65 - .byte 1 @ 66 - .byte 1 @ 67 - .byte 1 @ 68 - .byte 1 @ 69 - .byte 1 @ 70 - .byte 1 @ 71 - .byte 1 @ 72 - .byte 1 @ 73 - .byte 1 @ 74 - .byte 1 @ 75 - .byte 1 @ 76 - .byte 1 @ 77 - .byte 1 @ 78 - .byte 1 @ 79 - .byte 1 @ 80 - .byte 1 @ 81 - .byte 1 @ 82 - .byte 1 @ 83 - .byte 1 @ 84 - .byte 1 @ 85 - .byte 1 @ 86 - .byte 1 @ 87 - .byte 1 @ 88 - .byte 1 @ 89 - .byte 1 @ 90 - .byte 1 @ 91 - .byte 1 @ 92 - .byte 1 @ 93 - .byte 1 @ 94 - .byte 1 @ 95 - .byte 1 @ 96 - .byte 1 @ 97 - .byte 1 @ 98 - .byte 1 @ 99 - .byte 1 @ 100 - .byte 1 @ 101 - .byte 1 @ 102 - .byte 1 @ 103 - .byte 1 @ 104 - .byte 1 @ 105 - .byte 1 @ 106 - .byte 1 @ 107 +keysplit tuba, 24 + split 0, 42 + split 1, 108 -.set KeySplitTable5, . - 36 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 0 @ 42 - .byte 0 @ 43 - .byte 0 @ 44 - .byte 0 @ 45 - .byte 0 @ 46 - .byte 0 @ 47 - .byte 0 @ 48 - .byte 0 @ 49 - .byte 0 @ 50 - .byte 0 @ 51 - .byte 0 @ 52 - .byte 0 @ 53 - .byte 0 @ 54 - .byte 0 @ 55 - .byte 0 @ 56 - .byte 0 @ 57 - .byte 0 @ 58 - .byte 0 @ 59 - .byte 0 @ 60 - .byte 0 @ 61 - .byte 0 @ 62 - .byte 0 @ 63 - .byte 0 @ 64 - .byte 0 @ 65 - .byte 1 @ 66 - .byte 1 @ 67 - .byte 1 @ 68 - .byte 1 @ 69 - .byte 1 @ 70 - .byte 1 @ 71 - .byte 1 @ 72 - .byte 1 @ 73 - .byte 1 @ 74 - .byte 1 @ 75 - .byte 1 @ 76 - .byte 1 @ 77 - .byte 1 @ 78 - .byte 1 @ 79 - .byte 1 @ 80 - .byte 1 @ 81 - .byte 1 @ 82 - .byte 1 @ 83 - .byte 1 @ 84 - .byte 1 @ 85 - .byte 1 @ 86 - .byte 1 @ 87 - .byte 1 @ 88 - .byte 1 @ 89 - .byte 1 @ 90 - .byte 1 @ 91 - .byte 1 @ 92 - .byte 1 @ 93 - .byte 1 @ 94 - .byte 1 @ 95 - .byte 1 @ 96 - .byte 1 @ 97 - .byte 1 @ 98 - .byte 1 @ 99 - .byte 1 @ 100 - .byte 1 @ 101 - .byte 1 @ 102 - .byte 1 @ 103 - .byte 1 @ 104 - .byte 1 @ 105 - .byte 1 @ 106 - .byte 1 @ 107 +keysplit french_horn, 36 + split 0, 66 + split 1, 108 diff --git a/sound/song_table.inc b/sound/song_table.inc index c551a656b9d4..6e4237b998ba 100644 --- a/sound/song_table.inc +++ b/sound/song_table.inc @@ -1,616 +1,621 @@ + .equiv MUSIC_PLAYER_BGM,0 + .equiv MUSIC_PLAYER_SE1,1 + .equiv MUSIC_PLAYER_SE2,2 + .equiv MUSIC_PLAYER_SE3,3 + .align 2 gSongTable:: - song mus_dummy, 0, 0 - song se_use_item, 1, 1 - song se_pc_login, 1, 1 - song se_pc_off, 1, 1 - song se_pc_on, 1, 1 - song se_select, 2, 2 - song se_win_open, 1, 1 - song se_wall_hit, 2, 2 - song se_door, 1, 1 - song se_exit, 1, 1 - song se_ledge, 1, 1 - song se_bike_bell, 1, 1 - song se_not_effective, 1, 1 - song se_effective, 1, 1 - song se_super_effective, 1, 1 - song se_ball_open, 1, 1 - song se_faint, 1, 1 - song se_flee, 1, 1 - song se_sliding_door, 1, 1 - song se_ship, 1, 1 - song se_bang, 1, 1 - song se_pin, 1, 1 - song se_boo, 1, 1 - song se_ball, 1, 1 - song se_contest_place, 2, 2 - song se_a, 1, 1 - song se_i, 1, 1 - song se_u, 1, 1 - song se_e, 1, 1 - song se_o, 1, 1 - song se_n, 1, 1 - song se_success, 1, 1 - song se_failure, 1, 1 - song se_exp, 1, 1 - song se_bike_hop, 1, 1 - song se_switch, 1, 1 - song se_click, 1, 1 - song se_fu_zaku, 1, 1 - song se_contest_condition_lose, 1, 1 - song se_lavaridge_fall_warp, 1, 1 - song se_ice_stairs, 1, 1 - song se_ice_break, 1, 1 - song se_ice_crack, 1, 1 - song se_fall, 1, 1 - song se_unlock, 2, 2 - song se_warp_in, 1, 1 - song se_warp_out, 1, 1 - song se_repel, 1, 1 - song se_rotating_gate, 1, 1 - song se_truck_move, 1, 1 - song se_truck_stop, 1, 1 - song se_truck_unload, 2, 2 - song se_truck_door, 1, 1 - song se_berry_blender, 2, 2 - song se_card, 1, 1 - song se_save, 1, 1 - song se_ball_bounce_1, 1, 1 - song se_ball_bounce_2, 1, 1 - song se_ball_bounce_3, 1, 1 - song se_ball_bounce_4, 1, 1 - song se_ball_trade, 2, 2 - song se_ball_throw, 1, 1 - song se_note_c, 2, 2 - song se_note_d, 2, 2 - song se_note_e, 2, 2 - song se_note_f, 2, 2 - song se_note_g, 2, 2 - song se_note_a, 2, 2 - song se_note_b, 2, 2 - song se_note_c_high, 2, 2 - song se_puddle, 2, 2 - song se_bridge_walk, 2, 2 - song se_itemfinder, 1, 1 - song se_ding_dong, 1, 1 - song se_balloon_red, 2, 2 - song se_balloon_blue, 2, 2 - song se_balloon_yellow, 2, 2 - song se_breakable_door, 2, 2 - song se_mud_ball, 2, 2 - song se_field_poison, 1, 1 - song se_escalator, 1, 1 - song se_thunderstorm, 3, 3 - song se_thunderstorm_stop, 3, 3 - song se_downpour, 3, 3 - song se_downpour_stop, 3, 3 - song se_rain, 3, 3 - song se_rain_stop, 3, 3 - song se_thunder, 1, 1 - song se_thunder2, 1, 1 - song se_elevator, 1, 1 - song se_low_health, 3, 3 - song se_exp_max, 1, 1 - song se_roulette_ball, 2, 2 - song se_roulette_ball2, 2, 2 - song se_taillow_wing_flap, 1, 1 - song se_shop, 1, 1 - song se_contest_heart, 1, 1 - song se_contest_curtain_rise, 1, 1 - song se_contest_curtain_fall, 1, 1 - song se_contest_icon_change, 1, 1 - song se_contest_icon_clear, 1, 1 - song se_contest_mons_turn, 1, 1 - song se_shiny, 1, 1 - song se_intro_blast, 1, 1 - song se_mugshot, 1, 1 - song se_applause, 1, 1 - song se_vend, 1, 1 - song se_orb, 1, 1 - song se_dex_scroll, 1, 1 - song se_dex_page, 1, 1 - song se_pokenav_on, 1, 1 - song se_pokenav_off, 1, 1 - song se_dex_search, 1, 1 - song se_egg_hatch, 1, 1 - song se_ball_tray_enter, 1, 1 - song se_ball_tray_ball, 1, 1 - song se_ball_tray_exit, 2, 2 - song se_glass_flute, 1, 1 - song se_m_thunderbolt, 2, 2 - song se_m_thunderbolt2, 1, 1 - song se_m_harden, 1, 1 - song se_m_nightmare, 1, 1 - song se_m_vital_throw, 1, 1 - song se_m_vital_throw2, 1, 1 - song se_m_bubble, 1, 1 - song se_m_bubble2, 1, 1 - song se_m_bubble3, 1, 1 - song se_m_rain_dance, 1, 1 - song se_m_cut, 1, 1 - song se_m_string_shot, 1, 1 - song se_m_string_shot2, 1, 1 - song se_m_rock_throw, 1, 1 - song se_m_gust, 2, 2 - song se_m_gust2, 2, 2 - song se_m_double_slap, 1, 1 - song se_m_double_team, 1, 1 - song se_m_razor_wind, 1, 1 - song se_m_icy_wind, 1, 1 - song se_m_thunder_wave, 1, 1 - song se_m_comet_punch, 1, 1 - song se_m_mega_kick, 1, 1 - song se_m_mega_kick2, 1, 1 - song se_m_crabhammer, 1, 1 - song se_m_jump_kick, 1, 1 - song se_m_flame_wheel, 1, 1 - song se_m_flame_wheel2, 1, 1 - song se_m_flamethrower, 1, 1 - song se_m_fire_punch, 1, 1 - song se_m_toxic, 1, 1 - song se_m_sacred_fire, 1, 1 - song se_m_sacred_fire2, 2, 2 - song se_m_ember, 1, 1 - song se_m_take_down, 2, 2 - song se_m_blizzard, 1, 1 - song se_m_blizzard2, 1, 1 - song se_m_scratch, 1, 1 - song se_m_vicegrip, 1, 1 - song se_m_wing_attack, 1, 1 - song se_m_fly, 1, 1 - song se_m_sand_attack, 1, 1 - song se_m_razor_wind2, 1, 1 - song se_m_bite, 1, 1 - song se_m_headbutt, 1, 1 - song se_m_surf, 1, 1 - song se_m_hydro_pump, 1, 1 - song se_m_whirlpool, 1, 1 - song se_m_horn_attack, 1, 1 - song se_m_tail_whip, 2, 2 - song se_m_mist, 1, 1 - song se_m_poison_powder, 1, 1 - song se_m_bind, 2, 2 - song se_m_dragon_rage, 1, 1 - song se_m_sing, 1, 1 - song se_m_perish_song, 1, 1 - song se_m_pay_day, 1, 1 - song se_m_dig, 1, 1 - song se_m_dizzy_punch, 1, 1 - song se_m_self_destruct, 1, 1 - song se_m_explosion, 1, 1 - song se_m_absorb_2, 1, 1 - song se_m_absorb, 1, 1 - song se_m_screech, 1, 1 - song se_m_bubble_beam, 1, 1 - song se_m_bubble_beam2, 1, 1 - song se_m_supersonic, 1, 1 - song se_m_belly_drum, 1, 1 - song se_m_metronome, 1, 1 - song se_m_bonemerang, 1, 1 - song se_m_lick, 1, 1 - song se_m_psybeam, 1, 1 - song se_m_faint_attack, 1, 1 - song se_m_swords_dance, 1, 1 - song se_m_leer, 1, 1 - song se_m_swagger, 1, 1 - song se_m_swagger2, 1, 1 - song se_m_heal_bell, 1, 1 - song se_m_confuse_ray, 1, 1 - song se_m_snore, 1, 1 - song se_m_brick_break, 1, 1 - song se_m_giga_drain, 1, 1 - song se_m_psybeam2, 1, 1 - song se_m_solar_beam, 2, 2 - song se_m_petal_dance, 1, 1 - song se_m_teleport, 1, 1 - song se_m_minimize, 1, 1 - song se_m_sketch, 1, 1 - song se_m_swift, 1, 1 - song se_m_reflect, 1, 1 - song se_m_barrier, 1, 1 - song se_m_detect, 2, 2 - song se_m_lock_on, 1, 1 - song se_m_moonlight, 1, 1 - song se_m_charm, 1, 1 - song se_m_charge, 1, 1 - song se_m_strength, 1, 1 - song se_m_hyper_beam, 1, 1 - song se_m_waterfall, 1, 1 - song se_m_reversal, 1, 1 - song se_m_acid_armor, 1, 1 - song se_m_sandstorm, 1, 1 - song se_m_tri_attack, 1, 1 - song se_m_tri_attack2, 1, 1 - song se_m_encore, 1, 1 - song se_m_encore2, 2, 2 - song se_m_baton_pass, 1, 1 - song se_m_milk_drink, 1, 1 - song se_m_attract, 1, 1 - song se_m_attract2, 1, 1 - song se_m_morning_sun, 1, 1 - song se_m_flatter, 1, 1 - song se_m_sand_tomb, 1, 1 - song se_m_grasswhistle, 1, 1 - song se_m_spit_up, 1, 1 - song se_m_dive, 1, 1 - song se_m_earthquake, 2, 2 - song se_m_twister, 2, 2 - song se_m_sweet_scent, 1, 1 - song se_m_yawn, 1, 1 - song se_m_sky_uppercut, 2, 2 - song se_m_stat_increase, 1, 1 - song se_m_heat_wave, 1, 1 - song se_m_uproar, 1, 1 - song se_m_hail, 1, 1 - song se_m_cosmic_power, 2, 2 - song se_m_teeter_dance, 1, 1 - song se_m_stat_decrease, 1, 1 - song se_m_haze, 1, 1 - song se_m_hyper_beam2, 1, 1 - song se_rg_door, 1, 1 - song se_rg_card_flip, 1, 1 - song se_rg_card_flipping, 1, 1 - song se_rg_card_open, 1, 1 - song se_rg_bag_cursor, 1, 1 - song se_rg_bag_pocket, 1, 1 - song se_rg_ball_click, 1, 1 - song se_rg_shop, 1, 1 - song se_rg_ss_anne_horn, 1, 1 - song se_rg_help_open, 1, 1 - song se_rg_help_close, 1, 1 - song se_rg_help_error, 1, 1 - song se_rg_deoxys_move, 1, 1 - song se_rg_poke_jump_success, 1, 1 - song se_rg_poke_jump_failure, 1, 1 - song se_pokenav_call, 1, 1 - song se_pokenav_hang_up, 1, 1 - song se_arena_timeup1, 1, 1 - song se_arena_timeup2, 1, 1 - song se_pike_curtain_close, 1, 1 - song se_pike_curtain_open, 1, 1 - song se_sudowoodo_shake, 1, 1 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song dummy_song_header, 0, 0 - song mus_littleroot_test, 0, 0 - song mus_gsc_route38, 0, 0 - song mus_caught, 0, 0 - song mus_victory_wild, 0, 0 - song mus_victory_gym_leader, 0, 0 - song mus_victory_league, 0, 0 - song mus_c_comm_center, 0, 0 - song mus_gsc_pewter, 0, 0 - song mus_c_vs_legend_beast, 0, 0 - song mus_route101, 0, 0 - song mus_route110, 0, 0 - song mus_route120, 0, 0 - song mus_petalburg, 0, 0 - song mus_oldale, 0, 0 - song mus_gym, 0, 0 - song mus_surf, 0, 0 - song mus_petalburg_woods, 0, 0 - song mus_level_up, 2, 2 - song mus_heal, 2, 2 - song mus_obtain_badge, 2, 2 - song mus_obtain_item, 2, 2 - song mus_evolved, 2, 2 - song mus_obtain_tmhm, 2, 2 - song mus_lilycove_museum, 0, 0 - song mus_route122, 0, 0 - song mus_oceanic_museum, 0, 0 - song mus_evolution_intro, 2, 2 - song mus_evolution, 0, 0 - song mus_move_deleted, 2, 2 - song mus_encounter_girl, 0, 0 - song mus_encounter_male, 0, 0 - song mus_abandoned_ship, 0, 0 - song mus_fortree, 0, 0 - song mus_birch_lab, 0, 0 - song mus_b_tower_rs, 0, 0 - song mus_encounter_swimmer, 0, 0 - song mus_cave_of_origin, 0, 0 - song mus_obtain_berry, 2, 2 - song mus_awaken_legend, 2, 2 - song mus_slots_jackpot, 2, 2 - song mus_slots_win, 2, 2 - song mus_too_bad, 2, 2 - song mus_roulette, 0, 0 - song mus_link_contest_p1, 0, 0 - song mus_link_contest_p2, 0, 0 - song mus_link_contest_p3, 0, 0 - song mus_link_contest_p4, 0, 0 - song mus_encounter_rich, 0, 0 - song mus_verdanturf, 0, 0 - song mus_rustboro, 0, 0 - song mus_poke_center, 0, 0 - song mus_route104, 0, 0 - song mus_route119, 0, 0 - song mus_cycling, 0, 0 - song mus_poke_mart, 0, 0 - song mus_littleroot, 0, 0 - song mus_mt_chimney, 0, 0 - song mus_encounter_female, 0, 0 - song mus_lilycove, 0, 0 - song mus_route111, 0, 0 - song mus_help, 0, 0 - song mus_underwater, 0, 0 - song mus_victory_trainer, 0, 0 - song mus_title, 0, 0 - song mus_intro, 0, 0 - song mus_encounter_may, 0, 0 - song mus_encounter_intense, 0, 0 - song mus_encounter_cool, 0, 0 - song mus_route113, 0, 0 - song mus_encounter_aqua, 0, 0 - song mus_follow_me, 0, 0 - song mus_encounter_brendan, 0, 0 - song mus_ever_grande, 0, 0 - song mus_encounter_suspicious, 0, 0 - song mus_victory_aqua_magma, 0, 0 - song mus_cable_car, 0, 0 - song mus_game_corner, 0, 0 - song mus_dewford, 0, 0 - song mus_safari_zone, 0, 0 - song mus_victory_road, 0, 0 - song mus_aqua_magma_hideout, 0, 0 - song mus_sailing, 0, 0 - song mus_mt_pyre, 0, 0 - song mus_slateport, 0, 0 - song mus_mt_pyre_exterior, 0, 0 - song mus_school, 0, 0 - song mus_hall_of_fame, 0, 0 - song mus_fallarbor, 0, 0 - song mus_sealed_chamber, 0, 0 - song mus_contest_winner, 0, 0 - song mus_contest, 0, 0 - song mus_encounter_magma, 0, 0 - song mus_intro_battle, 0, 0 - song mus_abnormal_weather, 0, 0 - song mus_weather_groudon, 0, 0 - song mus_sootopolis, 0, 0 - song mus_contest_results, 0, 0 - song mus_hall_of_fame_room, 0, 0 - song mus_trick_house, 0, 0 - song mus_encounter_twins, 0, 0 - song mus_encounter_elite_four, 0, 0 - song mus_encounter_hiker, 0, 0 - song mus_contest_lobby, 0, 0 - song mus_encounter_interviewer, 0, 0 - song mus_encounter_champion, 0, 0 - song mus_credits, 0, 0 - song mus_end, 0, 0 - song mus_b_frontier, 0, 0 - song mus_b_arena, 0, 0 - song mus_obtain_b_points, 2, 2 - song mus_register_match_call, 2, 2 - song mus_b_pyramid, 0, 0 - song mus_b_pyramid_top, 0, 0 - song mus_b_palace, 0, 0 - song mus_rayquaza_appears, 0, 0 - song mus_b_tower, 0, 0 - song mus_obtain_symbol, 2, 2 - song mus_b_dome, 0, 0 - song mus_b_pike, 0, 0 - song mus_b_factory, 0, 0 - song mus_vs_rayquaza, 0, 0 - song mus_vs_frontier_brain, 0, 0 - song mus_vs_mew, 0, 0 - song mus_b_dome_lobby, 0, 0 - song mus_vs_wild, 0, 0 - song mus_vs_aqua_magma, 0, 0 - song mus_vs_trainer, 0, 0 - song mus_vs_gym_leader, 0, 0 - song mus_vs_champion, 0, 0 - song mus_vs_regi, 0, 0 - song mus_vs_kyogre_groudon, 0, 0 - song mus_vs_rival, 0, 0 - song mus_vs_elite_four, 0, 0 - song mus_vs_aqua_magma_leader, 0, 0 - song mus_rg_follow_me, 0, 0 - song mus_rg_game_corner, 0, 0 - song mus_rg_rocket_hideout, 0, 0 - song mus_rg_gym, 0, 0 - song mus_rg_jigglypuff, 2, 2 - song mus_rg_intro_fight, 0, 0 - song mus_rg_title, 0, 0 - song mus_rg_cinnabar, 0, 0 - song mus_rg_lavender, 0, 0 - song mus_rg_heal, 0, 0 - song mus_rg_cycling, 0, 0 - song mus_rg_encounter_rocket, 0, 0 - song mus_rg_encounter_girl, 0, 0 - song mus_rg_encounter_boy, 0, 0 - song mus_rg_hall_of_fame, 0, 0 - song mus_rg_viridian_forest, 0, 0 - song mus_rg_mt_moon, 0, 0 - song mus_rg_poke_mansion, 0, 0 - song mus_rg_credits, 0, 0 - song mus_rg_route1, 0, 0 - song mus_rg_route24, 0, 0 - song mus_rg_route3, 0, 0 - song mus_rg_route11, 0, 0 - song mus_rg_victory_road, 0, 0 - song mus_rg_vs_gym_leader, 0, 0 - song mus_rg_vs_trainer, 0, 0 - song mus_rg_vs_wild, 0, 0 - song mus_rg_vs_champion, 0, 0 - song mus_rg_pallet, 0, 0 - song mus_rg_oak_lab, 0, 0 - song mus_rg_oak, 0, 0 - song mus_rg_poke_center, 0, 0 - song mus_rg_ss_anne, 0, 0 - song mus_rg_surf, 0, 0 - song mus_rg_poke_tower, 0, 0 - song mus_rg_silph, 0, 0 - song mus_rg_fuchsia, 0, 0 - song mus_rg_celadon, 0, 0 - song mus_rg_victory_trainer, 0, 0 - song mus_rg_victory_wild, 0, 0 - song mus_rg_victory_gym_leader, 0, 0 - song mus_rg_vermillion, 0, 0 - song mus_rg_pewter, 0, 0 - song mus_rg_encounter_rival, 0, 0 - song mus_rg_rival_exit, 0, 0 - song mus_rg_dex_rating, 2, 2 - song mus_rg_obtain_key_item, 2, 2 - song mus_rg_caught_intro, 2, 2 - song mus_rg_photo, 2, 2 - song mus_rg_game_freak, 0, 0 - song mus_rg_caught, 0, 0 - song mus_rg_new_game_instruct, 0, 0 - song mus_rg_new_game_intro, 0, 0 - song mus_rg_new_game_exit, 0, 0 - song mus_rg_poke_jump, 0, 0 - song mus_rg_union_room, 0, 0 - song mus_rg_net_center, 0, 0 - song mus_rg_mystery_gift, 0, 0 - song mus_rg_berry_pick, 0, 0 - song mus_rg_sevii_cave, 0, 0 - song mus_rg_teachy_tv_show, 0, 0 - song mus_rg_sevii_route, 0, 0 - song mus_rg_sevii_dungeon, 0, 0 - song mus_rg_sevii_123, 0, 0 - song mus_rg_sevii_45, 0, 0 - song mus_rg_sevii_67, 0, 0 - song mus_rg_poke_flute, 2, 2 - song mus_rg_vs_deoxys, 0, 0 - song mus_rg_vs_mewtwo, 0, 0 - song mus_rg_vs_legend, 0, 0 - song mus_rg_encounter_gym_leader, 0, 0 - song mus_rg_encounter_deoxys, 0, 0 - song mus_rg_trainer_tower, 0, 0 - song mus_rg_slow_pallet, 0, 0 - song mus_rg_teachy_tv_menu, 0, 0 - song ph_trap_blend, 2, 2 - song ph_trap_held, 2, 2 - song ph_trap_solo, 2, 2 - song ph_face_blend, 2, 2 - song ph_face_held, 2, 2 - song ph_face_solo, 2, 2 - song ph_cloth_blend, 2, 2 - song ph_cloth_held, 2, 2 - song ph_cloth_solo, 2, 2 - song ph_dress_blend, 2, 2 - song ph_dress_held, 2, 2 - song ph_dress_solo, 2, 2 - song ph_fleece_blend, 2, 2 - song ph_fleece_held, 2, 2 - song ph_fleece_solo, 2, 2 - song ph_kit_blend, 2, 2 - song ph_kit_held, 2, 2 - song ph_kit_solo, 2, 2 - song ph_price_blend, 2, 2 - song ph_price_held, 2, 2 - song ph_price_solo, 2, 2 - song ph_lot_blend, 2, 2 - song ph_lot_held, 2, 2 - song ph_lot_solo, 2, 2 - song ph_goat_blend, 2, 2 - song ph_goat_held, 2, 2 - song ph_goat_solo, 2, 2 - song ph_thought_blend, 2, 2 - song ph_thought_held, 2, 2 - song ph_thought_solo, 2, 2 - song ph_choice_blend, 2, 2 - song ph_choice_held, 2, 2 - song ph_choice_solo, 2, 2 - song ph_mouth_blend, 2, 2 - song ph_mouth_held, 2, 2 - song ph_mouth_solo, 2, 2 - song ph_foot_blend, 2, 2 - song ph_foot_held, 2, 2 - song ph_foot_solo, 2, 2 - song ph_goose_blend, 2, 2 - song ph_goose_held, 2, 2 - song ph_goose_solo, 2, 2 - song ph_strut_blend, 2, 2 - song ph_strut_held, 2, 2 - song ph_strut_solo, 2, 2 - song ph_cure_blend, 2, 2 - song ph_cure_held, 2, 2 - song ph_cure_solo, 2, 2 - song ph_nurse_blend, 2, 2 - song ph_nurse_held, 2, 2 - song ph_nurse_solo, 2, 2 + song mus_dummy, MUSIC_PLAYER_BGM, 0 + song se_use_item, MUSIC_PLAYER_SE1, 1 + song se_pc_login, MUSIC_PLAYER_SE1, 1 + song se_pc_off, MUSIC_PLAYER_SE1, 1 + song se_pc_on, MUSIC_PLAYER_SE1, 1 + song se_select, MUSIC_PLAYER_SE2, 2 + song se_win_open, MUSIC_PLAYER_SE1, 1 + song se_wall_hit, MUSIC_PLAYER_SE2, 2 + song se_door, MUSIC_PLAYER_SE1, 1 + song se_exit, MUSIC_PLAYER_SE1, 1 + song se_ledge, MUSIC_PLAYER_SE1, 1 + song se_bike_bell, MUSIC_PLAYER_SE1, 1 + song se_not_effective, MUSIC_PLAYER_SE1, 1 + song se_effective, MUSIC_PLAYER_SE1, 1 + song se_super_effective, MUSIC_PLAYER_SE1, 1 + song se_ball_open, MUSIC_PLAYER_SE1, 1 + song se_faint, MUSIC_PLAYER_SE1, 1 + song se_flee, MUSIC_PLAYER_SE1, 1 + song se_sliding_door, MUSIC_PLAYER_SE1, 1 + song se_ship, MUSIC_PLAYER_SE1, 1 + song se_bang, MUSIC_PLAYER_SE1, 1 + song se_pin, MUSIC_PLAYER_SE1, 1 + song se_boo, MUSIC_PLAYER_SE1, 1 + song se_ball, MUSIC_PLAYER_SE1, 1 + song se_contest_place, MUSIC_PLAYER_SE2, 2 + song se_a, MUSIC_PLAYER_SE1, 1 + song se_i, MUSIC_PLAYER_SE1, 1 + song se_u, MUSIC_PLAYER_SE1, 1 + song se_e, MUSIC_PLAYER_SE1, 1 + song se_o, MUSIC_PLAYER_SE1, 1 + song se_n, MUSIC_PLAYER_SE1, 1 + song se_success, MUSIC_PLAYER_SE1, 1 + song se_failure, MUSIC_PLAYER_SE1, 1 + song se_exp, MUSIC_PLAYER_SE1, 1 + song se_bike_hop, MUSIC_PLAYER_SE1, 1 + song se_switch, MUSIC_PLAYER_SE1, 1 + song se_click, MUSIC_PLAYER_SE1, 1 + song se_fu_zaku, MUSIC_PLAYER_SE1, 1 + song se_contest_condition_lose, MUSIC_PLAYER_SE1, 1 + song se_lavaridge_fall_warp, MUSIC_PLAYER_SE1, 1 + song se_ice_stairs, MUSIC_PLAYER_SE1, 1 + song se_ice_break, MUSIC_PLAYER_SE1, 1 + song se_ice_crack, MUSIC_PLAYER_SE1, 1 + song se_fall, MUSIC_PLAYER_SE1, 1 + song se_unlock, MUSIC_PLAYER_SE2, 2 + song se_warp_in, MUSIC_PLAYER_SE1, 1 + song se_warp_out, MUSIC_PLAYER_SE1, 1 + song se_repel, MUSIC_PLAYER_SE1, 1 + song se_rotating_gate, MUSIC_PLAYER_SE1, 1 + song se_truck_move, MUSIC_PLAYER_SE1, 1 + song se_truck_stop, MUSIC_PLAYER_SE1, 1 + song se_truck_unload, MUSIC_PLAYER_SE2, 2 + song se_truck_door, MUSIC_PLAYER_SE1, 1 + song se_berry_blender, MUSIC_PLAYER_SE2, 2 + song se_card, MUSIC_PLAYER_SE1, 1 + song se_save, MUSIC_PLAYER_SE1, 1 + song se_ball_bounce_1, MUSIC_PLAYER_SE1, 1 + song se_ball_bounce_2, MUSIC_PLAYER_SE1, 1 + song se_ball_bounce_3, MUSIC_PLAYER_SE1, 1 + song se_ball_bounce_4, MUSIC_PLAYER_SE1, 1 + song se_ball_trade, MUSIC_PLAYER_SE2, 2 + song se_ball_throw, MUSIC_PLAYER_SE1, 1 + song se_note_c, MUSIC_PLAYER_SE2, 2 + song se_note_d, MUSIC_PLAYER_SE2, 2 + song se_note_e, MUSIC_PLAYER_SE2, 2 + song se_note_f, MUSIC_PLAYER_SE2, 2 + song se_note_g, MUSIC_PLAYER_SE2, 2 + song se_note_a, MUSIC_PLAYER_SE2, 2 + song se_note_b, MUSIC_PLAYER_SE2, 2 + song se_note_c_high, MUSIC_PLAYER_SE2, 2 + song se_puddle, MUSIC_PLAYER_SE2, 2 + song se_bridge_walk, MUSIC_PLAYER_SE2, 2 + song se_itemfinder, MUSIC_PLAYER_SE1, 1 + song se_ding_dong, MUSIC_PLAYER_SE1, 1 + song se_balloon_red, MUSIC_PLAYER_SE2, 2 + song se_balloon_blue, MUSIC_PLAYER_SE2, 2 + song se_balloon_yellow, MUSIC_PLAYER_SE2, 2 + song se_breakable_door, MUSIC_PLAYER_SE2, 2 + song se_mud_ball, MUSIC_PLAYER_SE2, 2 + song se_field_poison, MUSIC_PLAYER_SE1, 1 + song se_escalator, MUSIC_PLAYER_SE1, 1 + song se_thunderstorm, MUSIC_PLAYER_SE3, 3 + song se_thunderstorm_stop, MUSIC_PLAYER_SE3, 3 + song se_downpour, MUSIC_PLAYER_SE3, 3 + song se_downpour_stop, MUSIC_PLAYER_SE3, 3 + song se_rain, MUSIC_PLAYER_SE3, 3 + song se_rain_stop, MUSIC_PLAYER_SE3, 3 + song se_thunder, MUSIC_PLAYER_SE1, 1 + song se_thunder2, MUSIC_PLAYER_SE1, 1 + song se_elevator, MUSIC_PLAYER_SE1, 1 + song se_low_health, MUSIC_PLAYER_SE3, 3 + song se_exp_max, MUSIC_PLAYER_SE1, 1 + song se_roulette_ball, MUSIC_PLAYER_SE2, 2 + song se_roulette_ball2, MUSIC_PLAYER_SE2, 2 + song se_taillow_wing_flap, MUSIC_PLAYER_SE1, 1 + song se_shop, MUSIC_PLAYER_SE1, 1 + song se_contest_heart, MUSIC_PLAYER_SE1, 1 + song se_contest_curtain_rise, MUSIC_PLAYER_SE1, 1 + song se_contest_curtain_fall, MUSIC_PLAYER_SE1, 1 + song se_contest_icon_change, MUSIC_PLAYER_SE1, 1 + song se_contest_icon_clear, MUSIC_PLAYER_SE1, 1 + song se_contest_mons_turn, MUSIC_PLAYER_SE1, 1 + song se_shiny, MUSIC_PLAYER_SE1, 1 + song se_intro_blast, MUSIC_PLAYER_SE1, 1 + song se_mugshot, MUSIC_PLAYER_SE1, 1 + song se_applause, MUSIC_PLAYER_SE1, 1 + song se_vend, MUSIC_PLAYER_SE1, 1 + song se_orb, MUSIC_PLAYER_SE1, 1 + song se_dex_scroll, MUSIC_PLAYER_SE1, 1 + song se_dex_page, MUSIC_PLAYER_SE1, 1 + song se_pokenav_on, MUSIC_PLAYER_SE1, 1 + song se_pokenav_off, MUSIC_PLAYER_SE1, 1 + song se_dex_search, MUSIC_PLAYER_SE1, 1 + song se_egg_hatch, MUSIC_PLAYER_SE1, 1 + song se_ball_tray_enter, MUSIC_PLAYER_SE1, 1 + song se_ball_tray_ball, MUSIC_PLAYER_SE1, 1 + song se_ball_tray_exit, MUSIC_PLAYER_SE2, 2 + song se_glass_flute, MUSIC_PLAYER_SE1, 1 + song se_m_thunderbolt, MUSIC_PLAYER_SE2, 2 + song se_m_thunderbolt2, MUSIC_PLAYER_SE1, 1 + song se_m_harden, MUSIC_PLAYER_SE1, 1 + song se_m_nightmare, MUSIC_PLAYER_SE1, 1 + song se_m_vital_throw, MUSIC_PLAYER_SE1, 1 + song se_m_vital_throw2, MUSIC_PLAYER_SE1, 1 + song se_m_bubble, MUSIC_PLAYER_SE1, 1 + song se_m_bubble2, MUSIC_PLAYER_SE1, 1 + song se_m_bubble3, MUSIC_PLAYER_SE1, 1 + song se_m_rain_dance, MUSIC_PLAYER_SE1, 1 + song se_m_cut, MUSIC_PLAYER_SE1, 1 + song se_m_string_shot, MUSIC_PLAYER_SE1, 1 + song se_m_string_shot2, MUSIC_PLAYER_SE1, 1 + song se_m_rock_throw, MUSIC_PLAYER_SE1, 1 + song se_m_gust, MUSIC_PLAYER_SE2, 2 + song se_m_gust2, MUSIC_PLAYER_SE2, 2 + song se_m_double_slap, MUSIC_PLAYER_SE1, 1 + song se_m_double_team, MUSIC_PLAYER_SE1, 1 + song se_m_razor_wind, MUSIC_PLAYER_SE1, 1 + song se_m_icy_wind, MUSIC_PLAYER_SE1, 1 + song se_m_thunder_wave, MUSIC_PLAYER_SE1, 1 + song se_m_comet_punch, MUSIC_PLAYER_SE1, 1 + song se_m_mega_kick, MUSIC_PLAYER_SE1, 1 + song se_m_mega_kick2, MUSIC_PLAYER_SE1, 1 + song se_m_crabhammer, MUSIC_PLAYER_SE1, 1 + song se_m_jump_kick, MUSIC_PLAYER_SE1, 1 + song se_m_flame_wheel, MUSIC_PLAYER_SE1, 1 + song se_m_flame_wheel2, MUSIC_PLAYER_SE1, 1 + song se_m_flamethrower, MUSIC_PLAYER_SE1, 1 + song se_m_fire_punch, MUSIC_PLAYER_SE1, 1 + song se_m_toxic, MUSIC_PLAYER_SE1, 1 + song se_m_sacred_fire, MUSIC_PLAYER_SE1, 1 + song se_m_sacred_fire2, MUSIC_PLAYER_SE2, 2 + song se_m_ember, MUSIC_PLAYER_SE1, 1 + song se_m_take_down, MUSIC_PLAYER_SE2, 2 + song se_m_blizzard, MUSIC_PLAYER_SE1, 1 + song se_m_blizzard2, MUSIC_PLAYER_SE1, 1 + song se_m_scratch, MUSIC_PLAYER_SE1, 1 + song se_m_vicegrip, MUSIC_PLAYER_SE1, 1 + song se_m_wing_attack, MUSIC_PLAYER_SE1, 1 + song se_m_fly, MUSIC_PLAYER_SE1, 1 + song se_m_sand_attack, MUSIC_PLAYER_SE1, 1 + song se_m_razor_wind2, MUSIC_PLAYER_SE1, 1 + song se_m_bite, MUSIC_PLAYER_SE1, 1 + song se_m_headbutt, MUSIC_PLAYER_SE1, 1 + song se_m_surf, MUSIC_PLAYER_SE1, 1 + song se_m_hydro_pump, MUSIC_PLAYER_SE1, 1 + song se_m_whirlpool, MUSIC_PLAYER_SE1, 1 + song se_m_horn_attack, MUSIC_PLAYER_SE1, 1 + song se_m_tail_whip, MUSIC_PLAYER_SE2, 2 + song se_m_mist, MUSIC_PLAYER_SE1, 1 + song se_m_poison_powder, MUSIC_PLAYER_SE1, 1 + song se_m_bind, MUSIC_PLAYER_SE2, 2 + song se_m_dragon_rage, MUSIC_PLAYER_SE1, 1 + song se_m_sing, MUSIC_PLAYER_SE1, 1 + song se_m_perish_song, MUSIC_PLAYER_SE1, 1 + song se_m_pay_day, MUSIC_PLAYER_SE1, 1 + song se_m_dig, MUSIC_PLAYER_SE1, 1 + song se_m_dizzy_punch, MUSIC_PLAYER_SE1, 1 + song se_m_self_destruct, MUSIC_PLAYER_SE1, 1 + song se_m_explosion, MUSIC_PLAYER_SE1, 1 + song se_m_absorb_2, MUSIC_PLAYER_SE1, 1 + song se_m_absorb, MUSIC_PLAYER_SE1, 1 + song se_m_screech, MUSIC_PLAYER_SE1, 1 + song se_m_bubble_beam, MUSIC_PLAYER_SE1, 1 + song se_m_bubble_beam2, MUSIC_PLAYER_SE1, 1 + song se_m_supersonic, MUSIC_PLAYER_SE1, 1 + song se_m_belly_drum, MUSIC_PLAYER_SE1, 1 + song se_m_metronome, MUSIC_PLAYER_SE1, 1 + song se_m_bonemerang, MUSIC_PLAYER_SE1, 1 + song se_m_lick, MUSIC_PLAYER_SE1, 1 + song se_m_psybeam, MUSIC_PLAYER_SE1, 1 + song se_m_faint_attack, MUSIC_PLAYER_SE1, 1 + song se_m_swords_dance, MUSIC_PLAYER_SE1, 1 + song se_m_leer, MUSIC_PLAYER_SE1, 1 + song se_m_swagger, MUSIC_PLAYER_SE1, 1 + song se_m_swagger2, MUSIC_PLAYER_SE1, 1 + song se_m_heal_bell, MUSIC_PLAYER_SE1, 1 + song se_m_confuse_ray, MUSIC_PLAYER_SE1, 1 + song se_m_snore, MUSIC_PLAYER_SE1, 1 + song se_m_brick_break, MUSIC_PLAYER_SE1, 1 + song se_m_giga_drain, MUSIC_PLAYER_SE1, 1 + song se_m_psybeam2, MUSIC_PLAYER_SE1, 1 + song se_m_solar_beam, MUSIC_PLAYER_SE2, 2 + song se_m_petal_dance, MUSIC_PLAYER_SE1, 1 + song se_m_teleport, MUSIC_PLAYER_SE1, 1 + song se_m_minimize, MUSIC_PLAYER_SE1, 1 + song se_m_sketch, MUSIC_PLAYER_SE1, 1 + song se_m_swift, MUSIC_PLAYER_SE1, 1 + song se_m_reflect, MUSIC_PLAYER_SE1, 1 + song se_m_barrier, MUSIC_PLAYER_SE1, 1 + song se_m_detect, MUSIC_PLAYER_SE2, 2 + song se_m_lock_on, MUSIC_PLAYER_SE1, 1 + song se_m_moonlight, MUSIC_PLAYER_SE1, 1 + song se_m_charm, MUSIC_PLAYER_SE1, 1 + song se_m_charge, MUSIC_PLAYER_SE1, 1 + song se_m_strength, MUSIC_PLAYER_SE1, 1 + song se_m_hyper_beam, MUSIC_PLAYER_SE1, 1 + song se_m_waterfall, MUSIC_PLAYER_SE1, 1 + song se_m_reversal, MUSIC_PLAYER_SE1, 1 + song se_m_acid_armor, MUSIC_PLAYER_SE1, 1 + song se_m_sandstorm, MUSIC_PLAYER_SE1, 1 + song se_m_tri_attack, MUSIC_PLAYER_SE1, 1 + song se_m_tri_attack2, MUSIC_PLAYER_SE1, 1 + song se_m_encore, MUSIC_PLAYER_SE1, 1 + song se_m_encore2, MUSIC_PLAYER_SE2, 2 + song se_m_baton_pass, MUSIC_PLAYER_SE1, 1 + song se_m_milk_drink, MUSIC_PLAYER_SE1, 1 + song se_m_attract, MUSIC_PLAYER_SE1, 1 + song se_m_attract2, MUSIC_PLAYER_SE1, 1 + song se_m_morning_sun, MUSIC_PLAYER_SE1, 1 + song se_m_flatter, MUSIC_PLAYER_SE1, 1 + song se_m_sand_tomb, MUSIC_PLAYER_SE1, 1 + song se_m_grasswhistle, MUSIC_PLAYER_SE1, 1 + song se_m_spit_up, MUSIC_PLAYER_SE1, 1 + song se_m_dive, MUSIC_PLAYER_SE1, 1 + song se_m_earthquake, MUSIC_PLAYER_SE2, 2 + song se_m_twister, MUSIC_PLAYER_SE2, 2 + song se_m_sweet_scent, MUSIC_PLAYER_SE1, 1 + song se_m_yawn, MUSIC_PLAYER_SE1, 1 + song se_m_sky_uppercut, MUSIC_PLAYER_SE2, 2 + song se_m_stat_increase, MUSIC_PLAYER_SE1, 1 + song se_m_heat_wave, MUSIC_PLAYER_SE1, 1 + song se_m_uproar, MUSIC_PLAYER_SE1, 1 + song se_m_hail, MUSIC_PLAYER_SE1, 1 + song se_m_cosmic_power, MUSIC_PLAYER_SE2, 2 + song se_m_teeter_dance, MUSIC_PLAYER_SE1, 1 + song se_m_stat_decrease, MUSIC_PLAYER_SE1, 1 + song se_m_haze, MUSIC_PLAYER_SE1, 1 + song se_m_hyper_beam2, MUSIC_PLAYER_SE1, 1 + song se_rg_door, MUSIC_PLAYER_SE1, 1 + song se_rg_card_flip, MUSIC_PLAYER_SE1, 1 + song se_rg_card_flipping, MUSIC_PLAYER_SE1, 1 + song se_rg_card_open, MUSIC_PLAYER_SE1, 1 + song se_rg_bag_cursor, MUSIC_PLAYER_SE1, 1 + song se_rg_bag_pocket, MUSIC_PLAYER_SE1, 1 + song se_rg_ball_click, MUSIC_PLAYER_SE1, 1 + song se_rg_shop, MUSIC_PLAYER_SE1, 1 + song se_rg_ss_anne_horn, MUSIC_PLAYER_SE1, 1 + song se_rg_help_open, MUSIC_PLAYER_SE1, 1 + song se_rg_help_close, MUSIC_PLAYER_SE1, 1 + song se_rg_help_error, MUSIC_PLAYER_SE1, 1 + song se_rg_deoxys_move, MUSIC_PLAYER_SE1, 1 + song se_rg_poke_jump_success, MUSIC_PLAYER_SE1, 1 + song se_rg_poke_jump_failure, MUSIC_PLAYER_SE1, 1 + song se_pokenav_call, MUSIC_PLAYER_SE1, 1 + song se_pokenav_hang_up, MUSIC_PLAYER_SE1, 1 + song se_arena_timeup1, MUSIC_PLAYER_SE1, 1 + song se_arena_timeup2, MUSIC_PLAYER_SE1, 1 + song se_pike_curtain_close, MUSIC_PLAYER_SE1, 1 + song se_pike_curtain_open, MUSIC_PLAYER_SE1, 1 + song se_sudowoodo_shake, MUSIC_PLAYER_SE1, 1 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song dummy_song_header, MUSIC_PLAYER_BGM, 0 + song mus_littleroot_test, MUSIC_PLAYER_BGM, 0 + song mus_gsc_route38, MUSIC_PLAYER_BGM, 0 + song mus_caught, MUSIC_PLAYER_BGM, 0 + song mus_victory_wild, MUSIC_PLAYER_BGM, 0 + song mus_victory_gym_leader, MUSIC_PLAYER_BGM, 0 + song mus_victory_league, MUSIC_PLAYER_BGM, 0 + song mus_c_comm_center, MUSIC_PLAYER_BGM, 0 + song mus_gsc_pewter, MUSIC_PLAYER_BGM, 0 + song mus_c_vs_legend_beast, MUSIC_PLAYER_BGM, 0 + song mus_route101, MUSIC_PLAYER_BGM, 0 + song mus_route110, MUSIC_PLAYER_BGM, 0 + song mus_route120, MUSIC_PLAYER_BGM, 0 + song mus_petalburg, MUSIC_PLAYER_BGM, 0 + song mus_oldale, MUSIC_PLAYER_BGM, 0 + song mus_gym, MUSIC_PLAYER_BGM, 0 + song mus_surf, MUSIC_PLAYER_BGM, 0 + song mus_petalburg_woods, MUSIC_PLAYER_BGM, 0 + song mus_level_up, MUSIC_PLAYER_SE2, 2 + song mus_heal, MUSIC_PLAYER_SE2, 2 + song mus_obtain_badge, MUSIC_PLAYER_SE2, 2 + song mus_obtain_item, MUSIC_PLAYER_SE2, 2 + song mus_evolved, MUSIC_PLAYER_SE2, 2 + song mus_obtain_tmhm, MUSIC_PLAYER_SE2, 2 + song mus_lilycove_museum, MUSIC_PLAYER_BGM, 0 + song mus_route122, MUSIC_PLAYER_BGM, 0 + song mus_oceanic_museum, MUSIC_PLAYER_BGM, 0 + song mus_evolution_intro, MUSIC_PLAYER_SE2, 2 + song mus_evolution, MUSIC_PLAYER_BGM, 0 + song mus_move_deleted, MUSIC_PLAYER_SE2, 2 + song mus_encounter_girl, MUSIC_PLAYER_BGM, 0 + song mus_encounter_male, MUSIC_PLAYER_BGM, 0 + song mus_abandoned_ship, MUSIC_PLAYER_BGM, 0 + song mus_fortree, MUSIC_PLAYER_BGM, 0 + song mus_birch_lab, MUSIC_PLAYER_BGM, 0 + song mus_b_tower_rs, MUSIC_PLAYER_BGM, 0 + song mus_encounter_swimmer, MUSIC_PLAYER_BGM, 0 + song mus_cave_of_origin, MUSIC_PLAYER_BGM, 0 + song mus_obtain_berry, MUSIC_PLAYER_SE2, 2 + song mus_awaken_legend, MUSIC_PLAYER_SE2, 2 + song mus_slots_jackpot, MUSIC_PLAYER_SE2, 2 + song mus_slots_win, MUSIC_PLAYER_SE2, 2 + song mus_too_bad, MUSIC_PLAYER_SE2, 2 + song mus_roulette, MUSIC_PLAYER_BGM, 0 + song mus_link_contest_p1, MUSIC_PLAYER_BGM, 0 + song mus_link_contest_p2, MUSIC_PLAYER_BGM, 0 + song mus_link_contest_p3, MUSIC_PLAYER_BGM, 0 + song mus_link_contest_p4, MUSIC_PLAYER_BGM, 0 + song mus_encounter_rich, MUSIC_PLAYER_BGM, 0 + song mus_verdanturf, MUSIC_PLAYER_BGM, 0 + song mus_rustboro, MUSIC_PLAYER_BGM, 0 + song mus_poke_center, MUSIC_PLAYER_BGM, 0 + song mus_route104, MUSIC_PLAYER_BGM, 0 + song mus_route119, MUSIC_PLAYER_BGM, 0 + song mus_cycling, MUSIC_PLAYER_BGM, 0 + song mus_poke_mart, MUSIC_PLAYER_BGM, 0 + song mus_littleroot, MUSIC_PLAYER_BGM, 0 + song mus_mt_chimney, MUSIC_PLAYER_BGM, 0 + song mus_encounter_female, MUSIC_PLAYER_BGM, 0 + song mus_lilycove, MUSIC_PLAYER_BGM, 0 + song mus_route111, MUSIC_PLAYER_BGM, 0 + song mus_help, MUSIC_PLAYER_BGM, 0 + song mus_underwater, MUSIC_PLAYER_BGM, 0 + song mus_victory_trainer, MUSIC_PLAYER_BGM, 0 + song mus_title, MUSIC_PLAYER_BGM, 0 + song mus_intro, MUSIC_PLAYER_BGM, 0 + song mus_encounter_may, MUSIC_PLAYER_BGM, 0 + song mus_encounter_intense, MUSIC_PLAYER_BGM, 0 + song mus_encounter_cool, MUSIC_PLAYER_BGM, 0 + song mus_route113, MUSIC_PLAYER_BGM, 0 + song mus_encounter_aqua, MUSIC_PLAYER_BGM, 0 + song mus_follow_me, MUSIC_PLAYER_BGM, 0 + song mus_encounter_brendan, MUSIC_PLAYER_BGM, 0 + song mus_ever_grande, MUSIC_PLAYER_BGM, 0 + song mus_encounter_suspicious, MUSIC_PLAYER_BGM, 0 + song mus_victory_aqua_magma, MUSIC_PLAYER_BGM, 0 + song mus_cable_car, MUSIC_PLAYER_BGM, 0 + song mus_game_corner, MUSIC_PLAYER_BGM, 0 + song mus_dewford, MUSIC_PLAYER_BGM, 0 + song mus_safari_zone, MUSIC_PLAYER_BGM, 0 + song mus_victory_road, MUSIC_PLAYER_BGM, 0 + song mus_aqua_magma_hideout, MUSIC_PLAYER_BGM, 0 + song mus_sailing, MUSIC_PLAYER_BGM, 0 + song mus_mt_pyre, MUSIC_PLAYER_BGM, 0 + song mus_slateport, MUSIC_PLAYER_BGM, 0 + song mus_mt_pyre_exterior, MUSIC_PLAYER_BGM, 0 + song mus_school, MUSIC_PLAYER_BGM, 0 + song mus_hall_of_fame, MUSIC_PLAYER_BGM, 0 + song mus_fallarbor, MUSIC_PLAYER_BGM, 0 + song mus_sealed_chamber, MUSIC_PLAYER_BGM, 0 + song mus_contest_winner, MUSIC_PLAYER_BGM, 0 + song mus_contest, MUSIC_PLAYER_BGM, 0 + song mus_encounter_magma, MUSIC_PLAYER_BGM, 0 + song mus_intro_battle, MUSIC_PLAYER_BGM, 0 + song mus_abnormal_weather, MUSIC_PLAYER_BGM, 0 + song mus_weather_groudon, MUSIC_PLAYER_BGM, 0 + song mus_sootopolis, MUSIC_PLAYER_BGM, 0 + song mus_contest_results, MUSIC_PLAYER_BGM, 0 + song mus_hall_of_fame_room, MUSIC_PLAYER_BGM, 0 + song mus_trick_house, MUSIC_PLAYER_BGM, 0 + song mus_encounter_twins, MUSIC_PLAYER_BGM, 0 + song mus_encounter_elite_four, MUSIC_PLAYER_BGM, 0 + song mus_encounter_hiker, MUSIC_PLAYER_BGM, 0 + song mus_contest_lobby, MUSIC_PLAYER_BGM, 0 + song mus_encounter_interviewer, MUSIC_PLAYER_BGM, 0 + song mus_encounter_champion, MUSIC_PLAYER_BGM, 0 + song mus_credits, MUSIC_PLAYER_BGM, 0 + song mus_end, MUSIC_PLAYER_BGM, 0 + song mus_b_frontier, MUSIC_PLAYER_BGM, 0 + song mus_b_arena, MUSIC_PLAYER_BGM, 0 + song mus_obtain_b_points, MUSIC_PLAYER_SE2, 2 + song mus_register_match_call, MUSIC_PLAYER_SE2, 2 + song mus_b_pyramid, MUSIC_PLAYER_BGM, 0 + song mus_b_pyramid_top, MUSIC_PLAYER_BGM, 0 + song mus_b_palace, MUSIC_PLAYER_BGM, 0 + song mus_rayquaza_appears, MUSIC_PLAYER_BGM, 0 + song mus_b_tower, MUSIC_PLAYER_BGM, 0 + song mus_obtain_symbol, MUSIC_PLAYER_SE2, 2 + song mus_b_dome, MUSIC_PLAYER_BGM, 0 + song mus_b_pike, MUSIC_PLAYER_BGM, 0 + song mus_b_factory, MUSIC_PLAYER_BGM, 0 + song mus_vs_rayquaza, MUSIC_PLAYER_BGM, 0 + song mus_vs_frontier_brain, MUSIC_PLAYER_BGM, 0 + song mus_vs_mew, MUSIC_PLAYER_BGM, 0 + song mus_b_dome_lobby, MUSIC_PLAYER_BGM, 0 + song mus_vs_wild, MUSIC_PLAYER_BGM, 0 + song mus_vs_aqua_magma, MUSIC_PLAYER_BGM, 0 + song mus_vs_trainer, MUSIC_PLAYER_BGM, 0 + song mus_vs_gym_leader, MUSIC_PLAYER_BGM, 0 + song mus_vs_champion, MUSIC_PLAYER_BGM, 0 + song mus_vs_regi, MUSIC_PLAYER_BGM, 0 + song mus_vs_kyogre_groudon, MUSIC_PLAYER_BGM, 0 + song mus_vs_rival, MUSIC_PLAYER_BGM, 0 + song mus_vs_elite_four, MUSIC_PLAYER_BGM, 0 + song mus_vs_aqua_magma_leader, MUSIC_PLAYER_BGM, 0 + song mus_rg_follow_me, MUSIC_PLAYER_BGM, 0 + song mus_rg_game_corner, MUSIC_PLAYER_BGM, 0 + song mus_rg_rocket_hideout, MUSIC_PLAYER_BGM, 0 + song mus_rg_gym, MUSIC_PLAYER_BGM, 0 + song mus_rg_jigglypuff, MUSIC_PLAYER_SE2, 2 + song mus_rg_intro_fight, MUSIC_PLAYER_BGM, 0 + song mus_rg_title, MUSIC_PLAYER_BGM, 0 + song mus_rg_cinnabar, MUSIC_PLAYER_BGM, 0 + song mus_rg_lavender, MUSIC_PLAYER_BGM, 0 + song mus_rg_heal, MUSIC_PLAYER_BGM, 0 + song mus_rg_cycling, MUSIC_PLAYER_BGM, 0 + song mus_rg_encounter_rocket, MUSIC_PLAYER_BGM, 0 + song mus_rg_encounter_girl, MUSIC_PLAYER_BGM, 0 + song mus_rg_encounter_boy, MUSIC_PLAYER_BGM, 0 + song mus_rg_hall_of_fame, MUSIC_PLAYER_BGM, 0 + song mus_rg_viridian_forest, MUSIC_PLAYER_BGM, 0 + song mus_rg_mt_moon, MUSIC_PLAYER_BGM, 0 + song mus_rg_poke_mansion, MUSIC_PLAYER_BGM, 0 + song mus_rg_credits, MUSIC_PLAYER_BGM, 0 + song mus_rg_route1, MUSIC_PLAYER_BGM, 0 + song mus_rg_route24, MUSIC_PLAYER_BGM, 0 + song mus_rg_route3, MUSIC_PLAYER_BGM, 0 + song mus_rg_route11, MUSIC_PLAYER_BGM, 0 + song mus_rg_victory_road, MUSIC_PLAYER_BGM, 0 + song mus_rg_vs_gym_leader, MUSIC_PLAYER_BGM, 0 + song mus_rg_vs_trainer, MUSIC_PLAYER_BGM, 0 + song mus_rg_vs_wild, MUSIC_PLAYER_BGM, 0 + song mus_rg_vs_champion, MUSIC_PLAYER_BGM, 0 + song mus_rg_pallet, MUSIC_PLAYER_BGM, 0 + song mus_rg_oak_lab, MUSIC_PLAYER_BGM, 0 + song mus_rg_oak, MUSIC_PLAYER_BGM, 0 + song mus_rg_poke_center, MUSIC_PLAYER_BGM, 0 + song mus_rg_ss_anne, MUSIC_PLAYER_BGM, 0 + song mus_rg_surf, MUSIC_PLAYER_BGM, 0 + song mus_rg_poke_tower, MUSIC_PLAYER_BGM, 0 + song mus_rg_silph, MUSIC_PLAYER_BGM, 0 + song mus_rg_fuchsia, MUSIC_PLAYER_BGM, 0 + song mus_rg_celadon, MUSIC_PLAYER_BGM, 0 + song mus_rg_victory_trainer, MUSIC_PLAYER_BGM, 0 + song mus_rg_victory_wild, MUSIC_PLAYER_BGM, 0 + song mus_rg_victory_gym_leader, MUSIC_PLAYER_BGM, 0 + song mus_rg_vermillion, MUSIC_PLAYER_BGM, 0 + song mus_rg_pewter, MUSIC_PLAYER_BGM, 0 + song mus_rg_encounter_rival, MUSIC_PLAYER_BGM, 0 + song mus_rg_rival_exit, MUSIC_PLAYER_BGM, 0 + song mus_rg_dex_rating, MUSIC_PLAYER_SE2, 2 + song mus_rg_obtain_key_item, MUSIC_PLAYER_SE2, 2 + song mus_rg_caught_intro, MUSIC_PLAYER_SE2, 2 + song mus_rg_photo, MUSIC_PLAYER_SE2, 2 + song mus_rg_game_freak, MUSIC_PLAYER_BGM, 0 + song mus_rg_caught, MUSIC_PLAYER_BGM, 0 + song mus_rg_new_game_instruct, MUSIC_PLAYER_BGM, 0 + song mus_rg_new_game_intro, MUSIC_PLAYER_BGM, 0 + song mus_rg_new_game_exit, MUSIC_PLAYER_BGM, 0 + song mus_rg_poke_jump, MUSIC_PLAYER_BGM, 0 + song mus_rg_union_room, MUSIC_PLAYER_BGM, 0 + song mus_rg_net_center, MUSIC_PLAYER_BGM, 0 + song mus_rg_mystery_gift, MUSIC_PLAYER_BGM, 0 + song mus_rg_berry_pick, MUSIC_PLAYER_BGM, 0 + song mus_rg_sevii_cave, MUSIC_PLAYER_BGM, 0 + song mus_rg_teachy_tv_show, MUSIC_PLAYER_BGM, 0 + song mus_rg_sevii_route, MUSIC_PLAYER_BGM, 0 + song mus_rg_sevii_dungeon, MUSIC_PLAYER_BGM, 0 + song mus_rg_sevii_123, MUSIC_PLAYER_BGM, 0 + song mus_rg_sevii_45, MUSIC_PLAYER_BGM, 0 + song mus_rg_sevii_67, MUSIC_PLAYER_BGM, 0 + song mus_rg_poke_flute, MUSIC_PLAYER_SE2, 2 + song mus_rg_vs_deoxys, MUSIC_PLAYER_BGM, 0 + song mus_rg_vs_mewtwo, MUSIC_PLAYER_BGM, 0 + song mus_rg_vs_legend, MUSIC_PLAYER_BGM, 0 + song mus_rg_encounter_gym_leader, MUSIC_PLAYER_BGM, 0 + song mus_rg_encounter_deoxys, MUSIC_PLAYER_BGM, 0 + song mus_rg_trainer_tower, MUSIC_PLAYER_BGM, 0 + song mus_rg_slow_pallet, MUSIC_PLAYER_BGM, 0 + song mus_rg_teachy_tv_menu, MUSIC_PLAYER_BGM, 0 + song ph_trap_blend, MUSIC_PLAYER_SE2, 2 + song ph_trap_held, MUSIC_PLAYER_SE2, 2 + song ph_trap_solo, MUSIC_PLAYER_SE2, 2 + song ph_face_blend, MUSIC_PLAYER_SE2, 2 + song ph_face_held, MUSIC_PLAYER_SE2, 2 + song ph_face_solo, MUSIC_PLAYER_SE2, 2 + song ph_cloth_blend, MUSIC_PLAYER_SE2, 2 + song ph_cloth_held, MUSIC_PLAYER_SE2, 2 + song ph_cloth_solo, MUSIC_PLAYER_SE2, 2 + song ph_dress_blend, MUSIC_PLAYER_SE2, 2 + song ph_dress_held, MUSIC_PLAYER_SE2, 2 + song ph_dress_solo, MUSIC_PLAYER_SE2, 2 + song ph_fleece_blend, MUSIC_PLAYER_SE2, 2 + song ph_fleece_held, MUSIC_PLAYER_SE2, 2 + song ph_fleece_solo, MUSIC_PLAYER_SE2, 2 + song ph_kit_blend, MUSIC_PLAYER_SE2, 2 + song ph_kit_held, MUSIC_PLAYER_SE2, 2 + song ph_kit_solo, MUSIC_PLAYER_SE2, 2 + song ph_price_blend, MUSIC_PLAYER_SE2, 2 + song ph_price_held, MUSIC_PLAYER_SE2, 2 + song ph_price_solo, MUSIC_PLAYER_SE2, 2 + song ph_lot_blend, MUSIC_PLAYER_SE2, 2 + song ph_lot_held, MUSIC_PLAYER_SE2, 2 + song ph_lot_solo, MUSIC_PLAYER_SE2, 2 + song ph_goat_blend, MUSIC_PLAYER_SE2, 2 + song ph_goat_held, MUSIC_PLAYER_SE2, 2 + song ph_goat_solo, MUSIC_PLAYER_SE2, 2 + song ph_thought_blend, MUSIC_PLAYER_SE2, 2 + song ph_thought_held, MUSIC_PLAYER_SE2, 2 + song ph_thought_solo, MUSIC_PLAYER_SE2, 2 + song ph_choice_blend, MUSIC_PLAYER_SE2, 2 + song ph_choice_held, MUSIC_PLAYER_SE2, 2 + song ph_choice_solo, MUSIC_PLAYER_SE2, 2 + song ph_mouth_blend, MUSIC_PLAYER_SE2, 2 + song ph_mouth_held, MUSIC_PLAYER_SE2, 2 + song ph_mouth_solo, MUSIC_PLAYER_SE2, 2 + song ph_foot_blend, MUSIC_PLAYER_SE2, 2 + song ph_foot_held, MUSIC_PLAYER_SE2, 2 + song ph_foot_solo, MUSIC_PLAYER_SE2, 2 + song ph_goose_blend, MUSIC_PLAYER_SE2, 2 + song ph_goose_held, MUSIC_PLAYER_SE2, 2 + song ph_goose_solo, MUSIC_PLAYER_SE2, 2 + song ph_strut_blend, MUSIC_PLAYER_SE2, 2 + song ph_strut_held, MUSIC_PLAYER_SE2, 2 + song ph_strut_solo, MUSIC_PLAYER_SE2, 2 + song ph_cure_blend, MUSIC_PLAYER_SE2, 2 + song ph_cure_held, MUSIC_PLAYER_SE2, 2 + song ph_cure_solo, MUSIC_PLAYER_SE2, 2 + song ph_nurse_blend, MUSIC_PLAYER_SE2, 2 + song ph_nurse_held, MUSIC_PLAYER_SE2, 2 + song ph_nurse_solo, MUSIC_PLAYER_SE2, 2 .align 2 dummy_song_header: diff --git a/sound/songs/midi/midi.cfg b/sound/songs/midi/midi.cfg index 5802904b4130..68df84d7a5ce 100644 --- a/sound/songs/midi/midi.cfg +++ b/sound/songs/midi/midi.cfg @@ -1,420 +1,420 @@ -mus_abandoned_ship.mid: -E -R50 -G030 -V080 -mus_abnormal_weather.mid: -E -R50 -G089 -V080 -mus_aqua_magma_hideout.mid: -E -R50 -G076 -V084 -mus_awaken_legend.mid: -E -R50 -G012 -V090 -P5 -mus_b_arena.mid: -E -R50 -G104 -V090 -mus_b_dome_lobby.mid: -E -R50 -G111 -V056 -mus_b_dome.mid: -E -R50 -G111 -V090 -mus_b_factory.mid: -E -R50 -G113 -V100 -mus_b_frontier.mid: -E -R50 -G103 -V094 -mus_b_palace.mid: -E -R50 -G108 -V105 -mus_b_pike.mid: -E -R50 -G112 -V092 -mus_b_pyramid_top.mid: -E -R50 -G107 -V077 -mus_b_pyramid.mid: -E -R50 -G106 -V079 -mus_b_tower_rs.mid: -E -R50 -G035 -V080 -mus_b_tower.mid: -E -R50 -G110 -V100 -mus_birch_lab.mid: -E -R50 -G033 -V080 +mus_abandoned_ship.mid: -E -R50 -G_abandoned_ship -V080 +mus_abnormal_weather.mid: -E -R50 -G_abnormal_weather -V080 +mus_aqua_magma_hideout.mid: -E -R50 -G_aqua_magma_hideout -V084 +mus_awaken_legend.mid: -E -R50 -G_fanfare -V090 -P5 +mus_b_arena.mid: -E -R50 -G_b_arena -V090 +mus_b_dome_lobby.mid: -E -R50 -G_b_dome -V056 +mus_b_dome.mid: -E -R50 -G_b_dome -V090 +mus_b_factory.mid: -E -R50 -G_b_factory -V100 +mus_b_frontier.mid: -E -R50 -G_b_frontier -V094 +mus_b_palace.mid: -E -R50 -G_b_palace -V105 +mus_b_pike.mid: -E -R50 -G_b_pike -V092 +mus_b_pyramid_top.mid: -E -R50 -G_b_pyramid_top -V077 +mus_b_pyramid.mid: -E -R50 -G_b_pyramid -V079 +mus_b_tower_rs.mid: -E -R50 -G_b_tower_rs -V080 +mus_b_tower.mid: -E -R50 -G_b_tower -V100 +mus_birch_lab.mid: -E -R50 -G_birch_lab -V080 mus_c_comm_center.mid: -E -R50 -V080 mus_c_vs_legend_beast.mid: -E -R50 -V080 -mus_cable_car.mid: -E -R50 -G071 -V078 -mus_caught.mid: -E -R50 -G025 -V080 -mus_cave_of_origin.mid: -E -R50 -G037 -V080 -mus_contest_lobby.mid: -E -R50 -G098 -V060 -mus_contest_results.mid: -E -R50 -G092 -V080 -mus_contest_winner.mid: -E -R50 -G085 -V100 -mus_contest.mid: -E -R50 -G086 -V088 -mus_credits.mid: -E -R50 -G101 -V100 -mus_cycling.mid: -E -R50 -G049 -V083 -mus_dewford.mid: -E -R50 -G073 -V078 +mus_cable_car.mid: -E -R50 -G_cable_car -V078 +mus_caught.mid: -E -R50 -G_victory_wild -V080 +mus_cave_of_origin.mid: -E -R50 -G_cave_of_origin -V080 +mus_contest_lobby.mid: -E -R50 -G_contest_lobby -V060 +mus_contest_results.mid: -E -R50 -G_contest_results -V080 +mus_contest_winner.mid: -E -R50 -G_contest_winner -V100 +mus_contest.mid: -E -R50 -G_contest -V088 +mus_credits.mid: -E -R50 -G_credits -V100 +mus_cycling.mid: -E -R50 -G_cycling -V083 +mus_dewford.mid: -E -R50 -G_dewford -V078 mus_dummy.mid: -E -R40 -mus_encounter_aqua.mid: -E -R50 -G065 -V086 -mus_encounter_brendan.mid: -E -R50 -G067 -V078 -mus_encounter_champion.mid: -E -R50 -G100 -V076 -mus_encounter_cool.mid: -E -R50 -G063 -V086 -mus_encounter_elite_four.mid: -E -R50 -G096 -V078 -mus_encounter_female.mid: -E -R50 -G053 -V072 -mus_encounter_girl.mid: -E -R50 -G027 -V080 -mus_encounter_hiker.mid: -E -R50 -G097 -V076 -mus_encounter_intense.mid: -E -R50 -G062 -V078 -mus_encounter_interviewer.mid: -E -R50 -G099 -V062 -mus_encounter_magma.mid: -E -R50 -G087 -V072 -mus_encounter_male.mid: -E -R50 -G028 -V080 -mus_encounter_may.mid: -E -R50 -G061 -V078 -mus_encounter_rich.mid: -E -R50 -G043 -V094 -mus_encounter_suspicious.mid: -E -R50 -G069 -V078 -mus_encounter_swimmer.mid: -E -R50 -G036 -V080 -mus_encounter_twins.mid: -E -R50 -G095 -V075 -mus_end.mid: -E -R50 -G102 -V036 -mus_ever_grande.mid: -E -R50 -G068 -V086 -mus_evolution_intro.mid: -E -R50 -G026 -V080 -mus_evolution.mid: -E -R50 -G026 -V080 -mus_evolved.mid: -E -R50 -G012 -V090 -P5 -mus_fallarbor.mid: -E -R50 -G083 -V100 -mus_follow_me.mid: -E -R50 -G066 -V074 -mus_fortree.mid: -E -R50 -G032 -V080 -mus_game_corner.mid: -E -R50 -G072 -V072 +mus_encounter_aqua.mid: -E -R50 -G_encounter_aqua -V086 +mus_encounter_brendan.mid: -E -R50 -G_encounter_brendan -V078 +mus_encounter_champion.mid: -E -R50 -G_encounter_champion -V076 +mus_encounter_cool.mid: -E -R50 -G_encounter_cool -V086 +mus_encounter_elite_four.mid: -E -R50 -G_encounter_elite_four -V078 +mus_encounter_female.mid: -E -R50 -G_encounter_female -V072 +mus_encounter_girl.mid: -E -R50 -G_encounter_girl -V080 +mus_encounter_hiker.mid: -E -R50 -G_encounter_hiker -V076 +mus_encounter_intense.mid: -E -R50 -G_encounter_intense -V078 +mus_encounter_interviewer.mid: -E -R50 -G_encounter_interviewer -V062 +mus_encounter_magma.mid: -E -R50 -G_encounter_magma -V072 +mus_encounter_male.mid: -E -R50 -G_encounter_male -V080 +mus_encounter_may.mid: -E -R50 -G_encounter_may -V078 +mus_encounter_rich.mid: -E -R50 -G_encounter_rich -V094 +mus_encounter_suspicious.mid: -E -R50 -G_encounter_suspicious -V078 +mus_encounter_swimmer.mid: -E -R50 -G_encounter_swimmer -V080 +mus_encounter_twins.mid: -E -R50 -G_encounter_twins -V075 +mus_end.mid: -E -R50 -G_end -V036 +mus_ever_grande.mid: -E -R50 -G_ever_grande -V086 +mus_evolution_intro.mid: -E -R50 -G_evolution -V080 +mus_evolution.mid: -E -R50 -G_evolution -V080 +mus_evolved.mid: -E -R50 -G_fanfare -V090 -P5 +mus_fallarbor.mid: -E -R50 -G_fallarbor -V100 +mus_follow_me.mid: -E -R50 -G_follow_me -V074 +mus_fortree.mid: -E -R50 -G_fortree -V080 +mus_game_corner.mid: -E -R50 -G_game_corner -V072 mus_gsc_pewter.mid: -E -R50 -V080 mus_gsc_route38.mid: -E -R50 -V080 -mus_gym.mid: -E -R50 -G013 -V080 -mus_hall_of_fame_room.mid: -E -R50 -G093 -V080 -mus_hall_of_fame.mid: -E -R50 -G082 -V078 -mus_heal.mid: -E -R50 -G012 -V090 -P5 -mus_help.mid: -E -R50 -G056 -V078 -mus_intro_battle.mid: -E -R50 -G088 -V088 -mus_intro.mid: -E -R50 -G060 -V090 -mus_level_up.mid: -E -R50 -G012 -V090 -P5 -mus_lilycove_museum.mid: -E -R50 -G020 -V080 -mus_lilycove.mid: -E -R50 -G054 -V085 -mus_link_contest_p1.mid: -E -R50 -G039 -V079 -mus_link_contest_p2.mid: -E -R50 -G040 -V090 -mus_link_contest_p3.mid: -E -R50 -G041 -V075 -mus_link_contest_p4.mid: -E -R50 -G042 -V090 -mus_littleroot_test.mid: -E -R50 -G034 -V099 -mus_littleroot.mid: -E -R50 -G051 -V100 -mus_move_deleted.mid: -E -R50 -G012 -V090 -P5 -mus_mt_chimney.mid: -E -R50 -G052 -V078 -mus_mt_pyre_exterior.mid: -E -R50 -G080 -V080 -mus_mt_pyre.mid: -E -R50 -G078 -V088 -mus_obtain_b_points.mid: -E -R50 -G103 -V090 -P5 -mus_obtain_badge.mid: -E -R50 -G012 -V090 -P5 -mus_obtain_berry.mid: -E -R50 -G012 -V090 -P5 -mus_obtain_item.mid: -E -R50 -G012 -V090 -P5 -mus_obtain_symbol.mid: -E -R50 -G103 -V100 -P5 -mus_obtain_tmhm.mid: -E -R50 -G012 -V090 -P5 -mus_oceanic_museum.mid: -E -R50 -G023 -V080 -mus_oldale.mid: -E -R50 -G019 -V080 -mus_petalburg_woods.mid: -E -R50 -G018 -V080 -mus_petalburg.mid: -E -R50 -G015 -V080 -mus_poke_center.mid: -E -R50 -G046 -V092 -mus_poke_mart.mid: -E -R50 -G050 -V085 -mus_rayquaza_appears.mid: -E -R50 -G109 -V090 -mus_register_match_call.mid: -E -R50 -G105 -V090 -P5 -mus_rg_berry_pick.mid: -E -R50 -G132 -V090 -mus_rg_caught_intro.mid: -E -R50 -G179 -V094 -P5 -mus_rg_caught.mid: -E -R50 -G170 -V100 -mus_rg_celadon.mid: -E -R50 -G168 -V070 -mus_rg_cinnabar.mid: -E -R50 -G138 -V090 -mus_rg_credits.mid: -E -R50 -G149 -V090 -mus_rg_cycling.mid: -E -R50 -G141 -V090 -mus_rg_dex_rating.mid: -E -R50 -G175 -V070 -P5 -mus_rg_encounter_boy.mid: -E -R50 -G144 -V090 -mus_rg_encounter_deoxys.mid: -E -R50 -G184 -V079 -mus_rg_encounter_girl.mid: -E -R50 -G143 -V051 -mus_rg_encounter_gym_leader: -E -R50 -G144 -V090 -mus_rg_encounter_rival.mid: -E -R50 -G174 -V079 -mus_rg_encounter_rocket.mid: -E -R50 -G142 -V096 -mus_rg_follow_me.mid: -E -R50 -G131 -V068 -mus_rg_fuchsia.mid: -E -R50 -G167 -V090 -mus_rg_game_corner.mid: -E -R50 -G132 -V090 -mus_rg_game_freak.mid: -E -R50 -G181 -V075 -mus_rg_gym.mid: -E -R50 -G134 -V090 -mus_rg_hall_of_fame.mid: -E -R50 -G145 -V079 -mus_rg_heal.mid: -E -R50 -G140 -V090 -mus_rg_intro_fight.mid: -E -R50 -G136 -V090 -mus_rg_jigglypuff.mid: -E -R50 -G135 -V068 -P5 -mus_rg_lavender.mid: -E -R50 -G139 -V090 -mus_rg_mt_moon.mid: -E -R50 -G147 -V090 -mus_rg_mystery_gift.mid: -E -R50 -G183 -V100 -mus_rg_net_center.mid: -E -R50 -G162 -V096 -mus_rg_new_game_exit.mid: -E -R50 -G182 -V088 -mus_rg_new_game_instruct.mid: -E -R50 -G182 -V085 -mus_rg_new_game_intro.mid: -E -R50 -G182 -V088 -mus_rg_oak_lab.mid: -E -R50 -G160 -V075 -mus_rg_oak.mid: -E -R50 -G161 -V086 -mus_rg_obtain_key_item.mid: -E -R50 -G178 -V077 -P5 -mus_rg_pallet.mid: -E -R50 -G159 -V100 -mus_rg_pewter.mid: -E -R50 -G173 -V084 -mus_rg_photo.mid: -E -R50 -G180 -V100 -P5 -mus_rg_poke_center.mid: -E -R50 -G162 -V096 -mus_rg_poke_flute.mid: -E -R50 -G165 -V048 -P5 -mus_rg_poke_jump.mid: -E -R50 -G132 -V090 -mus_rg_poke_mansion.mid: -E -R50 -G148 -V090 -mus_rg_poke_tower.mid: -E -R50 -G165 -V090 -mus_rg_rival_exit.mid: -E -R50 -G174 -V079 -mus_rg_rocket_hideout.mid: -E -R50 -G133 -V090 -mus_rg_route1.mid: -E -R50 -G150 -V079 -mus_rg_route3.mid: -E -R50 -G152 -V083 -mus_rg_route11.mid: -E -R50 -G153 -V090 -mus_rg_route24.mid: -E -R50 -G151 -V086 -mus_rg_sevii_45.mid: -E -R50 -G188 -V084 -mus_rg_sevii_67.mid: -E -R50 -G189 -V084 -mus_rg_sevii_123.mid: -E -R50 -G173 -V084 -mus_rg_sevii_cave.mid: -E -R50 -G147 -V090 -mus_rg_sevii_dungeon.mid: -E -R50 -G146 -V090 -mus_rg_sevii_route.mid: -E -R50 -G187 -V080 -mus_rg_silph.mid: -E -R50 -G166 -V076 -mus_rg_slow_pallet.mid: -E -R50 -G159 -V092 -mus_rg_ss_anne.mid: -E -R50 -G163 -V090 -mus_rg_surf.mid: -E -R50 -G164 -V071 -mus_rg_teachy_tv_menu.mid: -E -R50 -G186 -V059 -mus_rg_teachy_tv_show.mid: -E -R50 -G131 -V068 -mus_rg_title.mid: -E -R50 -G137 -V090 -mus_rg_trainer_tower.mid: -E -R50 -G134 -V090 -mus_rg_union_room.mid: -E -R50 -G132 -V090 -mus_rg_vermillion.mid: -E -R50 -G172 -V090 -mus_rg_victory_gym_leader.mid: -E -R50 -G171 -V090 -mus_rg_victory_road.mid: -E -R50 -G154 -V090 -mus_rg_victory_trainer.mid: -E -R50 -G169 -V089 -mus_rg_victory_wild.mid: -E -R50 -G170 -V090 -mus_rg_viridian_forest.mid: -E -R50 -G146 -V090 -mus_rg_vs_champion.mid: -E -R50 -G158 -V090 -mus_rg_vs_deoxys.mid: -E -R50 -G185 -V080 -mus_rg_vs_gym_leader.mid: -E -R50 -G155 -V090 -mus_rg_vs_legend.mid: -E -R50 -G157 -V090 -mus_rg_vs_mewtwo.mid: -E -R50 -G157 -V090 -mus_rg_vs_trainer.mid: -E -R50 -G156 -V090 -mus_rg_vs_wild.mid: -E -R50 -G157 -V090 -mus_roulette.mid: -E -R50 -G038 -V080 -mus_route101.mid: -E -R50 -G011 -V080 -mus_route104.mid: -E -R50 -G047 -V097 -mus_route110.mid: -E -R50 -G010 -V080 -mus_route111.mid: -E -R50 -G055 -V076 -mus_route113.mid: -E -R50 -G064 -V084 -mus_route119.mid: -E -R50 -G048 -V096 -mus_route120.mid: -E -R50 -G014 -V080 -mus_route122.mid: -E -R50 -G021 -V080 -mus_rustboro.mid: -E -R50 -G045 -V085 -mus_safari_zone.mid: -E -R50 -G074 -V082 -mus_sailing.mid: -E -R50 -G077 -V086 -mus_school.mid: -E -R50 -G081 -V100 -mus_sealed_chamber.mid: -E -R50 -G084 -V100 -mus_slateport.mid: -E -R50 -G079 -V070 -mus_slots_jackpot.mid: -E -R50 -G012 -V090 -P5 -mus_slots_win.mid: -E -R50 -G012 -V090 -P5 -mus_sootopolis.mid: -E -R50 -G091 -V062 -mus_surf.mid: -E -R50 -G017 -V080 -mus_title.mid: -E -R50 -G059 -V090 -mus_too_bad.mid: -E -R50 -G012 -V090 -P5 -mus_trick_house.mid: -E -R50 -G094 -V070 -mus_underwater.mid: -E -R50 -G057 -V094 -mus_verdanturf.mid: -E -R50 -G044 -V090 -mus_victory_aqua_magma.mid: -E -R50 -G070 -V088 -mus_victory_gym_leader.mid: -E -R50 -G024 -V080 -mus_victory_league.mid: -E -R50 -G029 -V080 -mus_victory_road.mid: -E -R50 -G075 -V076 -mus_victory_trainer.mid: -E -R50 -G058 -V091 -mus_victory_wild.mid: -E -R50 -G025 -V080 -mus_vs_aqua_magma_leader.mid: -E -R50 -G126 -V080 -P1 -mus_vs_aqua_magma.mid: -E -R50 -G118 -V080 -P1 -mus_vs_champion.mid: -E -R50 -G121 -V080 -P1 -mus_vs_elite_four.mid: -E -R50 -G125 -V080 -P1 -mus_vs_frontier_brain.mid: -E -R50 -G115 -V090 -P1 -mus_vs_gym_leader.mid: -E -R50 -G120 -V080 -P1 -mus_vs_kyogre_groudon.mid: -E -R50 -G123 -V080 -P1 -mus_vs_mew.mid: -E -R50 -G116 -V090 -mus_vs_rayquaza.mid: -E -R50 -G114 -V080 -P1 -mus_vs_regi.mid: -E -R50 -G122 -V080 -P1 -mus_vs_rival.mid: -E -R50 -G124 -V080 -P1 -mus_vs_trainer.mid: -E -R50 -G119 -V080 -P1 -mus_vs_wild.mid: -E -R50 -G117 -V080 -P1 -mus_weather_groudon.mid: -E -R50 -G090 -V050 -ph_choice_blend.mid: -E -G130 -P4 -ph_choice_held.mid: -E -G130 -P4 -ph_choice_solo.mid: -E -G130 -P4 -ph_cloth_blend.mid: -E -G130 -P4 -ph_cloth_held.mid: -E -G130 -P4 -ph_cloth_solo.mid: -E -G130 -P4 -ph_cure_blend.mid: -E -G130 -P4 -ph_cure_held.mid: -E -G130 -P4 -ph_cure_solo.mid: -E -G130 -P4 -ph_dress_blend.mid: -E -G130 -P4 -ph_dress_held.mid: -E -G130 -P4 -ph_dress_solo.mid: -E -G130 -P4 -ph_face_blend.mid: -E -G130 -P4 -ph_face_held.mid: -E -G130 -P4 -ph_face_solo.mid: -E -G130 -P4 -ph_fleece_blend.mid: -E -G130 -P4 -ph_fleece_held.mid: -E -G130 -P4 -ph_fleece_solo.mid: -E -G130 -P4 -ph_foot_blend.mid: -E -G130 -P4 -ph_foot_held.mid: -E -G130 -P4 -ph_foot_solo.mid: -E -G130 -P4 -ph_goat_blend.mid: -E -G130 -P4 -ph_goat_held.mid: -E -G130 -P4 -ph_goat_solo.mid: -E -G130 -P4 -ph_goose_blend.mid: -E -G130 -P4 -ph_goose_held.mid: -E -G130 -P4 -ph_goose_solo.mid: -E -G130 -P4 -ph_kit_blend.mid: -E -G130 -P4 -ph_kit_held.mid: -E -G130 -P4 -ph_kit_solo.mid: -E -G130 -P4 -ph_lot_blend.mid: -E -G130 -P4 -ph_lot_held.mid: -E -G130 -P4 -ph_lot_solo.mid: -E -G130 -P4 -ph_mouth_blend.mid: -E -G130 -P4 -ph_mouth_held.mid: -E -G130 -P4 -ph_mouth_solo.mid: -E -G130 -P4 -ph_nurse_blend.mid: -E -G130 -P4 -ph_nurse_held.mid: -E -G130 -P4 -ph_nurse_solo.mid: -E -G130 -P4 -ph_price_blend.mid: -E -G130 -P4 -ph_price_held.mid: -E -G130 -P4 -ph_price_solo.mid: -E -G130 -P4 -ph_strut_blend.mid: -E -G130 -P4 -ph_strut_held.mid: -E -G130 -P4 -ph_strut_solo.mid: -E -G130 -P4 -ph_thought_blend.mid: -E -G130 -P4 -ph_thought_held.mid: -E -G130 -P4 -ph_thought_solo.mid: -E -G130 -P4 -ph_trap_blend.mid: -E -G130 -P4 -ph_trap_held.mid: -E -G130 -P4 -ph_trap_solo.mid: -E -G130 -P4 -se_a.mid: -E -R50 -G128 -V095 -P4 -se_applause.mid: -E -R50 -G128 -V100 -P5 -se_arena_timeup1.mid: -E -R50 -G129 -P5 -se_arena_timeup2.mid: -E -R50 -G129 -P5 -se_ball_bounce_1.mid: -E -R50 -G128 -V100 -P4 -se_ball_bounce_2.mid: -E -R50 -G128 -V100 -P4 -se_ball_bounce_3.mid: -E -R50 -G128 -V100 -P4 -se_ball_bounce_4.mid: -E -R50 -G128 -V100 -P4 -se_ball_open.mid: -E -R50 -G127 -V100 -P5 -se_ball_throw.mid: -E -R50 -G128 -V120 -P5 -se_ball_trade.mid: -E -R50 -G127 -V100 -P5 -se_ball_tray_ball.mid: -E -R50 -G128 -V110 -P5 -se_ball_tray_enter.mid: -E -R50 -G128 -V110 -P5 -se_ball_tray_exit.mid: -E -R50 -G127 -V100 -P5 -se_ball.mid: -E -R50 -G127 -V070 -P4 -se_balloon_blue.mid: -E -R50 -G128 -V105 -P4 -se_balloon_red.mid: -E -R50 -G128 -V105 -P4 -se_balloon_yellow.mid: -E -R50 -G128 -V105 -P4 -se_bang.mid: -E -R50 -G128 -V110 -P4 -se_berry_blender.mid: -E -R50 -G128 -V090 -P4 -se_bike_bell.mid: -E -R50 -G128 -V090 -P4 -se_bike_hop.mid: -E -R50 -G127 -V090 -P4 -se_boo.mid: -E -R50 -G127 -V110 -P4 -se_breakable_door.mid: -E -R50 -G128 -V110 -P4 -se_bridge_walk.mid: -E -R50 -G128 -V095 -P4 -se_card.mid: -E -R50 -G127 -V100 -P4 -se_click.mid: -E -R50 -G127 -V110 -P4 -se_contest_condition_lose.mid: -E -R50 -G127 -V110 -P4 -se_contest_curtain_fall.mid: -E -R50 -G128 -V070 -P5 -se_contest_curtain_rise.mid: -E -R50 -G128 -V070 -P5 -se_contest_heart.mid: -E -R50 -G128 -V090 -P5 -se_contest_icon_change.mid: -E -R50 -G128 -V110 -P5 -se_contest_icon_clear.mid: -E -R50 -G128 -V090 -P5 -se_contest_mons_turn.mid: -E -R50 -G128 -V090 -P5 -se_contest_place.mid: -E -R50 -G127 -V110 -P4 -se_dex_search.mid: -E -R50 -G127 -v100 -P5 -se_ding_dong.mid: -E -R50 -G127 -V090 -P5 -se_door.mid: -E -R50 -G127 -V080 -P5 -se_downpour_stop.mid: -E -R50 -G128 -V100 -P2 -se_downpour.mid: -E -R50 -G128 -V100 -P2 -se_e.mid: -E -R50 -G128 -V120 -P4 -se_effective.mid: -E -R50 -G127 -V110 -P5 -se_egg_hatch.mid: -E -R50 -G128 -V120 -P5 -se_elevator.mid: -E -R50 -G128 -V100 -P4 -se_escalator.mid: -E -R50 -G128 -V100 -P4 -se_exit.mid: -E -R50 -G127 -V120 -P5 -se_exp_max.mid: -E -R50 -G128 -V094 -P5 -se_exp.mid: -E -R50 -G127 -V080 -P5 -se_failure.mid: -E -R50 -G127 -V120 -P4 -se_faint.mid: -E -R50 -G127 -V110 -P5 -se_fall.mid: -E -R50 -G128 -V110 -P4 -se_field_poison.mid: -E -R50 -G127 -V110 -P5 -se_flee.mid: -E -R50 -G127 -V090 -P5 -se_fu_zaku.mid: -E -R50 -G127 -V120 -P4 -se_glass_flute.mid: -E -R50 -G128 -V105 -P5 -se_i.mid: -E -R50 -G128 -V120 -P4 -se_ice_break.mid: -E -R50 -G128 -V100 -P4 -se_ice_crack.mid: -E -R50 -G127 -V100 -P4 -se_ice_stairs.mid: -E -R50 -G128 -V090 -P4 -se_intro_blast.mid: -E -R50 -G127 -V100 -P5 -se_itemfinder.mid: -E -R50 -G127 -V090 -P5 -se_lavaridge_fall_warp.mid: -E -R50 -G127 -P4 -se_ledge.mid: -E -R50 -G127 -V100 -P4 -se_low_health.mid: -E -R50 -G127 -V100 -P3 -se_m_bind.mid: -E -R50 -G128 -V100 -P4 -se_m_comet_punch.mid: -E -R50 -G128 -V120 -P4 -se_m_cut.mid: -E -R50 -G128 -V120 -P4 -se_m_double_slap.mid: -E -R50 -G128 -V110 -P4 -se_m_fire_punch.mid: -E -R50 -G128 -V110 -P4 -se_m_fly.mid: -E -R50 -G128 -V110 -P4 -se_m_gust.mid: -E -R50 -G128 -V110 -P4 -se_m_gust2.mid: -E -R50 -G128 -V110 -P4 -se_m_headbutt.mid: -E -R50 -G128 -V110 -P4 -se_m_horn_attack.mid: -E -R50 -G128 -V110 -P4 -se_m_jump_kick.mid: -E -R50 -G128 -V110 -P4 -se_m_leer.mid: -E -R50 -G128 -V110 -P4 -se_m_mega_kick.mid: -E -R50 -G128 -V090 -P4 -se_m_mega_kick2.mid: -E -R50 -G128 -V110 -P4 -se_m_pay_day.mid: -E -R50 -G128 -V095 -P4 -se_m_razor_wind.mid: -E -R50 -G128 -V110 -P4 -se_m_razor_wind2.mid: -E -R50 -G128 -V090 -P4 -se_m_sand_attack.mid: -E -R50 -G128 -V110 -P4 -se_m_scratch.mid: -E -R50 -G128 -V110 -P4 -se_m_swords_dance.mid: -E -R50 -G128 -V100 -P4 -se_m_tail_whip.mid: -E -R50 -G128 -V110 -P4 -se_m_take_down.mid: -E -R50 -G128 -V105 -P4 -se_m_vicegrip.mid: -E -R50 -G128 -V110 -P4 -se_m_wing_attack.mid: -E -R50 -G128 -V105 -P4 -se_mud_ball.mid: -E -R50 -G128 -V110 -P4 -se_mugshot.mid: -E -R50 -G128 -V090 -P5 -se_n.mid: -E -R50 -G128 -P4 -se_not_effective.mid: -E -R50 -G127 -V110 -P5 -se_note_a.mid: -E -R50 -G128 -V110 -P4 -se_note_b.mid: -E -R50 -G128 -V110 -P4 -se_note_c_high.mid: -E -R50 -G128 -V110 -P4 -se_note_c.mid: -E -R50 -G128 -V110 -P4 -se_note_d.mid: -E -R50 -G128 -V110 -P4 -se_note_e.mid: -E -R50 -G128 -V110 -P4 -se_note_f.mid: -E -R50 -G128 -V110 -P4 -se_note_g.mid: -E -R50 -G128 -V110 -P4 -se_o.mid: -E -R50 -G128 -V120 -P4 -se_orb.mid: -E -R50 -G128 -V100 -P5 -se_pc_login.mid: -E -R50 -G127 -V100 -P5 -se_pc_off.mid: -E -R50 -G127 -V100 -P5 -se_pc_on.mid: -E -R50 -G127 -V100 -P5 -se_pike_curtain_close.mid: -E -R50 -G129 -P5 -se_pike_curtain_open.mid: -E -R50 -G129 -P5 -se_pin.mid: -E -R50 -G127 -V060 -P4 -se_pokenav_call.mid: -E -R50 -G129 -V120 -P5 -se_pokenav_hang_up.mid: -E -R50 -G129 -V110 -P5 -se_pokenav_off.mid: -E -R50 -G127 -V100 -P5 -se_pokenav_on.mid: -E -R50 -G127 -V100 -P5 -se_puddle.mid: -E -R50 -G128 -V020 -P4 -se_rain_stop.mid: -E -R50 -G128 -V080 -P2 -se_rain.mid: -E -R50 -G128 -V080 -P2 -se_repel.mid: -E -R50 -G127 -V090 -P4 -se_rg_bag_cursor.mid: -E -R50 -G129 -P5 -se_rg_bag_pocket.mid: -E -R50 -G129 -P5 -se_rg_ball_click.mid: -E -R50 -G129 -V100 -P5 -se_rg_card_flip.mid: -E -R50 -G129 -P5 -se_rg_card_flipping.mid: -E -R50 -G129 -P5 -se_rg_card_open.mid: -E -R50 -G129 -V112 -P5 -se_rg_deoxys_move.mid: -E -R50 -G129 -V080 -P5 -se_rg_door.mid: -E -R50 -G129 -V100 -P5 -se_rg_help_close.mid: -E -R50 -G129 -V095 -P5 -se_rg_help_error.mid: -E -R50 -G129 -V125 -P5 -se_rg_help_open.mid: -E -R50 -G129 -V096 -P5 -se_rg_poke_jump_failure.mid: -E -R50 -G127 -P5 -se_rg_poke_jump_success.mid: -E -R50 -G128 -V110 -P5 -se_rg_shop.mid: -E -R50 -G129 -V080 -P5 -se_rg_ss_anne_horn.mid: -E -R50 -G129 -V096 -P5 -se_rotating_gate.mid: -E -R50 -G128 -V090 -P4 -se_roulette_ball.mid: -E -R50 -G128 -V110 -P2 -se_roulette_ball2.mid: -E -R50 -G128 -V110 -P2 -se_save.mid: -E -R50 -G128 -V080 -P5 -se_select.mid: -E -R50 -G127 -V080 -P5 -se_shiny.mid: -E -R50 -G128 -V095 -P5 -se_ship.mid: -E -R50 -G127 -V075 -P4 -se_shop.mid: -E -R50 -G127 -V090 -P5 -se_sliding_door.mid: -E -R50 -G128 -V095 -P4 -se_success.mid: -E -R50 -G127 -V080 -P4 -se_sudowoodo_shake.mid: -E -R50 -G129 -V077 -P5 -se_super_effective.mid: -E -R50 -G127 -V110 -P5 -se_switch.mid: -E -R50 -G127 -V100 -P4 -se_taillow_wing_flap.mid: -E -R50 -G128 -V105 -P5 -se_thunder.mid: -E -R50 -G128 -V110 -P3 -se_thunder2.mid: -E -R50 -G128 -V110 -P3 -se_thunderstorm_stop.mid: -E -R50 -G128 -V080 -P2 -se_thunderstorm.mid: -E -R50 -G128 -V080 -P2 -se_truck_door.mid: -E -R50 -G128 -V110 -P4 -se_truck_move.mid: -E -R50 -G128 -P4 -se_truck_stop.mid: -E -R50 -G128 -P4 -se_truck_unload.mid: -E -R50 -G127 -P4 -se_u.mid: -E -R50 -G128 -P4 -se_unlock.mid: -E -R50 -G128 -V100 -P4 -se_use_item.mid: -E -R50 -G127 -V100 -P5 -se_vend.mid: -E -R50 -G128 -V110 -P4 -se_warp_in.mid: -E -R50 -G127 -V090 -P4 -se_warp_out.mid: -E -R50 -G127 -V090 -P4 +mus_gym.mid: -E -R50 -G_gym -V080 +mus_hall_of_fame_room.mid: -E -R50 -G_hall_of_fame_room -V080 +mus_hall_of_fame.mid: -E -R50 -G_hall_of_fame -V078 +mus_heal.mid: -E -R50 -G_fanfare -V090 -P5 +mus_help.mid: -E -R50 -G_help -V078 +mus_intro_battle.mid: -E -R50 -G_intro_battle -V088 +mus_intro.mid: -E -R50 -G_intro -V090 +mus_level_up.mid: -E -R50 -G_fanfare -V090 -P5 +mus_lilycove_museum.mid: -E -R50 -G_lilycove_museum -V080 +mus_lilycove.mid: -E -R50 -G_lilycove -V085 +mus_link_contest_p1.mid: -E -R50 -G_link_contest_p1 -V079 +mus_link_contest_p2.mid: -E -R50 -G_link_contest_p2 -V090 +mus_link_contest_p3.mid: -E -R50 -G_link_contest_p3 -V075 +mus_link_contest_p4.mid: -E -R50 -G_link_contest_p4 -V090 +mus_littleroot_test.mid: -E -R50 -G_littleroot_test -V099 +mus_littleroot.mid: -E -R50 -G_littleroot -V100 +mus_move_deleted.mid: -E -R50 -G_fanfare -V090 -P5 +mus_mt_chimney.mid: -E -R50 -G_mt_chimney -V078 +mus_mt_pyre_exterior.mid: -E -R50 -G_mt_pyre_exterior -V080 +mus_mt_pyre.mid: -E -R50 -G_mt_pyre -V088 +mus_obtain_b_points.mid: -E -R50 -G_b_frontier -V090 -P5 +mus_obtain_badge.mid: -E -R50 -G_fanfare -V090 -P5 +mus_obtain_berry.mid: -E -R50 -G_fanfare -V090 -P5 +mus_obtain_item.mid: -E -R50 -G_fanfare -V090 -P5 +mus_obtain_symbol.mid: -E -R50 -G_b_frontier -V100 -P5 +mus_obtain_tmhm.mid: -E -R50 -G_fanfare -V090 -P5 +mus_oceanic_museum.mid: -E -R50 -G_oceanic_museum -V080 +mus_oldale.mid: -E -R50 -G_oldale -V080 +mus_petalburg_woods.mid: -E -R50 -G_petalburg_woods -V080 +mus_petalburg.mid: -E -R50 -G_petalburg -V080 +mus_poke_center.mid: -E -R50 -G_poke_center -V092 +mus_poke_mart.mid: -E -R50 -G_poke_mart -V085 +mus_rayquaza_appears.mid: -E -R50 -G_rayquaza_appears -V090 +mus_register_match_call.mid: -E -R50 -G_register_match_call -V090 -P5 +mus_rg_berry_pick.mid: -E -R50 -G_rg_game_corner -V090 +mus_rg_caught_intro.mid: -E -R50 -G_rg_caught_intro -V094 -P5 +mus_rg_caught.mid: -E -R50 -G_rg_victory_wild -V100 +mus_rg_celadon.mid: -E -R50 -G_rg_celadon -V070 +mus_rg_cinnabar.mid: -E -R50 -G_rg_cinnabar -V090 +mus_rg_credits.mid: -E -R50 -G_rg_credits -V090 +mus_rg_cycling.mid: -E -R50 -G_rg_cycling -V090 +mus_rg_dex_rating.mid: -E -R50 -G_rg_dex_rating -V070 -P5 +mus_rg_encounter_boy.mid: -E -R50 -G_rg_encounter_boy -V090 +mus_rg_encounter_deoxys.mid: -E -R50 -G_rg_encounter_deoxys -V079 +mus_rg_encounter_girl.mid: -E -R50 -G_rg_encounter_girl -V051 +mus_rg_encounter_gym_leader: -E -R50 -G_rg_encounter_boy -V090 +mus_rg_encounter_rival.mid: -E -R50 -G_rg_encounter_rival -V079 +mus_rg_encounter_rocket.mid: -E -R50 -G_rg_encounter_rocket -V096 +mus_rg_follow_me.mid: -E -R50 -G_rg_follow_me -V068 +mus_rg_fuchsia.mid: -E -R50 -G_rg_fuchsia -V090 +mus_rg_game_corner.mid: -E -R50 -G_rg_game_corner -V090 +mus_rg_game_freak.mid: -E -R50 -G_rg_game_freak -V075 +mus_rg_gym.mid: -E -R50 -G_rg_gym -V090 +mus_rg_hall_of_fame.mid: -E -R50 -G_rg_hall_of_fame -V079 +mus_rg_heal.mid: -E -R50 -G_rg_heal -V090 +mus_rg_intro_fight.mid: -E -R50 -G_rg_intro_fight -V090 +mus_rg_jigglypuff.mid: -E -R50 -G_rg_jigglypuff -V068 -P5 +mus_rg_lavender.mid: -E -R50 -G_rg_lavender -V090 +mus_rg_mt_moon.mid: -E -R50 -G_rg_mt_moon -V090 +mus_rg_mystery_gift.mid: -E -R50 -G_rg_mystery_gift -V100 +mus_rg_net_center.mid: -E -R50 -G_rg_poke_center -V096 +mus_rg_new_game_exit.mid: -E -R50 -G_rg_new_game -V088 +mus_rg_new_game_instruct.mid: -E -R50 -G_rg_new_game -V085 +mus_rg_new_game_intro.mid: -E -R50 -G_rg_new_game -V088 +mus_rg_oak_lab.mid: -E -R50 -G_rg_oak_lab -V075 +mus_rg_oak.mid: -E -R50 -G_rg_oak -V086 +mus_rg_obtain_key_item.mid: -E -R50 -G_rg_obtain_key_item -V077 -P5 +mus_rg_pallet.mid: -E -R50 -G_rg_pallet -V100 +mus_rg_pewter.mid: -E -R50 -G_rg_pewter -V084 +mus_rg_photo.mid: -E -R50 -G_rg_photo -V100 -P5 +mus_rg_poke_center.mid: -E -R50 -G_rg_poke_center -V096 +mus_rg_poke_flute.mid: -E -R50 -G_rg_poke_tower -V048 -P5 +mus_rg_poke_jump.mid: -E -R50 -G_rg_game_corner -V090 +mus_rg_poke_mansion.mid: -E -R50 -G_rg_poke_mansion -V090 +mus_rg_poke_tower.mid: -E -R50 -G_rg_poke_tower -V090 +mus_rg_rival_exit.mid: -E -R50 -G_rg_encounter_rival -V079 +mus_rg_rocket_hideout.mid: -E -R50 -G_rg_rocket_hideout -V090 +mus_rg_route1.mid: -E -R50 -G_rg_route1 -V079 +mus_rg_route3.mid: -E -R50 -G_rg_route3 -V083 +mus_rg_route11.mid: -E -R50 -G_rg_route11 -V090 +mus_rg_route24.mid: -E -R50 -G_rg_route24 -V086 +mus_rg_sevii_45.mid: -E -R50 -G_rg_sevii_45 -V084 +mus_rg_sevii_67.mid: -E -R50 -G_rg_sevii_67 -V084 +mus_rg_sevii_123.mid: -E -R50 -G_rg_pewter -V084 +mus_rg_sevii_cave.mid: -E -R50 -G_rg_mt_moon -V090 +mus_rg_sevii_dungeon.mid: -E -R50 -G_rg_viridian_forest -V090 +mus_rg_sevii_route.mid: -E -R50 -G_rg_sevii_route -V080 +mus_rg_silph.mid: -E -R50 -G_rg_silph -V076 +mus_rg_slow_pallet.mid: -E -R50 -G_rg_pallet -V092 +mus_rg_ss_anne.mid: -E -R50 -G_rg_ss_anne -V090 +mus_rg_surf.mid: -E -R50 -G_rg_surf -V071 +mus_rg_teachy_tv_menu.mid: -E -R50 -G_rg_teachy_tv_menu -V059 +mus_rg_teachy_tv_show.mid: -E -R50 -G_rg_follow_me -V068 +mus_rg_title.mid: -E -R50 -G_rg_title -V090 +mus_rg_trainer_tower.mid: -E -R50 -G_rg_gym -V090 +mus_rg_union_room.mid: -E -R50 -G_rg_game_corner -V090 +mus_rg_vermillion.mid: -E -R50 -G_rg_vermillion -V090 +mus_rg_victory_gym_leader.mid: -E -R50 -G_rg_victory_gym_leader -V090 +mus_rg_victory_road.mid: -E -R50 -G_rg_victory_road -V090 +mus_rg_victory_trainer.mid: -E -R50 -G_rg_victory_trainer -V089 +mus_rg_victory_wild.mid: -E -R50 -G_rg_victory_wild -V090 +mus_rg_viridian_forest.mid: -E -R50 -G_rg_viridian_forest -V090 +mus_rg_vs_champion.mid: -E -R50 -G_rg_vs_champion -V090 +mus_rg_vs_deoxys.mid: -E -R50 -G_rg_vs_deoxys -V080 +mus_rg_vs_gym_leader.mid: -E -R50 -G_rg_vs_gym_leader -V090 +mus_rg_vs_legend.mid: -E -R50 -G_rg_vs_wild -V090 +mus_rg_vs_mewtwo.mid: -E -R50 -G_rg_vs_wild -V090 +mus_rg_vs_trainer.mid: -E -R50 -G_rg_vs_trainer -V090 +mus_rg_vs_wild.mid: -E -R50 -G_rg_vs_wild -V090 +mus_roulette.mid: -E -R50 -G_roulette -V080 +mus_route101.mid: -E -R50 -G_route101 -V080 +mus_route104.mid: -E -R50 -G_route104 -V097 +mus_route110.mid: -E -R50 -G_route110 -V080 +mus_route111.mid: -E -R50 -G_route111 -V076 +mus_route113.mid: -E -R50 -G_route113 -V084 +mus_route119.mid: -E -R50 -G_route119 -V096 +mus_route120.mid: -E -R50 -G_route120 -V080 +mus_route122.mid: -E -R50 -G_route122 -V080 +mus_rustboro.mid: -E -R50 -G_rustboro -V085 +mus_safari_zone.mid: -E -R50 -G_safari_zone -V082 +mus_sailing.mid: -E -R50 -G_sailing -V086 +mus_school.mid: -E -R50 -G_school -V100 +mus_sealed_chamber.mid: -E -R50 -G_sealed_chamber -V100 +mus_slateport.mid: -E -R50 -G_slateport -V070 +mus_slots_jackpot.mid: -E -R50 -G_fanfare -V090 -P5 +mus_slots_win.mid: -E -R50 -G_fanfare -V090 -P5 +mus_sootopolis.mid: -E -R50 -G_sootopolis -V062 +mus_surf.mid: -E -R50 -G_surf -V080 +mus_title.mid: -E -R50 -G_title -V090 +mus_too_bad.mid: -E -R50 -G_fanfare -V090 -P5 +mus_trick_house.mid: -E -R50 -G_trick_house -V070 +mus_underwater.mid: -E -R50 -G_underwater -V094 +mus_verdanturf.mid: -E -R50 -G_verdanturf -V090 +mus_victory_aqua_magma.mid: -E -R50 -G_victory_aqua_magma -V088 +mus_victory_gym_leader.mid: -E -R50 -G_victory_gym_leader -V080 +mus_victory_league.mid: -E -R50 -G_victory_league -V080 +mus_victory_road.mid: -E -R50 -G_victory_road -V076 +mus_victory_trainer.mid: -E -R50 -G_victory_trainer -V091 +mus_victory_wild.mid: -E -R50 -G_victory_wild -V080 +mus_vs_aqua_magma_leader.mid: -E -R50 -G_vs_aqua_magma_leader -V080 -P1 +mus_vs_aqua_magma.mid: -E -R50 -G_vs_aqua_magma -V080 -P1 +mus_vs_champion.mid: -E -R50 -G_vs_champion -V080 -P1 +mus_vs_elite_four.mid: -E -R50 -G_vs_elite_four -V080 -P1 +mus_vs_frontier_brain.mid: -E -R50 -G_vs_frontier_brain -V090 -P1 +mus_vs_gym_leader.mid: -E -R50 -G_vs_gym_leader -V080 -P1 +mus_vs_kyogre_groudon.mid: -E -R50 -G_vs_kyogre_groudon -V080 -P1 +mus_vs_mew.mid: -E -R50 -G_vs_mew -V090 +mus_vs_rayquaza.mid: -E -R50 -G_vs_rayquaza -V080 -P1 +mus_vs_regi.mid: -E -R50 -G_vs_regi -V080 -P1 +mus_vs_rival.mid: -E -R50 -G_vs_rival -V080 -P1 +mus_vs_trainer.mid: -E -R50 -G_vs_trainer -V080 -P1 +mus_vs_wild.mid: -E -R50 -G_vs_wild -V080 -P1 +mus_weather_groudon.mid: -E -R50 -G_weather_groudon -V050 +ph_choice_blend.mid: -E -G_bard -P4 +ph_choice_held.mid: -E -G_bard -P4 +ph_choice_solo.mid: -E -G_bard -P4 +ph_cloth_blend.mid: -E -G_bard -P4 +ph_cloth_held.mid: -E -G_bard -P4 +ph_cloth_solo.mid: -E -G_bard -P4 +ph_cure_blend.mid: -E -G_bard -P4 +ph_cure_held.mid: -E -G_bard -P4 +ph_cure_solo.mid: -E -G_bard -P4 +ph_dress_blend.mid: -E -G_bard -P4 +ph_dress_held.mid: -E -G_bard -P4 +ph_dress_solo.mid: -E -G_bard -P4 +ph_face_blend.mid: -E -G_bard -P4 +ph_face_held.mid: -E -G_bard -P4 +ph_face_solo.mid: -E -G_bard -P4 +ph_fleece_blend.mid: -E -G_bard -P4 +ph_fleece_held.mid: -E -G_bard -P4 +ph_fleece_solo.mid: -E -G_bard -P4 +ph_foot_blend.mid: -E -G_bard -P4 +ph_foot_held.mid: -E -G_bard -P4 +ph_foot_solo.mid: -E -G_bard -P4 +ph_goat_blend.mid: -E -G_bard -P4 +ph_goat_held.mid: -E -G_bard -P4 +ph_goat_solo.mid: -E -G_bard -P4 +ph_goose_blend.mid: -E -G_bard -P4 +ph_goose_held.mid: -E -G_bard -P4 +ph_goose_solo.mid: -E -G_bard -P4 +ph_kit_blend.mid: -E -G_bard -P4 +ph_kit_held.mid: -E -G_bard -P4 +ph_kit_solo.mid: -E -G_bard -P4 +ph_lot_blend.mid: -E -G_bard -P4 +ph_lot_held.mid: -E -G_bard -P4 +ph_lot_solo.mid: -E -G_bard -P4 +ph_mouth_blend.mid: -E -G_bard -P4 +ph_mouth_held.mid: -E -G_bard -P4 +ph_mouth_solo.mid: -E -G_bard -P4 +ph_nurse_blend.mid: -E -G_bard -P4 +ph_nurse_held.mid: -E -G_bard -P4 +ph_nurse_solo.mid: -E -G_bard -P4 +ph_price_blend.mid: -E -G_bard -P4 +ph_price_held.mid: -E -G_bard -P4 +ph_price_solo.mid: -E -G_bard -P4 +ph_strut_blend.mid: -E -G_bard -P4 +ph_strut_held.mid: -E -G_bard -P4 +ph_strut_solo.mid: -E -G_bard -P4 +ph_thought_blend.mid: -E -G_bard -P4 +ph_thought_held.mid: -E -G_bard -P4 +ph_thought_solo.mid: -E -G_bard -P4 +ph_trap_blend.mid: -E -G_bard -P4 +ph_trap_held.mid: -E -G_bard -P4 +ph_trap_solo.mid: -E -G_bard -P4 +se_a.mid: -E -R50 -G_rs_sfx_2 -V095 -P4 +se_applause.mid: -E -R50 -G_rs_sfx_2 -V100 -P5 +se_arena_timeup1.mid: -E -R50 -G_frlg_sfx -P5 +se_arena_timeup2.mid: -E -R50 -G_frlg_sfx -P5 +se_ball_bounce_1.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ball_bounce_2.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ball_bounce_3.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ball_bounce_4.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ball_open.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_ball_throw.mid: -E -R50 -G_rs_sfx_2 -V120 -P5 +se_ball_trade.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_ball_tray_ball.mid: -E -R50 -G_rs_sfx_2 -V110 -P5 +se_ball_tray_enter.mid: -E -R50 -G_rs_sfx_2 -V110 -P5 +se_ball_tray_exit.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_ball.mid: -E -R50 -G_rs_sfx_1 -V070 -P4 +se_balloon_blue.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_balloon_red.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_balloon_yellow.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_bang.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_berry_blender.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_bike_bell.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_bike_hop.mid: -E -R50 -G_rs_sfx_1 -V090 -P4 +se_boo.mid: -E -R50 -G_rs_sfx_1 -V110 -P4 +se_breakable_door.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_bridge_walk.mid: -E -R50 -G_rs_sfx_2 -V095 -P4 +se_card.mid: -E -R50 -G_rs_sfx_1 -V100 -P4 +se_click.mid: -E -R50 -G_rs_sfx_1 -V110 -P4 +se_contest_condition_lose.mid: -E -R50 -G_rs_sfx_1 -V110 -P4 +se_contest_curtain_fall.mid: -E -R50 -G_rs_sfx_2 -V070 -P5 +se_contest_curtain_rise.mid: -E -R50 -G_rs_sfx_2 -V070 -P5 +se_contest_heart.mid: -E -R50 -G_rs_sfx_2 -V090 -P5 +se_contest_icon_change.mid: -E -R50 -G_rs_sfx_2 -V110 -P5 +se_contest_icon_clear.mid: -E -R50 -G_rs_sfx_2 -V090 -P5 +se_contest_mons_turn.mid: -E -R50 -G_rs_sfx_2 -V090 -P5 +se_contest_place.mid: -E -R50 -G_rs_sfx_1 -V110 -P4 +se_dex_search.mid: -E -R50 -G_rs_sfx_1 -v100 -P5 +se_ding_dong.mid: -E -R50 -G_rs_sfx_1 -V090 -P5 +se_door.mid: -E -R50 -G_rs_sfx_1 -V080 -P5 +se_downpour_stop.mid: -E -R50 -G_rs_sfx_2 -V100 -P2 +se_downpour.mid: -E -R50 -G_rs_sfx_2 -V100 -P2 +se_e.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_effective.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_egg_hatch.mid: -E -R50 -G_rs_sfx_2 -V120 -P5 +se_elevator.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_escalator.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_exit.mid: -E -R50 -G_rs_sfx_1 -V120 -P5 +se_exp_max.mid: -E -R50 -G_rs_sfx_2 -V094 -P5 +se_exp.mid: -E -R50 -G_rs_sfx_1 -V080 -P5 +se_failure.mid: -E -R50 -G_rs_sfx_1 -V120 -P4 +se_faint.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_fall.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_field_poison.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_flee.mid: -E -R50 -G_rs_sfx_1 -V090 -P5 +se_fu_zaku.mid: -E -R50 -G_rs_sfx_1 -V120 -P4 +se_glass_flute.mid: -E -R50 -G_rs_sfx_2 -V105 -P5 +se_i.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_ice_break.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ice_crack.mid: -E -R50 -G_rs_sfx_1 -V100 -P4 +se_ice_stairs.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_intro_blast.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_itemfinder.mid: -E -R50 -G_rs_sfx_1 -V090 -P5 +se_lavaridge_fall_warp.mid: -E -R50 -G_rs_sfx_1 -P4 +se_ledge.mid: -E -R50 -G_rs_sfx_1 -V100 -P4 +se_low_health.mid: -E -R50 -G_rs_sfx_1 -V100 -P3 +se_m_bind.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_m_comet_punch.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_m_cut.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_m_double_slap.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_fire_punch.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_fly.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_gust.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_gust2.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_headbutt.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_horn_attack.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_jump_kick.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_leer.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_mega_kick.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_m_mega_kick2.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_pay_day.mid: -E -R50 -G_rs_sfx_2 -V095 -P4 +se_m_razor_wind.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_razor_wind2.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_m_sand_attack.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_scratch.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_swords_dance.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_m_tail_whip.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_take_down.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_m_vicegrip.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_wing_attack.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_mud_ball.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_mugshot.mid: -E -R50 -G_rs_sfx_2 -V090 -P5 +se_n.mid: -E -R50 -G_rs_sfx_2 -P4 +se_not_effective.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_note_a.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_b.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_c_high.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_c.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_d.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_e.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_f.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_g.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_o.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_orb.mid: -E -R50 -G_rs_sfx_2 -V100 -P5 +se_pc_login.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_pc_off.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_pc_on.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_pike_curtain_close.mid: -E -R50 -G_frlg_sfx -P5 +se_pike_curtain_open.mid: -E -R50 -G_frlg_sfx -P5 +se_pin.mid: -E -R50 -G_rs_sfx_1 -V060 -P4 +se_pokenav_call.mid: -E -R50 -G_frlg_sfx -V120 -P5 +se_pokenav_hang_up.mid: -E -R50 -G_frlg_sfx -V110 -P5 +se_pokenav_off.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_pokenav_on.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_puddle.mid: -E -R50 -G_rs_sfx_2 -V020 -P4 +se_rain_stop.mid: -E -R50 -G_rs_sfx_2 -V080 -P2 +se_rain.mid: -E -R50 -G_rs_sfx_2 -V080 -P2 +se_repel.mid: -E -R50 -G_rs_sfx_1 -V090 -P4 +se_rg_bag_cursor.mid: -E -R50 -G_frlg_sfx -P5 +se_rg_bag_pocket.mid: -E -R50 -G_frlg_sfx -P5 +se_rg_ball_click.mid: -E -R50 -G_frlg_sfx -V100 -P5 +se_rg_card_flip.mid: -E -R50 -G_frlg_sfx -P5 +se_rg_card_flipping.mid: -E -R50 -G_frlg_sfx -P5 +se_rg_card_open.mid: -E -R50 -G_frlg_sfx -V112 -P5 +se_rg_deoxys_move.mid: -E -R50 -G_frlg_sfx -V080 -P5 +se_rg_door.mid: -E -R50 -G_frlg_sfx -V100 -P5 +se_rg_help_close.mid: -E -R50 -G_frlg_sfx -V095 -P5 +se_rg_help_error.mid: -E -R50 -G_frlg_sfx -V125 -P5 +se_rg_help_open.mid: -E -R50 -G_frlg_sfx -V096 -P5 +se_rg_poke_jump_failure.mid: -E -R50 -G_rs_sfx_1 -P5 +se_rg_poke_jump_success.mid: -E -R50 -G_rs_sfx_2 -V110 -P5 +se_rg_shop.mid: -E -R50 -G_frlg_sfx -V080 -P5 +se_rg_ss_anne_horn.mid: -E -R50 -G_frlg_sfx -V096 -P5 +se_rotating_gate.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_roulette_ball.mid: -E -R50 -G_rs_sfx_2 -V110 -P2 +se_roulette_ball2.mid: -E -R50 -G_rs_sfx_2 -V110 -P2 +se_save.mid: -E -R50 -G_rs_sfx_2 -V080 -P5 +se_select.mid: -E -R50 -G_rs_sfx_1 -V080 -P5 +se_shiny.mid: -E -R50 -G_rs_sfx_2 -V095 -P5 +se_ship.mid: -E -R50 -G_rs_sfx_1 -V075 -P4 +se_shop.mid: -E -R50 -G_rs_sfx_1 -V090 -P5 +se_sliding_door.mid: -E -R50 -G_rs_sfx_2 -V095 -P4 +se_success.mid: -E -R50 -G_rs_sfx_1 -V080 -P4 +se_sudowoodo_shake.mid: -E -R50 -G_frlg_sfx -V077 -P5 +se_super_effective.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_switch.mid: -E -R50 -G_rs_sfx_1 -V100 -P4 +se_taillow_wing_flap.mid: -E -R50 -G_rs_sfx_2 -V105 -P5 +se_thunder.mid: -E -R50 -G_rs_sfx_2 -V110 -P3 +se_thunder2.mid: -E -R50 -G_rs_sfx_2 -V110 -P3 +se_thunderstorm_stop.mid: -E -R50 -G_rs_sfx_2 -V080 -P2 +se_thunderstorm.mid: -E -R50 -G_rs_sfx_2 -V080 -P2 +se_truck_door.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_truck_move.mid: -E -R50 -G_rs_sfx_2 -P4 +se_truck_stop.mid: -E -R50 -G_rs_sfx_2 -P4 +se_truck_unload.mid: -E -R50 -G_rs_sfx_1 -P4 +se_u.mid: -E -R50 -G_rs_sfx_2 -P4 +se_unlock.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_use_item.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_vend.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_warp_in.mid: -E -R50 -G_rs_sfx_1 -V090 -P4 +se_warp_out.mid: -E -R50 -G_rs_sfx_1 -V090 -P4 diff --git a/sound/songs/se_dex_page.s b/sound/songs/se_dex_page.s index 884f0d12a560..314d11d9fb4f 100644 --- a/sound/songs/se_dex_page.s +++ b/sound/songs/se_dex_page.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_dex_page_grp, voicegroup127 + .equ se_dex_page_grp, voicegroup_rs_sfx_1 .equ se_dex_page_pri, 5 .equ se_dex_page_rev, reverb_set+50 .equ se_dex_page_mvl, 127 diff --git a/sound/songs/se_dex_scroll.s b/sound/songs/se_dex_scroll.s index 6c7ad77461e1..6ea8f4783d34 100644 --- a/sound/songs/se_dex_scroll.s +++ b/sound/songs/se_dex_scroll.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_dex_scroll_grp, voicegroup127 + .equ se_dex_scroll_grp, voicegroup_rs_sfx_1 .equ se_dex_scroll_pri, 5 .equ se_dex_scroll_rev, reverb_set+50 .equ se_dex_scroll_mvl, 127 diff --git a/sound/songs/se_m_absorb.s b/sound/songs/se_m_absorb.s index 6cd622366478..46b7e1fa20f0 100644 --- a/sound/songs/se_m_absorb.s +++ b/sound/songs/se_m_absorb.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_absorb_grp, voicegroup128 + .equ se_m_absorb_grp, voicegroup_rs_sfx_2 .equ se_m_absorb_pri, 4 .equ se_m_absorb_rev, reverb_set+50 .equ se_m_absorb_mvl, 127 diff --git a/sound/songs/se_m_absorb_2.s b/sound/songs/se_m_absorb_2.s index 61920133382c..54166d967351 100644 --- a/sound/songs/se_m_absorb_2.s +++ b/sound/songs/se_m_absorb_2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_absorb_2_grp, voicegroup128 + .equ se_m_absorb_2_grp, voicegroup_rs_sfx_2 .equ se_m_absorb_2_pri, 4 .equ se_m_absorb_2_rev, reverb_set+50 .equ se_m_absorb_2_mvl, 127 diff --git a/sound/songs/se_m_acid_armor.s b/sound/songs/se_m_acid_armor.s index 346c76604760..31f94275a7fb 100644 --- a/sound/songs/se_m_acid_armor.s +++ b/sound/songs/se_m_acid_armor.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_acid_armor_grp, voicegroup128 + .equ se_m_acid_armor_grp, voicegroup_rs_sfx_2 .equ se_m_acid_armor_pri, 4 .equ se_m_acid_armor_rev, reverb_set+50 .equ se_m_acid_armor_mvl, 127 diff --git a/sound/songs/se_m_attract.s b/sound/songs/se_m_attract.s index 8e18c16dce3f..ede9f4dd824b 100644 --- a/sound/songs/se_m_attract.s +++ b/sound/songs/se_m_attract.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_attract_grp, voicegroup128 + .equ se_m_attract_grp, voicegroup_rs_sfx_2 .equ se_m_attract_pri, 4 .equ se_m_attract_rev, reverb_set+50 .equ se_m_attract_mvl, 127 diff --git a/sound/songs/se_m_attract2.s b/sound/songs/se_m_attract2.s index 9b846f13e473..ddcd23029792 100644 --- a/sound/songs/se_m_attract2.s +++ b/sound/songs/se_m_attract2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_attract2_grp, voicegroup128 + .equ se_m_attract2_grp, voicegroup_rs_sfx_2 .equ se_m_attract2_pri, 4 .equ se_m_attract2_rev, reverb_set+50 .equ se_m_attract2_mvl, 127 diff --git a/sound/songs/se_m_barrier.s b/sound/songs/se_m_barrier.s index 54d57700f0fe..ebf6ddccb96e 100644 --- a/sound/songs/se_m_barrier.s +++ b/sound/songs/se_m_barrier.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_barrier_grp, voicegroup128 + .equ se_m_barrier_grp, voicegroup_rs_sfx_2 .equ se_m_barrier_pri, 4 .equ se_m_barrier_rev, reverb_set+50 .equ se_m_barrier_mvl, 127 diff --git a/sound/songs/se_m_baton_pass.s b/sound/songs/se_m_baton_pass.s index 30027e5b6839..ec8ddd542acf 100644 --- a/sound/songs/se_m_baton_pass.s +++ b/sound/songs/se_m_baton_pass.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_baton_pass_grp, voicegroup128 + .equ se_m_baton_pass_grp, voicegroup_rs_sfx_2 .equ se_m_baton_pass_pri, 4 .equ se_m_baton_pass_rev, reverb_set+50 .equ se_m_baton_pass_mvl, 127 diff --git a/sound/songs/se_m_belly_drum.s b/sound/songs/se_m_belly_drum.s index 919c02b16c75..5b5508ed41c1 100644 --- a/sound/songs/se_m_belly_drum.s +++ b/sound/songs/se_m_belly_drum.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_belly_drum_grp, voicegroup128 + .equ se_m_belly_drum_grp, voicegroup_rs_sfx_2 .equ se_m_belly_drum_pri, 4 .equ se_m_belly_drum_rev, reverb_set+50 .equ se_m_belly_drum_mvl, 127 diff --git a/sound/songs/se_m_bite.s b/sound/songs/se_m_bite.s index 15d690e2e817..c01e160c1afe 100644 --- a/sound/songs/se_m_bite.s +++ b/sound/songs/se_m_bite.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bite_grp, voicegroup128 + .equ se_m_bite_grp, voicegroup_rs_sfx_2 .equ se_m_bite_pri, 4 .equ se_m_bite_rev, reverb_set+50 .equ se_m_bite_mvl, 127 diff --git a/sound/songs/se_m_blizzard.s b/sound/songs/se_m_blizzard.s index 6bce3c987212..a274da2211aa 100644 --- a/sound/songs/se_m_blizzard.s +++ b/sound/songs/se_m_blizzard.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_blizzard_grp, voicegroup128 + .equ se_m_blizzard_grp, voicegroup_rs_sfx_2 .equ se_m_blizzard_pri, 4 .equ se_m_blizzard_rev, reverb_set+50 .equ se_m_blizzard_mvl, 127 diff --git a/sound/songs/se_m_blizzard2.s b/sound/songs/se_m_blizzard2.s index 8c1518e63760..2940d80d52a2 100644 --- a/sound/songs/se_m_blizzard2.s +++ b/sound/songs/se_m_blizzard2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_blizzard2_grp, voicegroup128 + .equ se_m_blizzard2_grp, voicegroup_rs_sfx_2 .equ se_m_blizzard2_pri, 4 .equ se_m_blizzard2_rev, reverb_set+50 .equ se_m_blizzard2_mvl, 127 diff --git a/sound/songs/se_m_bonemerang.s b/sound/songs/se_m_bonemerang.s index 933980936442..16f170b76b6c 100644 --- a/sound/songs/se_m_bonemerang.s +++ b/sound/songs/se_m_bonemerang.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bonemerang_grp, voicegroup128 + .equ se_m_bonemerang_grp, voicegroup_rs_sfx_2 .equ se_m_bonemerang_pri, 4 .equ se_m_bonemerang_rev, reverb_set+50 .equ se_m_bonemerang_mvl, 127 diff --git a/sound/songs/se_m_brick_break.s b/sound/songs/se_m_brick_break.s index ce13218d2455..2270fc24b517 100644 --- a/sound/songs/se_m_brick_break.s +++ b/sound/songs/se_m_brick_break.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_brick_break_grp, voicegroup128 + .equ se_m_brick_break_grp, voicegroup_rs_sfx_2 .equ se_m_brick_break_pri, 4 .equ se_m_brick_break_rev, reverb_set+50 .equ se_m_brick_break_mvl, 127 diff --git a/sound/songs/se_m_bubble.s b/sound/songs/se_m_bubble.s index 4e1b988d59f8..9c7fb6fadd5c 100644 --- a/sound/songs/se_m_bubble.s +++ b/sound/songs/se_m_bubble.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble_grp, voicegroup128 + .equ se_m_bubble_grp, voicegroup_rs_sfx_2 .equ se_m_bubble_pri, 4 .equ se_m_bubble_rev, reverb_set+50 .equ se_m_bubble_mvl, 127 diff --git a/sound/songs/se_m_bubble2.s b/sound/songs/se_m_bubble2.s index 97e7cbbf85b1..1b009672bf3b 100644 --- a/sound/songs/se_m_bubble2.s +++ b/sound/songs/se_m_bubble2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble2_grp, voicegroup128 + .equ se_m_bubble2_grp, voicegroup_rs_sfx_2 .equ se_m_bubble2_pri, 4 .equ se_m_bubble2_rev, reverb_set+50 .equ se_m_bubble2_mvl, 127 diff --git a/sound/songs/se_m_bubble3.s b/sound/songs/se_m_bubble3.s index d9a7f1e82b99..ea4c1e6fd47d 100644 --- a/sound/songs/se_m_bubble3.s +++ b/sound/songs/se_m_bubble3.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble3_grp, voicegroup128 + .equ se_m_bubble3_grp, voicegroup_rs_sfx_2 .equ se_m_bubble3_pri, 4 .equ se_m_bubble3_rev, reverb_set+50 .equ se_m_bubble3_mvl, 127 diff --git a/sound/songs/se_m_bubble_beam.s b/sound/songs/se_m_bubble_beam.s index 621882b03f86..b1eac882b7fd 100644 --- a/sound/songs/se_m_bubble_beam.s +++ b/sound/songs/se_m_bubble_beam.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble_beam_grp, voicegroup128 + .equ se_m_bubble_beam_grp, voicegroup_rs_sfx_2 .equ se_m_bubble_beam_pri, 4 .equ se_m_bubble_beam_rev, reverb_set+50 .equ se_m_bubble_beam_mvl, 127 diff --git a/sound/songs/se_m_bubble_beam2.s b/sound/songs/se_m_bubble_beam2.s index 0e8cbf5e415b..970ef028975a 100644 --- a/sound/songs/se_m_bubble_beam2.s +++ b/sound/songs/se_m_bubble_beam2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble_beam2_grp, voicegroup128 + .equ se_m_bubble_beam2_grp, voicegroup_rs_sfx_2 .equ se_m_bubble_beam2_pri, 4 .equ se_m_bubble_beam2_rev, reverb_set+50 .equ se_m_bubble_beam2_mvl, 127 diff --git a/sound/songs/se_m_charge.s b/sound/songs/se_m_charge.s index 47d70a4bff1e..1ad07164f627 100644 --- a/sound/songs/se_m_charge.s +++ b/sound/songs/se_m_charge.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_charge_grp, voicegroup128 + .equ se_m_charge_grp, voicegroup_rs_sfx_2 .equ se_m_charge_pri, 4 .equ se_m_charge_rev, reverb_set+50 .equ se_m_charge_mvl, 127 diff --git a/sound/songs/se_m_charm.s b/sound/songs/se_m_charm.s index 2bb2e0ef3714..9d27f1445a04 100644 --- a/sound/songs/se_m_charm.s +++ b/sound/songs/se_m_charm.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_charm_grp, voicegroup128 + .equ se_m_charm_grp, voicegroup_rs_sfx_2 .equ se_m_charm_pri, 4 .equ se_m_charm_rev, reverb_set+50 .equ se_m_charm_mvl, 127 diff --git a/sound/songs/se_m_confuse_ray.s b/sound/songs/se_m_confuse_ray.s index 78407b8c113e..e856fe495a80 100644 --- a/sound/songs/se_m_confuse_ray.s +++ b/sound/songs/se_m_confuse_ray.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_confuse_ray_grp, voicegroup128 + .equ se_m_confuse_ray_grp, voicegroup_rs_sfx_2 .equ se_m_confuse_ray_pri, 4 .equ se_m_confuse_ray_rev, reverb_set+50 .equ se_m_confuse_ray_mvl, 127 diff --git a/sound/songs/se_m_cosmic_power.s b/sound/songs/se_m_cosmic_power.s index 3e3f53c5ec76..3779ea9683dd 100644 --- a/sound/songs/se_m_cosmic_power.s +++ b/sound/songs/se_m_cosmic_power.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_cosmic_power_grp, voicegroup128 + .equ se_m_cosmic_power_grp, voicegroup_rs_sfx_2 .equ se_m_cosmic_power_pri, 4 .equ se_m_cosmic_power_rev, reverb_set+50 .equ se_m_cosmic_power_mvl, 127 diff --git a/sound/songs/se_m_crabhammer.s b/sound/songs/se_m_crabhammer.s index 6333150dc770..c629edc99c5a 100644 --- a/sound/songs/se_m_crabhammer.s +++ b/sound/songs/se_m_crabhammer.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_crabhammer_grp, voicegroup128 + .equ se_m_crabhammer_grp, voicegroup_rs_sfx_2 .equ se_m_crabhammer_pri, 4 .equ se_m_crabhammer_rev, reverb_set+50 .equ se_m_crabhammer_mvl, 127 diff --git a/sound/songs/se_m_detect.s b/sound/songs/se_m_detect.s index f06802802aea..82196bb2d9b7 100644 --- a/sound/songs/se_m_detect.s +++ b/sound/songs/se_m_detect.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_detect_grp, voicegroup128 + .equ se_m_detect_grp, voicegroup_rs_sfx_2 .equ se_m_detect_pri, 4 .equ se_m_detect_rev, reverb_set+50 .equ se_m_detect_mvl, 127 diff --git a/sound/songs/se_m_dig.s b/sound/songs/se_m_dig.s index f8d3597d95bf..be16d77ac5ae 100644 --- a/sound/songs/se_m_dig.s +++ b/sound/songs/se_m_dig.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_dig_grp, voicegroup128 + .equ se_m_dig_grp, voicegroup_rs_sfx_2 .equ se_m_dig_pri, 4 .equ se_m_dig_rev, reverb_set+50 .equ se_m_dig_mvl, 127 diff --git a/sound/songs/se_m_dive.s b/sound/songs/se_m_dive.s index 83cc42356410..879c41eefc41 100644 --- a/sound/songs/se_m_dive.s +++ b/sound/songs/se_m_dive.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_dive_grp, voicegroup128 + .equ se_m_dive_grp, voicegroup_rs_sfx_2 .equ se_m_dive_pri, 4 .equ se_m_dive_rev, reverb_set+50 .equ se_m_dive_mvl, 127 diff --git a/sound/songs/se_m_dizzy_punch.s b/sound/songs/se_m_dizzy_punch.s index 31ab74a77f8a..ccd2a6c95602 100644 --- a/sound/songs/se_m_dizzy_punch.s +++ b/sound/songs/se_m_dizzy_punch.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_dizzy_punch_grp, voicegroup128 + .equ se_m_dizzy_punch_grp, voicegroup_rs_sfx_2 .equ se_m_dizzy_punch_pri, 4 .equ se_m_dizzy_punch_rev, reverb_set+50 .equ se_m_dizzy_punch_mvl, 127 diff --git a/sound/songs/se_m_double_team.s b/sound/songs/se_m_double_team.s index 49bcfb13d3ee..3efab79b044c 100644 --- a/sound/songs/se_m_double_team.s +++ b/sound/songs/se_m_double_team.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_double_team_grp, voicegroup128 + .equ se_m_double_team_grp, voicegroup_rs_sfx_2 .equ se_m_double_team_pri, 4 .equ se_m_double_team_rev, reverb_set+50 .equ se_m_double_team_mvl, 127 diff --git a/sound/songs/se_m_dragon_rage.s b/sound/songs/se_m_dragon_rage.s index 608d9261156c..3a0675c03ab4 100644 --- a/sound/songs/se_m_dragon_rage.s +++ b/sound/songs/se_m_dragon_rage.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_dragon_rage_grp, voicegroup128 + .equ se_m_dragon_rage_grp, voicegroup_rs_sfx_2 .equ se_m_dragon_rage_pri, 4 .equ se_m_dragon_rage_rev, reverb_set+50 .equ se_m_dragon_rage_mvl, 127 diff --git a/sound/songs/se_m_earthquake.s b/sound/songs/se_m_earthquake.s index 928ddfacd8d0..76c40d88ca33 100644 --- a/sound/songs/se_m_earthquake.s +++ b/sound/songs/se_m_earthquake.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_earthquake_grp, voicegroup128 + .equ se_m_earthquake_grp, voicegroup_rs_sfx_2 .equ se_m_earthquake_pri, 4 .equ se_m_earthquake_rev, reverb_set+50 .equ se_m_earthquake_mvl, 127 diff --git a/sound/songs/se_m_ember.s b/sound/songs/se_m_ember.s index a685ca24c958..010ffaaf1ad3 100644 --- a/sound/songs/se_m_ember.s +++ b/sound/songs/se_m_ember.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_ember_grp, voicegroup128 + .equ se_m_ember_grp, voicegroup_rs_sfx_2 .equ se_m_ember_pri, 4 .equ se_m_ember_rev, reverb_set+50 .equ se_m_ember_mvl, 127 diff --git a/sound/songs/se_m_encore.s b/sound/songs/se_m_encore.s index cf13ab76189a..0f212febb32c 100644 --- a/sound/songs/se_m_encore.s +++ b/sound/songs/se_m_encore.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_encore_grp, voicegroup128 + .equ se_m_encore_grp, voicegroup_rs_sfx_2 .equ se_m_encore_pri, 4 .equ se_m_encore_rev, reverb_set+50 .equ se_m_encore_mvl, 127 diff --git a/sound/songs/se_m_encore2.s b/sound/songs/se_m_encore2.s index 61e522acac52..86ebb5585bf2 100644 --- a/sound/songs/se_m_encore2.s +++ b/sound/songs/se_m_encore2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_encore2_grp, voicegroup128 + .equ se_m_encore2_grp, voicegroup_rs_sfx_2 .equ se_m_encore2_pri, 4 .equ se_m_encore2_rev, reverb_set+50 .equ se_m_encore2_mvl, 127 diff --git a/sound/songs/se_m_explosion.s b/sound/songs/se_m_explosion.s index 039c563f7869..b0f98c6f40cc 100644 --- a/sound/songs/se_m_explosion.s +++ b/sound/songs/se_m_explosion.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_explosion_grp, voicegroup128 + .equ se_m_explosion_grp, voicegroup_rs_sfx_2 .equ se_m_explosion_pri, 4 .equ se_m_explosion_rev, reverb_set+50 .equ se_m_explosion_mvl, 127 diff --git a/sound/songs/se_m_faint_attack.s b/sound/songs/se_m_faint_attack.s index ce53c7173e2c..2011e58b4e0c 100644 --- a/sound/songs/se_m_faint_attack.s +++ b/sound/songs/se_m_faint_attack.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_faint_attack_grp, voicegroup128 + .equ se_m_faint_attack_grp, voicegroup_rs_sfx_2 .equ se_m_faint_attack_pri, 4 .equ se_m_faint_attack_rev, reverb_set+50 .equ se_m_faint_attack_mvl, 127 diff --git a/sound/songs/se_m_flame_wheel.s b/sound/songs/se_m_flame_wheel.s index 797073466a24..f722ae320072 100644 --- a/sound/songs/se_m_flame_wheel.s +++ b/sound/songs/se_m_flame_wheel.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_flame_wheel_grp, voicegroup128 + .equ se_m_flame_wheel_grp, voicegroup_rs_sfx_2 .equ se_m_flame_wheel_pri, 4 .equ se_m_flame_wheel_rev, reverb_set+50 .equ se_m_flame_wheel_mvl, 127 diff --git a/sound/songs/se_m_flame_wheel2.s b/sound/songs/se_m_flame_wheel2.s index 21f911b0ba74..09413e52aa2a 100644 --- a/sound/songs/se_m_flame_wheel2.s +++ b/sound/songs/se_m_flame_wheel2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_flame_wheel2_grp, voicegroup128 + .equ se_m_flame_wheel2_grp, voicegroup_rs_sfx_2 .equ se_m_flame_wheel2_pri, 4 .equ se_m_flame_wheel2_rev, reverb_set+50 .equ se_m_flame_wheel2_mvl, 127 diff --git a/sound/songs/se_m_flamethrower.s b/sound/songs/se_m_flamethrower.s index 4c0c892c1ee3..0536ae19fddb 100644 --- a/sound/songs/se_m_flamethrower.s +++ b/sound/songs/se_m_flamethrower.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_flamethrower_grp, voicegroup128 + .equ se_m_flamethrower_grp, voicegroup_rs_sfx_2 .equ se_m_flamethrower_pri, 4 .equ se_m_flamethrower_rev, reverb_set+50 .equ se_m_flamethrower_mvl, 127 diff --git a/sound/songs/se_m_flatter.s b/sound/songs/se_m_flatter.s index 799fdba91299..b6484bbf4f90 100644 --- a/sound/songs/se_m_flatter.s +++ b/sound/songs/se_m_flatter.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_flatter_grp, voicegroup128 + .equ se_m_flatter_grp, voicegroup_rs_sfx_2 .equ se_m_flatter_pri, 4 .equ se_m_flatter_rev, reverb_set+50 .equ se_m_flatter_mvl, 127 diff --git a/sound/songs/se_m_giga_drain.s b/sound/songs/se_m_giga_drain.s index 4596a0252cd8..de8f95175508 100644 --- a/sound/songs/se_m_giga_drain.s +++ b/sound/songs/se_m_giga_drain.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_giga_drain_grp, voicegroup128 + .equ se_m_giga_drain_grp, voicegroup_rs_sfx_2 .equ se_m_giga_drain_pri, 4 .equ se_m_giga_drain_rev, reverb_set+50 .equ se_m_giga_drain_mvl, 127 diff --git a/sound/songs/se_m_grasswhistle.s b/sound/songs/se_m_grasswhistle.s index 10c7447873a2..384908fd8a02 100644 --- a/sound/songs/se_m_grasswhistle.s +++ b/sound/songs/se_m_grasswhistle.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_grasswhistle_grp, voicegroup128 + .equ se_m_grasswhistle_grp, voicegroup_rs_sfx_2 .equ se_m_grasswhistle_pri, 4 .equ se_m_grasswhistle_rev, reverb_set+50 .equ se_m_grasswhistle_mvl, 127 diff --git a/sound/songs/se_m_hail.s b/sound/songs/se_m_hail.s index 7f1d1c67da99..46b25141b604 100644 --- a/sound/songs/se_m_hail.s +++ b/sound/songs/se_m_hail.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_hail_grp, voicegroup128 + .equ se_m_hail_grp, voicegroup_rs_sfx_2 .equ se_m_hail_pri, 4 .equ se_m_hail_rev, reverb_set+50 .equ se_m_hail_mvl, 127 diff --git a/sound/songs/se_m_harden.s b/sound/songs/se_m_harden.s index e9bd888de8b6..2171a3e06711 100644 --- a/sound/songs/se_m_harden.s +++ b/sound/songs/se_m_harden.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_harden_grp, voicegroup128 + .equ se_m_harden_grp, voicegroup_rs_sfx_2 .equ se_m_harden_pri, 4 .equ se_m_harden_rev, reverb_set+50 .equ se_m_harden_mvl, 127 diff --git a/sound/songs/se_m_haze.s b/sound/songs/se_m_haze.s index 11497c846536..fb134ff04253 100644 --- a/sound/songs/se_m_haze.s +++ b/sound/songs/se_m_haze.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_haze_grp, voicegroup128 + .equ se_m_haze_grp, voicegroup_rs_sfx_2 .equ se_m_haze_pri, 4 .equ se_m_haze_rev, reverb_set+50 .equ se_m_haze_mvl, 127 diff --git a/sound/songs/se_m_heal_bell.s b/sound/songs/se_m_heal_bell.s index fbe315c8788d..407af374fbec 100644 --- a/sound/songs/se_m_heal_bell.s +++ b/sound/songs/se_m_heal_bell.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_heal_bell_grp, voicegroup128 + .equ se_m_heal_bell_grp, voicegroup_rs_sfx_2 .equ se_m_heal_bell_pri, 4 .equ se_m_heal_bell_rev, reverb_set+50 .equ se_m_heal_bell_mvl, 127 diff --git a/sound/songs/se_m_heat_wave.s b/sound/songs/se_m_heat_wave.s index da5842f8f8e0..5430cd4cadd3 100644 --- a/sound/songs/se_m_heat_wave.s +++ b/sound/songs/se_m_heat_wave.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_heat_wave_grp, voicegroup128 + .equ se_m_heat_wave_grp, voicegroup_rs_sfx_2 .equ se_m_heat_wave_pri, 4 .equ se_m_heat_wave_rev, reverb_set+50 .equ se_m_heat_wave_mvl, 127 diff --git a/sound/songs/se_m_hydro_pump.s b/sound/songs/se_m_hydro_pump.s index c214985e4718..93f8459ec1f8 100644 --- a/sound/songs/se_m_hydro_pump.s +++ b/sound/songs/se_m_hydro_pump.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_hydro_pump_grp, voicegroup128 + .equ se_m_hydro_pump_grp, voicegroup_rs_sfx_2 .equ se_m_hydro_pump_pri, 4 .equ se_m_hydro_pump_rev, reverb_set+50 .equ se_m_hydro_pump_mvl, 127 diff --git a/sound/songs/se_m_hyper_beam.s b/sound/songs/se_m_hyper_beam.s index b6ffcfc2f787..34e49ac460b4 100644 --- a/sound/songs/se_m_hyper_beam.s +++ b/sound/songs/se_m_hyper_beam.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_hyper_beam_grp, voicegroup128 + .equ se_m_hyper_beam_grp, voicegroup_rs_sfx_2 .equ se_m_hyper_beam_pri, 4 .equ se_m_hyper_beam_rev, reverb_set+50 .equ se_m_hyper_beam_mvl, 127 diff --git a/sound/songs/se_m_hyper_beam2.s b/sound/songs/se_m_hyper_beam2.s index fb2183422232..0fffa797c69e 100644 --- a/sound/songs/se_m_hyper_beam2.s +++ b/sound/songs/se_m_hyper_beam2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_hyper_beam2_grp, voicegroup128 + .equ se_m_hyper_beam2_grp, voicegroup_rs_sfx_2 .equ se_m_hyper_beam2_pri, 4 .equ se_m_hyper_beam2_rev, reverb_set+50 .equ se_m_hyper_beam2_mvl, 127 diff --git a/sound/songs/se_m_icy_wind.s b/sound/songs/se_m_icy_wind.s index b7e83e0321a5..dff7f5948763 100644 --- a/sound/songs/se_m_icy_wind.s +++ b/sound/songs/se_m_icy_wind.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_icy_wind_grp, voicegroup128 + .equ se_m_icy_wind_grp, voicegroup_rs_sfx_2 .equ se_m_icy_wind_pri, 4 .equ se_m_icy_wind_rev, reverb_set+50 .equ se_m_icy_wind_mvl, 127 diff --git a/sound/songs/se_m_lick.s b/sound/songs/se_m_lick.s index 1aa0c35a286e..34f9cbfbbe0d 100644 --- a/sound/songs/se_m_lick.s +++ b/sound/songs/se_m_lick.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_lick_grp, voicegroup128 + .equ se_m_lick_grp, voicegroup_rs_sfx_2 .equ se_m_lick_pri, 4 .equ se_m_lick_rev, reverb_set+50 .equ se_m_lick_mvl, 127 diff --git a/sound/songs/se_m_lock_on.s b/sound/songs/se_m_lock_on.s index 9c9576d97c34..c95eafb3b0dc 100644 --- a/sound/songs/se_m_lock_on.s +++ b/sound/songs/se_m_lock_on.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_lock_on_grp, voicegroup128 + .equ se_m_lock_on_grp, voicegroup_rs_sfx_2 .equ se_m_lock_on_pri, 4 .equ se_m_lock_on_rev, reverb_set+50 .equ se_m_lock_on_mvl, 127 diff --git a/sound/songs/se_m_metronome.s b/sound/songs/se_m_metronome.s index ba0a55d8b964..de8899b16ae7 100644 --- a/sound/songs/se_m_metronome.s +++ b/sound/songs/se_m_metronome.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_metronome_grp, voicegroup128 + .equ se_m_metronome_grp, voicegroup_rs_sfx_2 .equ se_m_metronome_pri, 4 .equ se_m_metronome_rev, reverb_set+50 .equ se_m_metronome_mvl, 127 diff --git a/sound/songs/se_m_milk_drink.s b/sound/songs/se_m_milk_drink.s index 57e3a581d6fd..6380ee398b67 100644 --- a/sound/songs/se_m_milk_drink.s +++ b/sound/songs/se_m_milk_drink.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_milk_drink_grp, voicegroup128 + .equ se_m_milk_drink_grp, voicegroup_rs_sfx_2 .equ se_m_milk_drink_pri, 4 .equ se_m_milk_drink_rev, reverb_set+50 .equ se_m_milk_drink_mvl, 127 diff --git a/sound/songs/se_m_minimize.s b/sound/songs/se_m_minimize.s index 778e0ec7c99c..32dd545a037a 100644 --- a/sound/songs/se_m_minimize.s +++ b/sound/songs/se_m_minimize.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_minimize_grp, voicegroup128 + .equ se_m_minimize_grp, voicegroup_rs_sfx_2 .equ se_m_minimize_pri, 4 .equ se_m_minimize_rev, reverb_set+50 .equ se_m_minimize_mvl, 127 diff --git a/sound/songs/se_m_mist.s b/sound/songs/se_m_mist.s index f46eb130a699..7975b50cc975 100644 --- a/sound/songs/se_m_mist.s +++ b/sound/songs/se_m_mist.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_mist_grp, voicegroup128 + .equ se_m_mist_grp, voicegroup_rs_sfx_2 .equ se_m_mist_pri, 4 .equ se_m_mist_rev, reverb_set+50 .equ se_m_mist_mvl, 127 diff --git a/sound/songs/se_m_moonlight.s b/sound/songs/se_m_moonlight.s index f76181a8746f..35329544e936 100644 --- a/sound/songs/se_m_moonlight.s +++ b/sound/songs/se_m_moonlight.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_moonlight_grp, voicegroup128 + .equ se_m_moonlight_grp, voicegroup_rs_sfx_2 .equ se_m_moonlight_pri, 4 .equ se_m_moonlight_rev, reverb_set+50 .equ se_m_moonlight_mvl, 127 diff --git a/sound/songs/se_m_morning_sun.s b/sound/songs/se_m_morning_sun.s index 227098da1f42..a1196f6fe9a2 100644 --- a/sound/songs/se_m_morning_sun.s +++ b/sound/songs/se_m_morning_sun.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_morning_sun_grp, voicegroup128 + .equ se_m_morning_sun_grp, voicegroup_rs_sfx_2 .equ se_m_morning_sun_pri, 5 .equ se_m_morning_sun_rev, reverb_set+50 .equ se_m_morning_sun_mvl, 127 diff --git a/sound/songs/se_m_nightmare.s b/sound/songs/se_m_nightmare.s index f995d1310399..61e7cde1e35c 100644 --- a/sound/songs/se_m_nightmare.s +++ b/sound/songs/se_m_nightmare.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_nightmare_grp, voicegroup128 + .equ se_m_nightmare_grp, voicegroup_rs_sfx_2 .equ se_m_nightmare_pri, 4 .equ se_m_nightmare_rev, reverb_set+50 .equ se_m_nightmare_mvl, 127 diff --git a/sound/songs/se_m_perish_song.s b/sound/songs/se_m_perish_song.s index af30e2457954..85614227ed30 100644 --- a/sound/songs/se_m_perish_song.s +++ b/sound/songs/se_m_perish_song.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_perish_song_grp, voicegroup128 + .equ se_m_perish_song_grp, voicegroup_rs_sfx_2 .equ se_m_perish_song_pri, 4 .equ se_m_perish_song_rev, reverb_set+50 .equ se_m_perish_song_mvl, 127 diff --git a/sound/songs/se_m_petal_dance.s b/sound/songs/se_m_petal_dance.s index df5752e4bd4a..6d4e015a77aa 100644 --- a/sound/songs/se_m_petal_dance.s +++ b/sound/songs/se_m_petal_dance.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_petal_dance_grp, voicegroup128 + .equ se_m_petal_dance_grp, voicegroup_rs_sfx_2 .equ se_m_petal_dance_pri, 4 .equ se_m_petal_dance_rev, reverb_set+50 .equ se_m_petal_dance_mvl, 127 diff --git a/sound/songs/se_m_poison_powder.s b/sound/songs/se_m_poison_powder.s index f48637385b6a..f9fcd6dc9a2f 100644 --- a/sound/songs/se_m_poison_powder.s +++ b/sound/songs/se_m_poison_powder.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_poison_powder_grp, voicegroup128 + .equ se_m_poison_powder_grp, voicegroup_rs_sfx_2 .equ se_m_poison_powder_pri, 4 .equ se_m_poison_powder_rev, reverb_set+50 .equ se_m_poison_powder_mvl, 127 diff --git a/sound/songs/se_m_psybeam.s b/sound/songs/se_m_psybeam.s index c7f68cffd642..416a8a939272 100644 --- a/sound/songs/se_m_psybeam.s +++ b/sound/songs/se_m_psybeam.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_psybeam_grp, voicegroup128 + .equ se_m_psybeam_grp, voicegroup_rs_sfx_2 .equ se_m_psybeam_pri, 4 .equ se_m_psybeam_rev, reverb_set+50 .equ se_m_psybeam_mvl, 127 diff --git a/sound/songs/se_m_psybeam2.s b/sound/songs/se_m_psybeam2.s index e26a844c919b..2cce6098b1c7 100644 --- a/sound/songs/se_m_psybeam2.s +++ b/sound/songs/se_m_psybeam2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_psybeam2_grp, voicegroup128 + .equ se_m_psybeam2_grp, voicegroup_rs_sfx_2 .equ se_m_psybeam2_pri, 4 .equ se_m_psybeam2_rev, reverb_set+50 .equ se_m_psybeam2_mvl, 127 diff --git a/sound/songs/se_m_rain_dance.s b/sound/songs/se_m_rain_dance.s index bba4dc2b05ad..7e5b2d00984a 100644 --- a/sound/songs/se_m_rain_dance.s +++ b/sound/songs/se_m_rain_dance.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_rain_dance_grp, voicegroup128 + .equ se_m_rain_dance_grp, voicegroup_rs_sfx_2 .equ se_m_rain_dance_pri, 4 .equ se_m_rain_dance_rev, reverb_set+50 .equ se_m_rain_dance_mvl, 127 diff --git a/sound/songs/se_m_reflect.s b/sound/songs/se_m_reflect.s index 56699c65eaed..d5649ab3609e 100644 --- a/sound/songs/se_m_reflect.s +++ b/sound/songs/se_m_reflect.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_reflect_grp, voicegroup128 + .equ se_m_reflect_grp, voicegroup_rs_sfx_2 .equ se_m_reflect_pri, 4 .equ se_m_reflect_rev, reverb_set+50 .equ se_m_reflect_mvl, 127 diff --git a/sound/songs/se_m_reversal.s b/sound/songs/se_m_reversal.s index 5b62d7156eac..56ed6d0576d5 100644 --- a/sound/songs/se_m_reversal.s +++ b/sound/songs/se_m_reversal.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_reversal_grp, voicegroup128 + .equ se_m_reversal_grp, voicegroup_rs_sfx_2 .equ se_m_reversal_pri, 4 .equ se_m_reversal_rev, reverb_set+50 .equ se_m_reversal_mvl, 127 diff --git a/sound/songs/se_m_rock_throw.s b/sound/songs/se_m_rock_throw.s index 71dddd44758a..74ae936b76d2 100644 --- a/sound/songs/se_m_rock_throw.s +++ b/sound/songs/se_m_rock_throw.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_rock_throw_grp, voicegroup128 + .equ se_m_rock_throw_grp, voicegroup_rs_sfx_2 .equ se_m_rock_throw_pri, 4 .equ se_m_rock_throw_rev, reverb_set+50 .equ se_m_rock_throw_mvl, 127 diff --git a/sound/songs/se_m_sacred_fire.s b/sound/songs/se_m_sacred_fire.s index 0fda9c757ab2..58a40c9bfb62 100644 --- a/sound/songs/se_m_sacred_fire.s +++ b/sound/songs/se_m_sacred_fire.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sacred_fire_grp, voicegroup128 + .equ se_m_sacred_fire_grp, voicegroup_rs_sfx_2 .equ se_m_sacred_fire_pri, 4 .equ se_m_sacred_fire_rev, reverb_set+50 .equ se_m_sacred_fire_mvl, 127 diff --git a/sound/songs/se_m_sacred_fire2.s b/sound/songs/se_m_sacred_fire2.s index f255e712a9f2..41582debdd63 100644 --- a/sound/songs/se_m_sacred_fire2.s +++ b/sound/songs/se_m_sacred_fire2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sacred_fire2_grp, voicegroup128 + .equ se_m_sacred_fire2_grp, voicegroup_rs_sfx_2 .equ se_m_sacred_fire2_pri, 4 .equ se_m_sacred_fire2_rev, reverb_set+50 .equ se_m_sacred_fire2_mvl, 127 diff --git a/sound/songs/se_m_sand_tomb.s b/sound/songs/se_m_sand_tomb.s index 4c14aabcc4a6..e52a76d108f6 100644 --- a/sound/songs/se_m_sand_tomb.s +++ b/sound/songs/se_m_sand_tomb.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sand_tomb_grp, voicegroup128 + .equ se_m_sand_tomb_grp, voicegroup_rs_sfx_2 .equ se_m_sand_tomb_pri, 4 .equ se_m_sand_tomb_rev, reverb_set+50 .equ se_m_sand_tomb_mvl, 127 diff --git a/sound/songs/se_m_sandstorm.s b/sound/songs/se_m_sandstorm.s index 4cb12a38920c..e4e81dcc62a4 100644 --- a/sound/songs/se_m_sandstorm.s +++ b/sound/songs/se_m_sandstorm.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sandstorm_grp, voicegroup128 + .equ se_m_sandstorm_grp, voicegroup_rs_sfx_2 .equ se_m_sandstorm_pri, 4 .equ se_m_sandstorm_rev, reverb_set+50 .equ se_m_sandstorm_mvl, 127 diff --git a/sound/songs/se_m_screech.s b/sound/songs/se_m_screech.s index 378cf71281b5..c28d8d2bbda8 100644 --- a/sound/songs/se_m_screech.s +++ b/sound/songs/se_m_screech.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_screech_grp, voicegroup128 + .equ se_m_screech_grp, voicegroup_rs_sfx_2 .equ se_m_screech_pri, 4 .equ se_m_screech_rev, reverb_set+50 .equ se_m_screech_mvl, 127 diff --git a/sound/songs/se_m_self_destruct.s b/sound/songs/se_m_self_destruct.s index 645085e1e5ed..0ed13b83d420 100644 --- a/sound/songs/se_m_self_destruct.s +++ b/sound/songs/se_m_self_destruct.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_self_destruct_grp, voicegroup128 + .equ se_m_self_destruct_grp, voicegroup_rs_sfx_2 .equ se_m_self_destruct_pri, 4 .equ se_m_self_destruct_rev, reverb_set+50 .equ se_m_self_destruct_mvl, 127 diff --git a/sound/songs/se_m_sing.s b/sound/songs/se_m_sing.s index 8c48c822473f..349f6839ce0d 100644 --- a/sound/songs/se_m_sing.s +++ b/sound/songs/se_m_sing.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sing_grp, voicegroup128 + .equ se_m_sing_grp, voicegroup_rs_sfx_2 .equ se_m_sing_pri, 4 .equ se_m_sing_rev, reverb_set+50 .equ se_m_sing_mvl, 127 diff --git a/sound/songs/se_m_sketch.s b/sound/songs/se_m_sketch.s index c17c4056f2ee..579a30874322 100644 --- a/sound/songs/se_m_sketch.s +++ b/sound/songs/se_m_sketch.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sketch_grp, voicegroup128 + .equ se_m_sketch_grp, voicegroup_rs_sfx_2 .equ se_m_sketch_pri, 4 .equ se_m_sketch_rev, reverb_set+50 .equ se_m_sketch_mvl, 127 diff --git a/sound/songs/se_m_sky_uppercut.s b/sound/songs/se_m_sky_uppercut.s index bed6c19c5f75..6a28b5bcd66f 100644 --- a/sound/songs/se_m_sky_uppercut.s +++ b/sound/songs/se_m_sky_uppercut.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sky_uppercut_grp, voicegroup128 + .equ se_m_sky_uppercut_grp, voicegroup_rs_sfx_2 .equ se_m_sky_uppercut_pri, 4 .equ se_m_sky_uppercut_rev, reverb_set+50 .equ se_m_sky_uppercut_mvl, 127 diff --git a/sound/songs/se_m_snore.s b/sound/songs/se_m_snore.s index 13e2f6f52b2a..5774355f2115 100644 --- a/sound/songs/se_m_snore.s +++ b/sound/songs/se_m_snore.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_snore_grp, voicegroup128 + .equ se_m_snore_grp, voicegroup_rs_sfx_2 .equ se_m_snore_pri, 4 .equ se_m_snore_rev, reverb_set+50 .equ se_m_snore_mvl, 127 diff --git a/sound/songs/se_m_solar_beam.s b/sound/songs/se_m_solar_beam.s index 6a12b4a10ea8..0ef97c6be27d 100644 --- a/sound/songs/se_m_solar_beam.s +++ b/sound/songs/se_m_solar_beam.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_solar_beam_grp, voicegroup128 + .equ se_m_solar_beam_grp, voicegroup_rs_sfx_2 .equ se_m_solar_beam_pri, 4 .equ se_m_solar_beam_rev, reverb_set+50 .equ se_m_solar_beam_mvl, 127 diff --git a/sound/songs/se_m_spit_up.s b/sound/songs/se_m_spit_up.s index 1073ad01fc97..20fe0697d7ba 100644 --- a/sound/songs/se_m_spit_up.s +++ b/sound/songs/se_m_spit_up.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_spit_up_grp, voicegroup128 + .equ se_m_spit_up_grp, voicegroup_rs_sfx_2 .equ se_m_spit_up_pri, 4 .equ se_m_spit_up_rev, reverb_set+50 .equ se_m_spit_up_mvl, 127 diff --git a/sound/songs/se_m_stat_decrease.s b/sound/songs/se_m_stat_decrease.s index 51218db1e755..8f242be04ee0 100644 --- a/sound/songs/se_m_stat_decrease.s +++ b/sound/songs/se_m_stat_decrease.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_stat_decrease_grp, voicegroup128 + .equ se_m_stat_decrease_grp, voicegroup_rs_sfx_2 .equ se_m_stat_decrease_pri, 4 .equ se_m_stat_decrease_rev, reverb_set+50 .equ se_m_stat_decrease_mvl, 127 diff --git a/sound/songs/se_m_stat_increase.s b/sound/songs/se_m_stat_increase.s index 2556b6afa78e..d5d6b5e918a9 100644 --- a/sound/songs/se_m_stat_increase.s +++ b/sound/songs/se_m_stat_increase.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_stat_increase_grp, voicegroup128 + .equ se_m_stat_increase_grp, voicegroup_rs_sfx_2 .equ se_m_stat_increase_pri, 4 .equ se_m_stat_increase_rev, reverb_set+50 .equ se_m_stat_increase_mvl, 127 diff --git a/sound/songs/se_m_strength.s b/sound/songs/se_m_strength.s index bda5fc61e5e8..974a9f976f80 100644 --- a/sound/songs/se_m_strength.s +++ b/sound/songs/se_m_strength.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_strength_grp, voicegroup128 + .equ se_m_strength_grp, voicegroup_rs_sfx_2 .equ se_m_strength_pri, 4 .equ se_m_strength_rev, reverb_set+50 .equ se_m_strength_mvl, 127 diff --git a/sound/songs/se_m_string_shot.s b/sound/songs/se_m_string_shot.s index d750d26b9b5e..ed0701953b19 100644 --- a/sound/songs/se_m_string_shot.s +++ b/sound/songs/se_m_string_shot.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_string_shot_grp, voicegroup128 + .equ se_m_string_shot_grp, voicegroup_rs_sfx_2 .equ se_m_string_shot_pri, 4 .equ se_m_string_shot_rev, reverb_set+50 .equ se_m_string_shot_mvl, 127 diff --git a/sound/songs/se_m_string_shot2.s b/sound/songs/se_m_string_shot2.s index b885a7d1a8c0..ac17f52cc88c 100644 --- a/sound/songs/se_m_string_shot2.s +++ b/sound/songs/se_m_string_shot2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_string_shot2_grp, voicegroup128 + .equ se_m_string_shot2_grp, voicegroup_rs_sfx_2 .equ se_m_string_shot2_pri, 4 .equ se_m_string_shot2_rev, reverb_set+50 .equ se_m_string_shot2_mvl, 127 diff --git a/sound/songs/se_m_supersonic.s b/sound/songs/se_m_supersonic.s index c975dad4b645..3029597d1d18 100644 --- a/sound/songs/se_m_supersonic.s +++ b/sound/songs/se_m_supersonic.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_supersonic_grp, voicegroup128 + .equ se_m_supersonic_grp, voicegroup_rs_sfx_2 .equ se_m_supersonic_pri, 4 .equ se_m_supersonic_rev, reverb_set+50 .equ se_m_supersonic_mvl, 127 diff --git a/sound/songs/se_m_surf.s b/sound/songs/se_m_surf.s index d3e3077826e9..1b3fc5cb9104 100644 --- a/sound/songs/se_m_surf.s +++ b/sound/songs/se_m_surf.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_surf_grp, voicegroup128 + .equ se_m_surf_grp, voicegroup_rs_sfx_2 .equ se_m_surf_pri, 4 .equ se_m_surf_rev, reverb_set+50 .equ se_m_surf_mvl, 127 diff --git a/sound/songs/se_m_swagger.s b/sound/songs/se_m_swagger.s index 9b4b5756bc48..e673444ee47f 100644 --- a/sound/songs/se_m_swagger.s +++ b/sound/songs/se_m_swagger.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_swagger_grp, voicegroup128 + .equ se_m_swagger_grp, voicegroup_rs_sfx_2 .equ se_m_swagger_pri, 4 .equ se_m_swagger_rev, reverb_set+50 .equ se_m_swagger_mvl, 127 diff --git a/sound/songs/se_m_swagger2.s b/sound/songs/se_m_swagger2.s index 0a0d7676741e..9e799ec333ef 100644 --- a/sound/songs/se_m_swagger2.s +++ b/sound/songs/se_m_swagger2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_swagger2_grp, voicegroup128 + .equ se_m_swagger2_grp, voicegroup_rs_sfx_2 .equ se_m_swagger2_pri, 4 .equ se_m_swagger2_rev, reverb_set+50 .equ se_m_swagger2_mvl, 127 diff --git a/sound/songs/se_m_sweet_scent.s b/sound/songs/se_m_sweet_scent.s index 3b9bd527c86a..1099ba3c0fc6 100644 --- a/sound/songs/se_m_sweet_scent.s +++ b/sound/songs/se_m_sweet_scent.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sweet_scent_grp, voicegroup128 + .equ se_m_sweet_scent_grp, voicegroup_rs_sfx_2 .equ se_m_sweet_scent_pri, 4 .equ se_m_sweet_scent_rev, reverb_set+50 .equ se_m_sweet_scent_mvl, 127 diff --git a/sound/songs/se_m_swift.s b/sound/songs/se_m_swift.s index c87cbea41989..2c01cfcf48d6 100644 --- a/sound/songs/se_m_swift.s +++ b/sound/songs/se_m_swift.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_swift_grp, voicegroup128 + .equ se_m_swift_grp, voicegroup_rs_sfx_2 .equ se_m_swift_pri, 4 .equ se_m_swift_rev, reverb_set+50 .equ se_m_swift_mvl, 127 diff --git a/sound/songs/se_m_teeter_dance.s b/sound/songs/se_m_teeter_dance.s index 8238afeb2784..04a1e61e037a 100644 --- a/sound/songs/se_m_teeter_dance.s +++ b/sound/songs/se_m_teeter_dance.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_teeter_dance_grp, voicegroup128 + .equ se_m_teeter_dance_grp, voicegroup_rs_sfx_2 .equ se_m_teeter_dance_pri, 4 .equ se_m_teeter_dance_rev, reverb_set+50 .equ se_m_teeter_dance_mvl, 127 diff --git a/sound/songs/se_m_teleport.s b/sound/songs/se_m_teleport.s index 60f7945d7bb0..8a4f676ba543 100644 --- a/sound/songs/se_m_teleport.s +++ b/sound/songs/se_m_teleport.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_teleport_grp, voicegroup128 + .equ se_m_teleport_grp, voicegroup_rs_sfx_2 .equ se_m_teleport_pri, 4 .equ se_m_teleport_rev, reverb_set+50 .equ se_m_teleport_mvl, 127 diff --git a/sound/songs/se_m_thunder_wave.s b/sound/songs/se_m_thunder_wave.s index a0b06cb5deb5..6d0a585e3f46 100644 --- a/sound/songs/se_m_thunder_wave.s +++ b/sound/songs/se_m_thunder_wave.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_thunder_wave_grp, voicegroup128 + .equ se_m_thunder_wave_grp, voicegroup_rs_sfx_2 .equ se_m_thunder_wave_pri, 4 .equ se_m_thunder_wave_rev, reverb_set+50 .equ se_m_thunder_wave_mvl, 127 diff --git a/sound/songs/se_m_thunderbolt.s b/sound/songs/se_m_thunderbolt.s index 3b3790313168..7b1868fbe6b5 100644 --- a/sound/songs/se_m_thunderbolt.s +++ b/sound/songs/se_m_thunderbolt.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_thunderbolt_grp, voicegroup128 + .equ se_m_thunderbolt_grp, voicegroup_rs_sfx_2 .equ se_m_thunderbolt_pri, 4 .equ se_m_thunderbolt_rev, reverb_set+50 .equ se_m_thunderbolt_mvl, 127 diff --git a/sound/songs/se_m_thunderbolt2.s b/sound/songs/se_m_thunderbolt2.s index 5068203958b5..9725b58f5252 100644 --- a/sound/songs/se_m_thunderbolt2.s +++ b/sound/songs/se_m_thunderbolt2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_thunderbolt2_grp, voicegroup128 + .equ se_m_thunderbolt2_grp, voicegroup_rs_sfx_2 .equ se_m_thunderbolt2_pri, 4 .equ se_m_thunderbolt2_rev, reverb_set+50 .equ se_m_thunderbolt2_mvl, 127 diff --git a/sound/songs/se_m_toxic.s b/sound/songs/se_m_toxic.s index ae460ad7735c..3008bc0312f9 100644 --- a/sound/songs/se_m_toxic.s +++ b/sound/songs/se_m_toxic.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_toxic_grp, voicegroup128 + .equ se_m_toxic_grp, voicegroup_rs_sfx_2 .equ se_m_toxic_pri, 4 .equ se_m_toxic_rev, reverb_set+50 .equ se_m_toxic_mvl, 127 diff --git a/sound/songs/se_m_tri_attack.s b/sound/songs/se_m_tri_attack.s index 13947e6f1a59..2a0bd1d4ffe4 100644 --- a/sound/songs/se_m_tri_attack.s +++ b/sound/songs/se_m_tri_attack.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_tri_attack_grp, voicegroup128 + .equ se_m_tri_attack_grp, voicegroup_rs_sfx_2 .equ se_m_tri_attack_pri, 4 .equ se_m_tri_attack_rev, reverb_set+50 .equ se_m_tri_attack_mvl, 127 diff --git a/sound/songs/se_m_tri_attack2.s b/sound/songs/se_m_tri_attack2.s index 61f11c39677d..a54ee3df0e7d 100644 --- a/sound/songs/se_m_tri_attack2.s +++ b/sound/songs/se_m_tri_attack2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_tri_attack2_grp, voicegroup128 + .equ se_m_tri_attack2_grp, voicegroup_rs_sfx_2 .equ se_m_tri_attack2_pri, 4 .equ se_m_tri_attack2_rev, reverb_set+50 .equ se_m_tri_attack2_mvl, 127 diff --git a/sound/songs/se_m_twister.s b/sound/songs/se_m_twister.s index bbb4f1ec0381..a739c89c4fdd 100644 --- a/sound/songs/se_m_twister.s +++ b/sound/songs/se_m_twister.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_twister_grp, voicegroup128 + .equ se_m_twister_grp, voicegroup_rs_sfx_2 .equ se_m_twister_pri, 4 .equ se_m_twister_rev, reverb_set+50 .equ se_m_twister_mvl, 127 diff --git a/sound/songs/se_m_uproar.s b/sound/songs/se_m_uproar.s index c60cccee4e02..2bf7804d522e 100644 --- a/sound/songs/se_m_uproar.s +++ b/sound/songs/se_m_uproar.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_uproar_grp, voicegroup128 + .equ se_m_uproar_grp, voicegroup_rs_sfx_2 .equ se_m_uproar_pri, 4 .equ se_m_uproar_rev, reverb_set+50 .equ se_m_uproar_mvl, 127 diff --git a/sound/songs/se_m_vital_throw.s b/sound/songs/se_m_vital_throw.s index 3e04b43e5b28..aebda904f21b 100644 --- a/sound/songs/se_m_vital_throw.s +++ b/sound/songs/se_m_vital_throw.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_vital_throw_grp, voicegroup128 + .equ se_m_vital_throw_grp, voicegroup_rs_sfx_2 .equ se_m_vital_throw_pri, 4 .equ se_m_vital_throw_rev, reverb_set+50 .equ se_m_vital_throw_mvl, 127 diff --git a/sound/songs/se_m_vital_throw2.s b/sound/songs/se_m_vital_throw2.s index 0d1e64ecb5c7..34a758c6e2e3 100644 --- a/sound/songs/se_m_vital_throw2.s +++ b/sound/songs/se_m_vital_throw2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_vital_throw2_grp, voicegroup128 + .equ se_m_vital_throw2_grp, voicegroup_rs_sfx_2 .equ se_m_vital_throw2_pri, 4 .equ se_m_vital_throw2_rev, reverb_set+50 .equ se_m_vital_throw2_mvl, 127 diff --git a/sound/songs/se_m_waterfall.s b/sound/songs/se_m_waterfall.s index 9e16b9ee760c..ad91010e7129 100644 --- a/sound/songs/se_m_waterfall.s +++ b/sound/songs/se_m_waterfall.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_waterfall_grp, voicegroup128 + .equ se_m_waterfall_grp, voicegroup_rs_sfx_2 .equ se_m_waterfall_pri, 4 .equ se_m_waterfall_rev, reverb_set+50 .equ se_m_waterfall_mvl, 127 diff --git a/sound/songs/se_m_whirlpool.s b/sound/songs/se_m_whirlpool.s index bf0b9cc7224a..67563395cc49 100644 --- a/sound/songs/se_m_whirlpool.s +++ b/sound/songs/se_m_whirlpool.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_whirlpool_grp, voicegroup128 + .equ se_m_whirlpool_grp, voicegroup_rs_sfx_2 .equ se_m_whirlpool_pri, 4 .equ se_m_whirlpool_rev, reverb_set+50 .equ se_m_whirlpool_mvl, 127 diff --git a/sound/songs/se_m_yawn.s b/sound/songs/se_m_yawn.s index c6af1f3610ca..fdd6012a2273 100644 --- a/sound/songs/se_m_yawn.s +++ b/sound/songs/se_m_yawn.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_yawn_grp, voicegroup128 + .equ se_m_yawn_grp, voicegroup_rs_sfx_2 .equ se_m_yawn_pri, 4 .equ se_m_yawn_rev, reverb_set+50 .equ se_m_yawn_mvl, 127 diff --git a/sound/songs/se_wall_hit.s b/sound/songs/se_wall_hit.s index feeeb03b1dbe..385da0373978 100644 --- a/sound/songs/se_wall_hit.s +++ b/sound/songs/se_wall_hit.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_wall_hit_grp, voicegroup127 + .equ se_wall_hit_grp, voicegroup_rs_sfx_1 .equ se_wall_hit_pri, 2 .equ se_wall_hit_rev, reverb_set+50 .equ se_wall_hit_mvl, 127 diff --git a/sound/songs/se_win_open.s b/sound/songs/se_win_open.s index b5d582a8d913..07fb4fadd4c7 100644 --- a/sound/songs/se_win_open.s +++ b/sound/songs/se_win_open.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_win_open_grp, voicegroup127 + .equ se_win_open_grp, voicegroup_rs_sfx_1 .equ se_win_open_pri, 5 .equ se_win_open_rev, reverb_set+50 .equ se_win_open_mvl, 127 diff --git a/sound/voice_groups.inc b/sound/voice_groups.inc index 8ee57619b610..eabcc5c752e6 100644 --- a/sound/voice_groups.inc +++ b/sound/voice_groups.inc @@ -1,192 +1,203 @@ -.include "sound/voicegroups/voicegroup000.inc" -.include "sound/voicegroups/voicegroup001.inc" -.include "sound/voicegroups/voicegroup002.inc" -.include "sound/voicegroups/voicegroup003.inc" -.include "sound/voicegroups/voicegroup004.inc" -.include "sound/voicegroups/voicegroup005.inc" -.include "sound/voicegroups/voicegroup006.inc" -.include "sound/voicegroups/voicegroup007.inc" -.include "sound/voicegroups/voicegroup008.inc" -.include "sound/voicegroups/voicegroup009.inc" -.include "sound/voicegroups/voicegroup010.inc" -.include "sound/voicegroups/voicegroup011.inc" -.include "sound/voicegroups/voicegroup012.inc" -.include "sound/voicegroups/voicegroup013.inc" -.include "sound/voicegroups/voicegroup014.inc" -.include "sound/voicegroups/voicegroup015.inc" -.include "sound/voicegroups/voicegroup016.inc" -.include "sound/voicegroups/voicegroup017.inc" -.include "sound/voicegroups/voicegroup018.inc" -.include "sound/voicegroups/voicegroup019.inc" -.include "sound/voicegroups/voicegroup020.inc" -.include "sound/voicegroups/voicegroup021.inc" -.include "sound/voicegroups/voicegroup022.inc" -.include "sound/voicegroups/voicegroup023.inc" -.include "sound/voicegroups/voicegroup024.inc" -.include "sound/voicegroups/voicegroup025.inc" -.include "sound/voicegroups/voicegroup026.inc" -.include "sound/voicegroups/voicegroup027.inc" -.include "sound/voicegroups/voicegroup028.inc" -.include "sound/voicegroups/voicegroup029.inc" -.include "sound/voicegroups/voicegroup030.inc" -.include "sound/voicegroups/voicegroup031.inc" -.include "sound/voicegroups/voicegroup032.inc" -.include "sound/voicegroups/voicegroup033.inc" -.include "sound/voicegroups/voicegroup034.inc" -.include "sound/voicegroups/voicegroup035.inc" -.include "sound/voicegroups/voicegroup036.inc" -.include "sound/voicegroups/voicegroup037.inc" -.include "sound/voicegroups/voicegroup038.inc" -.include "sound/voicegroups/voicegroup039.inc" -.include "sound/voicegroups/voicegroup040.inc" -.include "sound/voicegroups/voicegroup041.inc" -.include "sound/voicegroups/voicegroup042.inc" -.include "sound/voicegroups/voicegroup043.inc" -.include "sound/voicegroups/voicegroup044.inc" -.include "sound/voicegroups/voicegroup045.inc" -.include "sound/voicegroups/voicegroup046.inc" -.include "sound/voicegroups/voicegroup047.inc" -.include "sound/voicegroups/voicegroup048.inc" -.include "sound/voicegroups/voicegroup049.inc" -.include "sound/voicegroups/voicegroup050.inc" -.include "sound/voicegroups/voicegroup051.inc" -.include "sound/voicegroups/voicegroup052.inc" -.include "sound/voicegroups/voicegroup053.inc" -.include "sound/voicegroups/voicegroup054.inc" -.include "sound/voicegroups/voicegroup055.inc" -.include "sound/voicegroups/voicegroup056.inc" -.include "sound/voicegroups/voicegroup057.inc" -.include "sound/voicegroups/voicegroup058.inc" -.include "sound/voicegroups/voicegroup059.inc" -.include "sound/voicegroups/voicegroup060.inc" -.include "sound/voicegroups/voicegroup061.inc" -.include "sound/voicegroups/voicegroup062.inc" -.include "sound/voicegroups/voicegroup063.inc" -.include "sound/voicegroups/voicegroup064.inc" -.include "sound/voicegroups/voicegroup065.inc" -.include "sound/voicegroups/voicegroup066.inc" -.include "sound/voicegroups/voicegroup067.inc" -.include "sound/voicegroups/voicegroup068.inc" -.include "sound/voicegroups/voicegroup069.inc" -.include "sound/voicegroups/voicegroup070.inc" -.include "sound/voicegroups/voicegroup071.inc" -.include "sound/voicegroups/voicegroup072.inc" -.include "sound/voicegroups/voicegroup073.inc" -.include "sound/voicegroups/voicegroup074.inc" -.include "sound/voicegroups/voicegroup075.inc" -.include "sound/voicegroups/voicegroup076.inc" -.include "sound/voicegroups/voicegroup077.inc" -.include "sound/voicegroups/voicegroup078.inc" -.include "sound/voicegroups/voicegroup079.inc" -.include "sound/voicegroups/voicegroup080.inc" -.include "sound/voicegroups/voicegroup081.inc" -.include "sound/voicegroups/voicegroup082.inc" -.include "sound/voicegroups/voicegroup083.inc" -.include "sound/voicegroups/voicegroup084.inc" -.include "sound/voicegroups/voicegroup085.inc" -.include "sound/voicegroups/voicegroup086.inc" -.include "sound/voicegroups/voicegroup087.inc" -.include "sound/voicegroups/voicegroup088.inc" -.include "sound/voicegroups/voicegroup089.inc" -.include "sound/voicegroups/voicegroup090.inc" -.include "sound/voicegroups/voicegroup091.inc" -.include "sound/voicegroups/voicegroup092.inc" -.include "sound/voicegroups/voicegroup093.inc" -.include "sound/voicegroups/voicegroup094.inc" -.include "sound/voicegroups/voicegroup095.inc" -.include "sound/voicegroups/voicegroup096.inc" -.include "sound/voicegroups/voicegroup097.inc" -.include "sound/voicegroups/voicegroup098.inc" -.include "sound/voicegroups/voicegroup099.inc" -.include "sound/voicegroups/voicegroup100.inc" -.include "sound/voicegroups/voicegroup101.inc" -.include "sound/voicegroups/voicegroup102.inc" -.include "sound/voicegroups/voicegroup103.inc" -.include "sound/voicegroups/voicegroup104.inc" -.include "sound/voicegroups/voicegroup105.inc" -.include "sound/voicegroups/voicegroup106.inc" -.include "sound/voicegroups/voicegroup107.inc" -.include "sound/voicegroups/voicegroup108.inc" -.include "sound/voicegroups/voicegroup109.inc" -.include "sound/voicegroups/voicegroup110.inc" -.include "sound/voicegroups/voicegroup111.inc" -.include "sound/voicegroups/voicegroup112.inc" -.include "sound/voicegroups/voicegroup113.inc" -.include "sound/voicegroups/voicegroup114.inc" -.include "sound/voicegroups/voicegroup115.inc" -.include "sound/voicegroups/voicegroup116.inc" -.include "sound/voicegroups/voicegroup117.inc" -.include "sound/voicegroups/voicegroup118.inc" -.include "sound/voicegroups/voicegroup119.inc" -.include "sound/voicegroups/voicegroup120.inc" -.include "sound/voicegroups/voicegroup121.inc" -.include "sound/voicegroups/voicegroup122.inc" -.include "sound/voicegroups/voicegroup123.inc" -.include "sound/voicegroups/voicegroup124.inc" -.include "sound/voicegroups/voicegroup125.inc" -.include "sound/voicegroups/voicegroup126.inc" -.include "sound/voicegroups/voicegroup127.inc" -.include "sound/voicegroups/voicegroup128.inc" +.include "sound/voicegroups/dummy.inc" + +@ drumsets +.include "sound/voicegroups/drumsets/rs.inc" +.include "sound/voicegroups/drumsets/frlg.inc" +.include "sound/voicegroups/drumsets/emerald_1.inc" +.include "sound/voicegroups/drumsets/emerald_2.inc" + +@ key splits +.include "sound/voicegroups/keysplits/piano.inc" +.include "sound/voicegroups/keysplits/strings.inc" +.include "sound/voicegroups/keysplits/trumpet.inc" +.include "sound/voicegroups/unused.inc" +.include "sound/voicegroups/keysplits/tuba.inc" +.include "sound/voicegroups/keysplits/french_horn.inc" + +.include "sound/voicegroups/route110.inc" +.include "sound/voicegroups/route101.inc" +.include "sound/voicegroups/fanfare.inc" +.include "sound/voicegroups/gym.inc" +.include "sound/voicegroups/route120.inc" +.include "sound/voicegroups/petalburg.inc" +.include "sound/voicegroups/drumsets/petalburg.inc" +.include "sound/voicegroups/surf.inc" +.include "sound/voicegroups/petalburg_woods.inc" +.include "sound/voicegroups/oldale.inc" +.include "sound/voicegroups/lilycove_museum.inc" +.include "sound/voicegroups/route122.inc" +.include "sound/voicegroups/drumsets/route101.inc" +.include "sound/voicegroups/oceanic_museum.inc" +.include "sound/voicegroups/victory_gym_leader.inc" +.include "sound/voicegroups/victory_wild.inc" +.include "sound/voicegroups/evolution.inc" +.include "sound/voicegroups/encounter_girl.inc" +.include "sound/voicegroups/encounter_male.inc" +.include "sound/voicegroups/victory_league.inc" +.include "sound/voicegroups/abandoned_ship.inc" +.include "sound/voicegroups/drumsets/route110.inc" +.include "sound/voicegroups/fortree.inc" +.include "sound/voicegroups/birch_lab.inc" +.include "sound/voicegroups/littleroot_test.inc" +.include "sound/voicegroups/b_tower_rs.inc" +.include "sound/voicegroups/encounter_swimmer.inc" +.include "sound/voicegroups/cave_of_origin.inc" +.include "sound/voicegroups/roulette.inc" +.include "sound/voicegroups/link_contest_p1.inc" +.include "sound/voicegroups/link_contest_p2.inc" +.include "sound/voicegroups/link_contest_p3.inc" +.include "sound/voicegroups/link_contest_p4.inc" +.include "sound/voicegroups/encounter_rich.inc" +.include "sound/voicegroups/verdanturf.inc" +.include "sound/voicegroups/rustboro.inc" +.include "sound/voicegroups/poke_center.inc" +.include "sound/voicegroups/route104.inc" +.include "sound/voicegroups/route119.inc" +.include "sound/voicegroups/cycling.inc" +.include "sound/voicegroups/poke_mart.inc" +.include "sound/voicegroups/littleroot.inc" +.include "sound/voicegroups/mt_chimney.inc" +.include "sound/voicegroups/encounter_female.inc" +.include "sound/voicegroups/lilycove.inc" +.include "sound/voicegroups/route111.inc" +.include "sound/voicegroups/help.inc" +.include "sound/voicegroups/underwater.inc" +.include "sound/voicegroups/victory_trainer.inc" +.include "sound/voicegroups/title.inc" +.include "sound/voicegroups/intro.inc" +.include "sound/voicegroups/encounter_may.inc" +.include "sound/voicegroups/encounter_intense.inc" +.include "sound/voicegroups/encounter_cool.inc" +.include "sound/voicegroups/route113.inc" +.include "sound/voicegroups/encounter_aqua.inc" +.include "sound/voicegroups/follow_me.inc" +.include "sound/voicegroups/encounter_brendan.inc" +.include "sound/voicegroups/ever_grande.inc" +.include "sound/voicegroups/encounter_suspicious.inc" +.include "sound/voicegroups/victory_aqua_magma.inc" +.include "sound/voicegroups/cable_car.inc" +.include "sound/voicegroups/game_corner.inc" +.include "sound/voicegroups/dewford.inc" +.include "sound/voicegroups/safari_zone.inc" +.include "sound/voicegroups/victory_road.inc" +.include "sound/voicegroups/aqua_magma_hideout.inc" +.include "sound/voicegroups/sailing.inc" +.include "sound/voicegroups/mt_pyre.inc" +.include "sound/voicegroups/slateport.inc" +.include "sound/voicegroups/mt_pyre_exterior.inc" +.include "sound/voicegroups/school.inc" +.include "sound/voicegroups/hall_of_fame.inc" +.include "sound/voicegroups/fallarbor.inc" +.include "sound/voicegroups/sealed_chamber.inc" +.include "sound/voicegroups/contest_winner.inc" +.include "sound/voicegroups/contest.inc" +.include "sound/voicegroups/encounter_magma.inc" +.include "sound/voicegroups/intro_battle.inc" +.include "sound/voicegroups/abnormal_weather.inc" +.include "sound/voicegroups/weather_groudon.inc" +.include "sound/voicegroups/sootopolis.inc" +.include "sound/voicegroups/contest_results.inc" +.include "sound/voicegroups/hall_of_fame_room.inc" +.include "sound/voicegroups/trick_house.inc" +.include "sound/voicegroups/encounter_twins.inc" +.include "sound/voicegroups/encounter_elite_four.inc" +.include "sound/voicegroups/encounter_hiker.inc" +.include "sound/voicegroups/contest_lobby.inc" +.include "sound/voicegroups/encounter_interviewer.inc" +.include "sound/voicegroups/encounter_champion.inc" +.include "sound/voicegroups/credits.inc" +.include "sound/voicegroups/end.inc" +.include "sound/voicegroups/b_frontier.inc" +.include "sound/voicegroups/b_arena.inc" +.include "sound/voicegroups/register_match_call.inc" +.include "sound/voicegroups/b_pyramid.inc" +.include "sound/voicegroups/b_pyramid_top.inc" +.include "sound/voicegroups/b_palace.inc" +.include "sound/voicegroups/rayquaza_appears.inc" +.include "sound/voicegroups/b_tower.inc" +.include "sound/voicegroups/b_dome.inc" +.include "sound/voicegroups/b_pike.inc" +.include "sound/voicegroups/b_factory.inc" +.include "sound/voicegroups/vs_rayquaza.inc" +.include "sound/voicegroups/vs_frontier_brain.inc" +.include "sound/voicegroups/vs_mew.inc" +.include "sound/voicegroups/vs_wild.inc" +.include "sound/voicegroups/vs_aqua_magma.inc" +.include "sound/voicegroups/vs_trainer.inc" +.include "sound/voicegroups/vs_gym_leader.inc" +.include "sound/voicegroups/vs_champion.inc" +.include "sound/voicegroups/vs_regi.inc" +.include "sound/voicegroups/vs_kyogre_groudon.inc" @ duplicate of vs_rayquaza +.include "sound/voicegroups/vs_rival.inc" +.include "sound/voicegroups/vs_elite_four.inc" +.include "sound/voicegroups/vs_aqua_magma_leader.inc" +.include "sound/voicegroups/rs_sfx_1.inc" +.include "sound/voicegroups/rs_sfx_2.inc" .include "sound/cry_tables.inc" -.include "sound/voicegroups/voicegroup129.inc" -.include "sound/voicegroups/voicegroup130.inc" -.include "sound/voicegroups/voicegroup131.inc" -.include "sound/voicegroups/voicegroup132.inc" -.include "sound/voicegroups/voicegroup133.inc" -.include "sound/voicegroups/voicegroup134.inc" -.include "sound/voicegroups/voicegroup135.inc" -.include "sound/voicegroups/voicegroup136.inc" -.include "sound/voicegroups/voicegroup137.inc" -.include "sound/voicegroups/voicegroup138.inc" -.include "sound/voicegroups/voicegroup139.inc" -.include "sound/voicegroups/voicegroup140.inc" -.include "sound/voicegroups/voicegroup141.inc" -.include "sound/voicegroups/voicegroup142.inc" -.include "sound/voicegroups/voicegroup143.inc" -.include "sound/voicegroups/voicegroup144.inc" -.include "sound/voicegroups/voicegroup145.inc" -.include "sound/voicegroups/voicegroup146.inc" -.include "sound/voicegroups/voicegroup147.inc" -.include "sound/voicegroups/voicegroup148.inc" -.include "sound/voicegroups/voicegroup149.inc" -.include "sound/voicegroups/voicegroup150.inc" -.include "sound/voicegroups/voicegroup151.inc" -.include "sound/voicegroups/voicegroup152.inc" -.include "sound/voicegroups/voicegroup153.inc" -.include "sound/voicegroups/voicegroup154.inc" -.include "sound/voicegroups/voicegroup155.inc" -.include "sound/voicegroups/voicegroup156.inc" -.include "sound/voicegroups/voicegroup157.inc" -.include "sound/voicegroups/voicegroup158.inc" -.include "sound/voicegroups/voicegroup159.inc" -.include "sound/voicegroups/voicegroup160.inc" -.include "sound/voicegroups/voicegroup161.inc" -.include "sound/voicegroups/voicegroup162.inc" -.include "sound/voicegroups/voicegroup163.inc" -.include "sound/voicegroups/voicegroup164.inc" -.include "sound/voicegroups/voicegroup165.inc" -.include "sound/voicegroups/voicegroup166.inc" -.include "sound/voicegroups/voicegroup167.inc" -.include "sound/voicegroups/voicegroup168.inc" -.include "sound/voicegroups/voicegroup169.inc" -.include "sound/voicegroups/voicegroup170.inc" -.include "sound/voicegroups/voicegroup171.inc" -.include "sound/voicegroups/voicegroup172.inc" -.include "sound/voicegroups/voicegroup173.inc" -.include "sound/voicegroups/voicegroup174.inc" -.include "sound/voicegroups/voicegroup175.inc" -.include "sound/voicegroups/voicegroup176.inc" -.include "sound/voicegroups/voicegroup177.inc" -.include "sound/voicegroups/voicegroup178.inc" -.include "sound/voicegroups/voicegroup179.inc" -.include "sound/voicegroups/voicegroup180.inc" -.include "sound/voicegroups/voicegroup181.inc" -.include "sound/voicegroups/voicegroup182.inc" -.include "sound/voicegroups/voicegroup183.inc" -.include "sound/voicegroups/voicegroup184.inc" -.include "sound/voicegroups/voicegroup185.inc" -.include "sound/voicegroups/voicegroup186.inc" -.include "sound/voicegroups/voicegroup187.inc" -.include "sound/voicegroups/voicegroup188.inc" -.include "sound/voicegroups/voicegroup189.inc" -.include "sound/voicegroups/voicegroup190.inc" +.include "sound/voicegroups/frlg_sfx.inc" +.include "sound/voicegroups/bard.inc" +.include "sound/voicegroups/unused_2.inc" @ used by unused GSC radio tower takeover test track in RS + +@ FRLG +.include "sound/voicegroups/rg_follow_me.inc" +.include "sound/voicegroups/rg_game_corner.inc" +.include "sound/voicegroups/rg_rocket_hideout.inc" +.include "sound/voicegroups/rg_gym.inc" +.include "sound/voicegroups/rg_jigglypuff.inc" +.include "sound/voicegroups/rg_intro_fight.inc" +.include "sound/voicegroups/rg_title.inc" +.include "sound/voicegroups/rg_cinnabar.inc" +.include "sound/voicegroups/rg_lavender.inc" +.include "sound/voicegroups/rg_heal.inc" +.include "sound/voicegroups/rg_cycling.inc" +.include "sound/voicegroups/rg_encounter_rocket.inc" +.include "sound/voicegroups/rg_encounter_girl.inc" +.include "sound/voicegroups/rg_encounter_boy.inc" +.include "sound/voicegroups/rg_hall_of_fame.inc" +.include "sound/voicegroups/rg_viridian_forest.inc" +.include "sound/voicegroups/rg_mt_moon.inc" +.include "sound/voicegroups/rg_poke_mansion.inc" +.include "sound/voicegroups/rg_credits.inc" +.include "sound/voicegroups/rg_route1.inc" +.include "sound/voicegroups/rg_route24.inc" +.include "sound/voicegroups/rg_route3.inc" +.include "sound/voicegroups/rg_route11.inc" +.include "sound/voicegroups/rg_victory_road.inc" +.include "sound/voicegroups/rg_vs_gym_leader.inc" +.include "sound/voicegroups/rg_vs_trainer.inc" +.include "sound/voicegroups/rg_vs_wild.inc" +.include "sound/voicegroups/rg_vs_champion.inc" +.include "sound/voicegroups/rg_pallet.inc" +.include "sound/voicegroups/rg_oak_lab.inc" +.include "sound/voicegroups/rg_oak.inc" +.include "sound/voicegroups/rg_poke_center.inc" +.include "sound/voicegroups/rg_ss_anne.inc" +.include "sound/voicegroups/rg_surf.inc" +.include "sound/voicegroups/rg_poke_tower.inc" +.include "sound/voicegroups/rg_silph.inc" +.include "sound/voicegroups/rg_fuchsia.inc" +.include "sound/voicegroups/rg_celadon.inc" +.include "sound/voicegroups/rg_victory_trainer.inc" +.include "sound/voicegroups/rg_victory_wild.inc" +.include "sound/voicegroups/rg_victory_gym_leader.inc" +.include "sound/voicegroups/rg_vermillion.inc" +.include "sound/voicegroups/rg_pewter.inc" +.include "sound/voicegroups/rg_encounter_rival.inc" +.include "sound/voicegroups/rg_unused.inc" +.include "sound/voicegroups/rg_unused_2.inc" +.include "sound/voicegroups/rg_dex_rating.inc" +.include "sound/voicegroups/drumsets/frlg_fanfare_2.inc" +.include "sound/voicegroups/drumsets/frlg_fanfare_1.inc" +.include "sound/voicegroups/rg_obtain_key_item.inc" +.include "sound/voicegroups/rg_caught_intro.inc" +.include "sound/voicegroups/rg_photo.inc" +.include "sound/voicegroups/rg_game_freak.inc" +.include "sound/voicegroups/rg_new_game.inc" +.include "sound/voicegroups/rg_mystery_gift.inc" +.include "sound/voicegroups/rg_encounter_deoxys.inc" +.include "sound/voicegroups/rg_vs_deoxys.inc" +.include "sound/voicegroups/rg_teachy_tv_menu.inc" +.include "sound/voicegroups/rg_sevii_route.inc" +.include "sound/voicegroups/rg_sevii_45.inc" +.include "sound/voicegroups/rg_sevii_67.inc" +.include "sound/voicegroups/drumsets/rg_credits.inc" diff --git a/sound/voicegroups/abandoned_ship.inc b/sound/voicegroups/abandoned_ship.inc new file mode 100644 index 000000000000..dd4ab482fd6a --- /dev/null +++ b/sound/voicegroups/abandoned_ship.inc @@ -0,0 +1,97 @@ +voice_group abandoned_ship + voice_keysplit_all voicegroup_route110_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 180, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + diff --git a/sound/voicegroups/abnormal_weather.inc b/sound/voicegroups/abnormal_weather.inc new file mode 100644 index 000000000000..36547c4957f4 --- /dev/null +++ b/sound/voicegroups/abnormal_weather.inc @@ -0,0 +1,131 @@ + +voice_group abnormal_weather + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 3 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/aqua_magma_hideout.inc b/sound/voicegroups/aqua_magma_hideout.inc new file mode 100644 index 000000000000..5790be7e963f --- /dev/null +++ b/sound/voicegroups/aqua_magma_hideout.inc @@ -0,0 +1,130 @@ +voice_group aqua_magma_hideout + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/b_arena.inc b/sound/voicegroups/b_arena.inc new file mode 100644 index 000000000000..bb35ad718cd6 --- /dev/null +++ b/sound/voicegroups/b_arena.inc @@ -0,0 +1,110 @@ +voice_group b_arena + voice_keysplit_all voicegroup_emerald_drumset_1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_high, 255, 0, 206, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_shakuhachi, 255, 0, 255, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 2, 0, 12, 5 + voice_square_2_alt 60, 0, 0, 0, 0, 10, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 2, 0, 12, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_low, 255, 0, 206, 242 + diff --git a/sound/voicegroups/b_dome.inc b/sound/voicegroups/b_dome.inc new file mode 100644 index 000000000000..e54ec9d99ca8 --- /dev/null +++ b/sound/voicegroups/b_dome.inc @@ -0,0 +1,130 @@ +voice_group b_dome + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 226 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 195 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 195 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 195 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + diff --git a/sound/voicegroups/b_factory.inc b/sound/voicegroups/b_factory.inc new file mode 100644 index 000000000000..329741050dfb --- /dev/null +++ b/sound/voicegroups/b_factory.inc @@ -0,0 +1,130 @@ +voice_group b_factory + voice_keysplit_all voicegroup_frlg_drumset + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_23, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_25, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_24, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_22, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_9, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_10, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_11, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_12, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_13, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 195 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 7, 7, 0 + voice_square_2_alt 60, 0, 2, 0, 7, 7, 0 + voice_square_2_alt 60, 0, 1, 0, 7, 7, 0 + voice_square_2_alt 60, 0, 0, 0, 7, 7, 0 + voice_square_2_alt 60, 0, 3, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 7, 7, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 7, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + diff --git a/sound/voicegroups/b_frontier.inc b/sound/voicegroups/b_frontier.inc new file mode 100644 index 000000000000..bcdcfded3d35 --- /dev/null +++ b/sound/voicegroups/b_frontier.inc @@ -0,0 +1,130 @@ +voice_group b_frontier + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 0, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + diff --git a/sound/voicegroups/b_palace.inc b/sound/voicegroups/b_palace.inc new file mode 100644 index 000000000000..1e0db2616de5 --- /dev/null +++ b/sound/voicegroups/b_palace.inc @@ -0,0 +1,130 @@ +voice_group b_palace + voice_keysplit_all voicegroup_emerald_drumset_2 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_heart_of_asia_gamelan, 255, 188, 139, 239 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 13, 4 + voice_square_2_alt 60, 0, 0, 0, 0, 9, 2 + voice_square_2_alt 60, 0, 1, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/b_pike.inc b/sound/voicegroups/b_pike.inc new file mode 100644 index 000000000000..deb900a599bf --- /dev/null +++ b/sound/voicegroups/b_pike.inc @@ -0,0 +1,130 @@ +voice_group b_pike + voice_keysplit_all voicegroup_emerald_drumset_1 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 128, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 128, 165, 128, 188 + voice_directsound 60, 0, DirectSoundWaveData_unknown_female_voice, 128, 165, 128, 204 + voice_directsound 60, 0, DirectSoundWaveData_unused_unknown_male_voice, 128, 165, 128, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 0 + voice_square_2_alt 60, 0, 1, 0, 0, 6, 0 + voice_square_2_alt 60, 0, 3, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 7, 10, 1 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + diff --git a/sound/voicegroups/b_pyramid.inc b/sound/voicegroups/b_pyramid.inc new file mode 100644 index 000000000000..855088884f2f --- /dev/null +++ b/sound/voicegroups/b_pyramid.inc @@ -0,0 +1,130 @@ +voice_group b_pyramid + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 38, 128, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/b_pyramid_top.inc b/sound/voicegroups/b_pyramid_top.inc new file mode 100644 index 000000000000..95707f592095 --- /dev/null +++ b/sound/voicegroups/b_pyramid_top.inc @@ -0,0 +1,130 @@ +voice_group b_pyramid_top + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/b_tower.inc b/sound/voicegroups/b_tower.inc new file mode 100644 index 000000000000..d8fd60920bc0 --- /dev/null +++ b/sound/voicegroups/b_tower.inc @@ -0,0 +1,130 @@ +voice_group b_tower + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 0, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 1 + diff --git a/sound/voicegroups/b_tower_rs.inc b/sound/voicegroups/b_tower_rs.inc new file mode 100644 index 000000000000..777e1b3a7c3b --- /dev/null +++ b/sound/voicegroups/b_tower_rs.inc @@ -0,0 +1,87 @@ +voice_group b_tower_rs + voice_keysplit_all voicegroup_route110_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 1 + diff --git a/sound/voicegroups/bard.inc b/sound/voicegroups/bard.inc new file mode 100644 index 000000000000..57ba0bfd1c42 --- /dev/null +++ b/sound/voicegroups/bard.inc @@ -0,0 +1,53 @@ +voice_group bard + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_1, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_2, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_3, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_4, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_5, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_6, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_7, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_8, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_9, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_10, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_11, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_12, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_13, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_14, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_15, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_16, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_17, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_18, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_19, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_20, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_21, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_22, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_23, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_24, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_25, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_26, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_27, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_28, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_29, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_30, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_31, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_32, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_33, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_34, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_35, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_36, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_37, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_38, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_39, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_40, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_41, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_42, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_43, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_44, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_45, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_46, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_47, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_48, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_49, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_50, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_51, 255, 0, 255, 0 + diff --git a/sound/voicegroups/birch_lab.inc b/sound/voicegroups/birch_lab.inc new file mode 100644 index 000000000000..2b10e4f1e228 --- /dev/null +++ b/sound/voicegroups/birch_lab.inc @@ -0,0 +1,85 @@ +voice_group birch_lab + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + diff --git a/sound/voicegroups/cable_car.inc b/sound/voicegroups/cable_car.inc new file mode 100644 index 000000000000..85d324b02d82 --- /dev/null +++ b/sound/voicegroups/cable_car.inc @@ -0,0 +1,130 @@ +voice_group cable_car + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/cave_of_origin.inc b/sound/voicegroups/cave_of_origin.inc new file mode 100644 index 000000000000..36ded3d35f3c --- /dev/null +++ b/sound/voicegroups/cave_of_origin.inc @@ -0,0 +1,91 @@ +voice_group cave_of_origin + voice_keysplit_all voicegroup_route110_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + diff --git a/sound/voicegroups/contest.inc b/sound/voicegroups/contest.inc new file mode 100644 index 000000000000..24ff586dfc56 --- /dev/null +++ b/sound/voicegroups/contest.inc @@ -0,0 +1,130 @@ +voice_group contest + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/contest_lobby.inc b/sound/voicegroups/contest_lobby.inc new file mode 100644 index 000000000000..88b1402b393c --- /dev/null +++ b/sound/voicegroups/contest_lobby.inc @@ -0,0 +1,130 @@ +voice_group contest_lobby + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_10, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/contest_results.inc b/sound/voicegroups/contest_results.inc new file mode 100644 index 000000000000..ba4f70b9960e --- /dev/null +++ b/sound/voicegroups/contest_results.inc @@ -0,0 +1,130 @@ +voice_group contest_results + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/contest_winner.inc b/sound/voicegroups/contest_winner.inc new file mode 100644 index 000000000000..df323c002f8e --- /dev/null +++ b/sound/voicegroups/contest_winner.inc @@ -0,0 +1,130 @@ +voice_group contest_winner + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 1, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 13, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/credits.inc b/sound/voicegroups/credits.inc new file mode 100644 index 000000000000..d05ac8025cc9 --- /dev/null +++ b/sound/voicegroups/credits.inc @@ -0,0 +1,112 @@ +voice_group credits + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 5, 2, 4 + voice_square_2_alt 60, 0, 1, 1, 5, 2, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 1, 6, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 4, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 4, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 1, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 1, 1, 6, 1 + diff --git a/sound/voicegroups/cycling.inc b/sound/voicegroups/cycling.inc new file mode 100644 index 000000000000..a734c5fe603a --- /dev/null +++ b/sound/voicegroups/cycling.inc @@ -0,0 +1,130 @@ +voice_group cycling + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 7, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 2 + voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 1, 4, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/dewford.inc b/sound/voicegroups/dewford.inc new file mode 100644 index 000000000000..e0fc659a9bd3 --- /dev/null +++ b/sound/voicegroups/dewford.inc @@ -0,0 +1,130 @@ +voice_group dewford + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/drumsets/emerald_1.inc b/sound/voicegroups/drumsets/emerald_1.inc new file mode 100644 index 000000000000..80a9957f86c6 --- /dev/null +++ b/sound/voicegroups/drumsets/emerald_1.inc @@ -0,0 +1,56 @@ +voice_group emerald_drumset_1, 36 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/emerald_2.inc b/sound/voicegroups/drumsets/emerald_2.inc new file mode 100644 index 000000000000..4ad57546e01c --- /dev/null +++ b/sound/voicegroups/drumsets/emerald_2.inc @@ -0,0 +1,56 @@ +voice_group emerald_drumset_2, 36 + voice_directsound 62, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound 65, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 56, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound 60, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 58, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 62, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 + voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/frlg.inc b/sound/voicegroups/drumsets/frlg.inc new file mode 100644 index 000000000000..c0a2e5972923 --- /dev/null +++ b/sound/voicegroups/drumsets/frlg.inc @@ -0,0 +1,56 @@ +voice_group frlg_drumset, 36 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/frlg_fanfare_1.inc b/sound/voicegroups/drumsets/frlg_fanfare_1.inc new file mode 100644 index 000000000000..0ba197265c8c --- /dev/null +++ b/sound/voicegroups/drumsets/frlg_fanfare_1.inc @@ -0,0 +1,56 @@ +voice_group frlg_fanfare_drumset_1, 36 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_directsound_no_resample 67, 71, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 65, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 68, 29, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 64, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 76, 39, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 89, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 33, 10, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 118, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/frlg_fanfare_2.inc b/sound/voicegroups/drumsets/frlg_fanfare_2.inc new file mode 100644 index 000000000000..acc72aa3b7aa --- /dev/null +++ b/sound/voicegroups/drumsets/frlg_fanfare_2.inc @@ -0,0 +1,50 @@ +voice_group frlg_fanfare_drumset_2, 36 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/petalburg.inc b/sound/voicegroups/drumsets/petalburg.inc new file mode 100644 index 000000000000..4008b40f7b2a --- /dev/null +++ b/sound/voicegroups/drumsets/petalburg.inc @@ -0,0 +1,31 @@ +voice_group petalburg_drumset, 36 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 32, 74, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 66, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 62, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/rg_credits.inc b/sound/voicegroups/drumsets/rg_credits.inc new file mode 100644 index 000000000000..0af80106d61d --- /dev/null +++ b/sound/voicegroups/drumsets/rg_credits.inc @@ -0,0 +1,54 @@ +voice_group rg_credits_drumset, 36 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 52, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 33, 104, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/route101.inc b/sound/voicegroups/drumsets/route101.inc new file mode 100644 index 000000000000..779831fc4ea7 --- /dev/null +++ b/sound/voicegroups/drumsets/route101.inc @@ -0,0 +1,31 @@ +voice_group route101_drumset, 36 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 67, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 61, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/route110.inc b/sound/voicegroups/drumsets/route110.inc new file mode 100644 index 000000000000..3535f6292770 --- /dev/null +++ b/sound/voicegroups/drumsets/route110.inc @@ -0,0 +1,27 @@ +voice_group route110_drumset, 40 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 32, 49, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 79, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 74, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/rs.inc b/sound/voicegroups/drumsets/rs.inc new file mode 100644 index 000000000000..f15d9a514c3f --- /dev/null +++ b/sound/voicegroups/drumsets/rs.inc @@ -0,0 +1,31 @@ +voice_group rs_drumset, 36 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 48, 44, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 + voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 + voice_directsound 51, 54, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 54, 64, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 + voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_open_hihat, 255, 242, 141, 0 + voice_directsound 57, 69, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 + voice_directsound 60, 79, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 62, 84, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 70, 49, DirectSoundWaveData_unknown_bell, 255, 165, 103, 231 + voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 60, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 235, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_directsound_no_resample 30, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 104, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 94, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + diff --git a/sound/voicegroups/dummy.inc b/sound/voicegroups/dummy.inc new file mode 100644 index 000000000000..43b431f856cc --- /dev/null +++ b/sound/voicegroups/dummy.inc @@ -0,0 +1,100 @@ +voice_group dummy + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 0, 9, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 6, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 + voice_square_2 60, 0, 3, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 0, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 255, 165, 154, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 255, 165, 154, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_guitar_separates_power_chord, 255, 165, 206, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 206, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_snare, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 + diff --git a/sound/voicegroups/encounter_aqua.inc b/sound/voicegroups/encounter_aqua.inc new file mode 100644 index 000000000000..f45e9843c418 --- /dev/null +++ b/sound/voicegroups/encounter_aqua.inc @@ -0,0 +1,130 @@ +voice_group encounter_aqua + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_brendan.inc b/sound/voicegroups/encounter_brendan.inc new file mode 100644 index 000000000000..3e0f96b624d2 --- /dev/null +++ b/sound/voicegroups/encounter_brendan.inc @@ -0,0 +1,130 @@ +voice_group encounter_brendan + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_champion.inc b/sound/voicegroups/encounter_champion.inc new file mode 100644 index 000000000000..fde001b902ff --- /dev/null +++ b/sound/voicegroups/encounter_champion.inc @@ -0,0 +1,130 @@ +voice_group encounter_champion + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 2, 1, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 1, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_cool.inc b/sound/voicegroups/encounter_cool.inc new file mode 100644 index 000000000000..b0e0b9b45461 --- /dev/null +++ b/sound/voicegroups/encounter_cool.inc @@ -0,0 +1,130 @@ +voice_group encounter_cool + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_elite_four.inc b/sound/voicegroups/encounter_elite_four.inc new file mode 100644 index 000000000000..b7842d6d0393 --- /dev/null +++ b/sound/voicegroups/encounter_elite_four.inc @@ -0,0 +1,130 @@ +voice_group encounter_elite_four + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_female.inc b/sound/voicegroups/encounter_female.inc new file mode 100644 index 000000000000..e98854b17323 --- /dev/null +++ b/sound/voicegroups/encounter_female.inc @@ -0,0 +1,130 @@ +voice_group encounter_female + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_girl.inc b/sound/voicegroups/encounter_girl.inc new file mode 100644 index 000000000000..47426833b9b3 --- /dev/null +++ b/sound/voicegroups/encounter_girl.inc @@ -0,0 +1,130 @@ +voice_group encounter_girl + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 1, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 1, 0, 2, 0, 0 + voice_square_2 60, 0, 1, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 1, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 4, 1, 4 + voice_noise_alt 60, 0, 0, 0, 1, 0, 2 + diff --git a/sound/voicegroups/encounter_hiker.inc b/sound/voicegroups/encounter_hiker.inc new file mode 100644 index 000000000000..826fe1402577 --- /dev/null +++ b/sound/voicegroups/encounter_hiker.inc @@ -0,0 +1,130 @@ +voice_group encounter_hiker + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 249 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_intense.inc b/sound/voicegroups/encounter_intense.inc new file mode 100644 index 000000000000..650fb2a8a3a9 --- /dev/null +++ b/sound/voicegroups/encounter_intense.inc @@ -0,0 +1,130 @@ +voice_group encounter_intense + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_interviewer.inc b/sound/voicegroups/encounter_interviewer.inc new file mode 100644 index 000000000000..1f3f5248a735 --- /dev/null +++ b/sound/voicegroups/encounter_interviewer.inc @@ -0,0 +1,130 @@ +voice_group encounter_interviewer + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 + voice_square_1_alt 60, 0, 0, 1, 2, 1, 5, 0 + voice_square_2_alt 60, 0, 1, 2, 1, 5, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_magma.inc b/sound/voicegroups/encounter_magma.inc new file mode 100644 index 000000000000..f41d1f5ad23a --- /dev/null +++ b/sound/voicegroups/encounter_magma.inc @@ -0,0 +1,130 @@ +voice_group encounter_magma + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_male.inc b/sound/voicegroups/encounter_male.inc new file mode 100644 index 000000000000..80cc90476c0c --- /dev/null +++ b/sound/voicegroups/encounter_male.inc @@ -0,0 +1,85 @@ +voice_group encounter_male + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 3, 0, 1, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 0, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 0, 0, 2, 0, 0 + voice_square_2 60, 0, 0, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 0, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 2, 0, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_2 60, 0, 3, 0, 4, 0, 0 + diff --git a/sound/voicegroups/encounter_may.inc b/sound/voicegroups/encounter_may.inc new file mode 100644 index 000000000000..d4915bb36e66 --- /dev/null +++ b/sound/voicegroups/encounter_may.inc @@ -0,0 +1,130 @@ +voice_group encounter_may + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_rich.inc b/sound/voicegroups/encounter_rich.inc new file mode 100644 index 000000000000..d5ed5ddcc02e --- /dev/null +++ b/sound/voicegroups/encounter_rich.inc @@ -0,0 +1,83 @@ +voice_group encounter_rich + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + diff --git a/sound/voicegroups/encounter_suspicious.inc b/sound/voicegroups/encounter_suspicious.inc new file mode 100644 index 000000000000..41f59bc1281c --- /dev/null +++ b/sound/voicegroups/encounter_suspicious.inc @@ -0,0 +1,130 @@ +voice_group encounter_suspicious + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/encounter_swimmer.inc b/sound/voicegroups/encounter_swimmer.inc new file mode 100644 index 000000000000..eaafd5e332ee --- /dev/null +++ b/sound/voicegroups/encounter_swimmer.inc @@ -0,0 +1,130 @@ +voice_group encounter_swimmer + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 4, 1, 4 + voice_noise_alt 60, 0, 0, 0, 1, 0, 2 + diff --git a/sound/voicegroups/encounter_twins.inc b/sound/voicegroups/encounter_twins.inc new file mode 100644 index 000000000000..be0a7d70e9a4 --- /dev/null +++ b/sound/voicegroups/encounter_twins.inc @@ -0,0 +1,130 @@ +voice_group encounter_twins + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/end.inc b/sound/voicegroups/end.inc new file mode 100644 index 000000000000..07da4dfad040 --- /dev/null +++ b/sound/voicegroups/end.inc @@ -0,0 +1,84 @@ +voice_group end + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 248 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 6, 0, 6 + voice_square_2_alt 60, 0, 2, 0, 6, 0, 6 + diff --git a/sound/voicegroups/ever_grande.inc b/sound/voicegroups/ever_grande.inc new file mode 100644 index 000000000000..bd8acc879e17 --- /dev/null +++ b/sound/voicegroups/ever_grande.inc @@ -0,0 +1,130 @@ +voice_group ever_grande + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/evolution.inc b/sound/voicegroups/evolution.inc new file mode 100644 index 000000000000..b3513a15e73a --- /dev/null +++ b/sound/voicegroups/evolution.inc @@ -0,0 +1,87 @@ +voice_group evolution + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 9, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 9, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + diff --git a/sound/voicegroups/fallarbor.inc b/sound/voicegroups/fallarbor.inc new file mode 100644 index 000000000000..3cc2ba6bbeb5 --- /dev/null +++ b/sound/voicegroups/fallarbor.inc @@ -0,0 +1,86 @@ +voice_group fallarbor + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 6, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 6, 1 + diff --git a/sound/voicegroups/fanfare.inc b/sound/voicegroups/fanfare.inc new file mode 100644 index 000000000000..671564a9bc75 --- /dev/null +++ b/sound/voicegroups/fanfare.inc @@ -0,0 +1,104 @@ +voice_group fanfare + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 178, 180, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 29, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 22, 2, 0, 2, 0, 0 + diff --git a/sound/voicegroups/follow_me.inc b/sound/voicegroups/follow_me.inc new file mode 100644 index 000000000000..d1b429739289 --- /dev/null +++ b/sound/voicegroups/follow_me.inc @@ -0,0 +1,130 @@ +voice_group follow_me + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/fortree.inc b/sound/voicegroups/fortree.inc new file mode 100644 index 000000000000..6f12c7ad9461 --- /dev/null +++ b/sound/voicegroups/fortree.inc @@ -0,0 +1,130 @@ +voice_group fortree + voice_keysplit_all voicegroup_petalburg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 3, 4, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 3, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 250, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_noise_alt 60, 0, 0, 0, 4, 1, 4 + voice_noise_alt 60, 0, 0, 0, 1, 0, 2 + diff --git a/sound/voicegroups/frlg_sfx.inc b/sound/voicegroups/frlg_sfx.inc new file mode 100644 index 000000000000..eadd0959c4c4 --- /dev/null +++ b/sound/voicegroups/frlg_sfx.inc @@ -0,0 +1,130 @@ +voice_group frlg_sfx + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 226, 25, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_1, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound 60, 0, DirectSoundWaveData_sd90_open_triangle, 255, 204, 128, 249 + voice_directsound 60, 0, DirectSoundWaveData_register_noise, 255, 0, 255, 76 + voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 206, 38 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 206, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 252, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 4 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 10, 3 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 15, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 29, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 22, 2, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 2 + voice_noise_alt 60, 0, 0, 0, 4, 3, 1 + voice_noise_alt 60, 0, 0, 0, 1, 12, 0 + voice_noise_alt 60, 0, 1, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + diff --git a/sound/voicegroups/game_corner.inc b/sound/voicegroups/game_corner.inc new file mode 100644 index 000000000000..127fe4ea0500 --- /dev/null +++ b/sound/voicegroups/game_corner.inc @@ -0,0 +1,130 @@ +voice_group game_corner + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/gym.inc b/sound/voicegroups/gym.inc new file mode 100644 index 000000000000..c4297ff663b2 --- /dev/null +++ b/sound/voicegroups/gym.inc @@ -0,0 +1,92 @@ +voice_group gym + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 + diff --git a/sound/voicegroups/hall_of_fame.inc b/sound/voicegroups/hall_of_fame.inc new file mode 100644 index 000000000000..82651a41e611 --- /dev/null +++ b/sound/voicegroups/hall_of_fame.inc @@ -0,0 +1,130 @@ +voice_group hall_of_fame + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 4, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/hall_of_fame_room.inc b/sound/voicegroups/hall_of_fame_room.inc new file mode 100644 index 000000000000..842ef7751425 --- /dev/null +++ b/sound/voicegroups/hall_of_fame_room.inc @@ -0,0 +1,130 @@ +voice_group hall_of_fame_room + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/help.inc b/sound/voicegroups/help.inc new file mode 100644 index 000000000000..6bb535c8a3c6 --- /dev/null +++ b/sound/voicegroups/help.inc @@ -0,0 +1,130 @@ +voice_group help + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/intro.inc b/sound/voicegroups/intro.inc new file mode 100644 index 000000000000..66da0b30517a --- /dev/null +++ b/sound/voicegroups/intro.inc @@ -0,0 +1,130 @@ +voice_group intro + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 128, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 4, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 7, 3, 3 + voice_square_1_alt 60, 0, 0, 2, 0, 7, 3, 3 + voice_square_1_alt 60, 0, 0, 3, 2, 2, 7, 0 + voice_square_2_alt 60, 0, 1, 1, 2, 3, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/intro_battle.inc b/sound/voicegroups/intro_battle.inc new file mode 100644 index 000000000000..8845d3c714a9 --- /dev/null +++ b/sound/voicegroups/intro_battle.inc @@ -0,0 +1,130 @@ +voice_group intro_battle + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/keysplits/french_horn.inc b/sound/voicegroups/keysplits/french_horn.inc new file mode 100644 index 000000000000..193fa3957c13 --- /dev/null +++ b/sound/voicegroups/keysplits/french_horn.inc @@ -0,0 +1,4 @@ +voice_group french_horn_keysplit + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_60, 255, 0, 224, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 255, 0, 218, 165 + diff --git a/sound/voicegroups/keysplits/piano.inc b/sound/voicegroups/keysplits/piano.inc new file mode 100644 index 000000000000..93484ea8b2b9 --- /dev/null +++ b/sound/voicegroups/keysplits/piano.inc @@ -0,0 +1,6 @@ +voice_group piano_keysplit + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_48, 255, 252, 0, 239 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_60, 255, 250, 0, 221 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_72, 255, 250, 0, 221 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_84, 255, 247, 0, 221 + diff --git a/sound/voicegroups/keysplits/strings.inc b/sound/voicegroups/keysplits/strings.inc new file mode 100644 index 000000000000..27e445e359eb --- /dev/null +++ b/sound/voicegroups/keysplits/strings.inc @@ -0,0 +1,5 @@ +voice_group strings_keysplit + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_60, 255, 0, 255, 196 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 196 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_84, 255, 0, 255, 196 + diff --git a/sound/voicegroups/keysplits/trumpet.inc b/sound/voicegroups/keysplits/trumpet.inc new file mode 100644 index 000000000000..eb38b7de7475 --- /dev/null +++ b/sound/voicegroups/keysplits/trumpet.inc @@ -0,0 +1,5 @@ +voice_group trumpet_keysplit + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_60, 255, 0, 193, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_72, 255, 0, 193, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_84, 255, 0, 193, 127 + diff --git a/sound/voicegroups/keysplits/tuba.inc b/sound/voicegroups/keysplits/tuba.inc new file mode 100644 index 000000000000..5d00a8000a51 --- /dev/null +++ b/sound/voicegroups/keysplits/tuba.inc @@ -0,0 +1,4 @@ +voice_group tuba_keysplit + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_39, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_51, 255, 0, 255, 165 + diff --git a/sound/voicegroups/lilycove.inc b/sound/voicegroups/lilycove.inc new file mode 100644 index 000000000000..8988ade2b1b7 --- /dev/null +++ b/sound/voicegroups/lilycove.inc @@ -0,0 +1,130 @@ +voice_group lilycove + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/lilycove_museum.inc b/sound/voicegroups/lilycove_museum.inc new file mode 100644 index 000000000000..06ee86ea9d8e --- /dev/null +++ b/sound/voicegroups/lilycove_museum.inc @@ -0,0 +1,89 @@ +voice_group lilycove_museum + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 6, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 + diff --git a/sound/voicegroups/link_contest_p1.inc b/sound/voicegroups/link_contest_p1.inc new file mode 100644 index 000000000000..7b1857db1ca3 --- /dev/null +++ b/sound/voicegroups/link_contest_p1.inc @@ -0,0 +1,130 @@ +voice_group link_contest_p1 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/link_contest_p2.inc b/sound/voicegroups/link_contest_p2.inc new file mode 100644 index 000000000000..dd547e36628c --- /dev/null +++ b/sound/voicegroups/link_contest_p2.inc @@ -0,0 +1,130 @@ +voice_group link_contest_p2 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/link_contest_p3.inc b/sound/voicegroups/link_contest_p3.inc new file mode 100644 index 000000000000..f9d5559a5efb --- /dev/null +++ b/sound/voicegroups/link_contest_p3.inc @@ -0,0 +1,130 @@ +voice_group link_contest_p3 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/link_contest_p4.inc b/sound/voicegroups/link_contest_p4.inc new file mode 100644 index 000000000000..2abcd10dab77 --- /dev/null +++ b/sound/voicegroups/link_contest_p4.inc @@ -0,0 +1,130 @@ +voice_group link_contest_p4 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/littleroot.inc b/sound/voicegroups/littleroot.inc new file mode 100644 index 000000000000..2817a022aff6 --- /dev/null +++ b/sound/voicegroups/littleroot.inc @@ -0,0 +1,76 @@ +voice_group littleroot + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 4, 4, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 3, 4, 1 + voice_square_2_alt 60, 0, 2, 1, 3, 4, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 3, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + diff --git a/sound/voicegroups/littleroot_test.inc b/sound/voicegroups/littleroot_test.inc new file mode 100644 index 000000000000..1788f263c01c --- /dev/null +++ b/sound/voicegroups/littleroot_test.inc @@ -0,0 +1,86 @@ +voice_group littleroot_test + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_16, 0, 7, 15, 2 + diff --git a/sound/voicegroups/mt_chimney.inc b/sound/voicegroups/mt_chimney.inc new file mode 100644 index 000000000000..2255c50d75b1 --- /dev/null +++ b/sound/voicegroups/mt_chimney.inc @@ -0,0 +1,130 @@ +voice_group mt_chimney + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 3, 1, 2, 6, 0 + voice_square_2 60, 0, 3, 1, 2, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 7, 6, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 4 + voice_noise_alt 60, 0, 0, 3, 1, 10, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 0 + diff --git a/sound/voicegroups/mt_pyre.inc b/sound/voicegroups/mt_pyre.inc new file mode 100644 index 000000000000..5d7caa771bed --- /dev/null +++ b/sound/voicegroups/mt_pyre.inc @@ -0,0 +1,130 @@ +voice_group mt_pyre + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 196 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 2 + diff --git a/sound/voicegroups/mt_pyre_exterior.inc b/sound/voicegroups/mt_pyre_exterior.inc new file mode 100644 index 000000000000..7f4c2e4363e4 --- /dev/null +++ b/sound/voicegroups/mt_pyre_exterior.inc @@ -0,0 +1,130 @@ +voice_group mt_pyre_exterior + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/oceanic_museum.inc b/sound/voicegroups/oceanic_museum.inc new file mode 100644 index 000000000000..1b072e2f4467 --- /dev/null +++ b/sound/voicegroups/oceanic_museum.inc @@ -0,0 +1,91 @@ +voice_group oceanic_museum + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 + diff --git a/sound/voicegroups/oldale.inc b/sound/voicegroups/oldale.inc new file mode 100644 index 000000000000..177f45c53e72 --- /dev/null +++ b/sound/voicegroups/oldale.inc @@ -0,0 +1,87 @@ +voice_group oldale + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 + diff --git a/sound/voicegroups/petalburg.inc b/sound/voicegroups/petalburg.inc new file mode 100644 index 000000000000..ff49460b51af --- /dev/null +++ b/sound/voicegroups/petalburg.inc @@ -0,0 +1,130 @@ +voice_group petalburg + voice_keysplit_all voicegroup_petalburg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 3, 0, 2, 0, 0 + voice_square_2 60, 0, 3, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 3, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 2 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + diff --git a/sound/voicegroups/petalburg_woods.inc b/sound/voicegroups/petalburg_woods.inc new file mode 100644 index 000000000000..5dbe72c9a9b1 --- /dev/null +++ b/sound/voicegroups/petalburg_woods.inc @@ -0,0 +1,130 @@ +voice_group petalburg_woods + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 1, 0, 1, 0, 3 + diff --git a/sound/voicegroups/poke_center.inc b/sound/voicegroups/poke_center.inc new file mode 100644 index 000000000000..edcf645bfab6 --- /dev/null +++ b/sound/voicegroups/poke_center.inc @@ -0,0 +1,130 @@ +voice_group poke_center + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 1, 12, 0 + voice_square_1_alt 60, 0, 0, 0, 1, 1, 9, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 + voice_square_2_alt 60, 0, 1, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/poke_mart.inc b/sound/voicegroups/poke_mart.inc new file mode 100644 index 000000000000..cc6580d5ae17 --- /dev/null +++ b/sound/voicegroups/poke_mart.inc @@ -0,0 +1,130 @@ +voice_group poke_mart + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/rayquaza_appears.inc b/sound/voicegroups/rayquaza_appears.inc new file mode 100644 index 000000000000..f7cddd3881b1 --- /dev/null +++ b/sound/voicegroups/rayquaza_appears.inc @@ -0,0 +1,85 @@ +voice_group rayquaza_appears + voice_keysplit_all voicegroup_emerald_drumset_2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_church_organ3_low, 255, 76, 154, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_church_organ3_high, 255, 76, 154, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 13, 1 + voice_square_2_alt 60, 0, 0, 0, 0, 12, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + diff --git a/sound/voicegroups/register_match_call.inc b/sound/voicegroups/register_match_call.inc new file mode 100644 index 000000000000..b35b30fb362b --- /dev/null +++ b/sound/voicegroups/register_match_call.inc @@ -0,0 +1,85 @@ +voice_group register_match_call + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 4 + voice_square_2_alt 60, 0, 2, 0, 2, 9, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + diff --git a/sound/voicegroups/rg_caught_intro.inc b/sound/voicegroups/rg_caught_intro.inc new file mode 100644 index 000000000000..b2623ba7a047 --- /dev/null +++ b/sound/voicegroups/rg_caught_intro.inc @@ -0,0 +1,90 @@ +voice_group rg_caught_intro + voice_keysplit_all voicegroup_frlg_fanfare_drumset_1 + voice_keysplit_all voicegroup_frlg_fanfare_drumset_2 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 10, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 9, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 9, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_celadon.inc b/sound/voicegroups/rg_celadon.inc new file mode 100644 index 000000000000..9f9dc36cf9fd --- /dev/null +++ b/sound/voicegroups/rg_celadon.inc @@ -0,0 +1,130 @@ +voice_group rg_celadon + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 4 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_cinnabar.inc b/sound/voicegroups/rg_cinnabar.inc new file mode 100644 index 000000000000..90c207b67532 --- /dev/null +++ b/sound/voicegroups/rg_cinnabar.inc @@ -0,0 +1,130 @@ +voice_group rg_cinnabar + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 3 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_credits.inc b/sound/voicegroups/rg_credits.inc new file mode 100644 index 000000000000..951a5782363f --- /dev/null +++ b/sound/voicegroups/rg_credits.inc @@ -0,0 +1,95 @@ +voice_group rg_credits + voice_keysplit_all voicegroup_rg_credits_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 153 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 43, 188, 103, 165 + voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 43, 165, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_cycling.inc b/sound/voicegroups/rg_cycling.inc new file mode 100644 index 000000000000..57e225141bcb --- /dev/null +++ b/sound/voicegroups/rg_cycling.inc @@ -0,0 +1,130 @@ +voice_group rg_cycling + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 2, 7, 3 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 2, 9, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_dex_rating.inc b/sound/voicegroups/rg_dex_rating.inc new file mode 100644 index 000000000000..b349e6a132e0 --- /dev/null +++ b/sound/voicegroups/rg_dex_rating.inc @@ -0,0 +1,90 @@ +voice_group rg_dex_rating + voice_keysplit_all voicegroup_frlg_fanfare_drumset_1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_encounter_boy.inc b/sound/voicegroups/rg_encounter_boy.inc new file mode 100644 index 000000000000..27d34d91360d --- /dev/null +++ b/sound/voicegroups/rg_encounter_boy.inc @@ -0,0 +1,130 @@ +voice_group rg_encounter_boy + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 85, 188, 92, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 85, 127, 180, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 2 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_encounter_deoxys.inc b/sound/voicegroups/rg_encounter_deoxys.inc new file mode 100644 index 000000000000..7b7fd5bd98c1 --- /dev/null +++ b/sound/voicegroups/rg_encounter_deoxys.inc @@ -0,0 +1,88 @@ +voice_group rg_encounter_deoxys + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + diff --git a/sound/voicegroups/rg_encounter_girl.inc b/sound/voicegroups/rg_encounter_girl.inc new file mode 100644 index 000000000000..6e9989e6be2c --- /dev/null +++ b/sound/voicegroups/rg_encounter_girl.inc @@ -0,0 +1,130 @@ +voice_group rg_encounter_girl + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 160, 123, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 3, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + diff --git a/sound/voicegroups/rg_encounter_rival.inc b/sound/voicegroups/rg_encounter_rival.inc new file mode 100644 index 000000000000..445cbad3203a --- /dev/null +++ b/sound/voicegroups/rg_encounter_rival.inc @@ -0,0 +1,130 @@ +voice_group rg_encounter_rival + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 + voice_square_2_alt 60, 0, 3, 0, 2, 3, 4 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 3, 1 + diff --git a/sound/voicegroups/rg_encounter_rocket.inc b/sound/voicegroups/rg_encounter_rocket.inc new file mode 100644 index 000000000000..69fd532a0eec --- /dev/null +++ b/sound/voicegroups/rg_encounter_rocket.inc @@ -0,0 +1,86 @@ +voice_group rg_encounter_rocket + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 188, 128, 201 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 195, 103, 220 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 195, 72, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 85, 188, 103, 160 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 128, 188, 77, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 175, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 + voice_square_2_alt 60, 0, 2, 0, 2, 5, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_follow_me.inc b/sound/voicegroups/rg_follow_me.inc new file mode 100644 index 000000000000..5f7563da829c --- /dev/null +++ b/sound/voicegroups/rg_follow_me.inc @@ -0,0 +1,130 @@ +voice_group rg_follow_me + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 128, 204, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 5 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + diff --git a/sound/voicegroups/rg_fuchsia.inc b/sound/voicegroups/rg_fuchsia.inc new file mode 100644 index 000000000000..c2b9ff1d1684 --- /dev/null +++ b/sound/voicegroups/rg_fuchsia.inc @@ -0,0 +1,130 @@ +voice_group rg_fuchsia + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 10, 4 + voice_square_2_alt 60, 0, 3, 0, 2, 8, 3 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_game_corner.inc b/sound/voicegroups/rg_game_corner.inc new file mode 100644 index 000000000000..fb7c6f615e82 --- /dev/null +++ b/sound/voicegroups/rg_game_corner.inc @@ -0,0 +1,130 @@ +voice_group rg_game_corner + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 118, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 235 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 2 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 4, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 4, 2, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 8, 1 + diff --git a/sound/voicegroups/rg_game_freak.inc b/sound/voicegroups/rg_game_freak.inc new file mode 100644 index 000000000000..8a7d475dc947 --- /dev/null +++ b/sound/voicegroups/rg_game_freak.inc @@ -0,0 +1,49 @@ +voice_group rg_game_freak + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + diff --git a/sound/voicegroups/rg_gym.inc b/sound/voicegroups/rg_gym.inc new file mode 100644 index 000000000000..78791967fa41 --- /dev/null +++ b/sound/voicegroups/rg_gym.inc @@ -0,0 +1,92 @@ +voice_group rg_gym + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 + diff --git a/sound/voicegroups/rg_hall_of_fame.inc b/sound/voicegroups/rg_hall_of_fame.inc new file mode 100644 index 000000000000..b98280514092 --- /dev/null +++ b/sound/voicegroups/rg_hall_of_fame.inc @@ -0,0 +1,130 @@ +voice_group rg_hall_of_fame + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 0, 9, 0 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_heal.inc b/sound/voicegroups/rg_heal.inc new file mode 100644 index 000000000000..01efe859edb6 --- /dev/null +++ b/sound/voicegroups/rg_heal.inc @@ -0,0 +1,6 @@ +voice_group rg_heal + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_intro_fight.inc b/sound/voicegroups/rg_intro_fight.inc new file mode 100644 index 000000000000..3b7d70b77bad --- /dev/null +++ b/sound/voicegroups/rg_intro_fight.inc @@ -0,0 +1,130 @@ +voice_group rg_intro_fight + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 5, 0, 0 + voice_square_1_alt 60, 0, 0, 2, 2, 4, 10, 0 + voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 5, 0, 0 + voice_square_2_alt 60, 0, 3, 2, 4, 10, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 1, 5, 0, 3 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 5, 0, 3 + voice_square_2_alt 60, 0, 1, 0, 1, 10, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 10, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/rg_jigglypuff.inc b/sound/voicegroups/rg_jigglypuff.inc new file mode 100644 index 000000000000..8c0abfcb10ad --- /dev/null +++ b/sound/voicegroups/rg_jigglypuff.inc @@ -0,0 +1,85 @@ +voice_group rg_jigglypuff + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 85, 137, 180, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 9, 0 + voice_square_2_alt 60, 0, 2, 0, 0, 9, 0 + voice_square_1_alt 60, 0, 0, 0, 1, 2, 6, 0 + diff --git a/sound/voicegroups/rg_lavender.inc b/sound/voicegroups/rg_lavender.inc new file mode 100644 index 000000000000..59dcb2029381 --- /dev/null +++ b/sound/voicegroups/rg_lavender.inc @@ -0,0 +1,130 @@ +voice_group rg_lavender + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 127, 103, 201 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 37, 127, 77, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + diff --git a/sound/voicegroups/rg_mt_moon.inc b/sound/voicegroups/rg_mt_moon.inc new file mode 100644 index 000000000000..026bb7edc8a6 --- /dev/null +++ b/sound/voicegroups/rg_mt_moon.inc @@ -0,0 +1,86 @@ +voice_group rg_mt_moon + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 249, 25, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 6, 1 + voice_square_2_alt 60, 0, 2, 0, 0, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 4, 2 + diff --git a/sound/voicegroups/rg_mystery_gift.inc b/sound/voicegroups/rg_mystery_gift.inc new file mode 100644 index 000000000000..8f26abe0e0ba --- /dev/null +++ b/sound/voicegroups/rg_mystery_gift.inc @@ -0,0 +1,130 @@ +voice_group rg_mystery_gift + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 3, 1 + diff --git a/sound/voicegroups/rg_new_game.inc b/sound/voicegroups/rg_new_game.inc new file mode 100644 index 000000000000..ffcbcdf748b9 --- /dev/null +++ b/sound/voicegroups/rg_new_game.inc @@ -0,0 +1,90 @@ +voice_group rg_new_game + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 76 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_oak.inc b/sound/voicegroups/rg_oak.inc new file mode 100644 index 000000000000..be46da360bff --- /dev/null +++ b/sound/voicegroups/rg_oak.inc @@ -0,0 +1,130 @@ +voice_group rg_oak + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/rg_oak_lab.inc b/sound/voicegroups/rg_oak_lab.inc new file mode 100644 index 000000000000..65fa559da3fa --- /dev/null +++ b/sound/voicegroups/rg_oak_lab.inc @@ -0,0 +1,90 @@ +voice_group rg_oak_lab + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_obtain_key_item.inc b/sound/voicegroups/rg_obtain_key_item.inc new file mode 100644 index 000000000000..e9f2bc0078b0 --- /dev/null +++ b/sound/voicegroups/rg_obtain_key_item.inc @@ -0,0 +1,90 @@ +voice_group rg_obtain_key_item + voice_keysplit_all voicegroup_frlg_fanfare_drumset_1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 204, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 15, 1 + diff --git a/sound/voicegroups/rg_pallet.inc b/sound/voicegroups/rg_pallet.inc new file mode 100644 index 000000000000..91836ad8dcb1 --- /dev/null +++ b/sound/voicegroups/rg_pallet.inc @@ -0,0 +1,130 @@ +voice_group rg_pallet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 51, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 7, 0, 6 + voice_square_2_alt 60, 0, 1, 1, 5, 1, 6 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 + voice_square_1_alt 60, 0, 0, 0, 1, 4, 3, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/rg_pewter.inc b/sound/voicegroups/rg_pewter.inc new file mode 100644 index 000000000000..bdac72177d41 --- /dev/null +++ b/sound/voicegroups/rg_pewter.inc @@ -0,0 +1,130 @@ +voice_group rg_pewter + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 4 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 3, 2 + diff --git a/sound/voicegroups/rg_photo.inc b/sound/voicegroups/rg_photo.inc new file mode 100644 index 000000000000..a871efd3d48c --- /dev/null +++ b/sound/voicegroups/rg_photo.inc @@ -0,0 +1,130 @@ +voice_group rg_photo + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/rg_poke_center.inc b/sound/voicegroups/rg_poke_center.inc new file mode 100644 index 000000000000..26abb41add47 --- /dev/null +++ b/sound/voicegroups/rg_poke_center.inc @@ -0,0 +1,95 @@ +voice_group rg_poke_center + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 64, 188, 108, 244 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 195, 92, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 64, 204, 113, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 0 + voice_square_2_alt 60, 0, 1, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_poke_mansion.inc b/sound/voicegroups/rg_poke_mansion.inc new file mode 100644 index 000000000000..a1d24e89fdb1 --- /dev/null +++ b/sound/voicegroups/rg_poke_mansion.inc @@ -0,0 +1,130 @@ +voice_group rg_poke_mansion + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 + voice_square_2_alt 60, 0, 2, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 3, 5, 2 + voice_noise_alt 60, 0, 0, 0, 1, 6, 5 + diff --git a/sound/voicegroups/rg_poke_tower.inc b/sound/voicegroups/rg_poke_tower.inc new file mode 100644 index 000000000000..a05561c50a57 --- /dev/null +++ b/sound/voicegroups/rg_poke_tower.inc @@ -0,0 +1,130 @@ +voice_group rg_poke_tower + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 103, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 204, 92, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 10, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_enhanced_delay_shaku, 255, 191, 97, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + diff --git a/sound/voicegroups/rg_rocket_hideout.inc b/sound/voicegroups/rg_rocket_hideout.inc new file mode 100644 index 000000000000..8d3d81a008af --- /dev/null +++ b/sound/voicegroups/rg_rocket_hideout.inc @@ -0,0 +1,130 @@ +voice_group rg_rocket_hideout + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 9, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 8, 1 + diff --git a/sound/voicegroups/rg_route1.inc b/sound/voicegroups/rg_route1.inc new file mode 100644 index 000000000000..237e0912826d --- /dev/null +++ b/sound/voicegroups/rg_route1.inc @@ -0,0 +1,130 @@ +voice_group rg_route1 + voice_keysplit_all voicegroup_frlg_drumset + voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 85, 204, 77, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 6 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/rg_route11.inc b/sound/voicegroups/rg_route11.inc new file mode 100644 index 000000000000..1ee794137b0e --- /dev/null +++ b/sound/voicegroups/rg_route11.inc @@ -0,0 +1,130 @@ +voice_group rg_route11 + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 3, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 4, 2 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_8, 0, 1, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 2 + diff --git a/sound/voicegroups/rg_route24.inc b/sound/voicegroups/rg_route24.inc new file mode 100644 index 000000000000..7e50c4824f63 --- /dev/null +++ b/sound/voicegroups/rg_route24.inc @@ -0,0 +1,90 @@ +voice_group rg_route24 + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 127 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_route3.inc b/sound/voicegroups/rg_route3.inc new file mode 100644 index 000000000000..781d2b9a413e --- /dev/null +++ b/sound/voicegroups/rg_route3.inc @@ -0,0 +1,130 @@ +voice_group rg_route3 + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 160, 175, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 5, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 4, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + diff --git a/sound/voicegroups/rg_sevii_45.inc b/sound/voicegroups/rg_sevii_45.inc new file mode 100644 index 000000000000..c81a569a9bb4 --- /dev/null +++ b/sound/voicegroups/rg_sevii_45.inc @@ -0,0 +1,130 @@ +voice_group rg_sevii_45 + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 7, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 1 + diff --git a/sound/voicegroups/rg_sevii_67.inc b/sound/voicegroups/rg_sevii_67.inc new file mode 100644 index 000000000000..6a3520833795 --- /dev/null +++ b/sound/voicegroups/rg_sevii_67.inc @@ -0,0 +1,130 @@ +voice_group rg_sevii_67 + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 3 + voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 7, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 1 + diff --git a/sound/voicegroups/rg_sevii_route.inc b/sound/voicegroups/rg_sevii_route.inc new file mode 100644 index 000000000000..5b5370a15e03 --- /dev/null +++ b/sound/voicegroups/rg_sevii_route.inc @@ -0,0 +1,130 @@ +voice_group rg_sevii_route + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + diff --git a/sound/voicegroups/rg_silph.inc b/sound/voicegroups/rg_silph.inc new file mode 100644 index 000000000000..0de5b368fa62 --- /dev/null +++ b/sound/voicegroups/rg_silph.inc @@ -0,0 +1,130 @@ +voice_group rg_silph + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 9, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 8, 1 + diff --git a/sound/voicegroups/rg_ss_anne.inc b/sound/voicegroups/rg_ss_anne.inc new file mode 100644 index 000000000000..931b86ed10a0 --- /dev/null +++ b/sound/voicegroups/rg_ss_anne.inc @@ -0,0 +1,130 @@ +voice_group rg_ss_anne + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 4, 2 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_surf.inc b/sound/voicegroups/rg_surf.inc new file mode 100644 index 000000000000..b134793f73f4 --- /dev/null +++ b/sound/voicegroups/rg_surf.inc @@ -0,0 +1,130 @@ +voice_group rg_surf + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 180, 108, 209 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 85, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 6 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 4 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_teachy_tv_menu.inc b/sound/voicegroups/rg_teachy_tv_menu.inc new file mode 100644 index 000000000000..160fbf3d078e --- /dev/null +++ b/sound/voicegroups/rg_teachy_tv_menu.inc @@ -0,0 +1,130 @@ +voice_group rg_teachy_tv_menu + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + diff --git a/sound/voicegroups/rg_title.inc b/sound/voicegroups/rg_title.inc new file mode 100644 index 000000000000..abfea6de70bd --- /dev/null +++ b/sound/voicegroups/rg_title.inc @@ -0,0 +1,130 @@ +voice_group rg_title + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 165, 180, 165 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 137, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 204, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 + voice_square_2_alt 60, 0, 1, 1, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + diff --git a/sound/voicegroups/rg_unused.inc b/sound/voicegroups/rg_unused.inc new file mode 100644 index 000000000000..8dac5129ad87 --- /dev/null +++ b/sound/voicegroups/rg_unused.inc @@ -0,0 +1,27 @@ +voice_group rg_unused + voice_keysplit_all voicegroup_frlg_fanfare_drumset_1 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 127 + diff --git a/sound/voicegroups/rg_unused_2.inc b/sound/voicegroups/rg_unused_2.inc new file mode 100644 index 000000000000..3b46ec977774 --- /dev/null +++ b/sound/voicegroups/rg_unused_2.inc @@ -0,0 +1,6 @@ +voice_group rg_unused_2 + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + diff --git a/sound/voicegroups/rg_vermillion.inc b/sound/voicegroups/rg_vermillion.inc new file mode 100644 index 000000000000..8c840c14c1c4 --- /dev/null +++ b/sound/voicegroups/rg_vermillion.inc @@ -0,0 +1,130 @@ +voice_group rg_vermillion + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 3 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_victory_gym_leader.inc b/sound/voicegroups/rg_victory_gym_leader.inc new file mode 100644 index 000000000000..76b53e7c3247 --- /dev/null +++ b/sound/voicegroups/rg_victory_gym_leader.inc @@ -0,0 +1,93 @@ +voice_group rg_victory_gym_leader + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + diff --git a/sound/voicegroups/rg_victory_road.inc b/sound/voicegroups/rg_victory_road.inc new file mode 100644 index 000000000000..5b578c74e441 --- /dev/null +++ b/sound/voicegroups/rg_victory_road.inc @@ -0,0 +1,95 @@ +voice_group rg_victory_road + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 10, 0 + voice_square_2_alt 60, 0, 1, 0, 0, 10, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 12, 0 + diff --git a/sound/voicegroups/rg_victory_trainer.inc b/sound/voicegroups/rg_victory_trainer.inc new file mode 100644 index 000000000000..eb1d34f117c5 --- /dev/null +++ b/sound/voicegroups/rg_victory_trainer.inc @@ -0,0 +1,130 @@ +voice_group rg_victory_trainer + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/rg_victory_wild.inc b/sound/voicegroups/rg_victory_wild.inc new file mode 100644 index 000000000000..bb48fcadea03 --- /dev/null +++ b/sound/voicegroups/rg_victory_wild.inc @@ -0,0 +1,86 @@ +voice_group rg_victory_wild + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 + diff --git a/sound/voicegroups/rg_viridian_forest.inc b/sound/voicegroups/rg_viridian_forest.inc new file mode 100644 index 000000000000..4c703102c95e --- /dev/null +++ b/sound/voicegroups/rg_viridian_forest.inc @@ -0,0 +1,130 @@ +voice_group rg_viridian_forest + voice_keysplit_all voicegroup_frlg_drumset + voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 43, 76, 103, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 4, 4 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 2 + diff --git a/sound/voicegroups/rg_vs_champion.inc b/sound/voicegroups/rg_vs_champion.inc new file mode 100644 index 000000000000..9068f8d50412 --- /dev/null +++ b/sound/voicegroups/rg_vs_champion.inc @@ -0,0 +1,130 @@ +voice_group rg_vs_champion + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 9, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 8, 1 + diff --git a/sound/voicegroups/rg_vs_deoxys.inc b/sound/voicegroups/rg_vs_deoxys.inc new file mode 100644 index 000000000000..172ec41bd040 --- /dev/null +++ b/sound/voicegroups/rg_vs_deoxys.inc @@ -0,0 +1,130 @@ +voice_group rg_vs_deoxys + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 85, 0, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + diff --git a/sound/voicegroups/rg_vs_gym_leader.inc b/sound/voicegroups/rg_vs_gym_leader.inc new file mode 100644 index 000000000000..85d7705a274e --- /dev/null +++ b/sound/voicegroups/rg_vs_gym_leader.inc @@ -0,0 +1,130 @@ +voice_group rg_vs_gym_leader + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 188, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 165, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 1, 9, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 2 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_vs_trainer.inc b/sound/voicegroups/rg_vs_trainer.inc new file mode 100644 index 000000000000..265366c166eb --- /dev/null +++ b/sound/voicegroups/rg_vs_trainer.inc @@ -0,0 +1,130 @@ +voice_group rg_vs_trainer + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 4, 4, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 5 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/rg_vs_wild.inc b/sound/voicegroups/rg_vs_wild.inc new file mode 100644 index 000000000000..b006a5dc2b60 --- /dev/null +++ b/sound/voicegroups/rg_vs_wild.inc @@ -0,0 +1,130 @@ +voice_group rg_vs_wild + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 190, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + diff --git a/sound/voicegroups/roulette.inc b/sound/voicegroups/roulette.inc new file mode 100644 index 000000000000..351d2321737a --- /dev/null +++ b/sound/voicegroups/roulette.inc @@ -0,0 +1,84 @@ +voice_group roulette + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 + diff --git a/sound/voicegroups/route101.inc b/sound/voicegroups/route101.inc new file mode 100644 index 000000000000..2fb66ade3e47 --- /dev/null +++ b/sound/voicegroups/route101.inc @@ -0,0 +1,130 @@ +voice_group route101 + voice_keysplit_all voicegroup_route101_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 2, 0, 3, 0, 0 + voice_square_2_alt 60, 0, 2, 0, 3, 0, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 3, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/route104.inc b/sound/voicegroups/route104.inc new file mode 100644 index 000000000000..9a4056df7074 --- /dev/null +++ b/sound/voicegroups/route104.inc @@ -0,0 +1,130 @@ +voice_group route104 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 1, 7, 15, 2 + voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/route110.inc b/sound/voicegroups/route110.inc new file mode 100644 index 000000000000..30cb3dedf561 --- /dev/null +++ b/sound/voicegroups/route110.inc @@ -0,0 +1,86 @@ +voice_group route110 + voice_keysplit_all voicegroup_route110_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 4, 0, 1 + voice_square_1 60, 0, 0, 3, 0, 4, 0, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + diff --git a/sound/voicegroups/route111.inc b/sound/voicegroups/route111.inc new file mode 100644 index 000000000000..b4ef9e9fae4b --- /dev/null +++ b/sound/voicegroups/route111.inc @@ -0,0 +1,130 @@ +voice_group route111 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 2 + voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/route113.inc b/sound/voicegroups/route113.inc new file mode 100644 index 000000000000..975115509725 --- /dev/null +++ b/sound/voicegroups/route113.inc @@ -0,0 +1,130 @@ +voice_group route113 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/route119.inc b/sound/voicegroups/route119.inc new file mode 100644 index 000000000000..a6b76d54cdde --- /dev/null +++ b/sound/voicegroups/route119.inc @@ -0,0 +1,90 @@ +voice_group route119 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 7, 3, 3 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 204, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 4, 4, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 3, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 3, 3, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 12, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 2, 4, 0 + diff --git a/sound/voicegroups/route120.inc b/sound/voicegroups/route120.inc new file mode 100644 index 000000000000..b1a529d29273 --- /dev/null +++ b/sound/voicegroups/route120.inc @@ -0,0 +1,87 @@ +voice_group route120 + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 + diff --git a/sound/voicegroups/route122.inc b/sound/voicegroups/route122.inc new file mode 100644 index 000000000000..a18d0142dfdc --- /dev/null +++ b/sound/voicegroups/route122.inc @@ -0,0 +1,89 @@ +voice_group route122 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 0 + diff --git a/sound/voicegroups/rs_sfx_1.inc b/sound/voicegroups/rs_sfx_1.inc new file mode 100644 index 000000000000..d07f1d88120c --- /dev/null +++ b/sound/voicegroups/rs_sfx_1.inc @@ -0,0 +1,130 @@ +voice_group rs_sfx_1 + voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 249, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 0, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 4, 0, 1 + voice_square_1_alt 60, 0, 44, 2, 0, 4, 0, 0 + voice_square_1_alt 60, 0, 38, 0, 0, 4, 0, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 7, 0, 0 + voice_square_1_alt 60, 0, 0, 2, 2, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 2, 0, 15, 0 + voice_square_1_alt 60, 0, 23, 1, 0, 1, 9, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 165 + voice_square_1_alt 60, 0, 0, 2, 0, 6, 0, 1 + voice_square_1_alt 60, 0, 36, 0, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 0, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 46, 2, 0, 4, 0, 0 + voice_square_1_alt 60, 0, 38, 2, 0, 4, 0, 0 + voice_square_1_alt 60, 0, 119, 2, 0, 0, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 1 + voice_square_1_alt 60, 0, 106, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 23, 2, 0, 1, 9, 0 + voice_square_1_alt 60, 0, 21, 2, 0, 1, 9, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 15, 1 + voice_square_1_alt 60, 0, 47, 2, 0, 2, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise 60, 0, 0, 0, 7, 15, 0 + voice_noise 60, 0, 0, 2, 7, 15, 0 + voice_noise_alt 60, 0, 0, 2, 0, 15, 0 + voice_noise_alt 60, 0, 1, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 3, 0, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + diff --git a/sound/voicegroups/rs_sfx_2.inc b/sound/voicegroups/rs_sfx_2.inc new file mode 100644 index 000000000000..b93f29b0ff54 --- /dev/null +++ b/sound/voicegroups/rs_sfx_2.inc @@ -0,0 +1,130 @@ +voice_group rs_sfx_2 + voice_directsound_no_resample 60, 0, DirectSoundWaveData_bicycle_bell, 255, 249, 0, 165 + voice_directsound_alt 60, 0, DirectSoundWaveData_bicycle_bell, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 242, 0, 127 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + voice_noise_alt 60, 0, 1, 0, 1, 0, 1 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 255, 165 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 + voice_directsound 60, 0, DirectSoundWaveData_unknown_1, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_2, 255, 0, 255, 127 + voice_noise_alt 60, 0, 1, 0, 2, 0, 0 + voice_square_1 60, 0, 103, 3, 2, 7, 0, 0 + voice_square_2 60, 0, 3, 2, 7, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_3, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 + voice_directsound 60, 0, DirectSoundWaveData_unknown_4, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 + voice_square_1 60, 0, 103, 0, 0, 7, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_wind, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 127 + voice_noise_alt 60, 0, 0, 0, 7, 15, 1 + voice_directsound 60, 0, DirectSoundWaveData_unknown_5, 255, 0, 255, 127 + voice_noise_alt 60, 0, 1, 0, 7, 15, 1 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 246, 0, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_6, 255, 0, 255, 127 + voice_square_1_alt 60, 0, 19, 2, 0, 2, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 0, 255, 127 + voice_square_1 60, 0, 103, 0, 0, 0, 15, 0 + voice_directsound_alt 60, 0, DirectSoundWaveData_unknown_6, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_7, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 242, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_8, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_directsound 60, 0, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_unknown_9, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 0, 4, 6, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 13, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 13, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 252, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 0, 4, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 188, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 226, 0, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 26, 0, 255, 127 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 252, 0, 127 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 127, 0, 127 + voice_noise_alt 60, 0, 0, 1, 6, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_10, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 11, 242, 0, 127 + voice_square_1_alt 60, 0, 0, 2, 4, 6, 0, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_11, 255, 255, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc55_tom, 255, 0, 255, 165 + voice_noise_alt 60, 0, 0, 5, 7, 15, 1 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 128, 242, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 0, 1, 5, 0, 0 + voice_noise_alt 60, 0, 0, 6, 6, 0, 1 + voice_noise_alt 60, 0, 0, 3, 6, 0, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 15, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unknown_12, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_13, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_14, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_15, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_16, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_unknown_17, 255, 0, 255, 165 + diff --git a/sound/voicegroups/rustboro.inc b/sound/voicegroups/rustboro.inc new file mode 100644 index 000000000000..035c96f073aa --- /dev/null +++ b/sound/voicegroups/rustboro.inc @@ -0,0 +1,130 @@ +voice_group rustboro + voice_keysplit_all voicegroup_rs_drumset + voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 1 + voice_square_1_alt 60, 0, 0, 3, 1, 2, 6, 0 + voice_square_2_alt 60, 0, 3, 1, 2, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 0, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 1, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/safari_zone.inc b/sound/voicegroups/safari_zone.inc new file mode 100644 index 000000000000..29eb4db8611b --- /dev/null +++ b/sound/voicegroups/safari_zone.inc @@ -0,0 +1,130 @@ +voice_group safari_zone + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/sailing.inc b/sound/voicegroups/sailing.inc new file mode 100644 index 000000000000..4dc40de7d92c --- /dev/null +++ b/sound/voicegroups/sailing.inc @@ -0,0 +1,130 @@ +voice_group sailing + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 196 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/school.inc b/sound/voicegroups/school.inc new file mode 100644 index 000000000000..8490de2e67f9 --- /dev/null +++ b/sound/voicegroups/school.inc @@ -0,0 +1,4 @@ +voice_group school + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + diff --git a/sound/voicegroups/sealed_chamber.inc b/sound/voicegroups/sealed_chamber.inc new file mode 100644 index 000000000000..98fda0afa64e --- /dev/null +++ b/sound/voicegroups/sealed_chamber.inc @@ -0,0 +1,130 @@ +voice_group sealed_chamber + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/slateport.inc b/sound/voicegroups/slateport.inc new file mode 100644 index 000000000000..10aea36b3394 --- /dev/null +++ b/sound/voicegroups/slateport.inc @@ -0,0 +1,130 @@ +voice_group slateport + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 5 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 4, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/sootopolis.inc b/sound/voicegroups/sootopolis.inc new file mode 100644 index 000000000000..742e4e4dfa3f --- /dev/null +++ b/sound/voicegroups/sootopolis.inc @@ -0,0 +1,130 @@ +voice_group sootopolis + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 5, 2 + voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/surf.inc b/sound/voicegroups/surf.inc new file mode 100644 index 000000000000..924a9c783278 --- /dev/null +++ b/sound/voicegroups/surf.inc @@ -0,0 +1,93 @@ +voice_group surf + voice_keysplit_all voicegroup_rs_drumset + voice_square_2_alt 60, 0, 2, 0, 3, 3, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 3, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 2 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 2 + voice_square_2_alt 60, 0, 2, 1, 1, 0, 0 + voice_square_1_alt 60, 0, 0, 2, 1, 1, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 1, 7, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 2 + voice_square_2_alt 60, 0, 3, 1, 1, 7, 2 + voice_square_1_alt 60, 0, 0, 3, 1, 1, 7, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 + voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 2 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 2 + voice_square_2_alt 60, 0, 1, 1, 2, 6, 2 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 6, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 2 + diff --git a/sound/voicegroups/title.inc b/sound/voicegroups/title.inc new file mode 100644 index 000000000000..629171779c44 --- /dev/null +++ b/sound/voicegroups/title.inc @@ -0,0 +1,91 @@ +voice_group title + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 2 + voice_square_2_alt 60, 0, 2, 0, 1, 6, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 + diff --git a/sound/voicegroups/trick_house.inc b/sound/voicegroups/trick_house.inc new file mode 100644 index 000000000000..beb29c395f3a --- /dev/null +++ b/sound/voicegroups/trick_house.inc @@ -0,0 +1,130 @@ +voice_group trick_house + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/underwater.inc b/sound/voicegroups/underwater.inc new file mode 100644 index 000000000000..40d42107dee8 --- /dev/null +++ b/sound/voicegroups/underwater.inc @@ -0,0 +1,130 @@ +voice_group underwater + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 188, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 128, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 1, 4, 10, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 1, 5, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/unused.inc b/sound/voicegroups/unused.inc new file mode 100644 index 000000000000..ee5a89b71557 --- /dev/null +++ b/sound/voicegroups/unused.inc @@ -0,0 +1,130 @@ +voice_group unused + voice_square_1_alt 60, 0, 38, 2, 1, 0, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 36, 2, 0, 1, 4, 2 + voice_square_1_alt 60, 0, 21, 2, 0, 0, 15, 2 + diff --git a/sound/voicegroups/unused_2.inc b/sound/voicegroups/unused_2.inc new file mode 100644 index 000000000000..d2e1a4cf04a1 --- /dev/null +++ b/sound/voicegroups/unused_2.inc @@ -0,0 +1,130 @@ +voice_group unused_2 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion_duplicate, 255, 249, 25, 248 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + diff --git a/sound/voicegroups/verdanturf.inc b/sound/voicegroups/verdanturf.inc new file mode 100644 index 000000000000..afaeca5043ef --- /dev/null +++ b/sound/voicegroups/verdanturf.inc @@ -0,0 +1,83 @@ +voice_group verdanturf + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 5, 1, 7 + voice_square_2_alt 60, 0, 3, 0, 4, 3, 6 + voice_square_2_alt 60, 0, 2, 1, 1, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 + diff --git a/sound/voicegroups/victory_aqua_magma.inc b/sound/voicegroups/victory_aqua_magma.inc new file mode 100644 index 000000000000..f507d1fc9802 --- /dev/null +++ b/sound/voicegroups/victory_aqua_magma.inc @@ -0,0 +1,130 @@ +voice_group victory_aqua_magma + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/victory_gym_leader.inc b/sound/voicegroups/victory_gym_leader.inc new file mode 100644 index 000000000000..18dc32f56808 --- /dev/null +++ b/sound/voicegroups/victory_gym_leader.inc @@ -0,0 +1,93 @@ +voice_group victory_gym_leader + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + diff --git a/sound/voicegroups/victory_league.inc b/sound/voicegroups/victory_league.inc new file mode 100644 index 000000000000..5e5b517bc46b --- /dev/null +++ b/sound/voicegroups/victory_league.inc @@ -0,0 +1,90 @@ +voice_group victory_league + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 0, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 + diff --git a/sound/voicegroups/victory_road.inc b/sound/voicegroups/victory_road.inc new file mode 100644 index 000000000000..eb20af9e8e02 --- /dev/null +++ b/sound/voicegroups/victory_road.inc @@ -0,0 +1,130 @@ +voice_group victory_road + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 3, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/victory_trainer.inc b/sound/voicegroups/victory_trainer.inc new file mode 100644 index 000000000000..c4674a9cdeb4 --- /dev/null +++ b/sound/voicegroups/victory_trainer.inc @@ -0,0 +1,130 @@ +voice_group victory_trainer + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 4, 0 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/sound/voicegroups/victory_wild.inc b/sound/voicegroups/victory_wild.inc new file mode 100644 index 000000000000..de3083616819 --- /dev/null +++ b/sound/voicegroups/victory_wild.inc @@ -0,0 +1,86 @@ +voice_group victory_wild + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 + diff --git a/sound/voicegroups/voicegroup000.inc b/sound/voicegroups/voicegroup000.inc deleted file mode 100644 index 7a2c5772f9c4..000000000000 --- a/sound/voicegroups/voicegroup000.inc +++ /dev/null @@ -1,65 +0,0 @@ - .align 2 -voicegroup000:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 0, 9, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup001.inc b/sound/voicegroups/voicegroup001.inc deleted file mode 100644 index 20a2795dc1c3..000000000000 --- a/sound/voicegroups/voicegroup001.inc +++ /dev/null @@ -1,32 +0,0 @@ - .align 2 -voicegroup001:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 6, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 - voice_square_2 60, 0, 3, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 0, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup002.inc b/sound/voicegroups/voicegroup002.inc deleted file mode 100644 index bd6f080aa44a..000000000000 --- a/sound/voicegroups/voicegroup002.inc +++ /dev/null @@ -1,57 +0,0 @@ - .align 2 -voicegroup002:: - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 255, 165, 154, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 255, 165, 154, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_guitar_separates_power_chord, 255, 165, 206, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 206, 127 - voice_directsound 60, 0, DirectSoundWaveData_unknown_snare, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 48, 44, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 - voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 - voice_directsound 51, 54, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 54, 64, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 - voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_open_hihat, 255, 242, 141, 0 - voice_directsound 57, 69, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 - voice_directsound 60, 79, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 62, 84, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 70, 49, DirectSoundWaveData_unknown_bell, 255, 165, 103, 231 - voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 60, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 235, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_directsound_no_resample 30, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 104, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 94, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - diff --git a/sound/voicegroups/voicegroup003.inc b/sound/voicegroups/voicegroup003.inc deleted file mode 100644 index d77150fc1248..000000000000 --- a/sound/voicegroups/voicegroup003.inc +++ /dev/null @@ -1,57 +0,0 @@ - .align 2 -voicegroup003:: - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - diff --git a/sound/voicegroups/voicegroup004.inc b/sound/voicegroups/voicegroup004.inc deleted file mode 100644 index 6aa28d6a9f11..000000000000 --- a/sound/voicegroups/voicegroup004.inc +++ /dev/null @@ -1,93 +0,0 @@ - .align 2 -voicegroup004:: - voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 62, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound 65, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 56, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound 60, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 58, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 62, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 - voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup005.inc b/sound/voicegroups/voicegroup005.inc deleted file mode 100644 index 584451a62fc3..000000000000 --- a/sound/voicegroups/voicegroup005.inc +++ /dev/null @@ -1,7 +0,0 @@ - .align 2 -voicegroup005:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_48, 255, 252, 0, 239 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_60, 255, 250, 0, 221 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_72, 255, 250, 0, 221 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_84, 255, 247, 0, 221 - diff --git a/sound/voicegroups/voicegroup006.inc b/sound/voicegroups/voicegroup006.inc deleted file mode 100644 index 52b2b335f256..000000000000 --- a/sound/voicegroups/voicegroup006.inc +++ /dev/null @@ -1,6 +0,0 @@ - .align 2 -voicegroup006:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_60, 255, 0, 255, 196 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 196 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_84, 255, 0, 255, 196 - diff --git a/sound/voicegroups/voicegroup007.inc b/sound/voicegroups/voicegroup007.inc deleted file mode 100644 index 66bcd3fa6c32..000000000000 --- a/sound/voicegroups/voicegroup007.inc +++ /dev/null @@ -1,134 +0,0 @@ - .align 2 -voicegroup007:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_60, 255, 0, 193, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_72, 255, 0, 193, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_84, 255, 0, 193, 127 - voice_square_1_alt 60, 0, 38, 2, 1, 0, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 36, 2, 0, 1, 4, 2 - voice_square_1_alt 60, 0, 21, 2, 0, 0, 15, 2 - diff --git a/sound/voicegroups/voicegroup008.inc b/sound/voicegroups/voicegroup008.inc deleted file mode 100644 index 7fc874e87aad..000000000000 --- a/sound/voicegroups/voicegroup008.inc +++ /dev/null @@ -1,5 +0,0 @@ - .align 2 -voicegroup008:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_39, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_51, 255, 0, 255, 165 - diff --git a/sound/voicegroups/voicegroup009.inc b/sound/voicegroups/voicegroup009.inc deleted file mode 100644 index 4a51a02ca37d..000000000000 --- a/sound/voicegroups/voicegroup009.inc +++ /dev/null @@ -1,5 +0,0 @@ - .align 2 -voicegroup009:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_60, 255, 0, 224, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 255, 0, 218, 165 - diff --git a/sound/voicegroups/voicegroup010.inc b/sound/voicegroups/voicegroup010.inc deleted file mode 100644 index 8d0f7a56dd93..000000000000 --- a/sound/voicegroups/voicegroup010.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup010:: - voice_keysplit_all voicegroup031 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 4, 0, 1 - voice_square_1 60, 0, 0, 3, 0, 4, 0, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 - diff --git a/sound/voicegroups/voicegroup011.inc b/sound/voicegroups/voicegroup011.inc deleted file mode 100644 index 5527cc3698c2..000000000000 --- a/sound/voicegroups/voicegroup011.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup011:: - voice_keysplit_all voicegroup022 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 2, 0, 3, 0, 0 - voice_square_2_alt 60, 0, 2, 0, 3, 0, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 3, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup012.inc b/sound/voicegroups/voicegroup012.inc deleted file mode 100644 index 2fe7cf818009..000000000000 --- a/sound/voicegroups/voicegroup012.inc +++ /dev/null @@ -1,105 +0,0 @@ - .align 2 -voicegroup012:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 178, 180, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 29, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 22, 2, 0, 2, 0, 0 - diff --git a/sound/voicegroups/voicegroup013.inc b/sound/voicegroups/voicegroup013.inc deleted file mode 100644 index f99c6f3cdc6f..000000000000 --- a/sound/voicegroups/voicegroup013.inc +++ /dev/null @@ -1,93 +0,0 @@ - .align 2 -voicegroup013:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 - diff --git a/sound/voicegroups/voicegroup014.inc b/sound/voicegroups/voicegroup014.inc deleted file mode 100644 index 6ce0897d103d..000000000000 --- a/sound/voicegroups/voicegroup014.inc +++ /dev/null @@ -1,88 +0,0 @@ - .align 2 -voicegroup014:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 - diff --git a/sound/voicegroups/voicegroup015.inc b/sound/voicegroups/voicegroup015.inc deleted file mode 100644 index a5284763561c..000000000000 --- a/sound/voicegroups/voicegroup015.inc +++ /dev/null @@ -1,95 +0,0 @@ - .align 2 -voicegroup015:: - voice_keysplit_all voicegroup016 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 3, 0, 2, 0, 0 - voice_square_2 60, 0, 3, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 3, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup016.inc b/sound/voicegroups/voicegroup016.inc deleted file mode 100644 index 1b17ac49c777..000000000000 --- a/sound/voicegroups/voicegroup016.inc +++ /dev/null @@ -1,68 +0,0 @@ - .align 2 -voicegroup016:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 2 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 32, 74, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 66, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 62, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup017.inc b/sound/voicegroups/voicegroup017.inc deleted file mode 100644 index 06738d297b25..000000000000 --- a/sound/voicegroups/voicegroup017.inc +++ /dev/null @@ -1,94 +0,0 @@ - .align 2 -voicegroup017:: - voice_keysplit_all voicegroup001 - voice_square_2_alt 60, 0, 2, 0, 3, 3, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 3, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 2 - voice_square_2_alt 60, 0, 2, 1, 1, 0, 0 - voice_square_1_alt 60, 0, 0, 2, 1, 1, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 1, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 2, 1, 1, 7, 2 - voice_square_2_alt 60, 0, 3, 1, 1, 7, 2 - voice_square_1_alt 60, 0, 0, 3, 1, 1, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 2 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 2 - voice_square_2_alt 60, 0, 1, 1, 2, 6, 2 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 6, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 2 - diff --git a/sound/voicegroups/voicegroup018.inc b/sound/voicegroups/voicegroup018.inc deleted file mode 100644 index 30b63bb26eb7..000000000000 --- a/sound/voicegroups/voicegroup018.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup018:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 1, 0, 1, 0, 3 - diff --git a/sound/voicegroups/voicegroup019.inc b/sound/voicegroups/voicegroup019.inc deleted file mode 100644 index a983659c3926..000000000000 --- a/sound/voicegroups/voicegroup019.inc +++ /dev/null @@ -1,88 +0,0 @@ - .align 2 -voicegroup019:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 1 - diff --git a/sound/voicegroups/voicegroup020.inc b/sound/voicegroups/voicegroup020.inc deleted file mode 100644 index 8449fbdd60b3..000000000000 --- a/sound/voicegroups/voicegroup020.inc +++ /dev/null @@ -1,90 +0,0 @@ - .align 2 -voicegroup020:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 6, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 - diff --git a/sound/voicegroups/voicegroup021.inc b/sound/voicegroups/voicegroup021.inc deleted file mode 100644 index 43aa9150eede..000000000000 --- a/sound/voicegroups/voicegroup021.inc +++ /dev/null @@ -1,54 +0,0 @@ - .align 2 -voicegroup021:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup022.inc b/sound/voicegroups/voicegroup022.inc deleted file mode 100644 index 877f57d6ce72..000000000000 --- a/sound/voicegroups/voicegroup022.inc +++ /dev/null @@ -1,68 +0,0 @@ - .align 2 -voicegroup022:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 67, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 61, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup023.inc b/sound/voicegroups/voicegroup023.inc deleted file mode 100644 index eede8dc019c6..000000000000 --- a/sound/voicegroups/voicegroup023.inc +++ /dev/null @@ -1,92 +0,0 @@ - .align 2 -voicegroup023:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 - diff --git a/sound/voicegroups/voicegroup024.inc b/sound/voicegroups/voicegroup024.inc deleted file mode 100644 index 3806b462d633..000000000000 --- a/sound/voicegroups/voicegroup024.inc +++ /dev/null @@ -1,94 +0,0 @@ - .align 2 -voicegroup024:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - diff --git a/sound/voicegroups/voicegroup025.inc b/sound/voicegroups/voicegroup025.inc deleted file mode 100644 index 3449629469c3..000000000000 --- a/sound/voicegroups/voicegroup025.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup025:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup026.inc b/sound/voicegroups/voicegroup026.inc deleted file mode 100644 index d18047d582f4..000000000000 --- a/sound/voicegroups/voicegroup026.inc +++ /dev/null @@ -1,88 +0,0 @@ - .align 2 -voicegroup026:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 9, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 9, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - diff --git a/sound/voicegroups/voicegroup027.inc b/sound/voicegroups/voicegroup027.inc deleted file mode 100644 index 517ee87d43a9..000000000000 --- a/sound/voicegroups/voicegroup027.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup027:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 1, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 1, 0, 2, 0, 0 - voice_square_2 60, 0, 1, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 1, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 4, 1, 4 - voice_noise_alt 60, 0, 0, 0, 1, 0, 2 - diff --git a/sound/voicegroups/voicegroup028.inc b/sound/voicegroups/voicegroup028.inc deleted file mode 100644 index 9af19f1879b0..000000000000 --- a/sound/voicegroups/voicegroup028.inc +++ /dev/null @@ -1,86 +0,0 @@ - .align 2 -voicegroup028:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 3, 0, 1, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 0, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 0, 0, 2, 0, 0 - voice_square_2 60, 0, 0, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 0, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 2, 0, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_2 60, 0, 3, 0, 4, 0, 0 - diff --git a/sound/voicegroups/voicegroup029.inc b/sound/voicegroups/voicegroup029.inc deleted file mode 100644 index 7c801afcb339..000000000000 --- a/sound/voicegroups/voicegroup029.inc +++ /dev/null @@ -1,91 +0,0 @@ - .align 2 -voicegroup029:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 0, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 - diff --git a/sound/voicegroups/voicegroup030.inc b/sound/voicegroups/voicegroup030.inc deleted file mode 100644 index 1e1b5088dd5b..000000000000 --- a/sound/voicegroups/voicegroup030.inc +++ /dev/null @@ -1,58 +0,0 @@ - .align 2 -voicegroup030:: - voice_keysplit_all voicegroup031 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 180, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup031.inc b/sound/voicegroups/voicegroup031.inc deleted file mode 100644 index 178d7ec63dc8..000000000000 --- a/sound/voicegroups/voicegroup031.inc +++ /dev/null @@ -1,68 +0,0 @@ - .align 2 -voicegroup031:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 32, 49, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 79, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 74, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup032.inc b/sound/voicegroups/voicegroup032.inc deleted file mode 100644 index dc60bbdf3b29..000000000000 --- a/sound/voicegroups/voicegroup032.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup032:: - voice_keysplit_all voicegroup016 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 3, 4, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 3, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 250, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - voice_noise_alt 60, 0, 0, 0, 4, 1, 4 - voice_noise_alt 60, 0, 0, 0, 1, 0, 2 - diff --git a/sound/voicegroups/voicegroup033.inc b/sound/voicegroups/voicegroup033.inc deleted file mode 100644 index 34e7e43b712d..000000000000 --- a/sound/voicegroups/voicegroup033.inc +++ /dev/null @@ -1,86 +0,0 @@ - .align 2 -voicegroup033:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - diff --git a/sound/voicegroups/voicegroup034.inc b/sound/voicegroups/voicegroup034.inc deleted file mode 100644 index fe973b84c3fb..000000000000 --- a/sound/voicegroups/voicegroup034.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup034:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_16, 0, 7, 15, 2 - diff --git a/sound/voicegroups/voicegroup035.inc b/sound/voicegroups/voicegroup035.inc deleted file mode 100644 index 2c3ac4bddd99..000000000000 --- a/sound/voicegroups/voicegroup035.inc +++ /dev/null @@ -1,88 +0,0 @@ - .align 2 -voicegroup035:: - voice_keysplit_all voicegroup031 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 1 - diff --git a/sound/voicegroups/voicegroup036.inc b/sound/voicegroups/voicegroup036.inc deleted file mode 100644 index c3d2df146c17..000000000000 --- a/sound/voicegroups/voicegroup036.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup036:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 4, 1, 4 - voice_noise_alt 60, 0, 0, 0, 1, 0, 2 - diff --git a/sound/voicegroups/voicegroup037.inc b/sound/voicegroups/voicegroup037.inc deleted file mode 100644 index 057891c01b16..000000000000 --- a/sound/voicegroups/voicegroup037.inc +++ /dev/null @@ -1,92 +0,0 @@ - .align 2 -voicegroup037:: - voice_keysplit_all voicegroup031 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 - diff --git a/sound/voicegroups/voicegroup038.inc b/sound/voicegroups/voicegroup038.inc deleted file mode 100644 index bcb211d6f59e..000000000000 --- a/sound/voicegroups/voicegroup038.inc +++ /dev/null @@ -1,85 +0,0 @@ - .align 2 -voicegroup038:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup039.inc b/sound/voicegroups/voicegroup039.inc deleted file mode 100644 index 9e8d16df0b01..000000000000 --- a/sound/voicegroups/voicegroup039.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup039:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup040.inc b/sound/voicegroups/voicegroup040.inc deleted file mode 100644 index f390cb3d85aa..000000000000 --- a/sound/voicegroups/voicegroup040.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup040:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup041.inc b/sound/voicegroups/voicegroup041.inc deleted file mode 100644 index def4e46b00d6..000000000000 --- a/sound/voicegroups/voicegroup041.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup041:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup042.inc b/sound/voicegroups/voicegroup042.inc deleted file mode 100644 index 1298ddbd52b6..000000000000 --- a/sound/voicegroups/voicegroup042.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup042:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup043.inc b/sound/voicegroups/voicegroup043.inc deleted file mode 100644 index d6bd30bcbaea..000000000000 --- a/sound/voicegroups/voicegroup043.inc +++ /dev/null @@ -1,84 +0,0 @@ - .align 2 -voicegroup043:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - diff --git a/sound/voicegroups/voicegroup044.inc b/sound/voicegroups/voicegroup044.inc deleted file mode 100644 index 9a057754b352..000000000000 --- a/sound/voicegroups/voicegroup044.inc +++ /dev/null @@ -1,84 +0,0 @@ - .align 2 -voicegroup044:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 5, 1, 7 - voice_square_2_alt 60, 0, 3, 0, 4, 3, 6 - voice_square_2_alt 60, 0, 2, 1, 1, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 - diff --git a/sound/voicegroups/voicegroup045.inc b/sound/voicegroups/voicegroup045.inc deleted file mode 100644 index 2e2016e43909..000000000000 --- a/sound/voicegroups/voicegroup045.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup045:: - voice_keysplit_all voicegroup001 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 1 - voice_square_1_alt 60, 0, 0, 3, 1, 2, 6, 0 - voice_square_2_alt 60, 0, 3, 1, 2, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 0, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 1, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup046.inc b/sound/voicegroups/voicegroup046.inc deleted file mode 100644 index f653241e35b5..000000000000 --- a/sound/voicegroups/voicegroup046.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup046:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 1, 12, 0 - voice_square_1_alt 60, 0, 0, 0, 1, 1, 9, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 - voice_square_2_alt 60, 0, 1, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup047.inc b/sound/voicegroups/voicegroup047.inc deleted file mode 100644 index 84fa9335a879..000000000000 --- a/sound/voicegroups/voicegroup047.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup047:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 1, 7, 15, 2 - voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup048.inc b/sound/voicegroups/voicegroup048.inc deleted file mode 100644 index eeb5b682a38c..000000000000 --- a/sound/voicegroups/voicegroup048.inc +++ /dev/null @@ -1,91 +0,0 @@ - .align 2 -voicegroup048:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 7, 3, 3 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 204, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 4, 4, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 3, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 12, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 2, 4, 0 - diff --git a/sound/voicegroups/voicegroup049.inc b/sound/voicegroups/voicegroup049.inc deleted file mode 100644 index b6b0774cf3d7..000000000000 --- a/sound/voicegroups/voicegroup049.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup049:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 7, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 2 - voice_square_2_alt 60, 0, 1, 1, 3, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 1, 4, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup050.inc b/sound/voicegroups/voicegroup050.inc deleted file mode 100644 index 6b45664eb0b6..000000000000 --- a/sound/voicegroups/voicegroup050.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup050:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup051.inc b/sound/voicegroups/voicegroup051.inc deleted file mode 100644 index d3a144622aa6..000000000000 --- a/sound/voicegroups/voicegroup051.inc +++ /dev/null @@ -1,77 +0,0 @@ - .align 2 -voicegroup051:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 4, 4, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 3, 4, 1 - voice_square_2_alt 60, 0, 2, 1, 3, 4, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 3, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - diff --git a/sound/voicegroups/voicegroup052.inc b/sound/voicegroups/voicegroup052.inc deleted file mode 100644 index 438e2d5f1785..000000000000 --- a/sound/voicegroups/voicegroup052.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup052:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 3, 1, 2, 6, 0 - voice_square_2 60, 0, 3, 1, 2, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 7, 6, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 4 - voice_noise_alt 60, 0, 0, 3, 1, 10, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 0 - diff --git a/sound/voicegroups/voicegroup053.inc b/sound/voicegroups/voicegroup053.inc deleted file mode 100644 index e5f1a4d7e8e6..000000000000 --- a/sound/voicegroups/voicegroup053.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup053:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup054.inc b/sound/voicegroups/voicegroup054.inc deleted file mode 100644 index ddd17ed99522..000000000000 --- a/sound/voicegroups/voicegroup054.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup054:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup055.inc b/sound/voicegroups/voicegroup055.inc deleted file mode 100644 index 9157030e8339..000000000000 --- a/sound/voicegroups/voicegroup055.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup055:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 2 - voice_square_2_alt 60, 0, 1, 1, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup056.inc b/sound/voicegroups/voicegroup056.inc deleted file mode 100644 index ec543b9b336a..000000000000 --- a/sound/voicegroups/voicegroup056.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup056:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup057.inc b/sound/voicegroups/voicegroup057.inc deleted file mode 100644 index 391b7cf8bc3b..000000000000 --- a/sound/voicegroups/voicegroup057.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup057:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 188, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 128, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 1, 4, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 5, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup058.inc b/sound/voicegroups/voicegroup058.inc deleted file mode 100644 index 56dff5f5bbf5..000000000000 --- a/sound/voicegroups/voicegroup058.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup058:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup059.inc b/sound/voicegroups/voicegroup059.inc deleted file mode 100644 index 5a45d437d3cd..000000000000 --- a/sound/voicegroups/voicegroup059.inc +++ /dev/null @@ -1,92 +0,0 @@ - .align 2 -voicegroup059:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 6, 2 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - diff --git a/sound/voicegroups/voicegroup060.inc b/sound/voicegroups/voicegroup060.inc deleted file mode 100644 index 448841e625f0..000000000000 --- a/sound/voicegroups/voicegroup060.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup060:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 128, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 1, 6, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 4, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 7, 3, 3 - voice_square_1_alt 60, 0, 0, 2, 0, 7, 3, 3 - voice_square_1_alt 60, 0, 0, 3, 2, 2, 7, 0 - voice_square_2_alt 60, 0, 1, 1, 2, 3, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup061.inc b/sound/voicegroups/voicegroup061.inc deleted file mode 100644 index d73730ecbc41..000000000000 --- a/sound/voicegroups/voicegroup061.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup061:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup062.inc b/sound/voicegroups/voicegroup062.inc deleted file mode 100644 index ad2e6cad7fe5..000000000000 --- a/sound/voicegroups/voicegroup062.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup062:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup063.inc b/sound/voicegroups/voicegroup063.inc deleted file mode 100644 index 966ae2080917..000000000000 --- a/sound/voicegroups/voicegroup063.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup063:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup064.inc b/sound/voicegroups/voicegroup064.inc deleted file mode 100644 index fa56af03ead3..000000000000 --- a/sound/voicegroups/voicegroup064.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup064:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup065.inc b/sound/voicegroups/voicegroup065.inc deleted file mode 100644 index 163bce0c7e7e..000000000000 --- a/sound/voicegroups/voicegroup065.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup065:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup066.inc b/sound/voicegroups/voicegroup066.inc deleted file mode 100644 index af4a7f841044..000000000000 --- a/sound/voicegroups/voicegroup066.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup066:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup067.inc b/sound/voicegroups/voicegroup067.inc deleted file mode 100644 index ed8ccef4f800..000000000000 --- a/sound/voicegroups/voicegroup067.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup067:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup068.inc b/sound/voicegroups/voicegroup068.inc deleted file mode 100644 index 787ce997b7d2..000000000000 --- a/sound/voicegroups/voicegroup068.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup068:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup069.inc b/sound/voicegroups/voicegroup069.inc deleted file mode 100644 index 26ea29405180..000000000000 --- a/sound/voicegroups/voicegroup069.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup069:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup070.inc b/sound/voicegroups/voicegroup070.inc deleted file mode 100644 index 59a43180dfc0..000000000000 --- a/sound/voicegroups/voicegroup070.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup070:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup071.inc b/sound/voicegroups/voicegroup071.inc deleted file mode 100644 index a4cb9c721f84..000000000000 --- a/sound/voicegroups/voicegroup071.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup071:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup072.inc b/sound/voicegroups/voicegroup072.inc deleted file mode 100644 index 50fa4e4cfaa6..000000000000 --- a/sound/voicegroups/voicegroup072.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup072:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup073.inc b/sound/voicegroups/voicegroup073.inc deleted file mode 100644 index b10ab81d1ae6..000000000000 --- a/sound/voicegroups/voicegroup073.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup073:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup074.inc b/sound/voicegroups/voicegroup074.inc deleted file mode 100644 index 1c3c67f8dcd5..000000000000 --- a/sound/voicegroups/voicegroup074.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup074:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup075.inc b/sound/voicegroups/voicegroup075.inc deleted file mode 100644 index 86af71af4b81..000000000000 --- a/sound/voicegroups/voicegroup075.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup075:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 3, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup076.inc b/sound/voicegroups/voicegroup076.inc deleted file mode 100644 index 378a8ff66929..000000000000 --- a/sound/voicegroups/voicegroup076.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup076:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup077.inc b/sound/voicegroups/voicegroup077.inc deleted file mode 100644 index 994d9f411d2f..000000000000 --- a/sound/voicegroups/voicegroup077.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup077:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 196 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup078.inc b/sound/voicegroups/voicegroup078.inc deleted file mode 100644 index e3ef10feb73f..000000000000 --- a/sound/voicegroups/voicegroup078.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup078:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 196 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 2 - diff --git a/sound/voicegroups/voicegroup079.inc b/sound/voicegroups/voicegroup079.inc deleted file mode 100644 index 42b51faea45b..000000000000 --- a/sound/voicegroups/voicegroup079.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup079:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 4, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup080.inc b/sound/voicegroups/voicegroup080.inc deleted file mode 100644 index 6d627ad92e46..000000000000 --- a/sound/voicegroups/voicegroup080.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup080:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup081.inc b/sound/voicegroups/voicegroup081.inc deleted file mode 100644 index e9c2011e40a7..000000000000 --- a/sound/voicegroups/voicegroup081.inc +++ /dev/null @@ -1,5 +0,0 @@ - .align 2 -voicegroup081:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - diff --git a/sound/voicegroups/voicegroup082.inc b/sound/voicegroups/voicegroup082.inc deleted file mode 100644 index b6b5506f1a6d..000000000000 --- a/sound/voicegroups/voicegroup082.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup082:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 4, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup083.inc b/sound/voicegroups/voicegroup083.inc deleted file mode 100644 index 4f2fcd809ff9..000000000000 --- a/sound/voicegroups/voicegroup083.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup083:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 6, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 6, 1 - diff --git a/sound/voicegroups/voicegroup084.inc b/sound/voicegroups/voicegroup084.inc deleted file mode 100644 index 510b37c23aa2..000000000000 --- a/sound/voicegroups/voicegroup084.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup084:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup085.inc b/sound/voicegroups/voicegroup085.inc deleted file mode 100644 index 6260fb198ad5..000000000000 --- a/sound/voicegroups/voicegroup085.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup085:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 1, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 13, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup086.inc b/sound/voicegroups/voicegroup086.inc deleted file mode 100644 index d5298f9b03f5..000000000000 --- a/sound/voicegroups/voicegroup086.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup086:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup087.inc b/sound/voicegroups/voicegroup087.inc deleted file mode 100644 index 1ccb69ea559b..000000000000 --- a/sound/voicegroups/voicegroup087.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup087:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup088.inc b/sound/voicegroups/voicegroup088.inc deleted file mode 100644 index 8f6f21688427..000000000000 --- a/sound/voicegroups/voicegroup088.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup088:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 6, 2 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup089.inc b/sound/voicegroups/voicegroup089.inc deleted file mode 100644 index 4b5e7d57bd4f..000000000000 --- a/sound/voicegroups/voicegroup089.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup089:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 3 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup090.inc b/sound/voicegroups/voicegroup090.inc deleted file mode 100644 index 4039ad8d1456..000000000000 --- a/sound/voicegroups/voicegroup090.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup090:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup091.inc b/sound/voicegroups/voicegroup091.inc deleted file mode 100644 index 28a64ab48876..000000000000 --- a/sound/voicegroups/voicegroup091.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup091:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 5, 2 - voice_square_2_alt 60, 0, 2, 0, 1, 5, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup092.inc b/sound/voicegroups/voicegroup092.inc deleted file mode 100644 index 90e2858175c2..000000000000 --- a/sound/voicegroups/voicegroup092.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup092:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup093.inc b/sound/voicegroups/voicegroup093.inc deleted file mode 100644 index 8cea3573355a..000000000000 --- a/sound/voicegroups/voicegroup093.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup093:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup094.inc b/sound/voicegroups/voicegroup094.inc deleted file mode 100644 index b52e95892642..000000000000 --- a/sound/voicegroups/voicegroup094.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup094:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 72, 249 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup095.inc b/sound/voicegroups/voicegroup095.inc deleted file mode 100644 index 96b531f8ed7a..000000000000 --- a/sound/voicegroups/voicegroup095.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup095:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 3 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup096.inc b/sound/voicegroups/voicegroup096.inc deleted file mode 100644 index b0cb653cafa6..000000000000 --- a/sound/voicegroups/voicegroup096.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup096:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup097.inc b/sound/voicegroups/voicegroup097.inc deleted file mode 100644 index fb0542dac6eb..000000000000 --- a/sound/voicegroups/voicegroup097.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup097:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 249 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup098.inc b/sound/voicegroups/voicegroup098.inc deleted file mode 100644 index 3a927368bca3..000000000000 --- a/sound/voicegroups/voicegroup098.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup098:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_10, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup099.inc b/sound/voicegroups/voicegroup099.inc deleted file mode 100644 index e750f95831db..000000000000 --- a/sound/voicegroups/voicegroup099.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup099:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 7, 0 - voice_square_1_alt 60, 0, 0, 1, 2, 1, 5, 0 - voice_square_2_alt 60, 0, 1, 2, 1, 5, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup100.inc b/sound/voicegroups/voicegroup100.inc deleted file mode 100644 index 577d05c35495..000000000000 --- a/sound/voicegroups/voicegroup100.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup100:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 2, 1, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 1, 1, 4, 1 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup101.inc b/sound/voicegroups/voicegroup101.inc deleted file mode 100644 index 768c18dea2e3..000000000000 --- a/sound/voicegroups/voicegroup101.inc +++ /dev/null @@ -1,113 +0,0 @@ - .align 2 -voicegroup101:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 5, 2, 4 - voice_square_2_alt 60, 0, 1, 1, 5, 2, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 1, 6, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 4, 6, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 1, 4, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 1, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 1, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup102.inc b/sound/voicegroups/voicegroup102.inc deleted file mode 100644 index 197ed891be8e..000000000000 --- a/sound/voicegroups/voicegroup102.inc +++ /dev/null @@ -1,85 +0,0 @@ - .align 2 -voicegroup102:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 248 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 6, 0, 6 - voice_square_2_alt 60, 0, 2, 0, 6, 0, 6 - diff --git a/sound/voicegroups/voicegroup103.inc b/sound/voicegroups/voicegroup103.inc deleted file mode 100644 index cc743edb22cb..000000000000 --- a/sound/voicegroups/voicegroup103.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup103:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 0, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 - diff --git a/sound/voicegroups/voicegroup104.inc b/sound/voicegroups/voicegroup104.inc deleted file mode 100644 index c1b623918bbd..000000000000 --- a/sound/voicegroups/voicegroup104.inc +++ /dev/null @@ -1,111 +0,0 @@ - .align 2 -voicegroup104:: - voice_keysplit_all voicegroup003 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_high, 255, 0, 206, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_shakuhachi, 255, 0, 255, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 2, 0, 12, 5 - voice_square_2_alt 60, 0, 0, 0, 0, 10, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 2, 0, 12, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_low, 255, 0, 206, 242 - diff --git a/sound/voicegroups/voicegroup105.inc b/sound/voicegroups/voicegroup105.inc deleted file mode 100644 index a1a1bc2d61f5..000000000000 --- a/sound/voicegroups/voicegroup105.inc +++ /dev/null @@ -1,86 +0,0 @@ - .align 2 -voicegroup105:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 4 - voice_square_2_alt 60, 0, 2, 0, 2, 9, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - diff --git a/sound/voicegroups/voicegroup106.inc b/sound/voicegroups/voicegroup106.inc deleted file mode 100644 index 1a1125be8af3..000000000000 --- a/sound/voicegroups/voicegroup106.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup106:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 38, 128, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup107.inc b/sound/voicegroups/voicegroup107.inc deleted file mode 100644 index c43a518ec763..000000000000 --- a/sound/voicegroups/voicegroup107.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup107:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup108.inc b/sound/voicegroups/voicegroup108.inc deleted file mode 100644 index a92ee43c6ac4..000000000000 --- a/sound/voicegroups/voicegroup108.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup108:: - voice_keysplit_all voicegroup004 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_heart_of_asia_gamelan, 255, 188, 139, 239 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 13, 4 - voice_square_2_alt 60, 0, 0, 0, 0, 9, 2 - voice_square_2_alt 60, 0, 1, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup109.inc b/sound/voicegroups/voicegroup109.inc deleted file mode 100644 index a9991437377b..000000000000 --- a/sound/voicegroups/voicegroup109.inc +++ /dev/null @@ -1,86 +0,0 @@ - .align 2 -voicegroup109:: - voice_keysplit_all voicegroup004 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_church_organ3_low, 255, 76, 154, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_church_organ3_high, 255, 76, 154, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 13, 1 - voice_square_2_alt 60, 0, 0, 0, 0, 12, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup110.inc b/sound/voicegroups/voicegroup110.inc deleted file mode 100644 index 25b6fdaae0c7..000000000000 --- a/sound/voicegroups/voicegroup110.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup110:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 0, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 - diff --git a/sound/voicegroups/voicegroup111.inc b/sound/voicegroups/voicegroup111.inc deleted file mode 100644 index 27b418f462b0..000000000000 --- a/sound/voicegroups/voicegroup111.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup111:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 226 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 195 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 195 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 195 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 - diff --git a/sound/voicegroups/voicegroup112.inc b/sound/voicegroups/voicegroup112.inc deleted file mode 100644 index 9cb2f415a901..000000000000 --- a/sound/voicegroups/voicegroup112.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup112:: - voice_keysplit_all voicegroup003 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 76 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 128, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 128, 165, 128, 188 - voice_directsound 60, 0, DirectSoundWaveData_unknown_female_voice, 128, 165, 128, 204 - voice_directsound 60, 0, DirectSoundWaveData_unused_unknown_male_voice, 128, 165, 128, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 7, 0 - voice_square_2_alt 60, 0, 1, 0, 0, 6, 0 - voice_square_2_alt 60, 0, 3, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 7, 10, 1 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 - diff --git a/sound/voicegroups/voicegroup113.inc b/sound/voicegroups/voicegroup113.inc deleted file mode 100644 index 0fa279c8a64d..000000000000 --- a/sound/voicegroups/voicegroup113.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup113:: - voice_keysplit_all voicegroup002 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_23, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_25, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_24, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_22, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_9, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_10, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_11, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_12, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_13, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 195 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 7, 7, 0 - voice_square_2_alt 60, 0, 2, 0, 7, 7, 0 - voice_square_2_alt 60, 0, 1, 0, 7, 7, 0 - voice_square_2_alt 60, 0, 0, 0, 7, 7, 0 - voice_square_2_alt 60, 0, 3, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 7, 7, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 7, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 7, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - voice_noise_alt 60, 0, 0, 0, 2, 6, 1 - diff --git a/sound/voicegroups/voicegroup114.inc b/sound/voicegroups/voicegroup114.inc deleted file mode 100644 index cb078d24c3a1..000000000000 --- a/sound/voicegroups/voicegroup114.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup114:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - diff --git a/sound/voicegroups/voicegroup115.inc b/sound/voicegroups/voicegroup115.inc deleted file mode 100644 index eb4f52b87827..000000000000 --- a/sound/voicegroups/voicegroup115.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup115:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 249, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 188, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 165, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 198 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 146 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 6, 0 - voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 1, 9, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 2 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup116.inc b/sound/voicegroups/voicegroup116.inc deleted file mode 100644 index a86a87f5d1b4..000000000000 --- a/sound/voicegroups/voicegroup116.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup116:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 190, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 3, 6, 5 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup117.inc b/sound/voicegroups/voicegroup117.inc deleted file mode 100644 index 3a86ec4f583f..000000000000 --- a/sound/voicegroups/voicegroup117.inc +++ /dev/null @@ -1,85 +0,0 @@ - .align 2 -voicegroup117:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 1, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 1, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - diff --git a/sound/voicegroups/voicegroup118.inc b/sound/voicegroups/voicegroup118.inc deleted file mode 100644 index 89e66b21d230..000000000000 --- a/sound/voicegroups/voicegroup118.inc +++ /dev/null @@ -1,94 +0,0 @@ - .align 2 -voicegroup118:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 0, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 250, 0, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 0, 255, 127 - diff --git a/sound/voicegroups/voicegroup119.inc b/sound/voicegroups/voicegroup119.inc deleted file mode 100644 index 8b7fe24c79ac..000000000000 --- a/sound/voicegroups/voicegroup119.inc +++ /dev/null @@ -1,94 +0,0 @@ - .align 2 -voicegroup119:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 0, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 0, 0, 2, 4, 1 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_timpani_with_snare, 255, 246, 0, 226 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2 60, 0, 1, 0, 1, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 - diff --git a/sound/voicegroups/voicegroup120.inc b/sound/voicegroups/voicegroup120.inc deleted file mode 100644 index 2c104fb10b67..000000000000 --- a/sound/voicegroups/voicegroup120.inc +++ /dev/null @@ -1,94 +0,0 @@ - .align 2 -voicegroup120:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 2, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 2, 6, 1 - voice_square_2 60, 0, 3, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 3, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 - diff --git a/sound/voicegroups/voicegroup121.inc b/sound/voicegroups/voicegroup121.inc deleted file mode 100644 index f09ddd774172..000000000000 --- a/sound/voicegroups/voicegroup121.inc +++ /dev/null @@ -1,89 +0,0 @@ - .align 2 -voicegroup121:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2 60, 0, 0, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 0, 0, 7, 1 - diff --git a/sound/voicegroups/voicegroup122.inc b/sound/voicegroups/voicegroup122.inc deleted file mode 100644 index 65356a3d175e..000000000000 --- a/sound/voicegroups/voicegroup122.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup122:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 1, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 1, 0, 1, 6, 1 - voice_square_2 60, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 0, 1, 9, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 9, 1 - diff --git a/sound/voicegroups/voicegroup123.inc b/sound/voicegroups/voicegroup123.inc deleted file mode 100644 index 6178994ccaef..000000000000 --- a/sound/voicegroups/voicegroup123.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup123:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - diff --git a/sound/voicegroups/voicegroup124.inc b/sound/voicegroups/voicegroup124.inc deleted file mode 100644 index 274d76dcd1a2..000000000000 --- a/sound/voicegroups/voicegroup124.inc +++ /dev/null @@ -1,90 +0,0 @@ - .align 2 -voicegroup124:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_2 60, 0, 3, 0, 2, 7, 1 - diff --git a/sound/voicegroups/voicegroup125.inc b/sound/voicegroups/voicegroup125.inc deleted file mode 100644 index 644002abf76d..000000000000 --- a/sound/voicegroups/voicegroup125.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup125:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 - diff --git a/sound/voicegroups/voicegroup126.inc b/sound/voicegroups/voicegroup126.inc deleted file mode 100644 index 51959b4f1e30..000000000000 --- a/sound/voicegroups/voicegroup126.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup126:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 0, 1, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 1, 1, 7, 1 - voice_square_1 60, 0, 0, 0, 0, 0, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 1, 1, 6, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 3, 1, 1, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 216 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - diff --git a/sound/voicegroups/voicegroup127.inc b/sound/voicegroups/voicegroup127.inc deleted file mode 100644 index 476d3f48f6e2..000000000000 --- a/sound/voicegroups/voicegroup127.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup127:: - voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 249, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 0, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 4, 0, 1 - voice_square_1_alt 60, 0, 44, 2, 0, 4, 0, 0 - voice_square_1_alt 60, 0, 38, 0, 0, 4, 0, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 7, 0, 0 - voice_square_1_alt 60, 0, 0, 2, 2, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 2, 0, 15, 0 - voice_square_1_alt 60, 0, 23, 1, 0, 1, 9, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 165 - voice_square_1_alt 60, 0, 0, 2, 0, 6, 0, 1 - voice_square_1_alt 60, 0, 36, 0, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 0, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 0, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 46, 2, 0, 4, 0, 0 - voice_square_1_alt 60, 0, 38, 2, 0, 4, 0, 0 - voice_square_1_alt 60, 0, 119, 2, 0, 0, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 1 - voice_square_1_alt 60, 0, 106, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 23, 2, 0, 1, 9, 0 - voice_square_1_alt 60, 0, 21, 2, 0, 1, 9, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 15, 1 - voice_square_1_alt 60, 0, 47, 2, 0, 2, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise 60, 0, 0, 0, 7, 15, 0 - voice_noise 60, 0, 0, 2, 7, 15, 0 - voice_noise_alt 60, 0, 0, 2, 0, 15, 0 - voice_noise_alt 60, 0, 1, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 3, 0, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 - diff --git a/sound/voicegroups/voicegroup128.inc b/sound/voicegroups/voicegroup128.inc deleted file mode 100644 index 69b52d29d67e..000000000000 --- a/sound/voicegroups/voicegroup128.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup128:: - voice_directsound_no_resample 60, 0, DirectSoundWaveData_bicycle_bell, 255, 249, 0, 165 - voice_directsound_alt 60, 0, DirectSoundWaveData_bicycle_bell, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 242, 0, 127 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 - voice_noise_alt 60, 0, 1, 0, 1, 0, 1 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 255, 165 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 - voice_directsound 60, 0, DirectSoundWaveData_unknown_1, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_unknown_2, 255, 0, 255, 127 - voice_noise_alt 60, 0, 1, 0, 2, 0, 0 - voice_square_1 60, 0, 103, 3, 2, 7, 0, 0 - voice_square_2 60, 0, 3, 2, 7, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_unknown_3, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 1 - voice_directsound 60, 0, DirectSoundWaveData_unknown_4, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 103, 0, 0, 7, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_wind, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_bubbles, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 127 - voice_noise_alt 60, 0, 0, 0, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_unknown_5, 255, 0, 255, 127 - voice_noise_alt 60, 0, 1, 0, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 246, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_unknown_6, 255, 0, 255, 127 - voice_square_1_alt 60, 0, 19, 2, 0, 2, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 0, 255, 127 - voice_square_1 60, 0, 103, 0, 0, 0, 15, 0 - voice_directsound_alt 60, 0, DirectSoundWaveData_unknown_6, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_unknown_7, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 242, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_directsound 60, 0, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_unknown_9, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 0, 4, 6, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 13, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 13, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 252, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 0, 4, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 188, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 226, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 26, 0, 255, 127 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 252, 0, 127 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 127, 0, 127 - voice_noise_alt 60, 0, 0, 1, 6, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_unknown_10, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 11, 242, 0, 127 - voice_square_1_alt 60, 0, 0, 2, 4, 6, 0, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_11, 255, 255, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc55_tom, 255, 0, 255, 165 - voice_noise_alt 60, 0, 0, 5, 7, 15, 1 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 128, 242, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 0, 1, 5, 0, 0 - voice_noise_alt 60, 0, 0, 6, 6, 0, 1 - voice_noise_alt 60, 0, 0, 3, 6, 0, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 15, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_12, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unknown_13, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unknown_14, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unknown_15, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unknown_16, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_unknown_17, 255, 0, 255, 165 - diff --git a/sound/voicegroups/voicegroup129.inc b/sound/voicegroups/voicegroup129.inc deleted file mode 100644 index 8e136bdf48dc..000000000000 --- a/sound/voicegroups/voicegroup129.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup129:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 226, 25, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_1, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - voice_directsound 60, 0, DirectSoundWaveData_sd90_open_triangle, 255, 204, 128, 249 - voice_directsound 60, 0, DirectSoundWaveData_register_noise, 255, 0, 255, 76 - voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 206, 38 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 206, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 252, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 204, 0, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 4 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 10, 3 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 15, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 6 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 29, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 22, 2, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 2 - voice_noise_alt 60, 0, 0, 0, 4, 3, 1 - voice_noise_alt 60, 0, 0, 0, 1, 12, 0 - voice_noise_alt 60, 0, 1, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - diff --git a/sound/voicegroups/voicegroup130.inc b/sound/voicegroups/voicegroup130.inc deleted file mode 100644 index 7044bb38e4b9..000000000000 --- a/sound/voicegroups/voicegroup130.inc +++ /dev/null @@ -1,182 +0,0 @@ - .align 2 -voicegroup130:: - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_1, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_2, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_3, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_5, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_6, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_7, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_9, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_10, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_11, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_12, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_13, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_14, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_15, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_16, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_17, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_18, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_19, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_20, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_21, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_22, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_23, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_24, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_25, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_26, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_27, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_28, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_29, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_30, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_31, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_32, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_33, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_34, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_35, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_36, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_37, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_38, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_39, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_40, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_41, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_42, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_43, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_44, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_45, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_46, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_47, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_48, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_49, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_50, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_51, 255, 0, 255, 0 - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion_duplicate, 255, 249, 25, 248 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - diff --git a/sound/voicegroups/voicegroup131.inc b/sound/voicegroups/voicegroup131.inc deleted file mode 100644 index 029afa5be524..000000000000 --- a/sound/voicegroups/voicegroup131.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup131:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 128, 204, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 5 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 - diff --git a/sound/voicegroups/voicegroup132.inc b/sound/voicegroups/voicegroup132.inc deleted file mode 100644 index 2806916bcae2..000000000000 --- a/sound/voicegroups/voicegroup132.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup132:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 118, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 2 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 4, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 4, 2, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 8, 1 - diff --git a/sound/voicegroups/voicegroup133.inc b/sound/voicegroups/voicegroup133.inc deleted file mode 100644 index be70f6ae33f7..000000000000 --- a/sound/voicegroups/voicegroup133.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup133:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 9, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 8, 1 - diff --git a/sound/voicegroups/voicegroup134.inc b/sound/voicegroups/voicegroup134.inc deleted file mode 100644 index 1bc01fed0739..000000000000 --- a/sound/voicegroups/voicegroup134.inc +++ /dev/null @@ -1,93 +0,0 @@ - .align 2 -voicegroup134:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 7, 1 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 1 - diff --git a/sound/voicegroups/voicegroup135.inc b/sound/voicegroups/voicegroup135.inc deleted file mode 100644 index 2ea22bf96903..000000000000 --- a/sound/voicegroups/voicegroup135.inc +++ /dev/null @@ -1,86 +0,0 @@ - .align 2 -voicegroup135:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 85, 137, 180, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 9, 0 - voice_square_2_alt 60, 0, 2, 0, 0, 9, 0 - voice_square_1_alt 60, 0, 0, 0, 1, 2, 6, 0 - diff --git a/sound/voicegroups/voicegroup136.inc b/sound/voicegroups/voicegroup136.inc deleted file mode 100644 index 0428c8c0042b..000000000000 --- a/sound/voicegroups/voicegroup136.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup136:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 5, 0, 0 - voice_square_1_alt 60, 0, 0, 2, 2, 4, 10, 0 - voice_square_2_alt 60, 0, 0, 0, 5, 0, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 5, 0, 0 - voice_square_2_alt 60, 0, 3, 2, 4, 10, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 1, 5, 0, 3 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 1, 5, 0, 3 - voice_square_2_alt 60, 0, 1, 0, 1, 10, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 10, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup137.inc b/sound/voicegroups/voicegroup137.inc deleted file mode 100644 index cf7422cd2321..000000000000 --- a/sound/voicegroups/voicegroup137.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup137:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 165, 180, 165 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 137, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 204, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 1, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 2, 4, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 - diff --git a/sound/voicegroups/voicegroup138.inc b/sound/voicegroups/voicegroup138.inc deleted file mode 100644 index 227538f5dca0..000000000000 --- a/sound/voicegroups/voicegroup138.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup138:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 3 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup139.inc b/sound/voicegroups/voicegroup139.inc deleted file mode 100644 index e8969de570e1..000000000000 --- a/sound/voicegroups/voicegroup139.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup139:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 127, 103, 201 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 37, 127, 77, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup140.inc b/sound/voicegroups/voicegroup140.inc deleted file mode 100644 index 8206cca1d273..000000000000 --- a/sound/voicegroups/voicegroup140.inc +++ /dev/null @@ -1,7 +0,0 @@ - .align 2 -voicegroup140:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup141.inc b/sound/voicegroups/voicegroup141.inc deleted file mode 100644 index 1e556a21b6a6..000000000000 --- a/sound/voicegroups/voicegroup141.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup141:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 2, 7, 3 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 2, 9, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup142.inc b/sound/voicegroups/voicegroup142.inc deleted file mode 100644 index af5b809bf84c..000000000000 --- a/sound/voicegroups/voicegroup142.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup142:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 188, 128, 201 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 195, 103, 220 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 195, 72, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 85, 188, 103, 160 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 128, 188, 77, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 175, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 - voice_square_2_alt 60, 0, 2, 0, 2, 5, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup143.inc b/sound/voicegroups/voicegroup143.inc deleted file mode 100644 index 9cb286ac13d0..000000000000 --- a/sound/voicegroups/voicegroup143.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup143:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 160, 123, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 3, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup144.inc b/sound/voicegroups/voicegroup144.inc deleted file mode 100644 index 87830a387b05..000000000000 --- a/sound/voicegroups/voicegroup144.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup144:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 85, 188, 92, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 85, 127, 180, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 51, 204, 92, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 2 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup145.inc b/sound/voicegroups/voicegroup145.inc deleted file mode 100644 index 96cda70e488a..000000000000 --- a/sound/voicegroups/voicegroup145.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup145:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 0, 9, 0 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup146.inc b/sound/voicegroups/voicegroup146.inc deleted file mode 100644 index b0f1b92d6fc5..000000000000 --- a/sound/voicegroups/voicegroup146.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup146:: - voice_keysplit_all voicegroup002 - voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 43, 76, 103, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 4 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 2 - diff --git a/sound/voicegroups/voicegroup147.inc b/sound/voicegroups/voicegroup147.inc deleted file mode 100644 index 47678158241f..000000000000 --- a/sound/voicegroups/voicegroup147.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup147:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 249, 25, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 6, 1 - voice_square_2_alt 60, 0, 2, 0, 0, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 2, 4, 2 - diff --git a/sound/voicegroups/voicegroup148.inc b/sound/voicegroups/voicegroup148.inc deleted file mode 100644 index 4fc324df883f..000000000000 --- a/sound/voicegroups/voicegroup148.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup148:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 226, 0, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 - voice_square_2_alt 60, 0, 2, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 3, 5, 2 - voice_noise_alt 60, 0, 0, 0, 1, 6, 5 - diff --git a/sound/voicegroups/voicegroup149.inc b/sound/voicegroups/voicegroup149.inc deleted file mode 100644 index c0239fef958a..000000000000 --- a/sound/voicegroups/voicegroup149.inc +++ /dev/null @@ -1,96 +0,0 @@ - .align 2 -voicegroup149:: - voice_keysplit_all voicegroup190 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 43, 188, 103, 165 - voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 43, 165, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup150.inc b/sound/voicegroups/voicegroup150.inc deleted file mode 100644 index c51150d78236..000000000000 --- a/sound/voicegroups/voicegroup150.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup150:: - voice_keysplit_all voicegroup002 - voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 85, 204, 77, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 4, 6 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup151.inc b/sound/voicegroups/voicegroup151.inc deleted file mode 100644 index 29571169d642..000000000000 --- a/sound/voicegroups/voicegroup151.inc +++ /dev/null @@ -1,91 +0,0 @@ - .align 2 -voicegroup151:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 127 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup152.inc b/sound/voicegroups/voicegroup152.inc deleted file mode 100644 index 06ccc3ae9d04..000000000000 --- a/sound/voicegroups/voicegroup152.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup152:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 160, 175, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 4, 2, 1 - voice_square_2_alt 60, 0, 3, 0, 1, 5, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 4, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 4, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup153.inc b/sound/voicegroups/voicegroup153.inc deleted file mode 100644 index 7206c7ba3d98..000000000000 --- a/sound/voicegroups/voicegroup153.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup153:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 3, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 4, 2 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_8, 0, 1, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 2 - diff --git a/sound/voicegroups/voicegroup154.inc b/sound/voicegroups/voicegroup154.inc deleted file mode 100644 index ce70e65d57cc..000000000000 --- a/sound/voicegroups/voicegroup154.inc +++ /dev/null @@ -1,96 +0,0 @@ - .align 2 -voicegroup154:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 97, 236 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 10, 0 - voice_square_2_alt 60, 0, 1, 0, 0, 10, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 0, 12, 0 - diff --git a/sound/voicegroups/voicegroup155.inc b/sound/voicegroups/voicegroup155.inc deleted file mode 100644 index 8150754aab67..000000000000 --- a/sound/voicegroups/voicegroup155.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup155:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 188, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 165, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 1, 9, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 2 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup156.inc b/sound/voicegroups/voicegroup156.inc deleted file mode 100644 index 374464fff9d7..000000000000 --- a/sound/voicegroups/voicegroup156.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup156:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 4, 4, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 5 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup157.inc b/sound/voicegroups/voicegroup157.inc deleted file mode 100644 index 7dd93abd0ade..000000000000 --- a/sound/voicegroups/voicegroup157.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup157:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 190, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 3, 6, 5 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup158.inc b/sound/voicegroups/voicegroup158.inc deleted file mode 100644 index 50fa5660686c..000000000000 --- a/sound/voicegroups/voicegroup158.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup158:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 9, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 10, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 8, 1 - diff --git a/sound/voicegroups/voicegroup159.inc b/sound/voicegroups/voicegroup159.inc deleted file mode 100644 index f1d20465601d..000000000000 --- a/sound/voicegroups/voicegroup159.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup159:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 51, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 7, 0, 6 - voice_square_2_alt 60, 0, 1, 1, 5, 1, 6 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 1, 7, 0, 6 - voice_square_1_alt 60, 0, 0, 0, 1, 4, 3, 6 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup160.inc b/sound/voicegroups/voicegroup160.inc deleted file mode 100644 index 160d0cad8fbf..000000000000 --- a/sound/voicegroups/voicegroup160.inc +++ /dev/null @@ -1,91 +0,0 @@ - .align 2 -voicegroup160:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 0, 2, 4, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup161.inc b/sound/voicegroups/voicegroup161.inc deleted file mode 100644 index c334fa26470a..000000000000 --- a/sound/voicegroups/voicegroup161.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup161:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 4 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup162.inc b/sound/voicegroups/voicegroup162.inc deleted file mode 100644 index 3a532b23ee59..000000000000 --- a/sound/voicegroups/voicegroup162.inc +++ /dev/null @@ -1,96 +0,0 @@ - .align 2 -voicegroup162:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 64, 188, 108, 244 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 64, 195, 92, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 64, 204, 113, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 0, 6, 0 - voice_square_2_alt 60, 0, 1, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup163.inc b/sound/voicegroups/voicegroup163.inc deleted file mode 100644 index cd7c6ebef27e..000000000000 --- a/sound/voicegroups/voicegroup163.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup163:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 3, 4, 2 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup164.inc b/sound/voicegroups/voicegroup164.inc deleted file mode 100644 index d64cfd33adf1..000000000000 --- a/sound/voicegroups/voicegroup164.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup164:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 180, 108, 209 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 85, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 10, 6 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 2 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 4 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup165.inc b/sound/voicegroups/voicegroup165.inc deleted file mode 100644 index c3262766cb3c..000000000000 --- a/sound/voicegroups/voicegroup165.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup165:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 103, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 204, 92, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 10, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 6 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_enhanced_delay_shaku, 255, 191, 97, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup166.inc b/sound/voicegroups/voicegroup166.inc deleted file mode 100644 index edd94624c0ab..000000000000 --- a/sound/voicegroups/voicegroup166.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup166:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 108, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 204, 103, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_square_wave, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 9, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 1, 0, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 8, 1 - diff --git a/sound/voicegroups/voicegroup167.inc b/sound/voicegroups/voicegroup167.inc deleted file mode 100644 index 0213b7aec042..000000000000 --- a/sound/voicegroups/voicegroup167.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup167:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 10, 4 - voice_square_2_alt 60, 0, 3, 0, 2, 8, 3 - voice_square_2_alt 60, 0, 2, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup168.inc b/sound/voicegroups/voicegroup168.inc deleted file mode 100644 index ea6b59d2ef4a..000000000000 --- a/sound/voicegroups/voicegroup168.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup168:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 4, 2 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 4 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup169.inc b/sound/voicegroups/voicegroup169.inc deleted file mode 100644 index 77ee6ffee49e..000000000000 --- a/sound/voicegroups/voicegroup169.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup169:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 210 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 4, 1 - voice_square_2_alt 60, 0, 0, 0, 1, 4, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 4, 0 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup170.inc b/sound/voicegroups/voicegroup170.inc deleted file mode 100644 index 43c8ae6df7b1..000000000000 --- a/sound/voicegroups/voicegroup170.inc +++ /dev/null @@ -1,87 +0,0 @@ - .align 2 -voicegroup170:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 1, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup171.inc b/sound/voicegroups/voicegroup171.inc deleted file mode 100644 index f4ae315ce51e..000000000000 --- a/sound/voicegroups/voicegroup171.inc +++ /dev/null @@ -1,94 +0,0 @@ - .align 2 -voicegroup171:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 2, 0, 1, 7, 0 - voice_square_2_alt 60, 0, 2, 0, 2, 0, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 7, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 0, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 7, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - diff --git a/sound/voicegroups/voicegroup172.inc b/sound/voicegroups/voicegroup172.inc deleted file mode 100644 index ffd981c830d1..000000000000 --- a/sound/voicegroups/voicegroup172.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup172:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 3, 0, 2, 6, 3 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 0 - diff --git a/sound/voicegroups/voicegroup173.inc b/sound/voicegroups/voicegroup173.inc deleted file mode 100644 index 46979c625881..000000000000 --- a/sound/voicegroups/voicegroup173.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup173:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 3, 4 - voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 3, 2 - diff --git a/sound/voicegroups/voicegroup174.inc b/sound/voicegroups/voicegroup174.inc deleted file mode 100644 index ab7d43fc72b2..000000000000 --- a/sound/voicegroups/voicegroup174.inc +++ /dev/null @@ -1,160 +0,0 @@ - .align 2 -voicegroup174:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 - voice_square_2_alt 60, 0, 3, 0, 2, 3, 4 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 3, 1 - voice_keysplit_all voicegroup177 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 127 - voice_keysplit_all voicegroup002 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup175.inc b/sound/voicegroups/voicegroup175.inc deleted file mode 100644 index a074f216dd78..000000000000 --- a/sound/voicegroups/voicegroup175.inc +++ /dev/null @@ -1,55 +0,0 @@ - .align 2 -voicegroup175:: - voice_keysplit_all voicegroup177 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup176.inc b/sound/voicegroups/voicegroup176.inc deleted file mode 100644 index ee3c97e4936f..000000000000 --- a/sound/voicegroups/voicegroup176.inc +++ /dev/null @@ -1,51 +0,0 @@ - .align 2 -voicegroup176:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup177.inc b/sound/voicegroups/voicegroup177.inc deleted file mode 100644 index bd0e738fd482..000000000000 --- a/sound/voicegroups/voicegroup177.inc +++ /dev/null @@ -1,93 +0,0 @@ - .align 2 -voicegroup177:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_directsound_no_resample 67, 71, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 65, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 68, 29, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 64, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 76, 39, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 89, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 33, 10, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 118, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup178.inc b/sound/voicegroups/voicegroup178.inc deleted file mode 100644 index 026d7bb3d8b2..000000000000 --- a/sound/voicegroups/voicegroup178.inc +++ /dev/null @@ -1,91 +0,0 @@ - .align 2 -voicegroup178:: - voice_keysplit_all voicegroup177 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 204, 103, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 7, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 0, 15, 1 - diff --git a/sound/voicegroups/voicegroup179.inc b/sound/voicegroups/voicegroup179.inc deleted file mode 100644 index e69cace5b8a4..000000000000 --- a/sound/voicegroups/voicegroup179.inc +++ /dev/null @@ -1,91 +0,0 @@ - .align 2 -voicegroup179:: - voice_keysplit_all voicegroup177 - voice_keysplit_all voicegroup176 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 10, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 9, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 9, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup180.inc b/sound/voicegroups/voicegroup180.inc deleted file mode 100644 index ea182d38e5f1..000000000000 --- a/sound/voicegroups/voicegroup180.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup180:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_noise_alt 60, 0, 0, 0, 1, 0, 0 - diff --git a/sound/voicegroups/voicegroup181.inc b/sound/voicegroups/voicegroup181.inc deleted file mode 100644 index 92df8710a809..000000000000 --- a/sound/voicegroups/voicegroup181.inc +++ /dev/null @@ -1,50 +0,0 @@ - .align 2 -voicegroup181:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 - diff --git a/sound/voicegroups/voicegroup182.inc b/sound/voicegroups/voicegroup182.inc deleted file mode 100644 index ec395549586c..000000000000 --- a/sound/voicegroups/voicegroup182.inc +++ /dev/null @@ -1,91 +0,0 @@ - .align 2 -voicegroup182:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 76 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 1, 2, 3, 1 - voice_square_2_alt 60, 0, 1, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 3, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup183.inc b/sound/voicegroups/voicegroup183.inc deleted file mode 100644 index ff49e3763b32..000000000000 --- a/sound/voicegroups/voicegroup183.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup183:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 4, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 4, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 3, 1 - diff --git a/sound/voicegroups/voicegroup184.inc b/sound/voicegroups/voicegroup184.inc deleted file mode 100644 index 86f392e65c90..000000000000 --- a/sound/voicegroups/voicegroup184.inc +++ /dev/null @@ -1,89 +0,0 @@ - .align 2 -voicegroup184:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup185.inc b/sound/voicegroups/voicegroup185.inc deleted file mode 100644 index 879a4e88832a..000000000000 --- a/sound/voicegroups/voicegroup185.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup185:: - voice_keysplit_all voicegroup002 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 85, 0, 154, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_16, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup186.inc b/sound/voicegroups/voicegroup186.inc deleted file mode 100644 index 18dc71d70d1b..000000000000 --- a/sound/voicegroups/voicegroup186.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup186:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - diff --git a/sound/voicegroups/voicegroup187.inc b/sound/voicegroups/voicegroup187.inc deleted file mode 100644 index 640912505ac5..000000000000 --- a/sound/voicegroups/voicegroup187.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup187:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 - voice_square_2_alt 60, 0, 1, 0, 1, 7, 1 - voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 6, 1 - diff --git a/sound/voicegroups/voicegroup188.inc b/sound/voicegroups/voicegroup188.inc deleted file mode 100644 index 8556bcd4d25c..000000000000 --- a/sound/voicegroups/voicegroup188.inc +++ /dev/null @@ -1,131 +0,0 @@ - .align 2 -voicegroup188:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 - voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 7, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 1 - diff --git a/sound/voicegroups/voicegroup189.inc b/sound/voicegroups/voicegroup189.inc deleted file mode 100644 index 6c04cd832073..000000000000 --- a/sound/voicegroups/voicegroup189.inc +++ /dev/null @@ -1,95 +0,0 @@ - .align 2 -voicegroup189:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 3 - voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup190.inc b/sound/voicegroups/voicegroup190.inc deleted file mode 100644 index 25a84e84edc4..000000000000 --- a/sound/voicegroups/voicegroup190.inc +++ /dev/null @@ -1,90 +0,0 @@ - .align 2 -voicegroup190:: - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 7, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 1 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 52, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 33, 104, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 diff --git a/sound/voicegroups/vs_aqua_magma.inc b/sound/voicegroups/vs_aqua_magma.inc new file mode 100644 index 000000000000..4c1f5578dc74 --- /dev/null +++ b/sound/voicegroups/vs_aqua_magma.inc @@ -0,0 +1,93 @@ +voice_group vs_aqua_magma + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 0, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 250, 0, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 0, 255, 127 + diff --git a/sound/voicegroups/vs_aqua_magma_leader.inc b/sound/voicegroups/vs_aqua_magma_leader.inc new file mode 100644 index 000000000000..3ca3c3afa490 --- /dev/null +++ b/sound/voicegroups/vs_aqua_magma_leader.inc @@ -0,0 +1,130 @@ +voice_group vs_aqua_magma_leader + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 0, 1, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 1, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 1, 1, 6, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 1, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 216 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + diff --git a/sound/voicegroups/vs_champion.inc b/sound/voicegroups/vs_champion.inc new file mode 100644 index 000000000000..802dde8a4540 --- /dev/null +++ b/sound/voicegroups/vs_champion.inc @@ -0,0 +1,88 @@ +voice_group vs_champion + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2 60, 0, 0, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 0, 0, 0, 7, 1 + diff --git a/sound/voicegroups/vs_elite_four.inc b/sound/voicegroups/vs_elite_four.inc new file mode 100644 index 000000000000..9c99b4e03b6e --- /dev/null +++ b/sound/voicegroups/vs_elite_four.inc @@ -0,0 +1,86 @@ +voice_group vs_elite_four + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + diff --git a/sound/voicegroups/vs_frontier_brain.inc b/sound/voicegroups/vs_frontier_brain.inc new file mode 100644 index 000000000000..0167389e384e --- /dev/null +++ b/sound/voicegroups/vs_frontier_brain.inc @@ -0,0 +1,130 @@ +voice_group vs_frontier_brain + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 249, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 188, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 165, 154, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 198 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 146 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 6, 0 + voice_square_2_alt 60, 0, 3, 0, 3, 6, 2 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_15, 0, 1, 9, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 2 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/sound/voicegroups/vs_gym_leader.inc b/sound/voicegroups/vs_gym_leader.inc new file mode 100644 index 000000000000..8aad0a65bc2f --- /dev/null +++ b/sound/voicegroups/vs_gym_leader.inc @@ -0,0 +1,93 @@ +voice_group vs_gym_leader + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 2, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 2, 6, 1 + voice_square_2 60, 0, 3, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 3, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 7, 1 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + diff --git a/sound/voicegroups/vs_kyogre_groudon.inc b/sound/voicegroups/vs_kyogre_groudon.inc new file mode 100644 index 000000000000..326a1904386e --- /dev/null +++ b/sound/voicegroups/vs_kyogre_groudon.inc @@ -0,0 +1,130 @@ +voice_group vs_kyogre_groudon + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + diff --git a/sound/voicegroups/vs_mew.inc b/sound/voicegroups/vs_mew.inc new file mode 100644 index 000000000000..052284f396a3 --- /dev/null +++ b/sound/voicegroups/vs_mew.inc @@ -0,0 +1,130 @@ +voice_group vs_mew + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 128, 146, 190, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 180, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 7, 2 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 3, 6, 5 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 7, 2 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 1 + diff --git a/sound/voicegroups/vs_rayquaza.inc b/sound/voicegroups/vs_rayquaza.inc new file mode 100644 index 000000000000..c004be789d4b --- /dev/null +++ b/sound/voicegroups/vs_rayquaza.inc @@ -0,0 +1,130 @@ +voice_group vs_rayquaza + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + diff --git a/sound/voicegroups/vs_regi.inc b/sound/voicegroups/vs_regi.inc new file mode 100644 index 000000000000..ebb9fabd1a39 --- /dev/null +++ b/sound/voicegroups/vs_regi.inc @@ -0,0 +1,86 @@ +voice_group vs_regi + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 1, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 1, 0, 1, 6, 1 + voice_square_2 60, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 6, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 0, 1, 9, 1 + voice_square_1 60, 0, 0, 3, 0, 0, 9, 1 + diff --git a/sound/voicegroups/vs_rival.inc b/sound/voicegroups/vs_rival.inc new file mode 100644 index 000000000000..8613db39640a --- /dev/null +++ b/sound/voicegroups/vs_rival.inc @@ -0,0 +1,89 @@ +voice_group vs_rival + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2 60, 0, 3, 0, 2, 7, 1 + diff --git a/sound/voicegroups/vs_trainer.inc b/sound/voicegroups/vs_trainer.inc new file mode 100644 index 000000000000..5c8f5b305e59 --- /dev/null +++ b/sound/voicegroups/vs_trainer.inc @@ -0,0 +1,93 @@ +voice_group vs_trainer + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 0, 0, 2, 4, 1 + voice_square_1 60, 0, 0, 0, 0, 2, 4, 1 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 3, 0, 1, 7, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_timpani_with_snare, 255, 246, 0, 226 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 1, 7, 1 + voice_square_2 60, 0, 1, 0, 1, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 2 + diff --git a/sound/voicegroups/vs_wild.inc b/sound/voicegroups/vs_wild.inc new file mode 100644 index 000000000000..5ce57a0d54fe --- /dev/null +++ b/sound/voicegroups/vs_wild.inc @@ -0,0 +1,84 @@ +voice_group vs_wild + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 1, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 1, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 1, 7, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + diff --git a/sound/voicegroups/weather_groudon.inc b/sound/voicegroups/weather_groudon.inc new file mode 100644 index 000000000000..dde2a4637b15 --- /dev/null +++ b/sound/voicegroups/weather_groudon.inc @@ -0,0 +1,130 @@ +voice_group weather_groudon + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 4, 1 + voice_square_2_alt 60, 0, 0, 0, 2, 4, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_6, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + voice_noise_alt 60, 0, 0, 0, 1, 0, 0 + diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index 37074cb048d6..a14fd188137a 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -1,6 +1,7 @@ POKEMONGFXDIR := graphics/pokemon OBJEVENTGFXDIR := graphics/object_events/pics FLDEFFGFXDIR := graphics/field_effects/pics +BATINTGFXDIR := graphics/battle_interface MISCGFXDIR := graphics/misc $(OBJEVENTGFXDIR)/people/brendan/walking.4bpp: %.4bpp: %.png @@ -611,6 +612,8 @@ $(OBJEVENTGFXDIR)/berry_trees/rowap.4bpp: %.4bpp: %.png $(OBJEVENTGFXDIR)/berry_trees/micle.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 +$(OBJEVENTGFXDIR)/misc/apricorn_tree.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 2 $(OBJEVENTGFXDIR)/misc/breakable_rock.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 @@ -663,6 +666,9 @@ $(FLDEFFGFXDIR)/deep_sand_footprints.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/ground_impact_dust.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 1 +$(FLDEFFGFXDIR)/rock_climb_dust.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(FLDEFFGFXDIR)/ash_puff.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 @@ -687,6 +693,15 @@ $(FLDEFFGFXDIR)/short_grass.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/surf_blob.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(FLDEFFGFXDIR)/rock_climb_blob.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(FLDEFFGFXDIR)/oras_dowsing_brendan.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(FLDEFFGFXDIR)/oras_dowsing_may.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 + $(FLDEFFGFXDIR)/tall_grass.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 @@ -3237,6 +3252,9 @@ $(POKEMONGFXDIR)/frogadier/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/greninja/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/greninja/ash/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/bunnelby/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -4925,3 +4943,18 @@ $(OBJEVENTGFXDIR)/misc/ball_%.4bpp: $(OBJEVENTGFXDIR)/misc/ball_%.png ; $(GFX) $ graphics/door_anims/battle_tower_multi_corridor.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 + +$(BATINTGFXDIR)/healthbox_doubles_opponent.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 4 + +$(BATINTGFXDIR)/healthbox_doubles_player.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 4 + +$(BATINTGFXDIR)/healthbox_safari.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + +$(BATINTGFXDIR)/healthbox_singles_opponent.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 4 + +$(BATINTGFXDIR)/healthbox_singles_player.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 diff --git a/src/agb_flash_1m.c b/src/agb_flash_1m.c index 49696a7bbf46..3e2ad719c6f6 100644 --- a/src/agb_flash_1m.c +++ b/src/agb_flash_1m.c @@ -1,7 +1,7 @@ #include "gba/gba.h" #include "gba/flash_internal.h" -USED static const char AgbLibFlashVersion[] = "FLASH1M_V103"; +KEEP_SECTION USED static const char AgbLibFlashVersion[] = "FLASH1M_V103"; static const struct FlashSetupInfo *const sSetupInfos[] = { diff --git a/src/apprentice.c b/src/apprentice.c index 4b0403b28111..585b4eed4397 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -353,14 +353,12 @@ static u16 GetRandomAlternateMove(u8 monId) // NOTE: Below is an infinite loop if a species which cannot learn TMs is assigned to an Apprentice do { - id = Random() % (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES); - shouldUseMove = CanLearnTeachableMove(species, ItemIdToBattleMoveId(ITEM_TM01 + id)); + id = (Random() % NUM_ALL_MACHINES) + 1; + move = GetTMHMMoveId(id); + shouldUseMove = CanLearnTeachableMove(species, move); } while (!shouldUseMove); - move = ItemIdToBattleMoveId(ITEM_TM01 + id); - shouldUseMove = TRUE; - if (numLearnsetMoves <= MAX_MON_MOVES) j = 0; else diff --git a/src/apricorn_tree.c b/src/apricorn_tree.c new file mode 100644 index 000000000000..b7784a6a8569 --- /dev/null +++ b/src/apricorn_tree.c @@ -0,0 +1,86 @@ +#include "global.h" +#include "apricorn_tree.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "event_scripts.h" +#include "item.h" +#include "random.h" +#include "string_util.h" +#include "data/apricorns.h" + +void DailyResetApricornTrees(void) +{ +#if (APRICORN_TREE_COUNT > 0) + memset(&gSaveBlock3Ptr->apricornTrees[0], 0, NUM_APRICORN_TREE_BYTES); +#endif +} + +void ObjectEventInteractionGetApricornTreeData(void) +{ + u32 id = GetObjectEventApricornTreeId(gSelectedObjectEvent); + gSpecialVar_0x8004 = GetApricornTypeByApricornTreeId(id); + gSpecialVar_0x8005 = GetApricornCountByApricornTreeId(id); + + CopyItemNameHandlePlural(gSpecialVar_0x8004, gStringVar1, gSpecialVar_0x8005); +} + +void ObjectEventInteractionPickApricornTree(void) +{ + u32 id = GetObjectEventApricornTreeId(gSelectedObjectEvent); + enum ApricornType apricorn = GetApricornTypeByApricornTreeId(id); + gSpecialVar_0x8006 = CheckBagHasSpace(apricorn, GetApricornCountByApricornTreeId(id)); + + if (gSpecialVar_0x8006) + { + AddBagItem(apricorn, GetApricornCountByApricornTreeId(id)); + SetApricornTreePicked(id); + } + gSpecialVar_Result = GetItemPocket(apricorn); +} + +enum ApricornType GetApricornTypeByApricornTreeId(u32 id) +{ + if (APRICORN_TREE_COUNT > 0) + return gApricornTrees[id].apricornType; + else + return 0; +} + +u8 GetApricornCountByApricornTreeId(u32 id) +{ + if (IsApricornTreePicked(id)) + return 0; + + if (APRICORN_TREE_COUNT > 0) + { + if (gApricornTrees[id].maximum > gApricornTrees[id].minimum) + return gApricornTrees[id].minimum + Random() % (gApricornTrees[id].maximum - gApricornTrees[id].minimum); + else + return gApricornTrees[id].minimum; + } + else + return 0; +} + +bool8 IsApricornTreePicked(u32 id) +{ + if (id > APRICORN_TREE_COUNT) + return TRUE; + +#if (APRICORN_TREE_COUNT > 0) + return gSaveBlock3Ptr->apricornTrees[id / 8] & (1 << (id % 8)); +#else + return TRUE; +#endif +} + +void SetApricornTreePicked(u32 id) +{ + if (id > APRICORN_TREE_COUNT) + return; + +#if (APRICORN_TREE_COUNT > 0) + u8 *flagByte = &gSaveBlock3Ptr->apricornTrees[id / 8]; + *flagByte = (*flagByte) | (1 << (id % 8)); +#endif +} diff --git a/src/battle_ai_field_statuses.c b/src/battle_ai_field_statuses.c new file mode 100644 index 000000000000..030d99a94eb5 --- /dev/null +++ b/src/battle_ai_field_statuses.c @@ -0,0 +1,497 @@ +#include "global.h" +#include "battle_z_move.h" +#include "malloc.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_ai_field_statuses.h" +#include "battle_ai_util.h" +#include "battle_ai_main.h" +#include "battle_ai_switch_items.h" +#include "battle_factory.h" +#include "battle_setup.h" +#include "event_data.h" +#include "data.h" +#include "item.h" +#include "move.h" +#include "pokemon.h" +#include "random.h" +#include "recorded_battle.h" +#include "util.h" +#include "constants/abilities.h" +#include "constants/battle_ai.h" +#include "constants/battle_move_effects.h" +#include "constants/moves.h" +#include "constants/items.h" + +static bool32 DoesAbilityBenefitFromWeather(enum Ability ability, u32 weather); +static bool32 DoesAbilityBenefitFromFieldStatus(enum Ability ability, u32 fieldStatus); +// A move is light sensitive if it is boosted by Sunny Day and weakened by low light weathers. +static bool32 IsLightSensitiveMove(u32 move); +static bool32 HasLightSensitiveMove(u32 battler); +// The following functions all feed into WeatherChecker, which is then called by ShouldSetWeather and ShouldClearWeather. +// BenefitsFrom functions all return FIELD_EFFECT_POSITIVE if the weather or field effect is good to have in place from the perspective of the battler, FIELD_EFFECT_NEUTRAL if it is neither good nor bad, and FIELD_EFFECT_NEGATIVE if it is bad. +// The purpose of WeatherChecker and FieldStatusChecker is to cleanly homogenize the logic that's the same with all of them, and to more easily apply single battle logic to double battles. +// ShouldSetWeather and ShouldClearWeather are looking for a positive or negative result respectively, and check the entire side. +// If one pokemon has a positive result and the other has a negative result, it defaults to the opinion of the battler that may change the weather or field status. +static enum FieldEffectOutcome BenefitsFromSun(u32 battler); +static enum FieldEffectOutcome BenefitsFromSandstorm(u32 battler); +static enum FieldEffectOutcome BenefitsFromHailOrSnow(u32 battler, u32 weather); +static enum FieldEffectOutcome BenefitsFromRain(u32 battler); +// The following functions all feed into FieldStatusChecker, which is then called by ShouldSetFieldStatus and ShouldClearFieldStatus. +// They work approximately the same as the weather functions. +static enum FieldEffectOutcome BenefitsFromElectricTerrain(u32 battler); +static enum FieldEffectOutcome BenefitsFromGrassyTerrain(u32 battler); +static enum FieldEffectOutcome BenefitsFromMistyTerrain(u32 battler); +static enum FieldEffectOutcome BenefitsFromPsychicTerrain(u32 battler); +static enum FieldEffectOutcome BenefitsFromGravity(u32 battler); +static enum FieldEffectOutcome BenefitsFromTrickRoom(u32 battler); + +bool32 WeatherChecker(u32 battler, u32 weather, enum FieldEffectOutcome desiredResult) +{ + if (IsWeatherActive(B_WEATHER_PRIMAL_ANY) != WEATHER_INACTIVE) + return (FIELD_EFFECT_BLOCKED == desiredResult); + + enum FieldEffectOutcome result = FIELD_EFFECT_NEUTRAL; + enum FieldEffectOutcome firstResult = FIELD_EFFECT_NEUTRAL; + + u32 i; + u32 battlersOnSide = 1; + + if (HasPartner(battler)) + battlersOnSide = 2; + + for (i = 0; i < battlersOnSide; i++) + { + if (weather & B_WEATHER_RAIN) + result = BenefitsFromRain(battler); + else if (weather & B_WEATHER_SUN) + result = BenefitsFromSun(battler); + else if (weather & B_WEATHER_SANDSTORM) + result = BenefitsFromSandstorm(battler); + else if (weather & B_WEATHER_ICY_ANY) + result = BenefitsFromHailOrSnow(battler, weather); + + battler = BATTLE_PARTNER(battler); + + if (result != FIELD_EFFECT_NEUTRAL) + { + if (weather & B_WEATHER_DAMAGING_ANY && i == 0 && battlersOnSide == 2) + firstResult = result; + } + } + if (firstResult != FIELD_EFFECT_NEUTRAL) + return (firstResult == result) && (result == desiredResult); + return (result == desiredResult); +} + +bool32 FieldStatusChecker(u32 battler, u32 fieldStatus, enum FieldEffectOutcome desiredResult) +{ + enum FieldEffectOutcome result = FIELD_EFFECT_NEUTRAL; + enum FieldEffectOutcome firstResult = FIELD_EFFECT_NEUTRAL; + u32 i; + + u32 battlersOnSide = 1; + + if (HasPartner(battler)) + battlersOnSide = 2; + + for (i = 0; i < battlersOnSide; i++) + { + // terrains + if (fieldStatus & STATUS_FIELD_ELECTRIC_TERRAIN) + result = BenefitsFromElectricTerrain(battler); + if (fieldStatus & STATUS_FIELD_GRASSY_TERRAIN) + result = BenefitsFromGrassyTerrain(battler); + if (fieldStatus & STATUS_FIELD_MISTY_TERRAIN) + result = BenefitsFromMistyTerrain(battler); + if (fieldStatus & STATUS_FIELD_PSYCHIC_TERRAIN) + result = BenefitsFromPsychicTerrain(battler); + + // other field statuses + if (fieldStatus & STATUS_FIELD_GRAVITY) + result = BenefitsFromGravity(battler); + if (fieldStatus & STATUS_FIELD_TRICK_ROOM) + result = BenefitsFromTrickRoom(battler); + + battler = BATTLE_PARTNER(battler); + + if (result != FIELD_EFFECT_NEUTRAL) + { + // Trick room wants both pokemon to agree, not just one + if (fieldStatus & STATUS_FIELD_TRICK_ROOM && i == 0 && battlersOnSide == 2) + firstResult = result; + } + } + if (firstResult != FIELD_EFFECT_NEUTRAL) + return (firstResult == result) && (result == desiredResult); + return (result == desiredResult); +} + +static bool32 DoesAbilityBenefitFromWeather(enum Ability ability, u32 weather) +{ + switch (ability) + { + case ABILITY_FORECAST: + return (weather & (B_WEATHER_RAIN | B_WEATHER_SUN | B_WEATHER_ICY_ANY)); + case ABILITY_MAGIC_GUARD: + case ABILITY_OVERCOAT: + return (weather & B_WEATHER_DAMAGING_ANY); + case ABILITY_SAND_FORCE: + case ABILITY_SAND_RUSH: + case ABILITY_SAND_VEIL: + return (weather & B_WEATHER_SANDSTORM); + case ABILITY_ICE_BODY: + case ABILITY_ICE_FACE: + case ABILITY_SNOW_CLOAK: + return (weather & B_WEATHER_ICY_ANY); + case ABILITY_SLUSH_RUSH: + return (weather & B_WEATHER_SNOW); + case ABILITY_DRY_SKIN: + case ABILITY_HYDRATION: + case ABILITY_RAIN_DISH: + case ABILITY_SWIFT_SWIM: + return (weather & B_WEATHER_RAIN); + case ABILITY_CHLOROPHYLL: + case ABILITY_FLOWER_GIFT: + case ABILITY_HARVEST: + case ABILITY_LEAF_GUARD: + case ABILITY_ORICHALCUM_PULSE: + case ABILITY_PROTOSYNTHESIS: + case ABILITY_SOLAR_POWER: + return (weather & B_WEATHER_SUN); + default: + break; + } + return FALSE; +} + +static bool32 DoesAbilityBenefitFromFieldStatus(enum Ability ability, u32 fieldStatus) +{ + switch (ability) + { + case ABILITY_MIMICRY: + return (fieldStatus & STATUS_FIELD_TERRAIN_ANY); + case ABILITY_HADRON_ENGINE: + case ABILITY_QUARK_DRIVE: + case ABILITY_SURGE_SURFER: + return (fieldStatus & STATUS_FIELD_ELECTRIC_TERRAIN); + case ABILITY_GRASS_PELT: + return (fieldStatus & STATUS_FIELD_GRASSY_TERRAIN); + // no abilities inherently benefit from Misty or Psychic Terrains + // return (fieldStatus & STATUS_FIELD_MISTY_TERRAIN); + // return (fieldStatus & STATUS_FIELD_PSYCHIC_TERRAIN); + default: + break; + } + return FALSE; +} + +static bool32 IsLightSensitiveMove(u32 move) +{ + switch (GetMoveEffect(move)) + { + case EFFECT_SOLAR_BEAM: + case EFFECT_MORNING_SUN: + case EFFECT_SYNTHESIS: + case EFFECT_MOONLIGHT: + case EFFECT_GROWTH: + return TRUE; + default: + return FALSE; + } +} + +static bool32 HasLightSensitiveMove(u32 battler) +{ + s32 i; + u16 *moves = GetMovesArray(battler); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && IsLightSensitiveMove(moves[i])) + return TRUE; + } + + return FALSE; +} + +// Sun +// Utility Umbrella does NOT block Ancient Pokemon from their stat boosts. +static enum FieldEffectOutcome BenefitsFromSun(u32 battler) +{ + enum Ability ability = gAiLogicData->abilities[battler]; + + if (gAiLogicData->holdEffects[battler] == HOLD_EFFECT_UTILITY_UMBRELLA) + { + if (ability == ABILITY_ORICHALCUM_PULSE || ability == ABILITY_PROTOSYNTHESIS) + return FIELD_EFFECT_POSITIVE; + else + return FIELD_EFFECT_NEUTRAL; + } + + if (DoesAbilityBenefitFromWeather(ability, B_WEATHER_SUN) + || HasLightSensitiveMove(battler) + || HasDamagingMoveOfType(battler, TYPE_FIRE) + || HasMoveWithEffect(battler, EFFECT_HYDRO_STEAM)) + return FIELD_EFFECT_POSITIVE; + + if (HasMoveWithFlag(battler, MoveHas50AccuracyInSun) || HasDamagingMoveOfType(battler, TYPE_WATER) || gAiLogicData->abilities[battler] == ABILITY_DRY_SKIN) + return FIELD_EFFECT_NEGATIVE; + + return FIELD_EFFECT_NEUTRAL; +} + +// Sandstorm +static enum FieldEffectOutcome BenefitsFromSandstorm(u32 battler) +{ + if (DoesAbilityBenefitFromWeather(gAiLogicData->abilities[battler], B_WEATHER_SANDSTORM) + || IS_BATTLER_OF_TYPE(battler, TYPE_ROCK)) + return FIELD_EFFECT_POSITIVE; + + if (gAiLogicData->holdEffects[battler] == HOLD_EFFECT_SAFETY_GOGGLES || IS_BATTLER_ANY_TYPE(battler, TYPE_ROCK, TYPE_GROUND, TYPE_STEEL)) + { + if (!(IS_BATTLER_ANY_TYPE(LEFT_FOE(battler), TYPE_ROCK, TYPE_GROUND, TYPE_STEEL)) + || gAiLogicData->holdEffects[LEFT_FOE(battler)] == HOLD_EFFECT_SAFETY_GOGGLES + || DoesAbilityBenefitFromWeather(gAiLogicData->abilities[LEFT_FOE(battler)], B_WEATHER_SANDSTORM)) + return FIELD_EFFECT_POSITIVE; + else + return FIELD_EFFECT_NEUTRAL; + } + + return FIELD_EFFECT_NEGATIVE; +} + +// Hail or Snow +static enum FieldEffectOutcome BenefitsFromHailOrSnow(u32 battler, u32 weather) +{ + if (DoesAbilityBenefitFromWeather(gAiLogicData->abilities[battler], weather) + || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) + || HasMoveWithFlag(battler, MoveAlwaysHitsInHailSnow) + || HasBattlerSideMoveWithEffect(battler, EFFECT_AURORA_VEIL)) + return FIELD_EFFECT_POSITIVE; + + if ((weather & B_WEATHER_DAMAGING_ANY) && gAiLogicData->holdEffects[battler] != HOLD_EFFECT_SAFETY_GOGGLES) + return FIELD_EFFECT_NEGATIVE; + + if (HasLightSensitiveMove(battler)) + return FIELD_EFFECT_NEGATIVE; + + if (HasMoveWithFlag(LEFT_FOE(battler), MoveAlwaysHitsInHailSnow)) + return FIELD_EFFECT_NEGATIVE; + + return FIELD_EFFECT_NEUTRAL; +} + +// Rain +static enum FieldEffectOutcome BenefitsFromRain(u32 battler) +{ + if (gAiLogicData->holdEffects[battler] == HOLD_EFFECT_UTILITY_UMBRELLA) + return FIELD_EFFECT_NEUTRAL; + + if (DoesAbilityBenefitFromWeather(gAiLogicData->abilities[battler], B_WEATHER_RAIN) + || HasMoveWithFlag(battler, MoveAlwaysHitsInRain) + || HasDamagingMoveOfType(battler, TYPE_WATER)) + return FIELD_EFFECT_POSITIVE; + + if (HasLightSensitiveMove(battler) || HasDamagingMoveOfType(battler, TYPE_FIRE)) + return FIELD_EFFECT_NEGATIVE; + + if (HasMoveWithFlag(LEFT_FOE(battler), MoveAlwaysHitsInRain)) + return FIELD_EFFECT_NEGATIVE; + + return FIELD_EFFECT_NEUTRAL; +} + +//TODO: when is electric terrain bad? +static enum FieldEffectOutcome BenefitsFromElectricTerrain(u32 battler) +{ + if (DoesAbilityBenefitFromFieldStatus(gAiLogicData->abilities[battler], STATUS_FIELD_ELECTRIC_TERRAIN)) + return FIELD_EFFECT_POSITIVE; + + if (HasMoveWithEffect(battler, EFFECT_RISING_VOLTAGE)) + return FIELD_EFFECT_POSITIVE; + + if ((HasMoveWithEffect(LEFT_FOE(battler), EFFECT_REST) && AI_IsBattlerGrounded(LEFT_FOE(battler))) + || (HasMoveWithEffect(RIGHT_FOE(battler), EFFECT_REST) && AI_IsBattlerGrounded(RIGHT_FOE(battler)))) + return FIELD_EFFECT_POSITIVE; + + bool32 grounded = AI_IsBattlerGrounded(battler); + if (grounded && HasBattlerSideMoveWithAdditionalEffect(LEFT_FOE(battler), MOVE_EFFECT_SLEEP)) + return FIELD_EFFECT_POSITIVE; + + if (grounded && ((gBattleMons[battler].status1 & STATUS1_SLEEP) + || gBattleMons[battler].volatiles.yawn + || HasDamagingMoveOfType(battler, TYPE_ELECTRIC))) + return FIELD_EFFECT_POSITIVE; + + if (HasBattlerSideMoveWithEffect(LEFT_FOE(battler), EFFECT_RISING_VOLTAGE)) + return FIELD_EFFECT_NEGATIVE; + + + return FIELD_EFFECT_NEUTRAL; +} + +//TODO: when is grassy terrain bad? +static enum FieldEffectOutcome BenefitsFromGrassyTerrain(u32 battler) +{ + if (DoesAbilityBenefitFromFieldStatus(gAiLogicData->abilities[battler], STATUS_FIELD_GRASSY_TERRAIN)) + return FIELD_EFFECT_POSITIVE; + + if (HasBattlerSideMoveWithEffect(battler, EFFECT_GRASSY_GLIDE)) + return FIELD_EFFECT_POSITIVE; + if (HasMoveWithAdditionalEffect(battler, MOVE_EFFECT_FLORAL_HEALING)) + return FIELD_EFFECT_POSITIVE; + + bool32 grounded = AI_IsBattlerGrounded(battler); + + // Weaken spamming Earthquake, Magnitude, and Bulldoze. + if (grounded && (HasBattlerSideMoveWithEffect(LEFT_FOE(battler), EFFECT_EARTHQUAKE) + || HasBattlerSideMoveWithEffect(LEFT_FOE(battler), EFFECT_MAGNITUDE))) + return FIELD_EFFECT_POSITIVE; + + if (grounded && HasDamagingMoveOfType(battler, TYPE_GRASS)) + return FIELD_EFFECT_POSITIVE; + + if (HasBattlerSideMoveWithEffect(LEFT_FOE(battler), EFFECT_GRASSY_GLIDE)) + return FIELD_EFFECT_NEGATIVE; + + + return FIELD_EFFECT_NEUTRAL; +} + +//TODO: when is misty terrain bad? +static enum FieldEffectOutcome BenefitsFromMistyTerrain(u32 battler) +{ + if (DoesAbilityBenefitFromFieldStatus(gAiLogicData->abilities[battler], STATUS_FIELD_MISTY_TERRAIN)) + return FIELD_EFFECT_POSITIVE; + + if (HasBattlerSideMoveWithEffect(battler, EFFECT_MISTY_EXPLOSION)) + return FIELD_EFFECT_POSITIVE; + + bool32 grounded = AI_IsBattlerGrounded(battler); + bool32 allyGrounded = FALSE; + if (HasPartner(battler)) + allyGrounded = AI_IsBattlerGrounded(BATTLE_PARTNER(battler)); + + if ((HasMoveWithEffect(LEFT_FOE(battler), EFFECT_REST) && AI_IsBattlerGrounded(LEFT_FOE(battler))) + || (HasMoveWithEffect(RIGHT_FOE(battler), EFFECT_REST) && AI_IsBattlerGrounded(RIGHT_FOE(battler)))) + return FIELD_EFFECT_POSITIVE; + + // harass dragons + if ((grounded || allyGrounded) + && (HasDamagingMoveOfType(LEFT_FOE(battler), TYPE_DRAGON) || HasDamagingMoveOfType(RIGHT_FOE(battler), TYPE_DRAGON))) + return FIELD_EFFECT_POSITIVE; + + if ((grounded || allyGrounded) + && (HasNonVolatileMoveEffect(LEFT_FOE(battler), MOVE_EFFECT_SLEEP) || HasNonVolatileMoveEffect(RIGHT_FOE(battler), MOVE_EFFECT_SLEEP))) + return FIELD_EFFECT_POSITIVE; + + if (grounded && (gBattleMons[battler].status1 & STATUS1_SLEEP || gBattleMons[battler].volatiles.yawn)) + return FIELD_EFFECT_POSITIVE; + + return FIELD_EFFECT_NEUTRAL; +} + +//TODO: when is Psychic Terrain negative? +static enum FieldEffectOutcome BenefitsFromPsychicTerrain(u32 battler) +{ + if (DoesAbilityBenefitFromFieldStatus(gAiLogicData->abilities[battler], STATUS_FIELD_PSYCHIC_TERRAIN)) + return FIELD_EFFECT_POSITIVE; + + if (HasBattlerSideMoveWithEffect(battler, EFFECT_EXPANDING_FORCE)) + return FIELD_EFFECT_POSITIVE; + + bool32 grounded = AI_IsBattlerGrounded(battler); + bool32 allyGrounded = FALSE; + if (HasPartner(battler)) + allyGrounded = AI_IsBattlerGrounded(BATTLE_PARTNER(battler)); + + // don't bother if we're not grounded + if (grounded || allyGrounded) + { + // harass priority + if (AI_IsAbilityOnSide(LEFT_FOE(battler), ABILITY_GALE_WINGS) + || AI_IsAbilityOnSide(LEFT_FOE(battler), ABILITY_TRIAGE) + || AI_IsAbilityOnSide(LEFT_FOE(battler), ABILITY_PRANKSTER)) + return FIELD_EFFECT_POSITIVE; + } + + if (grounded && HasDamagingMoveOfType(battler, TYPE_PSYCHIC)) + return FIELD_EFFECT_POSITIVE; + + if (HasBattlerSideMoveWithEffect(LEFT_FOE(battler), EFFECT_EXPANDING_FORCE)) + return FIELD_EFFECT_NEGATIVE; + + if (AI_IsAbilityOnSide(battler, ABILITY_GALE_WINGS) + || AI_IsAbilityOnSide(battler, ABILITY_TRIAGE) + || AI_IsAbilityOnSide(battler, ABILITY_PRANKSTER)) + return FIELD_EFFECT_NEGATIVE; + + return FIELD_EFFECT_NEUTRAL; +} + +static enum FieldEffectOutcome BenefitsFromGravity(u32 battler) +{ + if (!AI_IsBattlerGrounded(battler)) + return FIELD_EFFECT_NEGATIVE; + + if (AI_IsAbilityOnSide(battler, ABILITY_HUSTLE)) + return FIELD_EFFECT_POSITIVE; + + if (HasMoveWithFlag(battler, IsMoveGravityBanned)) + return FIELD_EFFECT_NEGATIVE; + + if (IsBattlerAlive(LEFT_FOE(battler))) + { + if (HasMoveWithLowAccuracy(battler, LEFT_FOE(battler), LOW_ACCURACY_THRESHOLD, FALSE) + || (!AI_IsBattlerGrounded(LEFT_FOE(battler)) && HasDamagingMoveOfType(battler, TYPE_GROUND))) + return FIELD_EFFECT_POSITIVE; + } + + if (IsBattlerAlive(RIGHT_FOE(battler))) + { + if (HasMoveWithLowAccuracy(battler, RIGHT_FOE(battler), LOW_ACCURACY_THRESHOLD, FALSE) + || (!AI_IsBattlerGrounded(RIGHT_FOE(battler)) && HasDamagingMoveOfType(battler, TYPE_GROUND))) + return FIELD_EFFECT_POSITIVE; + } + + return FIELD_EFFECT_NEUTRAL; +} + + +static enum FieldEffectOutcome BenefitsFromTrickRoom(u32 battler) +{ + // If we're in singles, we literally only care about speed. + if (IsBattle1v1()) + { + if (gAiLogicData->speedStats[battler] < gAiLogicData->speedStats[LEFT_FOE(battler)]) + return FIELD_EFFECT_POSITIVE; + // If we tie, we shouldn't change trick room state. + else if (gAiLogicData->speedStats[battler] == gAiLogicData->speedStats[LEFT_FOE(battler)]) + return FIELD_EFFECT_NEUTRAL; + else + return FIELD_EFFECT_NEGATIVE; + } + + // First checking if we have enough priority for one pokemon to disregard Trick Room entirely. + if (!(gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)) + { + u16* aiMoves = GetMovesArray(battler); + for (int i = 0; i < MAX_MON_MOVES; i++) + { + u16 move = aiMoves[i]; + if (GetBattleMovePriority(battler, gAiLogicData->abilities[battler], move) > 0 && !(GetMovePriority(move) > 0 && IsBattleMoveStatus(move))) + { + return FIELD_EFFECT_POSITIVE; + } + } + } + + // If we are faster or tie, we don't want trick room. + if ((gAiLogicData->speedStats[battler] >= gAiLogicData->speedStats[LEFT_FOE(battler)]) || (gAiLogicData->speedStats[battler] >= gAiLogicData->speedStats[RIGHT_FOE(battler)])) + return FIELD_EFFECT_NEGATIVE; + + return FIELD_EFFECT_POSITIVE; +} + + diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 18c140c2d2ef..8dde9c4a97c0 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -14,6 +14,7 @@ #include "debug.h" #include "event_data.h" #include "item.h" +#include "math_util.h" #include "pokemon.h" #include "random.h" #include "recorded_battle.h" @@ -22,7 +23,6 @@ #include "constants/abilities.h" #include "constants/battle_ai.h" #include "constants/battle_move_effects.h" -#include "constants/hold_effects.h" #include "constants/moves.h" #include "constants/items.h" #include "constants/trainers.h" @@ -32,11 +32,13 @@ #define AI_ACTION_WATCH (1 << 2) #define AI_ACTION_DO_NOT_ATTACK (1 << 3) +static u32 ChooseMoveOrAction(u32 battler); static u32 ChooseMoveOrAction_Singles(u32 battler); static u32 ChooseMoveOrAction_Doubles(u32 battler); static inline void BattleAI_DoAIProcessing(struct AiThinkingStruct *aiThink, u32 battlerAtk, u32 battlerDef); static inline void BattleAI_DoAIProcessing_PredictedSwitchin(struct AiThinkingStruct *aiThink, struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef); -static bool32 IsPinchBerryItemEffect(enum ItemHoldEffect holdEffect); +static bool32 IsPinchBerryItemEffect(enum HoldEffect holdEffect); +static void AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef); // ewram EWRAM_DATA const u8 *gAIScriptPtr = NULL; // Still used in contests @@ -49,6 +51,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_TryTo2HKO(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); +static s32 AI_AttacksPartner(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_Roaming(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); @@ -89,10 +92,10 @@ static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) = [24] = NULL, // AI_FLAG_PREDICT_INCOMING_MON [25] = AI_CheckPpStall, // AI_FLAG_PP_STALL_PREVENTION [26] = NULL, // AI_FLAG_PREDICT_MOVE - [27] = NULL, // Unused - [28] = NULL, // Unused - [29] = NULL, // Unused - [30] = NULL, // Unused + [27] = NULL, // AI_FLAG_SMART_TERA + [28] = NULL, // AI_FLAG_ASSUME_STAB + [29] = NULL, // AI_FLAG_ASSUME_STATUS_MOVES + [30] = AI_AttacksPartner, // AI_FLAG_ATTACKS_PARTNER [31] = NULL, // Unused [32] = NULL, // Unused [33] = NULL, // Unused @@ -179,7 +182,7 @@ static u64 GetWildAiFlags(void) return flags; } -static u64 GetAiFlags(u16 trainerId) +static u64 GetAiFlags(u16 trainerId, u32 battler) { u64 flags = 0; @@ -192,7 +195,7 @@ static u64 GetAiFlags(u16 trainerId) else { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - flags = GetAiScriptsInRecordedBattle(); + flags = GetAiScriptsInRecordedBattle(battler); else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) flags = AI_FLAG_SAFARI; else if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) @@ -207,7 +210,7 @@ static u64 GetAiFlags(u16 trainerId) flags = GetTrainerAIFlagsFromId(trainerId); } - if (IsDoubleBattle()) + if (IsDoubleBattle() && flags != 0) { flags |= AI_FLAG_DOUBLE_BATTLE; } @@ -229,7 +232,7 @@ static u64 GetAiFlags(u16 trainerId) void BattleAI_SetupFlags(void) { if (IsAiVsAiBattle()) - gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_LEFT] = GetAiFlags(gPartnerTrainerId); + gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_LEFT] = GetAiFlags(gPartnerTrainerId, B_POSITION_PLAYER_LEFT); else gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_LEFT] = 0; // player has no AI @@ -243,36 +246,49 @@ void BattleAI_SetupFlags(void) if (IsWildMonSmart() && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER))) { // smart wild AI - gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] = GetAiFlags(0xFFFF); - gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] = GetAiFlags(0xFFFF); + gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] = GetAiFlags(0xFFFF, B_POSITION_OPPONENT_LEFT); + gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] = GetAiFlags(0xFFFF, B_POSITION_OPPONENT_RIGHT); + + // The check is here because wild natural enemies are not symmetrical. + if (B_WILD_NATURAL_ENEMIES && IsDoubleBattle()) + { + u32 speciesLeft = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES); + u32 speciesRight = GetMonData(&gEnemyParty[1], MON_DATA_SPECIES); + if (IsNaturalEnemy(speciesLeft, speciesRight)) + gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] |= AI_FLAG_ATTACKS_PARTNER; + if (IsNaturalEnemy(speciesRight, speciesLeft)) + gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] |= AI_FLAG_ATTACKS_PARTNER; + } } else { - gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] = GetAiFlags(TRAINER_BATTLE_PARAM.opponentA); - if (TRAINER_BATTLE_PARAM.opponentB != 0) - gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] = GetAiFlags(TRAINER_BATTLE_PARAM.opponentB); + gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] = GetAiFlags(TRAINER_BATTLE_PARAM.opponentA, B_POSITION_OPPONENT_LEFT); + if ((TRAINER_BATTLE_PARAM.opponentB != 0) && (TRAINER_BATTLE_PARAM.opponentB != 0xFFFF)) + gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] = GetAiFlags(TRAINER_BATTLE_PARAM.opponentB, B_POSITION_OPPONENT_RIGHT); else gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] = gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT]; } if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { - gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_RIGHT] = GetAiFlags(gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)); + gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_RIGHT] = GetAiFlags(gPartnerTrainerId, B_POSITION_PLAYER_RIGHT); } else if (IsDoubleBattle() && IsAiVsAiBattle()) { gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_RIGHT] = gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_LEFT]; } - else + else // Assign ai flags for player for prediction { - gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_RIGHT] = 0; // player + u64 aiFlags = GetAiFlags(TRAINER_BATTLE_PARAM.opponentA, B_POSITION_OPPONENT_LEFT) + | GetAiFlags(TRAINER_BATTLE_PARAM.opponentB, B_POSITION_OPPONENT_RIGHT); + gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_RIGHT] = aiFlags; + gAiThinkingStruct->aiFlags[B_POSITION_PLAYER_LEFT] = aiFlags; } } void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) { - u32 moveLimitations, moveLimitationsTarget; - u32 defaultScoreMovesTarget = defaultScoreMoves; + u32 moveLimitations; u64 flags[MAX_BATTLERS_COUNT]; u32 moveIndex; @@ -288,7 +304,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) { if (moveLimitations & (1u << moveIndex)) SET_SCORE(battler, moveIndex, 0); - if (defaultScoreMoves & 1) + else if (defaultScoreMoves & 1) SET_SCORE(battler, moveIndex, AI_SCORE_DEFAULT); else SET_SCORE(battler, moveIndex, 0); @@ -298,28 +314,9 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) gBattlerTarget = SetRandomTarget(battler); gAiBattleData->chosenTarget[battler] = gBattlerTarget; - - // Initialize move prediction scores - if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_PREDICT_MOVE) - { - u32 opposingBattler = GetOppositeBattler(battler); - moveLimitationsTarget = gAiLogicData->moveLimitations[opposingBattler]; - - for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) - { - if (moveLimitationsTarget & (1u << moveIndex)) - SET_SCORE(opposingBattler, moveIndex, 0); - if (defaultScoreMovesTarget & 1) - SET_SCORE(opposingBattler, moveIndex, AI_SCORE_DEFAULT); - else - SET_SCORE(opposingBattler, moveIndex, 0); - - defaultScoreMovesTarget >>= 1; - } - } } -bool32 BattlerChoseNonMoveAction(void) +bool32 BattlerChooseNonMoveAction(void) { if (gAiThinkingStruct->aiAction & AI_ACTION_FLEE) { @@ -340,7 +337,6 @@ void SetupAIPredictionData(u32 battler, enum SwitchType switchType) { s32 opposingBattler = GetOppositeBattler(battler); gAiLogicData->aiPredictionInProgress = TRUE; - gAiLogicData->battlerDoingPrediction = battler; // Switch prediction if ((gAiThinkingStruct->aiFlags[battler] & AI_FLAG_PREDICT_SWITCH)) @@ -349,64 +345,78 @@ void SetupAIPredictionData(u32 battler, enum SwitchType switchType) if (ShouldSwitch(opposingBattler)) gAiLogicData->shouldSwitch |= (1u << opposingBattler); gBattleStruct->prevTurnSpecies[opposingBattler] = gBattleMons[opposingBattler].species; - - // Determine whether AI will use predictions this turn - gAiLogicData->predictingSwitch = RandomPercentage(RNG_AI_PREDICT_SWITCH, PREDICT_SWITCH_CHANCE); } - // Move prediction - if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_PREDICT_MOVE) - { - gAiLogicData->predictedMove[opposingBattler] = gBattleMons[opposingBattler].moves[BattleAI_ChooseMoveIndex(opposingBattler)]; - ModifySwitchAfterMoveScoring(opposingBattler); + // Determine whether AI will use predictions this turn + gAiLogicData->predictingSwitch = RandomPercentage(RNG_AI_PREDICT_SWITCH, PREDICT_SWITCH_CHANCE); - // Determine whether AI will use predictions this turn - gAiLogicData->predictingMove = RandomPercentage(RNG_AI_PREDICT_MOVE, PREDICT_MOVE_CHANCE); - } gAiLogicData->aiPredictionInProgress = FALSE; } void ComputeBattlerDecisions(u32 battler) { - if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) - && (BattlerHasAi(battler) - && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) + bool32 isAiBattler = (gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && (BattlerHasAi(battler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE)); + if (isAiBattler || CanAiPredictMove()) { - // If ai is about to flee or chosen to watch player, no need to calc anything - if (BattlerChoseNonMoveAction()) - return; - // Risky AI switches aggressively even mid battle - enum SwitchType switchType = (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_RISKY) ? SWITCH_AFTER_KO : SWITCH_MID_BATTLE; + enum SwitchType switchType = (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_RISKY) ? SWITCH_AFTER_KO : SWITCH_MID_BATTLE_OPTIONAL; gAiLogicData->aiCalcInProgress = TRUE; // Setup battler and prediction data BattleAI_SetupAIData(0xF, battler); - SetupAIPredictionData(battler, switchType); + SetupAIPredictionData(battler, SWITCH_MID_BATTLE_OPTIONAL); // AI's own switching data - gAiLogicData->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, switchType); - if (ShouldSwitch(battler)) - gAiLogicData->shouldSwitch |= (1u << battler); - gBattleStruct->prevTurnSpecies[battler] = gBattleMons[battler].species; + if (isAiBattler) + { + gAiLogicData->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, switchType); + if (ShouldSwitch(battler)) + gAiLogicData->shouldSwitch |= (1u << battler); + gBattleStruct->prevTurnSpecies[battler] = gBattleMons[battler].species; + } // AI's move scoring gAiBattleData->chosenMoveIndex[battler] = BattleAI_ChooseMoveIndex(battler); // Calculate score and chose move index + if (isAiBattler) + BattlerChooseNonMoveAction(); ModifySwitchAfterMoveScoring(battler); gAiLogicData->aiCalcInProgress = FALSE; } } +void ReconsiderGimmick(u32 battlerAtk, u32 battlerDef, u16 move) +{ + // After choosing a move for battlerAtk assuming that a gimmick will be used, reconsider whether the gimmick is necessary. + + if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && !ShouldUseZMove(battlerAtk, battlerDef, move)) + SetAIUsingGimmick(battlerAtk, NO_GIMMICK); + + if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_TERA && GetMoveEffect(move) == EFFECT_PROTECT) + SetAIUsingGimmick(battlerAtk, NO_GIMMICK); +} + +static u32 ChooseMoveOrAction(u32 battler) +{ + if (IsDoubleBattle()) + return ChooseMoveOrAction_Doubles(battler); + return ChooseMoveOrAction_Singles(battler); +} + u32 BattleAI_ChooseMoveIndex(u32 battler) { u32 chosenMoveIndex; - if (!IsDoubleBattle()) - chosenMoveIndex = ChooseMoveOrAction_Singles(battler); - else - chosenMoveIndex = ChooseMoveOrAction_Doubles(battler); + SetAIUsingGimmick(battler, USE_GIMMICK); + + if (gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_TERA && (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_TERA)) + DecideTerastal(battler); + + chosenMoveIndex = ChooseMoveOrAction(battler); + + if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE) + ReconsiderGimmick(battler, gBattlerTarget, gBattleMons[battler].moves[chosenMoveIndex]); // Clear protect structures, some flags may be set during AI calcs // e.g. pranksterElevated from GetBattleMovePriority @@ -437,6 +447,7 @@ void Ai_InitPartyStruct(void) { u32 i; bool32 isOmniscient = (gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] & AI_FLAG_OMNISCIENT) || (gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] & AI_FLAG_OMNISCIENT); + bool32 hasPartyKnowledge = (gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] & AI_FLAG_KNOW_OPPONENT_PARTY) || (gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] & AI_FLAG_KNOW_OPPONENT_PARTY); struct Pokemon *mon; gAiPartyData->count[B_SIDE_PLAYER] = CalculatePlayerPartyCount(); @@ -457,13 +468,16 @@ void Ai_InitPartyStruct(void) // Find fainted mons for (i = 0; i < gAiPartyData->count[B_SIDE_PLAYER]; i++) { + mon = &gPlayerParty[i]; if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) gAiPartyData->mons[B_SIDE_PLAYER][i].isFainted = TRUE; + if (isOmniscient || hasPartyKnowledge) + gAiPartyData->mons[B_SIDE_PLAYER][i].species = GetMonData(mon, MON_DATA_SPECIES); + if (isOmniscient) { u32 j; - mon = &gPlayerParty[i]; gAiPartyData->mons[B_SIDE_PLAYER][i].item = GetMonData(mon, MON_DATA_HELD_ITEM); gAiPartyData->mons[B_SIDE_PLAYER][i].heldEffect = GetItemHoldEffect(gAiPartyData->mons[B_SIDE_PLAYER][i].item); gAiPartyData->mons[B_SIDE_PLAYER][i].ability = GetMonAbility(mon); @@ -512,32 +526,70 @@ void Ai_UpdateFaintData(u32 battler) aiMon->isFainted = TRUE; } +void RecordMovesBasedOnStab(u32 battler) +{ + u32 i; + for (i = 0; i < MAX_MON_MOVES; i++) + { + u32 playerMove = gBattleMons[battler].moves[i]; + if (IsSpeciesOfType(gBattleMons[battler].species, GetMoveType(playerMove)) && GetMovePower(playerMove != 0)) + RecordKnownMove(battler, playerMove); + } +} + +void RecordStatusMoves(u32 battler) +{ + u32 i; + for (i = 0; i < MAX_MON_MOVES; i++) + { + u32 playerMove = gBattleMons[battler].moves[i]; + if (ShouldRecordStatusMove(playerMove)) + RecordKnownMove(battler, playerMove); + } +} + void SetBattlerAiData(u32 battler, struct AiLogicData *aiData) { - u32 ability, holdEffect; + enum Ability ability; + u32 holdEffect; ability = aiData->abilities[battler] = AI_DecideKnownAbilityForTurn(battler); aiData->items[battler] = gBattleMons[battler].item; holdEffect = aiData->holdEffects[battler] = AI_DecideHoldEffectForTurn(battler); aiData->holdEffectParams[battler] = GetBattlerHoldEffectParam(battler); - aiData->lastUsedMove[battler] = gLastMoves[battler]; + aiData->lastUsedMove[battler] = (gLastMoves[battler] == MOVE_UNAVAILABLE) ? MOVE_NONE : gLastMoves[battler]; aiData->hpPercents[battler] = GetHealthPercentage(battler); aiData->moveLimitations[battler] = CheckMoveLimitations(battler, 0, MOVE_LIMITATIONS_ALL); - aiData->speedStats[battler] = GetBattlerTotalSpeedStatArgs(battler, ability, holdEffect); + aiData->speedStats[battler] = GetBattlerTotalSpeedStat(battler, ability, holdEffect); + + if (IsAiBattlerAssumingStab()) + RecordMovesBasedOnStab(battler); + + if (IsAiBattlerAssumingStatusMoves()) + RecordStatusMoves(battler); } +#define BYPASSES_ACCURACY_CALC 101 // 101 indicates for ai that the move will always hit static u32 Ai_SetMoveAccuracy(struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef, u32 move) { u32 accuracy; - u32 abilityAtk = aiData->abilities[battlerAtk]; - u32 abilityDef = aiData->abilities[battlerDef]; - if (abilityAtk == ABILITY_NO_GUARD || abilityDef == ABILITY_NO_GUARD || GetMoveAccuracy(move) == 0) // Moves with accuracy 0 or no guard ability always hit. - accuracy = 100; + enum Ability abilityAtk = aiData->abilities[battlerAtk]; + enum Ability abilityDef = aiData->abilities[battlerDef]; + if (CanMoveSkipAccuracyCalc(battlerAtk, battlerDef, abilityAtk, abilityDef, move, AI_CHECK)) + { + accuracy = BYPASSES_ACCURACY_CALC; + } else + { accuracy = GetTotalAccuracy(battlerAtk, battlerDef, move, abilityAtk, abilityDef, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); + // Cap normal accuracy at 100 for ai calcs. + // Done for comparison with moves that bypass accuracy checks (will be seen as 101 for ai calcs)) + accuracy = (accuracy > 100) ? 100 : accuracy; + } return accuracy; } +#undef BYPASSES_ACCURACY_CALC static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef, u32 weather) { @@ -555,7 +607,7 @@ static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u continue; // Also get effectiveness of status moves - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, USE_GIMMICK, NO_GIMMICK, weather); aiData->moveAccuracy[battlerAtk][battlerDef][moveIndex] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex] = dmg; @@ -588,6 +640,7 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) u32 battlerAtk, battlersCount, weather; memset(aiData, 0, sizeof(struct AiLogicData)); + gAiBattleData->aiUsingGimmick = 0; if (!(gBattleTypeFlags & BATTLE_TYPE_HAS_AI) && !IsWildMonSmart()) return; @@ -618,6 +671,20 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) SetBattlerAiMovesData(aiData, battlerAtk, battlersCount, weather); } + + for (battlerAtk = 0; battlerAtk < battlersCount; battlerAtk++) + { + // Prediction limited to player side but can be expanded to read partners move in the future + if (!IsOnPlayerSide(battlerAtk) || !CanAiPredictMove()) + continue; + + // This can potentially be cleaned up more + BattleAI_SetupAIData(0xF, battlerAtk); + u32 chosenMoveIndex = ChooseMoveOrAction(battlerAtk); + gAiLogicData->predictedMove[battlerAtk] = gBattleMons[battlerAtk].moves[chosenMoveIndex]; + aiData->predictingMove = RandomPercentage(RNG_AI_PREDICT_MOVE, PREDICT_MOVE_CHANCE); + } + if (DEBUG_AI_DELAY_TIMER) // We add to existing to compound multiple calls gBattleStruct->aiDelayCycles += CycleCountEnd(); @@ -628,7 +695,7 @@ u32 GetPartyMonAbility(struct Pokemon *mon) { // Doesn't have any special handling yet u32 species = GetMonData(mon, MON_DATA_SPECIES); - u32 ability = gSpeciesInfo[species].abilities[GetMonData(mon, MON_DATA_ABILITY_NUM)]; + enum Ability ability = GetSpeciesAbility(species, GetMonData(mon, MON_DATA_ABILITY_NUM)); return ability; } @@ -648,11 +715,11 @@ static u32 PpStallReduction(u32 move, u32 battlerAtk) continue; PokemonToBattleMon(&gPlayerParty[partyIndex], &gBattleMons[tempBattleMonIndex]); u32 species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); - u32 abilityAtk = ABILITY_NONE; - u32 abilityDef = GetPartyMonAbility(&gPlayerParty[partyIndex]); - u32 moveType = GetBattleMoveType(move); // Probably doesn't handle dynamic types right now - if (CanAbilityAbsorbMove(battlerAtk, tempBattleMonIndex, abilityDef, move, moveType, ABILITY_CHECK_TRIGGER) - || CanAbilityBlockMove(battlerAtk, tempBattleMonIndex, abilityAtk, abilityDef, move, ABILITY_CHECK_TRIGGER) + enum Ability abilityAtk = ABILITY_NONE; + enum Ability abilityDef = GetPartyMonAbility(&gPlayerParty[partyIndex]); + enum Type moveType = GetBattleMoveType(move); // Probably doesn't handle dynamic types right now + if (CanAbilityAbsorbMove(battlerAtk, tempBattleMonIndex, abilityDef, move, moveType, CHECK_TRIGGER) + || CanAbilityBlockMove(battlerAtk, tempBattleMonIndex, abilityAtk, abilityDef, move, CHECK_TRIGGER) || (CalcPartyMonTypeEffectivenessMultiplier(move, species, abilityDef) == 0)) { totalStallValue += currentStallValue; @@ -676,10 +743,13 @@ static u32 ChooseMoveOrAction_Singles(u32 battler) u8 consideredMoveArray[MAX_MON_MOVES]; u32 numOfBestMoves; s32 i; - u64 flags = gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)]; + u64 flags = gAiThinkingStruct->aiFlags[battler]; u32 opposingBattler = GetOppositeBattler(battler); + gAiThinkingStruct->aiLogicId = 0; + gAiThinkingStruct->movesetIndex = 0; gAiLogicData->partnerMove = 0; // no ally + while (flags != 0) { if (flags & 1) @@ -693,6 +763,9 @@ static u32 ChooseMoveOrAction_Singles(u32 battler) gAiThinkingStruct->aiLogicId++; } + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_CHECK_VIABILITY) + AI_CompareDamagingMoves(battler, opposingBattler); + for (i = 0; i < MAX_MON_MOVES; i++) { gAiBattleData->finalScore[battler][opposingBattler][i] = gAiThinkingStruct->score[i]; @@ -755,7 +828,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battler) gAiLogicData->partnerMove = GetAllyChosenMove(battler); gAiThinkingStruct->aiLogicId = 0; gAiThinkingStruct->movesetIndex = 0; - flags = gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)]; + flags = gAiThinkingStruct->aiFlags[battler]; while (flags != 0) { @@ -769,6 +842,8 @@ static u32 ChooseMoveOrAction_Doubles(u32 battler) flags >>= (u64)1; gAiThinkingStruct->aiLogicId++; } + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_CHECK_VIABILITY) + AI_CompareDamagingMoves(battler, gBattlerTarget); mostViableMovesScores[0] = gAiThinkingStruct->score[0]; mostViableMovesIndices[0] = 0; @@ -994,31 +1069,34 @@ void BattleAI_DoAIProcessing_PredictedSwitchin(struct AiThinkingStruct *aiThink, // AI_FLAG_CHECK_BAD_MOVE - decreases move scores static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { + if (IsTargetingPartner(battlerAtk, battlerDef)) + return score; + // move data enum BattleMoveEffects moveEffect = GetMoveEffect(move); u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); - s32 moveType; + enum Type moveType; u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); struct AiLogicData *aiData = gAiLogicData; uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex]; - bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); + bool32 isBattle1v1 = IsBattle1v1(); + bool32 hasTwoOpponents = HasTwoOpponents(battlerAtk); + bool32 hasPartner = HasPartner(battlerAtk); u32 i; u32 weather; u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); - u32 abilityAtk = aiData->abilities[battlerAtk]; - u32 abilityDef = aiData->abilities[battlerDef]; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + enum Ability abilityAtk = aiData->abilities[battlerAtk]; + enum Ability abilityDef = aiData->abilities[battlerDef]; s32 atkPriority = GetBattleMovePriority(battlerAtk, abilityAtk, move); - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) - return score; - SetTypeBeforeUsingMove(move, battlerAtk); moveType = GetBattleMoveType(move); - if (IsPowderMove(move) && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) + if (IsPowderMove(move) && !IsAffectedByPowderMove(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) RETURN_SCORE_MINUS(10); - if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move)) + if (!BreaksThroughSemiInvulnerablity(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) RETURN_SCORE_MINUS(10); if (IsTwoTurnNotSemiInvulnerableMove(battlerAtk, move) && CanTargetFaintAi(battlerDef, battlerAtk)) @@ -1038,7 +1116,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } // Don't use anything but super effective thawing moves if target is frozen if any other attack available - if (((GetMoveType(move) == TYPE_FIRE && GetMovePower(move) != 0) || CanBurnHitThaw(move)) && effectiveness < UQ_4_12(2.0) && (gBattleMons[battlerDef].status1 & (STATUS1_FROSTBITE | STATUS1_FREEZE))) + if (((GetMoveType(move) == TYPE_FIRE && GetMovePower(move) != 0) || CanBurnHitThaw(move)) && effectiveness < UQ_4_12(2.0) && (gBattleMons[battlerDef].status1 & STATUS1_ICY_ANY)) { u32 aiMove; for (i = 0; i < MAX_MON_MOVES; i++) @@ -1053,41 +1131,27 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } if (effectiveness == UQ_4_12(0.0)) - { RETURN_SCORE_MINUS(20); - } - else if (effectiveness < UQ_4_12(0.5)) - { - switch (moveEffect) - { - case EFFECT_FIXED_DAMAGE_ARG: - case EFFECT_LEVEL_DAMAGE: - case EFFECT_PSYWAVE: - case EFFECT_OHKO: - case EFFECT_BIDE: - case EFFECT_SUPER_FANG: - case EFFECT_ENDEAVOR: - case EFFECT_COUNTER: - case EFFECT_MIRROR_COAT: - case EFFECT_METAL_BURST: - case EFFECT_FINAL_GAMBIT: - case EFFECT_GUARDIAN_OF_ALOLA: - break; - default: - RETURN_SCORE_MINUS(10); - } - } if (DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move)) abilityDef = ABILITY_NONE; + // If a pokemon can be guaranteed flinched, don't target the pokemon that can't be flinched. + if (hasTwoOpponents + && !IsFlinchGuaranteed(battlerAtk, battlerDef, move) && IsFlinchGuaranteed(battlerAtk, BATTLE_PARTNER(battlerDef), move) + && aiData->effectiveness[battlerAtk][BATTLE_PARTNER(battlerDef)][gAiThinkingStruct->movesetIndex] != UQ_4_12(0.0)) + ADJUST_SCORE(-5); + // check non-user target if (!(moveTarget & MOVE_TARGET_USER)) { - if (CanAbilityBlockMove(battlerAtk, battlerDef, abilityAtk, abilityDef, move, ABILITY_CHECK_TRIGGER_AI)) + if (Ai_IsPriorityBlocked(battlerAtk, battlerDef, move, aiData)) + RETURN_SCORE_MINUS(20); + + if (CanAbilityBlockMove(battlerAtk, battlerDef, abilityAtk, abilityDef, move, AI_CHECK)) RETURN_SCORE_MINUS(20); - if (CanAbilityAbsorbMove(battlerAtk, battlerDef, abilityDef, move, moveType, ABILITY_CHECK_TRIGGER_AI)) + if (CanAbilityAbsorbMove(battlerAtk, battlerDef, abilityDef, move, moveType, AI_CHECK)) RETURN_SCORE_MINUS(20); switch (abilityDef) @@ -1113,15 +1177,16 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case MOVE_EFFECT_BURN: ADJUST_SCORE(-5); break; + default: + break; } break; - break; case ABILITY_WONDER_GUARD: if (effectiveness < UQ_4_12(2.0)) RETURN_SCORE_MINUS(20); break; case ABILITY_JUSTIFIED: - if (moveType == TYPE_DARK && !IsBattleMoveStatus(move) && !IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (moveType == TYPE_DARK && !IsBattleMoveStatus(move) && !IsTargetingPartner(battlerAtk, battlerDef)) RETURN_SCORE_MINUS(10); break; case ABILITY_RATTLED: @@ -1163,10 +1228,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && IsNonVolatileStatusMove(move)) RETURN_SCORE_MINUS(10); break; + default: + break; } // def ability checks // target partner ability checks & not attacking partner - if (isDoubleBattle) + if (hasTwoOpponents) { switch (aiData->abilities[BATTLE_PARTNER(battlerDef)]) { @@ -1194,29 +1261,31 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsAromaVeilProtectedEffect(moveEffect)) RETURN_SCORE_MINUS(10); break; + default: + break; } } // def partner ability checks // gen7+ dark type mons immune to priority->elevated moves from prankster - if (B_PRANKSTER_DARK_TYPES >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) + if (GetConfig(CONFIG_PRANKSTER_DARK_TYPES) >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) && aiData->abilities[battlerAtk] == ABILITY_PRANKSTER && IsBattleMoveStatus(move) && !(moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER))) RETURN_SCORE_MINUS(10); // terrain & effect checks - if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerDef, abilityDef, aiData->holdEffects[battlerDef], STATUS_FIELD_ELECTRIC_TERRAIN)) { if (nonVolatileStatus == MOVE_EFFECT_SLEEP) RETURN_SCORE_MINUS(20); } - if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) + if (IsBattlerTerrainAffected(battlerDef, abilityDef, aiData->holdEffects[battlerDef], STATUS_FIELD_MISTY_TERRAIN)) { if (IsNonVolatileStatusMove(move) || IsConfusionMoveEffect(moveEffect)) RETURN_SCORE_MINUS(20); } - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && atkPriority > 0) + if (IsBattlerTerrainAffected(battlerAtk, abilityAtk, aiData->holdEffects[battlerAtk], STATUS_FIELD_PSYCHIC_TERRAIN) && atkPriority > 0) { RETURN_SCORE_MINUS(20); } @@ -1225,10 +1294,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // the following checks apply to any target (including user) // throat chop check - if (gDisableStructs[battlerAtk].throatChopTimer > gBattleTurnCounter && IsSoundMove(move)) + if (gDisableStructs[battlerAtk].throatChopTimer > 0 && IsSoundMove(move)) return 0; // Can't even select move at all // heal block check - if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(battlerAtk, move)) + if (gBattleMons[battlerAtk].volatiles.healBlock && IsHealBlockPreventingMove(battlerAtk, move)) return 0; // Can't even select heal blocked move // primal weather check @@ -1267,12 +1336,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (moveEffect) { case EFFECT_HIT: // only applies to Vital Throw - if (GetBattleMovePriority(battlerAtk, aiData->abilities[battlerAtk], move) < 0 && AI_IsFaster(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40) + if (GetBattleMovePriority(battlerAtk, aiData->abilities[battlerAtk], move) < 0 && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && aiData->hpPercents[battlerAtk] < 40) ADJUST_SCORE(-2); // don't want to move last break; default: break; // check move damage case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: if (!(gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_WILL_SUICIDE)) ADJUST_SCORE(-2); @@ -1378,7 +1448,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_CHARGE: - if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP) + if (gBattleMons[battlerAtk].volatiles.chargeTimer > 0) ADJUST_SCORE(-20); else if (!HasMoveWithType(battlerAtk, TYPE_ELECTRIC)) ADJUST_SCORE(-10); @@ -1388,7 +1458,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_QUIVER_DANCE: case EFFECT_GEOMANCY: - if (HasBattlerSideAbility(battlerDef, ABILITY_UNAWARE, aiData)) + if (AI_IsAbilityOnSide(battlerDef, ABILITY_UNAWARE)) ADJUST_SCORE(-10); if (gBattleMons[battlerAtk].statStages[STAT_SPATK] >= MAX_STAT_STAGE || !HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL)) ADJUST_SCORE(-10); @@ -1436,13 +1506,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_ROTOTILLER: - if (isDoubleBattle) + if (hasPartner) { if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) - && IsBattlerGrounded(battlerAtk) + && AI_IsBattlerGrounded(battlerAtk) && (BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK))) && !(IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS) - && IsBattlerGrounded(BATTLE_PARTNER(battlerAtk)) + && AI_IsBattlerGrounded(BATTLE_PARTNER(battlerAtk)) && aiData->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_CONTRARY && (BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_ATK) || BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPATK)))) @@ -1451,7 +1521,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } } else if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) - && IsBattlerGrounded(battlerAtk) + && AI_IsBattlerGrounded(battlerAtk) && (BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK)))) { ADJUST_SCORE(-10); @@ -1467,12 +1537,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-8); break; } - else if (!isDoubleBattle) - { - ADJUST_SCORE(-10); // no partner and our stats wont rise, so don't use - } - - if (isDoubleBattle) + else if (hasPartner) { if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS) { @@ -1485,6 +1550,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); // nor our or our partner's ability is plus/minus } } + else + { + ADJUST_SCORE(-10); // no partner and our stats wont rise, so don't use + } break; case EFFECT_ACUPRESSURE: if (DoesSubstituteBlockMove(battlerAtk, battlerDef, move) || AreBattlersStatsMaxed(battlerDef)) @@ -1498,12 +1567,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (!BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF)) ADJUST_SCORE(-8); } - else if (!isDoubleBattle) - { - ADJUST_SCORE(-10); // our stats wont rise from this move - } - - if (isDoubleBattle) + else if (hasPartner) { if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS) { @@ -1517,44 +1581,48 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); // nor our or our partner's ability is plus/minus } } + else + { + ADJUST_SCORE(-10); // our stats wont rise from this move + } break; // stat lowering effects case EFFECT_ATTACK_DOWN: case EFFECT_ATTACK_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_ATK)) ADJUST_SCORE(-10); break; case EFFECT_DEFENSE_DOWN: case EFFECT_DEFENSE_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_DEF)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_DEF)) ADJUST_SCORE(-10); break; case EFFECT_SPEED_DOWN: case EFFECT_SPEED_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPEED)) ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_ATTACK_DOWN: case EFFECT_SPECIAL_ATTACK_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPATK)) ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_DEFENSE_DOWN: case EFFECT_SPECIAL_DEFENSE_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPDEF)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPDEF)) ADJUST_SCORE(-10); break; case EFFECT_ACCURACY_DOWN: case EFFECT_ACCURACY_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ACC)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_ACC)) ADJUST_SCORE(-10); break; case EFFECT_EVASION_DOWN: case EFFECT_EVASION_DOWN_2: case EFFECT_TICKLE: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_ATK)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_DEF)) + else if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_DEF)) ADJUST_SCORE(-8); break; case EFFECT_VENOM_DRENCH: @@ -1564,18 +1632,18 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } else { - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPEED)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK)) + else if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPATK)) ADJUST_SCORE(-8); - else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) + else if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_ATK)) ADJUST_SCORE(-6); } break; case EFFECT_NOBLE_ROAR: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPATK)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) + else if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_ATK)) ADJUST_SCORE(-8); break; case EFFECT_CAPTIVATE: @@ -1584,7 +1652,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; // other case EFFECT_HAZE: - if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + if (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) { ADJUST_SCORE(-10); // partner already using haze } @@ -1603,23 +1671,26 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_PRESENT: - case EFFECT_FIXED_DAMAGE_ARG: + case EFFECT_FIXED_HP_DAMAGE: case EFFECT_FOCUS_PUNCH: // AI_CBM_HighRiskForDamage if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < UQ_4_12(2.0)) ADJUST_SCORE(-10); - if (HasDamagingMove(battlerDef) && !((gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE) + if (HasDamagingMove(battlerDef) && !(gBattleMons[battlerAtk].volatiles.substitute || IsBattlerIncapacitated(battlerDef, abilityDef) - || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))) + || gBattleMons[battlerDef].volatiles.infatuation + || gBattleMons[battlerDef].volatiles.confusionTurns)) ADJUST_SCORE(-10); - if (HasMoveWithEffect(battlerAtk, EFFECT_SUBSTITUTE) && !(gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE)) + if (HasMoveWithEffect(battlerAtk, EFFECT_SUBSTITUTE) && !gBattleMons[battlerAtk].volatiles.substitute) ADJUST_SCORE(-10); if (HasNonVolatileMoveEffect(battlerAtk, MOVE_EFFECT_SLEEP) && ! (gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) ADJUST_SCORE(-10); break; case EFFECT_COUNTER: case EFFECT_MIRROR_COAT: - if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)) + if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) + || gBattleMons[battlerDef].volatiles.infatuation + || gBattleMons[battlerDef].volatiles.confusionTurns > 0) ADJUST_SCORE(-1); if ((predictedMove == MOVE_NONE || GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_STATUS || DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove)) @@ -1636,28 +1707,32 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_TOXIC_THREAD: - if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED)) + if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPEED)) ADJUST_SCORE(-1); // may still want to just poison - //fallthrough + if (!AI_CanPoison(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) + ADJUST_SCORE(-10); + break; case EFFECT_LIGHT_SCREEN: - if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_LIGHTSCREEN - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + if (gSideStatuses[GetBattlerSide(battlerAtk)] & (SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-10); break; case EFFECT_REFLECT: - if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_REFLECT - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + if (gSideStatuses[GetBattlerSide(battlerAtk)] & (SIDE_STATUS_REFLECT | SIDE_STATUS_AURORA_VEIL) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-10); break; case EFFECT_AURORA_VEIL: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_AURORA_VEIL - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove) - || !(weather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + || !(weather & (B_WEATHER_ICY_ANY))) ADJUST_SCORE(-10); break; - case EFFECT_OHKO: - if (B_SHEER_COLD_IMMUNITY >= GEN_7 && move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) + case EFFECT_SHEER_COLD: + if (GetConfig(CONFIG_SHEER_COLD_IMMUNITY) >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) RETURN_SCORE_MINUS(20); + // fallthrough + case EFFECT_OHKO: if (!ShouldTryOHKO(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move)) ADJUST_SCORE(-10); else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) @@ -1665,21 +1740,26 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_MIST: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_MIST - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_FOCUS_ENERGY: - if (gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY_ANY) + if (gBattleMons[battlerAtk].volatiles.dragonCheer || gBattleMons[battlerAtk].volatiles.focusEnergy) + ADJUST_SCORE(-10); + break; + case EFFECT_NON_VOLATILE_STATUS: + if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_CONFUSE: case EFFECT_SWAGGER: case EFFECT_FLATTER: - if (!AI_CanConfuse(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) + || !AI_CanConfuse(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_SUBSTITUTE: - if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_INFILTRATOR) + if (gBattleMons[battlerAtk].volatiles.substitute || aiData->abilities[battlerDef] == ABILITY_INFILTRATOR) ADJUST_SCORE(-8); else if (aiData->hpPercents[battlerAtk] <= 25) ADJUST_SCORE(-10); @@ -1689,7 +1769,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_SHED_TAIL: if (CountUsablePartyMons(battlerAtk) == 0) ADJUST_SCORE(-10); - if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_INFILTRATOR) + if (gBattleMons[battlerAtk].volatiles.substitute || aiData->abilities[battlerDef] == ABILITY_INFILTRATOR) ADJUST_SCORE(-8); else if (aiData->hpPercents[battlerAtk] <= 50) ADJUST_SCORE(-10); @@ -1697,7 +1777,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-8); break; case EFFECT_LEECH_SEED: - if (gStatuses3[battlerDef] & STATUS3_LEECHSEED + if (gBattleMons[battlerDef].volatiles.leechSeed || IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); @@ -1709,11 +1789,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); else if (gDisableStructs[battlerDef].disableTimer == 0 && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) - && !PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker should go first { - if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) + if (aiData->lastUsedMove[battlerDef] == MOVE_NONE) ADJUST_SCORE(-10); // no anticipated move to disable } else if (predictedMove == MOVE_NONE) @@ -1733,9 +1813,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker should go first { - if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) + if (aiData->lastUsedMove[battlerDef] == MOVE_NONE) ADJUST_SCORE(-10); // no anticipated move to encore } else if (predictedMove == MOVE_NONE) @@ -1760,7 +1840,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_NIGHTMARE: - if (gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) + if (gBattleMons[battlerDef].volatiles.nightmare) ADJUST_SCORE(-10); else if (!AI_IsBattlerAsleepOrComatose(battlerDef)) ADJUST_SCORE(-8); @@ -1770,7 +1850,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_CURSE: if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) { - if (gBattleMons[battlerDef].status2 & STATUS2_CURSED + if (gBattleMons[battlerDef].volatiles.cursed || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); else if (aiData->hpPercents[battlerAtk] <= 50) @@ -1792,7 +1872,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); // only one mon needs to set up the last layer of Spikes break; case EFFECT_STEALTH_ROCK: - if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 + if (IsHazardOnSide(GetBattlerSide(battlerDef), HAZARDS_STEALTH_ROCK) || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) //Only one mon needs to set up Stealth Rocks ADJUST_SCORE(-10); break; @@ -1803,13 +1883,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); // only one mon needs to set up the last layer of Toxic Spikes break; case EFFECT_STICKY_WEB: - if (gSideTimers[GetBattlerSide(battlerDef)].stickyWebAmount) + if (IsHazardOnSide(GetBattlerSide(battlerDef), HAZARDS_STICKY_WEB)) ADJUST_SCORE(-10); - else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove) && gSideTimers[GetBattlerSide(battlerDef)].stickyWebAmount) + if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); // only one mon needs to set up Sticky Web break; case EFFECT_FORESIGHT: - if (gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT) + if (gBattleMons[battlerDef].volatiles.foresight) ADJUST_SCORE(-10); else if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4 || !(IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) @@ -1817,19 +1897,19 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-9); break; case EFFECT_PERISH_SONG: - if (isDoubleBattle) + if (!isBattle1v1) { if (CountUsablePartyMons(battlerAtk) == 0 && aiData->abilities[battlerAtk] != ABILITY_SOUNDPROOF - && aiData->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_SOUNDPROOF - && CountUsablePartyMons(FOE(battlerAtk)) >= 1) + && CountUsablePartyMons(battlerDef) >= 1 + && (aiData->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_SOUNDPROOF || !IsBattlerAlive(BATTLE_PARTNER(battlerAtk)))) { ADJUST_SCORE(-10); //Don't wipe your team if you're going to lose } - else if ((!IsBattlerAlive(FOE(battlerAtk)) || aiData->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF - || gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG) - && (!IsBattlerAlive(BATTLE_PARTNER(FOE(battlerAtk))) || aiData->abilities[BATTLE_PARTNER(FOE(battlerAtk))] == ABILITY_SOUNDPROOF - || gStatuses3[BATTLE_PARTNER(FOE(battlerAtk))] & STATUS3_PERISH_SONG)) + else if ((!IsBattlerAlive(LEFT_FOE(battlerAtk)) || aiData->abilities[LEFT_FOE(battlerAtk)] == ABILITY_SOUNDPROOF + || gBattleMons[LEFT_FOE(battlerAtk)].volatiles.perishSong) + && (!IsBattlerAlive(RIGHT_FOE(battlerAtk)) || aiData->abilities[RIGHT_FOE(battlerAtk)] == ABILITY_SOUNDPROOF + || gBattleMons[RIGHT_FOE(battlerAtk)].volatiles.perishSong)) { ADJUST_SCORE(-10); //Both enemies are perish songed } @@ -1844,38 +1924,30 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && CountUsablePartyMons(battlerDef) >= 1) ADJUST_SCORE(-10); - if (gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG || aiData->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF) + if (gBattleMons[battlerDef].volatiles.perishSong || aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF) ADJUST_SCORE(-10); } break; case EFFECT_SANDSTORM: if (weather & (B_WEATHER_SANDSTORM | B_WEATHER_PRIMAL_ANY) - || IsMoveEffectWeather(aiData->partnerMove)) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-8); break; case EFFECT_SUNNY_DAY: if (weather & (B_WEATHER_SUN | B_WEATHER_PRIMAL_ANY) - || IsMoveEffectWeather(aiData->partnerMove)) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-8); break; case EFFECT_RAIN_DANCE: if (weather & (B_WEATHER_RAIN | B_WEATHER_PRIMAL_ANY) - || IsMoveEffectWeather(aiData->partnerMove)) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-8); break; case EFFECT_HAIL: - if (weather & (B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) - || IsMoveEffectWeather(aiData->partnerMove)) - ADJUST_SCORE(-8); - else if (weather & B_WEATHER_SNOW) - ADJUST_SCORE(-2); // mainly to prevent looping between hail and snow - break; case EFFECT_SNOWSCAPE: - if (weather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) - || IsMoveEffectWeather(aiData->partnerMove)) + if (weather & (B_WEATHER_ICY_ANY | B_WEATHER_PRIMAL_ANY) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-8); - else if (weather & B_WEATHER_HAIL) - ADJUST_SCORE(-2); // mainly to prevent looping between hail and snow break; case EFFECT_ATTRACT: if (!AI_CanBeInfatuated(battlerAtk, battlerDef, aiData->abilities[battlerDef])) @@ -1883,7 +1955,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SAFEGUARD: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_SAFEGUARD - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_MAGNITUDE: @@ -1897,9 +1969,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_BATON_PASS: if (CountUsablePartyMons(battlerAtk) == 0) ADJUST_SCORE(-10); - else if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE - || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) - || AnyStatIsRaised(battlerAtk)) + else if (gBattleMons[battlerAtk].volatiles.substitute + || gBattleMons[battlerAtk].volatiles.powerTrick + || gBattleMons[battlerAtk].volatiles.magnetRise + || gBattleMons[battlerAtk].volatiles.aquaRing + || gBattleMons[battlerAtk].volatiles.root + || AnyStatIsRaised(battlerAtk)) break; else ADJUST_SCORE(-6); @@ -1909,23 +1984,22 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_CHILLY_RECEPTION: if (CountUsablePartyMons(battlerAtk) == 0) ADJUST_SCORE(-10); - else if (weather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) || IsMoveEffectWeather(aiData->partnerMove)) + else if (weather & (B_WEATHER_ICY_ANY | B_WEATHER_PRIMAL_ANY) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-8); - else if (weather & B_WEATHER_HAIL) - ADJUST_SCORE(-2); // mainly to prevent looping between hail and snow break; case EFFECT_BELLY_DRUM: case EFFECT_FILLET_AWAY: - if (HasBattlerSideAbility(battlerDef, ABILITY_UNAWARE, aiData)) + if (AI_IsAbilityOnSide(battlerDef, ABILITY_UNAWARE)) ADJUST_SCORE(-10); if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY) ADJUST_SCORE(-10); - else if (aiData->hpPercents[battlerAtk] <= 60) + else if (aiData->hpPercents[battlerAtk] <= 60 && !IsConsideringZMove(battlerAtk, battlerDef, move)) ADJUST_SCORE(-10); break; case EFFECT_FUTURE_SIGHT: - if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_FUTUREATTACK - || gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_FUTUREATTACK) + if (gWishFutureKnock.futureSightCounter[LEFT_FOE(battlerAtk)] > 0 + || gWishFutureKnock.futureSightCounter[RIGHT_FOE(battlerAtk)] > 0) ADJUST_SCORE(-12); else ADJUST_SCORE(GOOD_EFFECT); @@ -1936,6 +2010,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_FIRST_TURN_ONLY: if (!gDisableStructs[battlerAtk].isFirstTurn) ADJUST_SCORE(-10); + if (HasChoiceEffect(battlerAtk)) + ADJUST_SCORE(-5); break; case EFFECT_STOCKPILE: if (gDisableStructs[battlerAtk].stockpileCounter >= 3) @@ -1957,7 +2033,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_TORMENT: if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); - else if (gBattleMons[battlerDef].status2 & STATUS2_TORMENT + else if (gBattleMons[battlerDef].volatiles.torment || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { ADJUST_SCORE(-10); @@ -1973,38 +2049,54 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_FOLLOW_ME: + if (!hasPartner + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) + || (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove)) + || gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battlerAtk)] != PARTY_SIZE) + ADJUST_SCORE(-20); + break; case EFFECT_HELPING_HAND: - if (!isDoubleBattle - || !IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove) + if (!hasPartner + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) + || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_GOOD_AS_GOLD || (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove)) || gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battlerAtk)] != PARTY_SIZE) //Partner is switching out. - ADJUST_SCORE(-10); + ADJUST_SCORE(-20); break; case EFFECT_TRICK: + if ((gBattleMons[battlerAtk].item == ITEM_NONE && aiData->items[battlerDef] == ITEM_NONE) + || !CanBattlerGetOrLoseItem(battlerAtk, gBattleMons[battlerAtk].item) + || !CanBattlerGetOrLoseItem(battlerAtk, aiData->items[battlerDef]) + || !CanBattlerGetOrLoseItem(battlerDef, aiData->items[battlerDef]) + || !CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerAtk].item) + || aiData->abilities[battlerAtk] == ABILITY_STICKY_HOLD + || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)) + ADJUST_SCORE(-10); case EFFECT_KNOCK_OFF: case EFFECT_CORROSIVE_GAS: if (aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) ADJUST_SCORE(-10); break; case EFFECT_INGRAIN: - if (gStatuses3[battlerAtk] & STATUS3_ROOTED) + if (gBattleMons[battlerAtk].volatiles.root) ADJUST_SCORE(-10); break; case EFFECT_AQUA_RING: - if (gStatuses3[battlerAtk] & STATUS3_AQUA_RING) + if (gBattleMons[battlerAtk].volatiles.aquaRing) ADJUST_SCORE(-10); break; case EFFECT_RECYCLE: - if (GetUsedHeldItem(battlerAtk) == 0 || gBattleMons[battlerAtk].item != 0) + if (GetBattlerPartyState(battlerAtk)->usedHeldItem == 0 || gBattleMons[battlerAtk].item != 0) ADJUST_SCORE(-10); break; case EFFECT_IMPRISON: - if (gStatuses3[battlerAtk] & STATUS3_IMPRISONED_OTHERS) + if (gBattleMons[battlerAtk].volatiles.imprison) ADJUST_SCORE(-10); break; case EFFECT_REFRESH: - if (!(gBattleMons[battlerDef].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_FROSTBITE))) + if (!(gBattleMons[battlerAtk].status1 & STATUS1_CAN_MOVE) + || !ShouldCureStatus(battlerAtk, battlerAtk, aiData)) ADJUST_SCORE(-10); break; case EFFECT_PSYCHO_SHIFT: @@ -2025,14 +2117,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_MUD_SPORT: if (gFieldStatuses & STATUS_FIELD_MUDSPORT - || gStatuses4[battlerAtk] & STATUS4_MUD_SPORT - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + || gBattleMons[battlerAtk].volatiles.mudSport + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_WATER_SPORT: if (gFieldStatuses & STATUS_FIELD_WATERSPORT - || gStatuses4[battlerAtk] & STATUS4_WATER_SPORT - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + || gBattleMons[battlerAtk].volatiles.waterSport + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_ABSORB: @@ -2042,25 +2134,29 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_STRENGTH_SAP: if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) + else if (!CanLowerStat(battlerAtk, battlerDef, aiData, STAT_ATK)) ADJUST_SCORE(-10); break; case EFFECT_COPYCAT: case EFFECT_MIRROR_MOVE: - return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); + if (predictedMove && GetMoveEffect(predictedMove) != GetMoveEffect(move)) + return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); + else + ADJUST_SCORE(-10); + break; case EFFECT_FLOWER_SHIELD: if (!IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) - && !(isDoubleBattle && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS))) + && !(hasPartner && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS))) ADJUST_SCORE(-10); break; case EFFECT_AROMATIC_MIST: - if (!isDoubleBattle || gBattleMons[BATTLE_PARTNER(battlerAtk)].hp == 0 || !BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPDEF)) + if (!hasPartner || !BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPDEF)) ADJUST_SCORE(-10); break; case EFFECT_BIDE: if (!HasDamagingMove(battlerDef) || aiData->hpPercents[battlerAtk] < 30 //Close to death - || gBattleMons[battlerDef].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) //No point in biding if can't take damage + || gBattleMons[battlerDef].status1 & STATUS1_INCAPACITATED) //No point in biding if can't take damage ADJUST_SCORE(-10); break; case EFFECT_HIT_SWITCH_TARGET: @@ -2068,7 +2164,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); // don't scare away pokemon twice else if (aiData->hpPercents[battlerDef] < 10 && GetBattlerSecondaryDamage(battlerDef)) ADJUST_SCORE(-10); // don't blow away mon that will faint soon - else if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) + else if (gBattleMons[battlerDef].volatiles.perishSong) ADJUST_SCORE(-10); break; case EFFECT_CONVERSION: @@ -2091,22 +2187,39 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_MORNING_SUN: case EFFECT_SYNTHESIS: case EFFECT_MOONLIGHT: - if ((AI_GetWeather() & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL | B_WEATHER_SNOW | B_WEATHER_FOG))) - ADJUST_SCORE(-3); - else if (AI_BattlerAtMaxHp(battlerAtk)) + if (AI_BattlerAtMaxHp(battlerAtk)) ADJUST_SCORE(-10); else if (aiData->hpPercents[battlerAtk] >= 90) ADJUST_SCORE(-9); //No point in healing, but should at least do it if nothing better + else if ((AI_GetWeather() & (B_WEATHER_LOW_LIGHT))) + ADJUST_SCORE(-3); + break; + case EFFECT_LIFE_DEW: + if (AI_BattlerAtMaxHp(battlerAtk)) + { + if (hasPartner) + { + if (AI_BattlerAtMaxHp(BATTLE_PARTNER(battlerAtk))) + ADJUST_SCORE(-10); + } + else + { + ADJUST_SCORE(-10); + } + } break; case EFFECT_PURIFY: if (!(gBattleMons[battlerDef].status1 & STATUS1_ANY)) ADJUST_SCORE(-10); else if (battlerDef == BATTLE_PARTNER(battlerAtk)) break; //Always heal your ally - else if (AI_BattlerAtMaxHp(battlerAtk)) - ADJUST_SCORE(-10); - else if (aiData->hpPercents[battlerAtk] >= 90) - ADJUST_SCORE(-8); //No point in healing, but should at least do it if nothing better + else if (!ShouldCureStatus(battlerAtk, battlerDef, aiData)) + { + if (AI_BattlerAtMaxHp(battlerAtk)) + ADJUST_SCORE(-10); + else if (aiData->hpPercents[battlerAtk] >= 90) + ADJUST_SCORE(-8); //No point in healing, but should at least do it if nothing better + } break; case EFFECT_RECOIL_IF_MISS: if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && gAiLogicData->moveAccuracy[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex] < 75 @@ -2114,21 +2227,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-6); break; case EFFECT_TRANSFORM: - if (gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED - || (gBattleMons[battlerDef].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE))) //Leave out Illusion b/c AI is supposed to be fooled + if (gBattleMons[battlerAtk].volatiles.transformed + || gBattleMons[battlerDef].volatiles.transformed + || gBattleMons[battlerDef].volatiles.substitute) //Leave out Illusion b/c AI is supposed to be fooled ADJUST_SCORE(-10); break; case EFFECT_SPITE: case EFFECT_MIMIC: - if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker should go first { - if (gLastMoves[battlerDef] == MOVE_NONE - || gLastMoves[battlerDef] == 0xFFFF) + if (aiData->lastUsedMove[battlerDef] == MOVE_NONE) ADJUST_SCORE(-10); } else if (predictedMove == MOVE_NONE) { - // TODO predicted move separate from gLastMoves + // TODO predicted move separate from aiData->lastUsedMove ADJUST_SCORE(-10); } break; @@ -2139,32 +2252,32 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) //TODO break; case EFFECT_LOCK_ON: - if (gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS + if (gBattleMons[battlerDef].volatiles.lockOn || aiData->abilities[battlerAtk] == ABILITY_NO_GUARD || aiData->abilities[battlerDef] == ABILITY_NO_GUARD || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_LASER_FOCUS: - if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS) + if (gBattleMons[battlerDef].volatiles.laserFocus) ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_SHELL_ARMOR || aiData->abilities[battlerDef] == ABILITY_BATTLE_ARMOR) ADJUST_SCORE(-8); break; case EFFECT_SKETCH: - if (gLastMoves[battlerDef] == MOVE_NONE) + if (aiData->lastUsedMove[battlerDef] == MOVE_NONE) ADJUST_SCORE(-10); break; case EFFECT_DESTINY_BOND: if (DoesDestinyBondFail(battlerAtk)) ADJUST_SCORE(-10); - if (gBattleMons[battlerDef].status2 & STATUS2_DESTINY_BOND) + if (gBattleMons[battlerAtk].volatiles.destinyBond) ADJUST_SCORE(-10); else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); break; case EFFECT_HEAL_BELL: - if (!AnyPartyMemberStatused(battlerAtk, IsSoundMove(move)) || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + if (!AnyPartyMemberStatused(battlerAtk, IsSoundMove(move)) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_ENDURE: @@ -2174,24 +2287,39 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_PROTECT: { bool32 decreased = FALSE; - switch (move) + enum ProtectMethod protectMethod = GetMoveProtectMethod(move); + switch (protectMethod) { - case MOVE_QUICK_GUARD: - case MOVE_WIDE_GUARD: - case MOVE_CRAFTY_SHIELD: - if (!isDoubleBattle) + case PROTECT_QUICK_GUARD: + if (GetMovePriority(predictedMove) <= 0) + { + ADJUST_SCORE(-10); + decreased = TRUE; + } + break; + case PROTECT_WIDE_GUARD: + if (!(GetBattlerMoveTargetType(battlerAtk, predictedMove) & (MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_BOTH))) + { + ADJUST_SCORE(-10); + decreased = TRUE; + } + break; + case PROTECT_CRAFTY_SHIELD: + if (!hasPartner) { ADJUST_SCORE(-10); decreased = TRUE; } break; - case MOVE_MAT_BLOCK: + case PROTECT_MAT_BLOCK: if (!gDisableStructs[battlerAtk].isFirstTurn) { ADJUST_SCORE(-10); decreased = TRUE; } break; + default: + break; } // move check if (decreased) @@ -2202,9 +2330,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; } - if (move != MOVE_QUICK_GUARD - && move != MOVE_WIDE_GUARD - && move != MOVE_CRAFTY_SHIELD) //These moves have infinite usage + if (protectMethod != PROTECT_QUICK_GUARD + && protectMethod != PROTECT_WIDE_GUARD + && protectMethod != PROTECT_CRAFTY_SHIELD) //These moves have infinite usage { if (GetBattlerSecondaryDamage(battlerAtk) >= gBattleMons[battlerAtk].hp && !(IsMoxieTypeAbility(aiData->abilities[battlerDef]))) @@ -2213,7 +2341,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } else if (gDisableStructs[battlerAtk].protectUses == 1 && Random() % 100 < 50) { - if (!isDoubleBattle) + if (isBattle1v1) ADJUST_SCORE(-6); else ADJUST_SCORE(-10); //Don't try double protecting in doubles @@ -2236,7 +2364,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_MIRACLE_EYE: - if (gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED) + if (gBattleMons[battlerDef].volatiles.miracleEye) ADJUST_SCORE(-10); if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4 @@ -2244,28 +2372,44 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-9); break; + case EFFECT_COURT_CHANGE: + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_BAD_COURT) + ADJUST_SCORE(BAD_EFFECT); + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_GOOD_COURT) + ADJUST_SCORE(BAD_EFFECT); + if (AreAnyHazardsOnSide(GetBattlerSide(battlerDef)) && CountUsablePartyMons(battlerAtk) != 0) + ADJUST_SCORE(WORST_EFFECT); + if (hasPartner) + { + if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards + && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) // partner is going to set up before the Court Change + { + ADJUST_SCORE(-10); + break; // Don't use Defog if partner is going to set up hazards + } + } + break; case EFFECT_DEFOG: - if (gSideStatuses[GetBattlerSide(battlerDef)] - & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST) - || gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY) + if (gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST) + || AreAnyHazardsOnSide(GetBattlerSide(battlerAtk))) { - if (PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + if (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) { ADJUST_SCORE(-10); //Only need one hazards removal break; } } - if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_HAZARDS_ANY) + if (AreAnyHazardsOnSide(GetBattlerSide(battlerDef))) { ADJUST_SCORE(-10); //Don't blow away opposing hazards break; } - if (isDoubleBattle) + if (hasPartner) { if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards - && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove)) // partner is going to set up before the potential Defog + && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // partner is going to set up before the potential Defog { ADJUST_SCORE(-10); break; // Don't use Defog if partner is going to set up hazards @@ -2274,7 +2418,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // evasion check if (gBattleMons[battlerDef].statStages[STAT_EVASION] == MIN_STAT_STAGE - || ((aiData->abilities[battlerDef] == ABILITY_CONTRARY) && !IS_TARGETING_PARTNER(battlerAtk, battlerDef))) // don't want to raise target stats unless its your partner + || ((aiData->abilities[battlerDef] == ABILITY_CONTRARY) && !IsTargetingPartner(battlerAtk, battlerDef))) // don't want to raise target stats unless its your partner ADJUST_SCORE(-10); break; case EFFECT_PSYCH_UP: // haze stats check @@ -2293,12 +2437,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE - && AI_IsSlower(battlerAtk, battlerDef, move) + && AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && GetMoveEffect(predictedMove) == EFFECT_SEMI_INVULNERABLE) ADJUST_SCORE(-10); // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you if (BattlerWillFaintFromWeather(battlerAtk, aiData->abilities[battlerAtk]) - && GetMoveTwoTurnAttackStatus(move) == STATUS3_ON_AIR) + && GetMoveTwoTurnAttackStatus(move) == STATE_ON_AIR) ADJUST_SCORE(-10); // Attacker will faint while in the air break; case EFFECT_HEALING_WISH: //healing wish, lunar dance @@ -2312,39 +2456,26 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_NATURE_POWER: - return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(battlerAtk), score); + predictedMove = GetNaturePowerMove(battlerAtk); + if (GetMoveEffect(predictedMove) != GetMoveEffect(move)) + return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(battlerAtk), score); + break; case EFFECT_TAUNT: if (gDisableStructs[battlerDef].tauntTimer > 0 || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_BESTOW: - if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_NONE - || !CanBattlerGetOrLoseItem(battlerAtk, gBattleMons[battlerAtk].item)) // AI knows its own item - ADJUST_SCORE(-10); - break; - case EFFECT_ROLE_PLAY: - if (aiData->abilities[battlerAtk] == aiData->abilities[battlerDef] - || aiData->abilities[battlerDef] == ABILITY_NONE - || gAbilitiesInfo[aiData->abilities[battlerAtk]].cantBeSuppressed - || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeCopied) - ADJUST_SCORE(-10); - else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5)) - ADJUST_SCORE(-4); - break; - case EFFECT_DOODLE: // Same as Role Play, but also check if the partner's ability should be replaced - if (aiData->abilities[battlerAtk] == aiData->abilities[battlerDef] - || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == aiData->abilities[battlerDef] - || aiData->abilities[battlerDef] == ABILITY_NONE - || gAbilitiesInfo[aiData->abilities[battlerAtk]].cantBeSuppressed - || gAbilitiesInfo[aiData->abilities[BATTLE_PARTNER(battlerAtk)]].cantBeSuppressed - || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeCopied) + if (gBattleMons[battlerAtk].item == ITEM_NONE + || aiData->items[battlerDef] != ITEM_NONE + || !CanBattlerGetOrLoseItem(battlerAtk, gBattleMons[battlerAtk].item) // AI knows its own item + || !CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerAtk].item) + || aiData->abilities[battlerAtk] == ABILITY_STICKY_HOLD + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)) ADJUST_SCORE(-10); - else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5) || IsAbilityOfRating(aiData->abilities[BATTLE_PARTNER(battlerAtk)], 5)) - ADJUST_SCORE(-4); break; case EFFECT_WISH: - if (gWishFutureKnock.wishCounter[battlerAtk] > gBattleTurnCounter) + if (gWishFutureKnock.wishCounter[battlerAtk] > 0) ADJUST_SCORE(-10); break; case EFFECT_ASSIST: @@ -2356,75 +2487,50 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_YAWN: - if (gStatuses3[battlerDef] & STATUS3_YAWN) + if (gBattleMons[battlerDef].volatiles.yawn) ADJUST_SCORE(-10); else if (!AI_CanPutToSleep(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) ADJUST_SCORE(-10); if (PartnerMoveActivatesSleepClause(aiData->partnerMove)) ADJUST_SCORE(-20); break; - case EFFECT_SKILL_SWAP: - if (aiData->abilities[battlerAtk] == ABILITY_NONE || aiData->abilities[battlerDef] == ABILITY_NONE - || gAbilitiesInfo[aiData->abilities[battlerAtk]].cantBeSwapped - || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeSwapped - || aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) - ADJUST_SCORE(-10); - else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) - ADJUST_SCORE(-10); - break; - case EFFECT_WORRY_SEED: - if (aiData->abilities[battlerDef] == ABILITY_INSOMNIA - || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeOverwritten - || aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) - ADJUST_SCORE(-10); - break; - case EFFECT_GASTRO_ACID: - if (gStatuses3[battlerDef] & STATUS3_GASTRO_ACID - || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeSuppressed) - ADJUST_SCORE(-10); - break; + case EFFECT_DOODLE: case EFFECT_ENTRAINMENT: - if (aiData->abilities[battlerAtk] == ABILITY_NONE - || gAbilitiesInfo[aiData->abilities[battlerAtk]].cantBeCopied - || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeOverwritten - || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD) - ADJUST_SCORE(-10); - else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) - ADJUST_SCORE(-10); - break; - case EFFECT_SIMPLE_BEAM: - if (aiData->abilities[battlerDef] == ABILITY_SIMPLE - || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeOverwritten - || aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) - ADJUST_SCORE(-10); + case EFFECT_GASTRO_ACID: + case EFFECT_ROLE_PLAY: + case EFFECT_SKILL_SWAP: + case EFFECT_OVERWRITE_ABILITY: + if (!CanEffectChangeAbility(battlerAtk, battlerDef, move, aiData) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) + ADJUST_AND_RETURN_SCORE(NO_DAMAGE_OR_FAILS); break; case EFFECT_SNATCH: if (!HasMoveWithFlag(battlerDef, MoveCanBeSnatched) - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_POWER_TRICK: - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].defense >= gBattleMons[battlerAtk].attack && !HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL)) ADJUST_SCORE(-10); break; case EFFECT_POWER_SWAP: // Don't use if attacker's stat stages are higher than opponents - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].statStages[STAT_ATK] >= gBattleMons[battlerDef].statStages[STAT_ATK] && gBattleMons[battlerAtk].statStages[STAT_SPATK] >= gBattleMons[battlerDef].statStages[STAT_SPATK]) ADJUST_SCORE(-10); break; case EFFECT_GUARD_SWAP: // Don't use if attacker's stat stages are higher than opponents - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].statStages[STAT_DEF] >= gBattleMons[battlerDef].statStages[STAT_DEF] && gBattleMons[battlerAtk].statStages[STAT_SPDEF] >= gBattleMons[battlerDef].statStages[STAT_SPDEF]) ADJUST_SCORE(-10); break; case EFFECT_SPEED_SWAP: - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) { ADJUST_SCORE(-10); } @@ -2437,7 +2543,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_HEART_SWAP: - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) { ADJUST_SCORE(-10); } @@ -2454,11 +2560,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_POWER_SPLIT: - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) - { - ADJUST_SCORE(-10); - } - else + if (!IsTargetingPartner(battlerAtk, battlerDef)) { u32 atkAttack = gBattleMons[battlerAtk].attack; u32 defAttack = gBattleMons[battlerDef].attack; @@ -2471,11 +2573,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_GUARD_SPLIT: - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) - { - ADJUST_SCORE(-10); - } - else + if (!IsTargetingPartner(battlerAtk, battlerDef)) { u32 atkDefense = gBattleMons[battlerAtk].defense; u32 defDefense = gBattleMons[battlerDef].defense; @@ -2490,9 +2588,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_ME_FIRST: if (predictedMove != MOVE_NONE) { - if (AI_IsSlower(battlerAtk, battlerDef, move)) + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(-10); // Target is predicted to go first, Me First will fail - else + else if (GetMoveEffect(predictedMove) != GetMoveEffect(move)) return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); } else @@ -2501,33 +2599,42 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_NATURAL_GIFT: - if (!IsBattlerItemEnabled(battlerAtk) || GetPocketByItemId(gBattleMons[battlerAtk].item) != POCKET_BERRIES) + if (!IsBattlerItemEnabled(battlerAtk) || GetItemPocket(gBattleMons[battlerAtk].item) != POCKET_BERRIES) ADJUST_SCORE(-10); break; case EFFECT_GRASSY_TERRAIN: - if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) || gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-10); break; case EFFECT_ELECTRIC_TERRAIN: - if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) || gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-10); break; case EFFECT_PSYCHIC_TERRAIN: - if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) || gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-10); break; case EFFECT_MISTY_TERRAIN: - if (PartnerMoveEffectIsTerrain(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) || gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) + ADJUST_SCORE(-10); + break; + case EFFECT_STEEL_ROLLER: + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + || (HasPartner(battlerAtk) && AreMovesEquivalent(battlerAtk, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))) ADJUST_SCORE(-10); break; case EFFECT_PLEDGE: - if (isDoubleBattle && gBattleMons[BATTLE_PARTNER(battlerAtk)].hp > 0) + if (hasPartner && gBattleMons[BATTLE_PARTNER(battlerAtk)].hp > 0) { if (aiData->partnerMove != MOVE_NONE && GetMoveEffect(aiData->partnerMove) == EFFECT_PLEDGE && move != aiData->partnerMove) // Different pledge moves { - if (gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) + if (gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_INCAPACITATED) // && gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 != 1) // Will wake up this turn - how would AI know ADJUST_SCORE(-10); // Don't use combo move if your partner will cause failure } @@ -2536,20 +2643,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_TRICK_ROOM: if (PartnerMoveEffectIs(BATTLE_PARTNER(battlerAtk), aiData->partnerMove, EFFECT_TRICK_ROOM)) { - ADJUST_SCORE(-10); + // This only happens if the ally already rolled on double trick room on final turn. + // Both Pokemon use Trick Room on the final turn of Trick Room to anticipate both opponents Protecting to stall out. + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer == 1) + ADJUST_SCORE(PERFECT_EFFECT); + else + ADJUST_SCORE(-10); } else if (!(gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_POWERFUL_STATUS)) { - if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM) // Trick Room Up - { - if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) // Attacker side slower than target side - ADJUST_SCORE(-10); // Keep the Trick Room up - } - else - { - if (GetBattlerSideSpeedAverage(battlerAtk) >= GetBattlerSideSpeedAverage(battlerDef)) // Attacker side faster than target side - ADJUST_SCORE(-10); // Keep the Trick Room down - } + // Don't set a trick room you don't benefit from. + if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && !ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM)) + ADJUST_SCORE(-10); + // Don't unset a trick room that doesn't harm you unless it's about to expire. + else if ((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && gFieldTimers.trickRoomTimer > 1 && !ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM)) + ADJUST_SCORE(-10); } break; case EFFECT_MAGIC_ROOM: @@ -2598,7 +2706,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_EMBARGO: if (!IsBattlerItemEnabled(battlerAtk) - || gStatuses3[battlerDef] & STATUS3_EMBARGO + || gBattleMons[battlerDef].volatiles.embargo || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; @@ -2608,25 +2716,28 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_TELEKINESIS: - if (gStatuses3[battlerDef] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) - || gFieldStatuses & STATUS_FIELD_GRAVITY - || aiData->holdEffects[battlerDef] == HOLD_EFFECT_IRON_BALL - || IsTelekinesisBannedSpecies(gBattleMons[battlerDef].species) - || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) + if (gBattleMons[battlerDef].volatiles.telekinesis + || gBattleMons[battlerDef].volatiles.root + || gBattleMons[battlerDef].volatiles.smackDown + || gFieldStatuses & STATUS_FIELD_GRAVITY + || aiData->holdEffects[battlerDef] == HOLD_EFFECT_IRON_BALL + || IsTelekinesisBannedSpecies(gBattleMons[battlerDef].species) + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_HEAL_BLOCK: - if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK + if (gBattleMons[battlerDef].volatiles.healBlock || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_SOAK: { - u32 types[3]; + enum Type types[3]; + u32 typeArg = GetMoveArgType(move); + GetBattlerTypes(battlerDef, FALSE, types); - // TODO: Use the type of the move like 'VARIOUS_TRY_SOAK'? if (PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) - || (types[0] == TYPE_WATER && types[1] == TYPE_WATER && types[2] == TYPE_MYSTERY)) + || (types[0] == typeArg && types[1] == typeArg && types[2] == TYPE_MYSTERY)) ADJUST_SCORE(-10); // target is already water-only break; } @@ -2635,16 +2746,16 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_HEAL_PULSE: // and floral healing - if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef)) // Don't heal enemies + if (!IsTargetingPartner(battlerAtk, battlerDef)) // Don't heal enemies { ADJUST_SCORE(-10); break; } // fallthrough case EFFECT_HIT_ENEMY_HEAL_ALLY: // pollen puff - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) { - if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battlerDef].volatiles.healBlock) return 0; // cannot even select if (AI_BattlerAtMaxHp(battlerDef)) ADJUST_SCORE(-10); @@ -2653,13 +2764,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_ELECTRIFY: - if (AI_IsSlower(battlerAtk, battlerDef, move) + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_TOPSY_TURVY: - if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (!IsTargetingPartner(battlerAtk, battlerDef)) { u32 targetPositiveStages = CountPositiveStatStages(battlerDef); u32 targetNegativeStages = CountNegativeStatStages(battlerDef); @@ -2680,31 +2791,33 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_HOLD_HANDS: case EFFECT_CELEBRATE: case EFFECT_HAPPY_HOUR: + if (IsConsideringZMove(battlerAtk, battlerDef, move)) + break; ADJUST_SCORE(-10); break; case EFFECT_INSTRUCT: { - u16 instructedMove; - if (AI_IsSlower(battlerAtk, battlerDef, move)) + u32 instructedMove; + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) instructedMove = predictedMove; else - instructedMove = gLastMoves[battlerDef]; + instructedMove = aiData->lastUsedMove[battlerDef]; if (instructedMove == MOVE_NONE || IsMoveInstructBanned(instructedMove) || MoveHasAdditionalEffectSelf(instructedMove, MOVE_EFFECT_RECHARGE) || IsZMove(instructedMove) - || (gLockedMoves[battlerDef] != 0 && gLockedMoves[battlerDef] != 0xFFFF) - || gBattleMons[battlerDef].status2 & STATUS2_MULTIPLETURNS + || (gLockedMoves[battlerDef] != MOVE_NONE && gLockedMoves[battlerDef] != MOVE_UNAVAILABLE) + || gBattleMons[battlerDef].volatiles.multipleTurns || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { ADJUST_SCORE(-10); } else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) ADJUST_SCORE(-10); - else if (isDoubleBattle) + else if (hasPartner) { - if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (!IsTargetingPartner(battlerAtk, battlerDef)) ADJUST_SCORE(-10); } else @@ -2715,37 +2828,34 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) | MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD) - && instructedMove != MOVE_MIND_BLOWN && instructedMove != MOVE_STEEL_BEAM) + && GetMoveEffect(instructedMove) != EFFECT_MAX_HP_50_RECOIL) ADJUST_SCORE(-10); //Don't force the enemy to attack you again unless it can kill itself with Mind Blown - else if (instructedMove != MOVE_MIND_BLOWN) - ADJUST_SCORE(-5); //Do something better } } break; case EFFECT_QUASH: - if (!isDoubleBattle - || AI_IsSlower(battlerAtk, battlerDef, move) + if (!hasPartner + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_AFTER_YOU: - if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef) - || !isDoubleBattle - || AI_IsSlower(battlerAtk, battlerDef, move) + if (!IsTargetingPartner(battlerAtk, battlerDef) + || !hasPartner + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_SUCKER_PUNCH: - if (predictedMove != MOVE_NONE) - { - if (IsBattleMoveStatus(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move)) // Opponent going first - ADJUST_SCORE(-10); - } + if ((HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_STATUS) && RandomPercentage(RNG_AI_SUCKER_PUNCH, SUCKER_PUNCH_CHANCE)) // Player has a status move + || (IsBattleMoveStatus(predictedMove) && RandomPercentage(RNG_AI_SUCKER_PUNCH, SUCKER_PUNCH_PREDICTION_CHANCE) && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_PREDICT_MOVE)) // AI actively predicting incoming status move + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Opponent going first + ADJUST_SCORE(-10); break; case EFFECT_TAILWIND: if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_TAILWIND || PartnerMoveEffectIs(BATTLE_PARTNER(battlerAtk), aiData->partnerMove, EFFECT_TAILWIND) - || gFieldStatuses & STATUS_FIELD_TRICK_ROOM) + || (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer == 1)) ADJUST_SCORE(-10); break; case EFFECT_LUCKY_CHANT: @@ -2755,10 +2865,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_MAGNET_RISE: if (gFieldStatuses & STATUS_FIELD_GRAVITY - || gDisableStructs[battlerAtk].magnetRiseTimer != 0 + || gDisableStructs[battlerAtk].magnetRiseTimer > 0 || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_IRON_BALL - || gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_MAGNET_RISE | STATUS3_SMACKED_DOWN) - || !IsBattlerGrounded(battlerAtk)) + || gBattleMons[battlerAtk].volatiles.smackDown + || gBattleMons[battlerAtk].volatiles.root + || gBattleMons[battlerAtk].volatiles.magnetRise + || !AI_IsBattlerGrounded(battlerAtk)) ADJUST_SCORE(-10); break; case EFFECT_CAMOUFLAGE: @@ -2774,7 +2886,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_FLAIL: - if (AI_IsSlower(battlerAtk, battlerDef, move) // Opponent should go first + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) // Opponent should go first || aiData->hpPercents[battlerAtk] > 50) ADJUST_SCORE(-4); break; @@ -2791,34 +2903,39 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || GetBattlerWeight(battlerDef) >= 2000) //200.0 kg ADJUST_SCORE(-10); break; - /*case EFFECT_NO_RETREAT: - if (TrappedByNoRetreat(battlerAtk)) + case EFFECT_NO_RETREAT: + if (gBattleMons[battlerAtk].volatiles.noRetreat) ADJUST_SCORE(-10); break; case EFFECT_EXTREME_EVOBOOST: - if (MainStatsMaxed(battlerAtk)) + if (AreBattlersStatsMaxed(battlerAtk)) ADJUST_SCORE(-10); break; case EFFECT_CLANGOROUS_SOUL: if (gBattleMons[battlerAtk].hp <= gBattleMons[battlerAtk].maxHP / 3) ADJUST_SCORE(-10); - break;*/ + break; case EFFECT_REVIVAL_BLESSING: if (GetFirstFaintedPartyIndex(battlerAtk) == PARTY_SIZE) ADJUST_SCORE(-10); else if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) ADJUST_SCORE(-10); else if (CanTargetFaintAi(battlerDef, battlerAtk) - && AI_IsSlower(battlerAtk, battlerDef, move)) + && AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(-10); break; case EFFECT_JUNGLE_HEALING: - if (AI_BattlerAtMaxHp(battlerAtk) - && AI_BattlerAtMaxHp(BATTLE_PARTNER(battlerAtk)) - && !(gBattleMons[battlerAtk].status1 & STATUS1_ANY) - && !(gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY)) + { + bool32 canCureSelf = (gBattleMons[battlerAtk].status1 & STATUS1_ANY) && ShouldCureStatus(battlerAtk, battlerAtk, aiData); + bool32 canCurePartner = (gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY) && ShouldCureStatus(battlerAtk, BATTLE_PARTNER(battlerAtk), aiData); + + if (AI_BattlerAtMaxHp(battlerAtk) + && AI_BattlerAtMaxHp(BATTLE_PARTNER(battlerAtk)) + && !canCureSelf + && !canCurePartner) ADJUST_SCORE(-10); break; + } case EFFECT_TAKE_HEART: if ((!(gBattleMons[battlerAtk].status1 & STATUS1_ANY) || PartnerMoveEffectIs(BATTLE_PARTNER(battlerAtk), aiData->partnerMove, EFFECT_JUNGLE_HEALING) @@ -2840,12 +2957,24 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 defPrio = GetBattleMovePriority(battlerDef, aiData->abilities[battlerDef], predictedMove); if (predictedMove == MOVE_NONE || IsBattleMoveStatus(predictedMove) - || AI_IsSlower(battlerAtk, battlerDef, move) + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) || defPrio < 1 || defPrio > 3) // Opponent going first or not using priority move ADJUST_SCORE(-10); } break; + case EFFECT_TEATIME: + if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) + ADJUST_SCORE(-10); + break; + case EFFECT_DARK_VOID: + if (B_DARK_VOID_FAIL >= GEN_7 && gBattleMons[battlerAtk].species != SPECIES_DARKRAI) + ADJUST_SCORE(-10); + break; + case EFFECT_HYPERSPACE_FURY: + if (gBattleMons[battlerAtk].species != SPECIES_HOOPA_UNBOUND) + ADJUST_SCORE(-10); + break; case EFFECT_PLACEHOLDER: return 0; // cannot even select } // move effect checks @@ -2881,18 +3010,18 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } // Choice items - if (HOLD_EFFECT_CHOICE(aiData->holdEffects[battlerAtk]) && IsBattlerItemEnabled(battlerAtk)) + if (IsHoldEffectChoice(aiData->holdEffects[battlerAtk]) && IsBattlerItemEnabled(battlerAtk)) { // Don't use user-target moves ie. Swords Dance, with exceptions if ((moveTarget & MOVE_TARGET_USER) && moveEffect != EFFECT_DESTINY_BOND && moveEffect != EFFECT_WISH && moveEffect != EFFECT_HEALING_WISH - && !(moveEffect == EFFECT_AURORA_VEIL && (AI_GetWeather() & (B_WEATHER_SNOW | B_WEATHER_HAIL)))) + && !(moveEffect == EFFECT_AURORA_VEIL && (AI_GetWeather() & B_WEATHER_ICY_ANY))) ADJUST_SCORE(-30); // Don't use a status move if the mon is the last one in the party, has no good switchin, or is trapped else if (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_STATUS && (CountUsablePartyMons(battlerAtk) < 1 || gAiLogicData->mostSuitableMonId[battlerAtk] == PARTY_SIZE - || (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk)))) + || IsBattlerTrapped(battlerDef, battlerAtk))) ADJUST_SCORE(-30); } @@ -2902,30 +3031,47 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return score; } +static s32 AI_GetWhichBattlerFasterOrTies(u32 battlerAtk, u32 battlerDef, bool32 ignoreChosenMoves) +{ + struct BattleContext ctx = {0}; + ctx.battlerAtk = battlerAtk; + ctx.battlerDef = battlerDef; + ctx.abilities[battlerAtk] = gAiLogicData->abilities[battlerAtk]; + ctx.abilities[battlerDef] = gAiLogicData->abilities[battlerDef]; + ctx.holdEffects[battlerAtk] = gAiLogicData->holdEffects[battlerAtk]; + ctx.holdEffects[battlerDef] = gAiLogicData->holdEffects[battlerDef]; + + return GetWhichBattlerFasterOrTies(&ctx, ignoreChosenMoves); +} + static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 movesetIndex = gAiThinkingStruct->movesetIndex; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) return score; if (IsBattleMoveStatus(move)) return score; // status moves aren't accounted here - if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, AI_ATTACKING) && GetMoveEffect(move) != EFFECT_EXPLOSION) + enum BattleMoveEffects effect = GetMoveEffect(move); + if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, AI_ATTACKING) + && effect != EFFECT_EXPLOSION && effect != EFFECT_MISTY_EXPLOSION) { - if (CanIndexMoveGuaranteeFaintTarget(battlerAtk, battlerDef, movesetIndex)) - ADJUST_SCORE(1); // Bonus point if the KO is guaranteed - if (AI_IsFaster(battlerAtk, battlerDef, move)) + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(FAST_KILL); else ADJUST_SCORE(SLOW_KILL); } else if (CanTargetFaintAi(battlerDef, battlerAtk) - && GetWhichBattlerFasterOrTies(battlerAtk, battlerDef, TRUE) != AI_IS_FASTER + && AI_GetWhichBattlerFasterOrTies(battlerAtk, battlerDef, TRUE) != AI_IS_FASTER && GetBattleMovePriority(battlerAtk, gAiLogicData->abilities[battlerAtk], move) > 0) { - ADJUST_SCORE(LAST_CHANCE); + if (RandomPercentage(RNG_AI_PRIORITIZE_LAST_CHANCE, PRIORITIZE_LAST_CHANCE_CHANCE)) + ADJUST_SCORE(SLOW_KILL + 2); // Don't outscore Fast Kill (which gets a bonus point in AI_CompareDamagingMoves), but do outscore Slow Kill getting the same + else + ADJUST_SCORE(LAST_CHANCE); } return score; @@ -2935,7 +3081,7 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // move data - u32 moveType = GetMoveType(move); + enum Type moveType = GetMoveType(move); enum BattleMoveEffects effect = GetMoveEffect(move); u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); // ally data @@ -2945,22 +3091,28 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 atkPartnerHoldEffect = aiData->holdEffects[BATTLE_PARTNER(battlerAtk)]; enum BattleMoveEffects partnerEffect = GetMoveEffect(aiData->partnerMove); bool32 partnerProtecting = IsAllyProtectingFromMove(battlerAtk, move, aiData->partnerMove) && !MoveIgnoresProtect(move); - bool32 attackerHasBadAbility = (gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating < 0); bool32 partnerHasBadAbility = (gAbilitiesInfo[atkPartnerAbility].aiRating < 0); u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); SetTypeBeforeUsingMove(move, battlerAtk); moveType = GetBattleMoveType(move); + bool32 hasTwoOpponents = HasTwoOpponents(battlerAtk); + bool32 hasPartner = HasPartner(battlerAtk); u32 friendlyFireThreshold = GetFriendlyFireKOThreshold(battlerAtk); u32 noOfHitsToKOPartner = GetNoOfHitsToKOBattler(battlerAtk, battlerAtkPartner, gAiThinkingStruct->movesetIndex, AI_ATTACKING); - bool32 wouldPartnerFaint = CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, gAiThinkingStruct->movesetIndex, AI_ATTACKING) - && !partnerProtecting && IsBattlerAlive(battlerAtkPartner); + bool32 wouldPartnerFaint = hasPartner && CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, gAiThinkingStruct->movesetIndex, AI_ATTACKING) + && !partnerProtecting; bool32 isFriendlyFireOK = !wouldPartnerFaint && (noOfHitsToKOPartner == 0 || noOfHitsToKOPartner > friendlyFireThreshold); // check what effect partner is using - if (aiData->partnerMove != 0) + if (aiData->partnerMove != 0 && hasPartner) { + // This catches weather, terrain, screens, etc + if (AreMovesEquivalent(battlerAtk, battlerAtkPartner, move, aiData->partnerMove)) + ADJUST_SCORE(-10); + switch (partnerEffect) { case EFFECT_HELPING_HAND: @@ -2968,21 +3120,19 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-7); break; case EFFECT_PERISH_SONG: - if (!(gBattleMons[battlerDef].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED))) + if (!(gBattleMons[battlerDef].volatiles.escapePrevention || gBattleMons[battlerDef].volatiles.wrapped)) { if (IsTrappingMove(aiData->partnerMove) || predictedMove == MOVE_INGRAIN) ADJUST_SCORE(WEAK_EFFECT); } break; - // Don't change weather if ally already decided to do so. - case EFFECT_SUNNY_DAY: - case EFFECT_HAIL: - case EFFECT_SNOWSCAPE: - case EFFECT_RAIN_DANCE: - case EFFECT_SANDSTORM: - case EFFECT_CHILLY_RECEPTION: - if (IsMoveEffectWeather(move)) - ADJUST_SCORE(-10); + case EFFECT_AFTER_YOU: + if (effect == EFFECT_TRICK_ROOM && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case EFFECT_TRICK_ROOM: + if (effect == EFFECT_AFTER_YOU && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM)) + ADJUST_SCORE(DECENT_EFFECT); break; default: break; @@ -2992,7 +3142,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // Adjust for always crit moves if (MoveAlwaysCrits(aiData->partnerMove) && aiData->abilities[battlerAtk] == ABILITY_ANGER_POINT) { - if (AI_IsSlower(battlerAtk, battlerAtkPartner, move)) // Partner moving first + if (AI_IsSlower(battlerAtk, battlerAtkPartner, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Partner moving first { // discourage raising our attack since it's about to be maxed out if (IsAttackBoostMoveEffect(effect)) @@ -3007,23 +3157,71 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (effect) { case EFFECT_HELPING_HAND: - if (!IsBattlerAlive(battlerAtkPartner) || !HasDamagingMove(battlerAtkPartner)) - ADJUST_SCORE(-20); + if (!hasPartner + || !HasDamagingMove(battlerAtkPartner) + || aiData->abilities[battlerAtkPartner] == ABILITY_GOOD_AS_GOLD + || (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove))) + { + ADJUST_SCORE(WORST_EFFECT); + } + else + { + u32 ownHitsToKOFoe1 = GetBestNoOfHitsToKO(battlerAtk, LEFT_FOE(battlerAtk), AI_ATTACKING); + u32 partnerHitsToKOFoe1 = GetBestNoOfHitsToKO(battlerAtkPartner, LEFT_FOE(battlerAtk), AI_ATTACKING); + u32 ownHitsToKOFoe2 = GetBestNoOfHitsToKO(battlerAtk, RIGHT_FOE(battlerAtk), AI_ATTACKING); + u32 partnerHitsToKOFoe2 = GetBestNoOfHitsToKO(battlerAtkPartner, RIGHT_FOE(battlerAtk), AI_ATTACKING); + + if (hasTwoOpponents) + { + // Might be about to die + if (CanTargetFaintAi(LEFT_FOE(battlerAtk), battlerAtk) && CanTargetFaintAi(RIGHT_FOE(battlerAtk), battlerAtk) + && AI_IsSlower(battlerAtk, LEFT_FOE(battlerAtk), move, predictedMove, DONT_CONSIDER_PRIORITY) + && AI_IsSlower(battlerAtk, RIGHT_FOE(battlerAtk), move, predictedMove, DONT_CONSIDER_PRIORITY)) + ADJUST_SCORE(GOOD_EFFECT); + + if (ownHitsToKOFoe1 > partnerHitsToKOFoe1 && partnerHitsToKOFoe1 > 1 + && ownHitsToKOFoe2 > partnerHitsToKOFoe2 && partnerHitsToKOFoe2 > 1) + ADJUST_SCORE(GOOD_EFFECT); + } + else if (IsBattlerAlive(LEFT_FOE(battlerAtk))) + { + // Might be about to die + if (CanTargetFaintAi(LEFT_FOE(battlerAtk), battlerAtk) + && AI_IsSlower(battlerAtk, LEFT_FOE(battlerAtk), move, predictedMove, DONT_CONSIDER_PRIORITY)) + ADJUST_SCORE(GOOD_EFFECT); + + if (ownHitsToKOFoe1 > partnerHitsToKOFoe1 && partnerHitsToKOFoe1 > 1) + ADJUST_SCORE(GOOD_EFFECT); + } + else if (IsBattlerAlive(RIGHT_FOE(battlerAtk))) + { + // Might be about to die + if (CanTargetFaintAi(RIGHT_FOE(battlerAtk), battlerAtk) + && AI_IsSlower(battlerAtk, RIGHT_FOE(battlerAtk), move, predictedMove, DONT_CONSIDER_PRIORITY)) + ADJUST_SCORE(GOOD_EFFECT); + + if (ownHitsToKOFoe2 > partnerHitsToKOFoe2 && partnerHitsToKOFoe2 > 1) + ADJUST_SCORE(GOOD_EFFECT); + + } + } break; case EFFECT_PERISH_SONG: if (aiData->partnerMove != 0 && HasTrappingMoveEffect(battlerAtkPartner)) ADJUST_SCORE(WEAK_EFFECT); break; case EFFECT_MAGNET_RISE: - if (IsBattlerGrounded(battlerAtk) - && (HasMove(battlerAtkPartner, MOVE_EARTHQUAKE) || HasMove(battlerAtkPartner, MOVE_MAGNITUDE)) + if (AI_IsBattlerGrounded(battlerAtk) + && (HasMoveWithEffect(battlerAtkPartner, EFFECT_EARTHQUAKE) || HasMoveWithEffect(battlerAtkPartner, EFFECT_MAGNITUDE)) && (AI_GetMoveEffectiveness(MOVE_EARTHQUAKE, battlerAtk, battlerAtkPartner) != UQ_4_12(0.0))) // Doesn't resist ground move { RETURN_SCORE_PLUS(DECENT_EFFECT); // partner has earthquake or magnitude -> good idea to use magnet rise } break; case EFFECT_DRAGON_CHEER: - if (gBattleMons[battlerAtkPartner].status2 & STATUS2_FOCUS_ENERGY_ANY || !HasDamagingMove(battlerAtkPartner)) + if (gBattleMons[battlerAtkPartner].volatiles.dragonCheer + || gBattleMons[battlerAtkPartner].volatiles.focusEnergy + || !HasDamagingMove(battlerAtkPartner)) ADJUST_SCORE(-5); else if (atkPartnerHoldEffect == HOLD_EFFECT_SCOPE_LENS || IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_DRAGON) @@ -3031,6 +3229,20 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || HasMoveWithCriticalHitChance(battlerAtkPartner)) ADJUST_SCORE(GOOD_EFFECT); break; + case EFFECT_COACHING: + if (!hasPartner + || !HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)) + { + ADJUST_SCORE(WORST_EFFECT); + } + else + { + ADJUST_SCORE(IncreaseStatUpScore(battlerAtkPartner, BATTLE_OPPOSITE(battlerAtk), STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtkPartner, BATTLE_OPPOSITE(battlerAtk), STAT_CHANGE_DEF)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtkPartner, BATTLE_OPPOSITE(battlerAtkPartner), STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtkPartner, BATTLE_OPPOSITE(battlerAtkPartner), STAT_CHANGE_DEF)); + } + break; default: break; } // our effect relative to partner @@ -3038,38 +3250,20 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // consider global move effects switch (effect) { - case EFFECT_SANDSTORM: - if (ShouldSetSandstorm(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) - { - RETURN_SCORE_PLUS(WEAK_EFFECT); // our partner benefits from sandstorm - } - break; - case EFFECT_RAIN_DANCE: - if (ShouldSetRain(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) - { - RETURN_SCORE_PLUS(WEAK_EFFECT); // our partner benefits from rain - } - break; - case EFFECT_SUNNY_DAY: - if (ShouldSetSun(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) - { - RETURN_SCORE_PLUS(WEAK_EFFECT); // our partner benefits from sun - } - break; - case EFFECT_HAIL: - if (IsBattlerAlive(battlerAtkPartner) - && ShouldSetHail(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) - { - RETURN_SCORE_PLUS(DECENT_EFFECT); // our partner benefits from hail - } + // Both Pokemon use Trick Room on the final turn of Trick Room to anticipate both opponents Protecting to stall out. + // This unsets Trick Room and resets it with a full timer. + case EFFECT_TRICK_ROOM: + if (hasPartner && gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer == 1 + && ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM) + && HasMoveWithEffect(battlerAtkPartner, EFFECT_TRICK_ROOM) + && RandomPercentage(RNG_AI_REFRESH_TRICK_ROOM_ON_LAST_TURN, DOUBLE_TRICK_ROOM_ON_LAST_TURN_CHANCE)) + ADJUST_SCORE(PERFECT_EFFECT); break; - case EFFECT_SNOWSCAPE: - case EFFECT_CHILLY_RECEPTION: - if (IsBattlerAlive(battlerAtkPartner) - && ShouldSetSnow(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) - { - RETURN_SCORE_PLUS(DECENT_EFFECT); // our partner benefits from snow - } + case EFFECT_TAILWIND: + // Anticipate both opponents protecting to stall out Trick Room, and apply Tailwind. + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer == 1 + && RandomPercentage(RNG_AI_APPLY_TAILWIND_ON_LAST_TURN_OF_TRICK_ROOM, TAILWIND_IN_TRICK_ROOM_CHANCE)) + ADJUST_SCORE(BEST_EFFECT); break; default: break; @@ -3088,6 +3282,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (effect) { case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: if (gAiThinkingStruct->aiFlags[battlerAtk] & (AI_FLAG_RISKY | AI_FLAG_WILL_SUICIDE)) { RETURN_SCORE_PLUS(10); @@ -3134,7 +3329,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } else { - ADJUST_SCORE(-DECENT_EFFECT); + ADJUST_SCORE(AWFUL_EFFECT); } } // No reason to kill partner has been found. @@ -3163,7 +3358,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } // check specific target - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) { bool32 isMoveAffectedByPartnerAbility = TRUE; @@ -3180,7 +3375,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_ANGER_POINT: if (MoveAlwaysCrits(move) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) - && AI_IsFaster(battlerAtk, battlerAtkPartner, move) + && AI_IsFaster(battlerAtk, battlerAtkPartner, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && isFriendlyFireOK) { if (MoveAlwaysCrits(move)) @@ -3203,7 +3398,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_VOLT_ABSORB: if (moveType == TYPE_ELECTRIC) { - if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5 && atkPartnerAbility == ABILITY_LIGHTNING_ROD) + if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) < GEN_5 && atkPartnerAbility == ABILITY_LIGHTNING_ROD) { RETURN_SCORE_MINUS(10); } @@ -3212,7 +3407,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { ADJUST_SCORE(DECENT_EFFECT); } - else if (ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + else if (ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3249,7 +3444,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_STORM_DRAIN: if (moveType == TYPE_WATER) { - if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5 && atkPartnerAbility == ABILITY_STORM_DRAIN) + if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) < GEN_5 && atkPartnerAbility == ABILITY_STORM_DRAIN) { RETURN_SCORE_MINUS(10); } @@ -3258,7 +3453,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { ADJUST_SCORE(DECENT_EFFECT); } - else if (ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + else if (ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3274,7 +3469,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case ABILITY_WATER_COMPACTION: if (moveType == TYPE_WATER && isFriendlyFireOK - && ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + && ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { if (moveTarget == MOVE_TARGET_FOES_AND_ALLY) { @@ -3293,7 +3488,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case ABILITY_STEAM_ENGINE: if (isFriendlyFireOK && (moveType == TYPE_WATER || moveType == TYPE_FIRE) - && ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + && ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { if (moveTarget == MOVE_TARGET_FOES_AND_ALLY) { @@ -3309,7 +3504,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_THERMAL_EXCHANGE: if (moveType == TYPE_FIRE && isFriendlyFireOK && !IsBattleMoveStatus(move) - && ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + && ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { if (moveTarget == MOVE_TARGET_FOES_AND_ALLY) { @@ -3336,7 +3531,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { ADJUST_SCORE(DECENT_EFFECT); } - if (ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + if (ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3354,7 +3549,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(DECENT_EFFECT); } - if (ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + if (ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3367,7 +3562,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_JUSTIFIED: if (moveType == TYPE_DARK && isFriendlyFireOK && !IsBattleMoveStatus(move) - && ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + && ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { if (moveTarget == MOVE_TARGET_FOES_AND_ALLY) { @@ -3389,7 +3584,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_RATTLED: if (!IsBattleMoveStatus(move) && isFriendlyFireOK && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG) - && ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + && ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { if (moveTarget == MOVE_TARGET_FOES_AND_ALLY) { @@ -3405,7 +3600,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_CONTRARY: case ABILITY_DEFIANT: case ABILITY_COMPETITIVE: - if (IsStatLoweringEffect(effect) && isFriendlyFireOK && ShouldTriggerAbility(battlerAtkPartner, atkPartnerAbility)) + if (IsStatLoweringEffect(effect) && isFriendlyFireOK && ShouldTriggerAbility(battlerAtk, battlerAtkPartner, atkPartnerAbility)) { if (moveTarget == MOVE_TARGET_FOES_AND_ALLY) { @@ -3431,6 +3626,14 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (effect) { + case EFFECT_DOODLE: + case EFFECT_ENTRAINMENT: + case EFFECT_GASTRO_ACID: + case EFFECT_ROLE_PLAY: + case EFFECT_SKILL_SWAP: + case EFFECT_OVERWRITE_ABILITY: + AbilityChangeScore(battlerAtk, battlerAtkPartner, move, &score, aiData); + return score; case EFFECT_SPICY_EXTRACT: if (AI_ShouldSpicyExtract(battlerAtk, battlerAtkPartner, move, aiData)) { @@ -3440,7 +3643,19 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_PURIFY: if (gBattleMons[battlerAtkPartner].status1 & STATUS1_ANY) { - RETURN_SCORE_PLUS(WEAK_EFFECT); + if (gBattleMons[battlerAtkPartner].status1 & STATUS1_CAN_MOVE) + { + if (ShouldCureStatus(battlerAtk, battlerAtkPartner, aiData)) + ADJUST_SCORE(DECENT_EFFECT); + } + else + { + ADJUST_SCORE(DECENT_EFFECT); + } + + if ((!IsBattlerAlive(LEFT_FOE(battlerAtk)) || ShouldRecover(battlerAtk, LEFT_FOE(battlerAtk), move, 50)) + && (!IsBattlerAlive(RIGHT_FOE(battlerAtk)) || ShouldRecover(battlerAtk, RIGHT_FOE(battlerAtk), move, 50))) + RETURN_SCORE_PLUS(WEAK_EFFECT); } break; case EFFECT_SWAGGER: @@ -3479,51 +3694,6 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_PLUS(WEAK_EFFECT); } break; - case EFFECT_SKILL_SWAP: - if (aiData->abilities[battlerAtk] != aiData->abilities[BATTLE_PARTNER(battlerAtk)] && !attackerHasBadAbility) - { - // Partner abilities - if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_TRUANT) - { - ADJUST_SCORE(10); - } - else if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_INTIMIDATE) - { - ADJUST_SCORE(DECENT_EFFECT); - } - // Active mon abilities - if (aiData->abilities[battlerAtk] == ABILITY_COMPOUND_EYES - && HasMoveWithLowAccuracy(battlerAtkPartner, FOE(battlerAtkPartner), 90, TRUE, atkPartnerAbility, aiData->abilities[FOE(battlerAtkPartner)], atkPartnerHoldEffect, aiData->holdEffects[FOE(battlerAtkPartner)])) - { - ADJUST_SCORE(GOOD_EFFECT); - } - else if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY && HasMoveThatLowersOwnStats(battlerAtkPartner)) - { - ADJUST_SCORE(GOOD_EFFECT); - } - return score; - } - break; - case EFFECT_ROLE_PLAY: - if (attackerHasBadAbility && !partnerHasBadAbility) - { - RETURN_SCORE_PLUS(WEAK_EFFECT); - } - break; - case EFFECT_WORRY_SEED: - case EFFECT_GASTRO_ACID: - case EFFECT_SIMPLE_BEAM: - if (partnerHasBadAbility) - { - RETURN_SCORE_PLUS(DECENT_EFFECT); - } - break; - case EFFECT_ENTRAINMENT: - if (partnerHasBadAbility && IsAbilityOfRating(aiData->abilities[battlerAtk], 0)) - { - RETURN_SCORE_PLUS(DECENT_EFFECT); - } - break; case EFFECT_SOAK: if (atkPartnerAbility == ABILITY_WONDER_GUARD && !IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_WATER) @@ -3535,10 +3705,10 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_INSTRUCT: { u16 instructedMove; - if (AI_IsFaster(battlerAtk, battlerAtkPartner, move)) + if (AI_IsFaster(battlerAtk, battlerAtkPartner, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) instructedMove = aiData->partnerMove; else - instructedMove = gLastMoves[battlerAtkPartner]; + instructedMove = aiData->lastUsedMove[battlerAtkPartner]; if (instructedMove != MOVE_NONE && !IsBattleMoveStatus(instructedMove) @@ -3549,21 +3719,73 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_AFTER_YOU: - if (AI_IsSlower(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove) // Opponent mon 1 goes before partner - || AI_IsSlower(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove)) // Opponent mon 2 goes before partner + if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && HasMoveWithEffect(battlerAtkPartner, EFFECT_TRICK_ROOM)) + ADJUST_SCORE(DECENT_EFFECT); + + if (AI_IsSlower(battlerAtkPartner, LEFT_FOE(battlerAtk), aiData->partnerMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY) // Opponent mon 1 goes before partner + && AI_IsSlower(battlerAtkPartner, RIGHT_FOE(battlerAtk), aiData->partnerMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Opponent mon 2 goes before partner { if (partnerEffect == EFFECT_COUNTER || partnerEffect == EFFECT_MIRROR_COAT) break; // These moves need to go last - RETURN_SCORE_PLUS(WEAK_EFFECT); + ADJUST_SCORE(WEAK_EFFECT); } break; case EFFECT_HEAL_PULSE: case EFFECT_HIT_ENEMY_HEAL_ALLY: - if (AI_IsFaster(battlerAtk, FOE(battlerAtk), move) - && AI_IsFaster(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move) + if (AI_IsFaster(battlerAtk, LEFT_FOE(battlerAtk), move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) + && AI_IsFaster(battlerAtk, RIGHT_FOE(battlerAtk), move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2) RETURN_SCORE_PLUS(WEAK_EFFECT); break; + case EFFECT_SPEED_SWAP: + break; + case EFFECT_GUARD_SPLIT: + { + u32 atkDefense = gBattleMons[battlerAtk].defense; + u32 defDefense = gBattleMons[battlerDef].defense; + u32 atkSpDefense = gBattleMons[battlerAtk].spDefense; + u32 defSpDefense = gBattleMons[battlerDef].spDefense; + + // It's actually * 100 and / 2 + u32 newDefense = (atkDefense + defDefense) * 50; + u32 newSpDefense = (atkSpDefense + defSpDefense) * 50; + + // We want to massively raise our defense. + if (newDefense > atkDefense * GUARD_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (newSpDefense > atkSpDefense * GUARD_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (newDefense > defDefense * GUARD_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (newSpDefense > defSpDefense * GUARD_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + + ADJUST_SCORE(WORST_EFFECT); + break; + } + case EFFECT_POWER_SPLIT: + { + u32 atkAttack = gBattleMons[battlerAtk].attack; + u32 defAttack = gBattleMons[battlerDef].attack; + u32 atkSpAttack = gBattleMons[battlerAtk].spAttack; + u32 defSpAttack = gBattleMons[battlerDef].spAttack; + + // * 100 and / 2 + u32 newAttack = (atkAttack + defAttack) * 50; + u32 newSpAtk = (atkSpAttack + defSpAttack) * 50; + + if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) && newAttack > atkAttack * POWER_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) && newAttack > defAttack * POWER_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && newSpAtk > atkSpAttack * POWER_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) && newSpAtk > defSpAttack * POWER_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + + ADJUST_SCORE(WORST_EFFECT); + break; + } default: break; } // attacker move effects @@ -3579,6 +3801,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else // checking opponent { // these checks mostly handled in AI_CheckBadMove and AI_CheckViability +/* switch (effect) { case EFFECT_SKILL_SWAP: @@ -3590,14 +3813,14 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) default: break; } - +*/ // lightning rod, flash fire against enemy handled in AI_CheckBadMove } return score; } -static bool32 IsPinchBerryItemEffect(enum ItemHoldEffect holdEffect) +static bool32 IsPinchBerryItemEffect(enum HoldEffect holdEffect) { switch (holdEffect) { @@ -3616,16 +3839,50 @@ static bool32 IsPinchBerryItemEffect(enum ItemHoldEffect holdEffect) } } -static s32 CompareMoveAccuracies(u32 battlerAtk, u32 battlerDef, u32 moveSlot1, u32 moveSlot2) +static enum MoveComparisonResult CompareMoveAccuracies(u32 battlerAtk, u32 battlerDef, u32 moveSlot1, u32 moveSlot2) { u32 acc1 = gAiLogicData->moveAccuracy[battlerAtk][battlerDef][moveSlot1]; u32 acc2 = gAiLogicData->moveAccuracy[battlerAtk][battlerDef][moveSlot2]; if (acc1 > acc2) - return 1; + return MOVE_WON_COMPARISON; else if (acc2 > acc1) - return -1; - return 0; + return MOVE_LOST_COMPARISON; + return MOVE_NEUTRAL_COMPARISON; +} + +static enum MoveComparisonResult CompareMoveSpeeds(u32 battlerAtk, u32 battlerDef, u16 move1, u16 move2) +{ + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + u32 speed1 = AI_WhoStrikesFirst(battlerAtk, battlerDef, move1, predictedMoveSpeedCheck, CONSIDER_PRIORITY); + u32 speed2 = AI_WhoStrikesFirst(battlerAtk, battlerDef, move2, predictedMoveSpeedCheck, CONSIDER_PRIORITY); + + if (speed1 == AI_IS_FASTER && speed2 == AI_IS_SLOWER) + return MOVE_WON_COMPARISON; + if (speed2 == AI_IS_FASTER && speed1 == AI_IS_SLOWER) + return MOVE_LOST_COMPARISON; + return MOVE_NEUTRAL_COMPARISON; +} + +static enum MoveComparisonResult CompareGuaranteeFaintTarget(u32 battlerAtk, u32 battlerDef, u16 moveSlot1, u16 moveSlot2, u16 *moves) +{ + s32 dmg1, dmg2; + bool32 guarantee1, guarantee2; + + if (!(gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT)) + return 0; + + // Explictly care about guaranteed KOs universally + dmg1 = gAiLogicData->simulatedDmg[battlerAtk][battlerDef][moveSlot1].minimum; + guarantee1 = (gBattleMons[battlerDef].hp <= dmg1 && !CanEndureHit(battlerAtk, battlerDef, moves[moveSlot1])); + dmg2 = gAiLogicData->simulatedDmg[battlerAtk][battlerDef][moveSlot2].minimum; + guarantee2 = (gBattleMons[battlerDef].hp <= dmg2 && !CanEndureHit(battlerAtk, battlerDef, moves[moveSlot2])); + + if (guarantee1 && !guarantee2) + return MOVE_WON_COMPARISON; + if (guarantee2 && !guarantee1) + return MOVE_LOST_COMPARISON; + return MOVE_NEUTRAL_COMPARISON; } static inline bool32 ShouldUseSpreadDamageMove(u32 battlerAtk, u32 move, u32 moveIndex, u32 hitsToFaintOpposingBattler) @@ -3633,118 +3890,170 @@ static inline bool32 ShouldUseSpreadDamageMove(u32 battlerAtk, u32 move, u32 mov u32 partnerBattler = BATTLE_PARTNER(battlerAtk); u32 noOfHitsToFaintPartner = GetNoOfHitsToKOBattler(battlerAtk, partnerBattler, moveIndex, AI_ATTACKING); u32 friendlyFireThreshold = GetFriendlyFireKOThreshold(battlerAtk); - return (IsDoubleBattle() + return (HasPartnerIgnoreFlags(battlerAtk) && noOfHitsToFaintPartner != 0 // Immunity check - && IsBattlerAlive(partnerBattler) && GetBattlerMoveTargetType(battlerAtk, move) == MOVE_TARGET_FOES_AND_ALLY && !(noOfHitsToFaintPartner < friendlyFireThreshold && hitsToFaintOpposingBattler == 1) && noOfHitsToFaintPartner < (friendlyFireThreshold * 2)); } -static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) +static bool32 ShouldCompareMove(u32 battlerAtk, u32 battlerDef, u32 moveIndex, u16 move) { - u32 i; + if (IsTargetingPartner(battlerAtk, battlerDef)) + return FALSE; + if (GetMovePower(move) == 0) + return FALSE; + if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, moveIndex, AI_ATTACKING) == 0) + return FALSE; + if (gAiThinkingStruct->aiFlags[battlerAtk] & (AI_FLAG_RISKY | AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE) && GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move) + return FALSE; + return TRUE; +} + +static void AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef) +{ + u32 i, currId; + u32 tempMoveScores[MAX_MON_MOVES]; + u32 moveComparisonScores[MAX_MON_MOVES]; + u32 bestScore = AI_SCORE_DEFAULT; bool32 multipleBestMoves = FALSE; - s32 viableMoveScores[MAX_MON_MOVES]; - s32 bestViableMoveScore; s32 noOfHits[MAX_MON_MOVES]; - s32 score = 0; s32 leastHits = 1000; u16 *moves = GetMovesArray(battlerAtk); bool8 isTwoTurnNotSemiInvulnerableMove[MAX_MON_MOVES]; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (moves[i] != MOVE_NONE && GetMovePower(moves[i]) != 0) - { - noOfHits[i] = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, i, AI_ATTACKING); - if (ShouldUseSpreadDamageMove(battlerAtk,moves[i], i, noOfHits[i])) - { - noOfHits[i] = -1; - viableMoveScores[i] = 0; - isTwoTurnNotSemiInvulnerableMove[i] = FALSE; - } - else if (noOfHits[i] < leastHits && noOfHits[i] != 0) - { - leastHits = noOfHits[i]; - } - viableMoveScores[i] = AI_SCORE_DEFAULT; - isTwoTurnNotSemiInvulnerableMove[i] = IsTwoTurnNotSemiInvulnerableMove(battlerAtk, moves[i]); - } - else - { - noOfHits[i] = -1; - viableMoveScores[i] = 0; - isTwoTurnNotSemiInvulnerableMove[i] = FALSE; - } - } - - // Priority list: - // 1. Less no of hits to ko - // 2. Not charging - // 3. More accuracy - // 4. Better effect - - // Current move requires the least hits to KO. Compare with other moves. - if (leastHits == noOfHits[currId]) + for (currId = 0; currId < MAX_MON_MOVES; currId++) { + moveComparisonScores[currId] = 0; + if (!ShouldCompareMove(battlerAtk, battlerDef, currId, moves[currId])) + continue; for (i = 0; i < MAX_MON_MOVES; i++) { - if (i == currId) - continue; - if (noOfHits[currId] == noOfHits[i]) + if (moves[i] != MOVE_NONE && GetMovePower(moves[i]) != 0) { - multipleBestMoves = TRUE; - // We need to make sure it's the current move which is objectively better. - if (isTwoTurnNotSemiInvulnerableMove[i] && !isTwoTurnNotSemiInvulnerableMove[currId]) - viableMoveScores[i] -= 3; - else if (!isTwoTurnNotSemiInvulnerableMove[i] && isTwoTurnNotSemiInvulnerableMove[currId]) - viableMoveScores[currId] -= 3; - - switch (CompareMoveAccuracies(battlerAtk, battlerDef, currId, i)) + noOfHits[i] = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, i, AI_ATTACKING); + if (ShouldUseSpreadDamageMove(battlerAtk,moves[i], i, noOfHits[i])) { - case 1: - viableMoveScores[i] -= 2; - break; - case -1: - viableMoveScores[currId] -= 2; - break; + noOfHits[i] = -1; + tempMoveScores[i] = 0; + isTwoTurnNotSemiInvulnerableMove[i] = FALSE; } - switch (AI_WhichMoveBetter(moves[currId], moves[i], battlerAtk, battlerDef, noOfHits[currId])) + else if (noOfHits[i] < leastHits && noOfHits[i] != 0) { - case 1: - viableMoveScores[i] -= 1; - break; - case -1: - viableMoveScores[currId] -= 1; - break; + leastHits = noOfHits[i]; } + tempMoveScores[i] = AI_SCORE_DEFAULT; + isTwoTurnNotSemiInvulnerableMove[i] = IsTwoTurnNotSemiInvulnerableMove(battlerAtk, moves[i]); + } + else + { + noOfHits[i] = -1; + tempMoveScores[i] = 0; + isTwoTurnNotSemiInvulnerableMove[i] = FALSE; } } - // Turns out the current move deals the most dmg compared to the other 3. - if (!multipleBestMoves) - ADJUST_SCORE(BEST_DAMAGE_MOVE); - else + + // Priority list: + // 1. Less no of hits to ko + // 2. Priority if outsped and a OHKO + // 3. Not charging + // 4. More accuracy + // 5. Guaranteed KO + // 6. Better effect + + // Current move requires the least hits to KO. Compare with other moves. + if (leastHits == noOfHits[currId]) { - bestViableMoveScore = 0; for (i = 0; i < MAX_MON_MOVES; i++) { - if (viableMoveScores[i] > bestViableMoveScore) - bestViableMoveScore = viableMoveScores[i]; + if (i == currId) + continue; + if (noOfHits[currId] == noOfHits[i]) + { + multipleBestMoves = TRUE; + // We need to make sure it's the current move which is objectively better. + if (isTwoTurnNotSemiInvulnerableMove[i] && !isTwoTurnNotSemiInvulnerableMove[currId]) + tempMoveScores[currId] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_NOT_CHARGING); + else if (!isTwoTurnNotSemiInvulnerableMove[i] && isTwoTurnNotSemiInvulnerableMove[currId]) + tempMoveScores[i] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_NOT_CHARGING); + + // Comparing KOs + if (noOfHits[currId] == 1) + { + // Use priority to get fast KO if outsped + switch (CompareMoveSpeeds(battlerAtk, battlerDef, moves[currId], moves[i])) + { + case MOVE_WON_COMPARISON: + tempMoveScores[currId] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_SPEED); + break; + case MOVE_LOST_COMPARISON: + tempMoveScores[i] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_SPEED); + break; + case MOVE_NEUTRAL_COMPARISON: + break; + } + // Min roll KOs + switch (CompareGuaranteeFaintTarget(battlerAtk, battlerDef, currId, i, moves)) + { + case MOVE_WON_COMPARISON: + tempMoveScores[currId] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_GUARANTEE); + break; + case MOVE_LOST_COMPARISON: + tempMoveScores[i] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_GUARANTEE); + break; + case MOVE_NEUTRAL_COMPARISON: + break; + } + } + switch (CompareMoveAccuracies(battlerAtk, battlerDef, currId, i)) + { + case MOVE_WON_COMPARISON: + tempMoveScores[currId] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_ACCURACY); + break; + case MOVE_LOST_COMPARISON: + tempMoveScores[i] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_ACCURACY); + break; + case MOVE_NEUTRAL_COMPARISON: + break; + } + switch (AI_WhichMoveBetter(moves[currId], moves[i], battlerAtk, battlerDef, noOfHits[currId])) + { + case MOVE_WON_COMPARISON: + tempMoveScores[currId] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_EFFECT); + break; + case MOVE_LOST_COMPARISON: + tempMoveScores[i] += MathUtil_Exponent(MAX_MON_MOVES, PRIORITY_EFFECT); + break; + case MOVE_NEUTRAL_COMPARISON: + break; + } + } } - // Unless a better move was found increase score of current move - if (viableMoveScores[currId] == bestViableMoveScore) - ADJUST_SCORE(BEST_DAMAGE_MOVE); + // Turns out the current move deals the most dmg compared to the other 3. + if (!multipleBestMoves) + moveComparisonScores[currId] = UINT32_MAX; + else + moveComparisonScores[currId] = tempMoveScores[currId]; } } - return score; + // Find highest comparison score + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (moveComparisonScores[i] > bestScore) + bestScore = moveComparisonScores[i]; + } + // Increase score for corresponding move(s), accomodating ties + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (moveComparisonScores[i] == bestScore) + gAiThinkingStruct->score[i] += BEST_DAMAGE_MOVE; + } } -static u32 AI_CalcHoldEffectMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) +static s32 AI_CalcHoldEffectMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData) { - struct AiLogicData *aiData = gAiLogicData; - enum ItemHoldEffect holdEffect = aiData->holdEffects[battlerAtk]; + enum HoldEffect holdEffect = aiData->holdEffects[battlerAtk]; s32 score = 0; @@ -3760,7 +4069,7 @@ static u32 AI_CalcHoldEffectMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) } else { - ADJUST_SCORE(-DECENT_EFFECT); + ADJUST_SCORE(AWFUL_EFFECT); } } break; @@ -3771,19 +4080,22 @@ static u32 AI_CalcHoldEffectMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) return score; } -static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) +static s32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData) { // move data enum BattleMoveEffects moveEffect = GetMoveEffect(move); - struct AiLogicData *aiData = gAiLogicData; u32 movesetIndex = gAiThinkingStruct->movesetIndex; uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][movesetIndex]; s32 score = 0; - u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); - u32 predictedType = GetMoveType(predictedMove); + u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, aiData); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, aiData); + enum Type predictedType = GetMoveType(predictedMove); u32 predictedMoveSlot = GetMoveSlot(GetMovesArray(battlerDef), predictedMove); - bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); + bool32 isBattle1v1 = IsBattle1v1(); + bool32 hasTwoOpponents = HasTwoOpponents(battlerAtk); + bool32 hasPartner = HasPartner(battlerAtk); + bool32 moveTargetsBothOpponents = hasTwoOpponents && (GetMoveTarget(move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_ALL_BATTLERS)); u32 i; // The AI should understand that while Dynamaxed, status moves function like Protect. @@ -3794,18 +4106,35 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_PREFER_STATUS_MOVES && IsBattleMoveStatus(move) && effectiveness != UQ_4_12(0.0)) ADJUST_SCORE(10); + // don't get baited into encore + if (gBattleMoveEffects[moveEffect].encourageEncore + && HasBattlerSideMoveWithEffect(battlerDef, EFFECT_ENCORE) + && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerAtk] != HOLD_EFFECT_MENTAL_HERB)) + { + if (!AI_IsAbilityOnSide(battlerAtk, ABILITY_AROMA_VEIL) + || IsMoldBreakerTypeAbility(battlerDef, aiData->abilities[battlerDef]) + || aiData->abilities[battlerDef] == ABILITY_MYCELIUM_MIGHT + || IsMoldBreakerTypeAbility(BATTLE_PARTNER(battlerDef), aiData->abilities[BATTLE_PARTNER(battlerDef)]) + || aiData->abilities[BATTLE_PARTNER(battlerDef)] == ABILITY_MYCELIUM_MIGHT) + return score; + } + // check thawing moves - if ((gBattleMons[battlerAtk].status1 & (STATUS1_FREEZE | STATUS1_FROSTBITE)) && MoveThawsUser(move)) + if (gBattleMons[battlerAtk].status1 & STATUS1_ICY_ANY && MoveThawsUser(move)) ADJUST_SCORE(10); // check burn / frostbite - if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_SMART_SWITCHING && gAiLogicData->abilities[battlerAtk] == ABILITY_NATURAL_CURE) + if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_SMART_SWITCHING && aiData->abilities[battlerAtk] == ABILITY_NATURAL_CURE) { if ((gBattleMons[battlerAtk].status1 & STATUS1_BURN && HasOnlyMovesWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL, TRUE)) || (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE && HasOnlyMovesWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL, TRUE))) ADJUST_SCORE(-20); // Force switch if all your attacking moves are physical and you have Natural Cure. } + // check guaranteed flinch, a la Fake Out + if (IsFlinchGuaranteed(battlerAtk, battlerDef, move)) + ADJUST_SCORE(BEST_EFFECT); + // Non-volatile statuses switch(GetMoveNonVolatileStatus(move)) { @@ -3834,12 +4163,27 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_DREAM_EATER: - case EFFECT_STRENGTH_SAP: case EFFECT_AQUA_RING: if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) ADJUST_SCORE(DECENT_EFFECT); break; + case EFFECT_STRENGTH_SAP: + { + u32 atkStat = gBattleMons[battlerDef].attack; + u32 atkStage = gBattleMons[battlerDef].statStages[STAT_ATK]; + atkStat *= gStatStageRatios[atkStage][0]; + atkStat /= gStatStageRatios[atkStage][1]; + u32 healPercent = atkStat * 100 / gBattleMons[battlerAtk].maxHP; + if (ShouldRecover(battlerAtk, battlerDef, move, healPercent)) + { + ADJUST_SCORE(GOOD_EFFECT); + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) + ADJUST_SCORE(WEAK_EFFECT); + } + break; + } case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: case EFFECT_MEMENTO: if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_WILL_SUICIDE && gBattleMons[battlerDef].statStages[STAT_EVASION] < 7) { @@ -3852,26 +4196,31 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_MIRROR_MOVE: - if (predictedMove != MOVE_NONE) + if (predictedMove && GetMoveEffect(predictedMove) != GetMoveEffect(move)) return AI_CheckViability(battlerAtk, battlerDef, predictedMove, score); break; - case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_USER_ALLY: + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_ATK)); + case EFFECT_ATTACK_UP: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); break; case EFFECT_ATTACK_UP_2: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2)); break; case EFFECT_DEFENSE_UP: - case EFFECT_DEFENSE_UP_3: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); break; + case EFFECT_STUFF_CHEEKS: case EFFECT_DEFENSE_UP_2: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF_2)); break; + case EFFECT_DEFENSE_UP_3: + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF_3)); + break; case EFFECT_SPEED_UP: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); break; + case EFFECT_AUTOTOMIZE: case EFFECT_SPEED_UP_2: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED_2)); break; @@ -3879,9 +4228,11 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); break; case EFFECT_SPECIAL_ATTACK_UP_2: - case EFFECT_SPECIAL_ATTACK_UP_3: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK_2)); break; + case EFFECT_SPECIAL_ATTACK_UP_3: + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK_3)); + break; case EFFECT_SPECIAL_DEFENSE_UP: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; @@ -3898,89 +4249,31 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_ATTACK_DOWN: case EFFECT_ATTACK_DOWN_2: - if (!ShouldLowerAttack(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(-2); - if (gBattleMons[battlerDef].statStages[STAT_ATK] < DEFAULT_STAT_STAGE) - ADJUST_SCORE(-1); - else if (aiData->hpPercents[battlerAtk] <= 90) - ADJUST_SCORE(-1); - if (gBattleMons[battlerDef].statStages[STAT_ATK] > 3 && !AI_RandLessThan(50)) - ADJUST_SCORE(-2); - else if (aiData->hpPercents[battlerDef] < 70) - ADJUST_SCORE(-2); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_ATK)); break; case EFFECT_DEFENSE_DOWN: case EFFECT_DEFENSE_DOWN_2: - if (!ShouldLowerDefense(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(-2); - if ((aiData->hpPercents[battlerAtk] < 70 && !AI_RandLessThan(50)) || (gBattleMons[battlerDef].statStages[STAT_DEF] <= 3 && !AI_RandLessThan(50))) - ADJUST_SCORE(-2); - if (aiData->hpPercents[battlerDef] <= 70) - ADJUST_SCORE(-2); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_DEF)); break; case EFFECT_SPEED_DOWN: case EFFECT_SPEED_DOWN_2: - if (AI_IsFaster(battlerAtk, battlerDef, move)) - ADJUST_SCORE(-3); - else if (!AI_RandLessThan(70)) - ADJUST_SCORE(DECENT_EFFECT); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPEED)); break; case EFFECT_SPECIAL_ATTACK_DOWN: case EFFECT_SPECIAL_ATTACK_DOWN_2: - if (!ShouldLowerSpAtk(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(-2); - if (gBattleMons[battlerDef].statStages[STAT_SPATK] < DEFAULT_STAT_STAGE) - ADJUST_SCORE(-1); - else if (aiData->hpPercents[battlerAtk] <= 90) - ADJUST_SCORE(-1); - if (gBattleMons[battlerDef].statStages[STAT_SPATK] > 3 && !AI_RandLessThan(50)) - ADJUST_SCORE(-2); - else if (aiData->hpPercents[battlerDef] < 70) - ADJUST_SCORE(-2); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPATK)); break; case EFFECT_SPECIAL_DEFENSE_DOWN: case EFFECT_SPECIAL_DEFENSE_DOWN_2: - if (!ShouldLowerSpDef(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(-2); - if ((aiData->hpPercents[battlerAtk] < 70 && !AI_RandLessThan(50)) - || (gBattleMons[battlerDef].statStages[STAT_SPDEF] <= 3 && !AI_RandLessThan(50))) - ADJUST_SCORE(-2); - if (aiData->hpPercents[battlerDef] <= 70) - ADJUST_SCORE(-2); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPDEF)); break; case EFFECT_ACCURACY_DOWN: case EFFECT_ACCURACY_DOWN_2: - if (ShouldLowerAccuracy(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(-2); - if ((aiData->hpPercents[battlerAtk] < 70 || aiData->hpPercents[battlerDef] < 70) && AI_RandLessThan(100)) - ADJUST_SCORE(-1); - if (gBattleMons[battlerDef].statStages[STAT_ACC] <= 4 && !AI_RandLessThan(80)) - ADJUST_SCORE(-2); - if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY && !AI_RandLessThan(70)) - ADJUST_SCORE(DECENT_EFFECT); - if (gStatuses3[battlerDef] & STATUS3_LEECHSEED && !AI_RandLessThan(70)) - ADJUST_SCORE(DECENT_EFFECT); - if (gStatuses3[battlerDef] & STATUS3_ROOTED && AI_RandLessThan(128)) - ADJUST_SCORE(WEAK_EFFECT); - if (gBattleMons[battlerDef].status2 & STATUS2_CURSED && !AI_RandLessThan(70)) - ADJUST_SCORE(DECENT_EFFECT); - if (aiData->hpPercents[battlerAtk] > 70 || gBattleMons[battlerDef].statStages[STAT_ACC] < DEFAULT_STAT_STAGE) - break; - else if (aiData->hpPercents[battlerAtk] < 40 || aiData->hpPercents[battlerDef] < 40 || !AI_RandLessThan(70)) - ADJUST_SCORE(-2); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_ACC)); break; case EFFECT_EVASION_DOWN: case EFFECT_EVASION_DOWN_2: - if (!ShouldLowerEvasion(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(-2); - if ((aiData->hpPercents[battlerAtk] < 70 || gBattleMons[battlerDef].statStages[STAT_EVASION] <= 3) && !AI_RandLessThan(50)) - ADJUST_SCORE(-2); - if (aiData->hpPercents[battlerDef] <= 70) - ADJUST_SCORE(-2); - if (gBattleMons[battlerAtk].statStages[STAT_ACC] < DEFAULT_STAT_STAGE) - ADJUST_SCORE(WEAK_EFFECT); - if (gBattleMons[battlerDef].statStages[STAT_EVASION] < 7 || aiData->abilities[battlerAtk] == ABILITY_NO_GUARD) - ADJUST_SCORE(-2); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_EVASION)); break; case EFFECT_SPICY_EXTRACT: // TODO: Make IncreaseStatDownScore function, just like IncreaseStatUpScore @@ -3988,7 +4281,34 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_BIDE: if (aiData->hpPercents[battlerAtk] < 90) ADJUST_SCORE(-2); // Should be either removed or turned into increasing score + // treat as offense booster case EFFECT_ACUPRESSURE: + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK_2)); + break; + case EFFECT_GEAR_UP: + if (aiData->abilities[battlerAtk] == ABILITY_PLUS || aiData->abilities[battlerAtk] == ABILITY_MINUS) + { + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); + } + if (hasPartner && (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS)) + { + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_SPATK)); + } + break; + case EFFECT_MAGNETIC_FLUX: + if (aiData->abilities[battlerAtk] == ABILITY_PLUS || aiData->abilities[battlerAtk] == ABILITY_MINUS) + { + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); + } + if (hasPartner && (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_PLUS || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_MINUS)) + { + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_DEF)); + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_SPDEF)); + } break; case EFFECT_ATTACK_ACCURACY_UP: // hone claws ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); @@ -3999,11 +4319,61 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); break; + case EFFECT_ROTOTILLER: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) && AI_IsBattlerGrounded(battlerAtk)) + { + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); + } + if (hasPartner && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS) && AI_IsBattlerGrounded(BATTLE_PARTNER(battlerAtk))) + { + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_SPATK)); + } + if (IS_BATTLER_OF_TYPE(LEFT_FOE(battlerAtk), TYPE_GRASS) && AI_IsBattlerGrounded(LEFT_FOE(battlerAtk))) + { + if (aiData->abilities[LEFT_FOE(battlerAtk)] == ABILITY_CONTRARY) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(AWFUL_EFFECT); + } + if (IS_BATTLER_OF_TYPE(RIGHT_FOE(battlerAtk), TYPE_GRASS) && AI_IsBattlerGrounded(RIGHT_FOE(battlerAtk))) + { + if (aiData->abilities[RIGHT_FOE(battlerAtk)] == ABILITY_CONTRARY) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(AWFUL_EFFECT); + } + break; + case EFFECT_FLOWER_SHIELD: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS)) + { + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); + } + if (hasPartner && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS)) + { + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_DEF)); + } + if (IS_BATTLER_OF_TYPE(LEFT_FOE(battlerAtk), TYPE_GRASS)) + { + if (aiData->abilities[LEFT_FOE(battlerAtk)] == ABILITY_CONTRARY) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(AWFUL_EFFECT); + } + if (IS_BATTLER_OF_TYPE(RIGHT_FOE(battlerAtk), TYPE_GRASS)) + { + if (aiData->abilities[RIGHT_FOE(battlerAtk)] == ABILITY_CONTRARY) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(AWFUL_EFFECT); + } + break; case EFFECT_HAZE: if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk)) - || PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) break; - score += AI_TryToClearStats(battlerAtk, battlerDef, isDoubleBattle); + score += AI_TryToClearStats(battlerAtk, battlerDef, moveTargetsBothOpponents); break; case EFFECT_ROAR: if ((IsSoundMove(move) && aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF) @@ -4011,7 +4381,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; - score += AI_TryToClearStats(battlerAtk, battlerDef, isDoubleBattle); + score += AI_TryToClearStats(battlerAtk, battlerDef, moveTargetsBothOpponents); break; case EFFECT_MULTI_HIT: case EFFECT_TRIPLE_KICK: @@ -4023,7 +4393,13 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_CONVERSION: if (!IS_BATTLER_OF_TYPE(battlerAtk, GetMoveType(gBattleMons[battlerAtk].moves[0]))) + { ADJUST_SCORE(WEAK_EFFECT); + if (aiData->abilities[battlerAtk] == ABILITY_ADAPTABILITY) + ADJUST_SCORE(WEAK_EFFECT); + if (IsConsideringZMove(battlerAtk, battlerDef, move)) + ADJUST_SCORE(BEST_EFFECT); + } break; case EFFECT_SWALLOW: if (gDisableStructs[battlerAtk].stockpileCounter == 0) @@ -4048,7 +4424,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; } - if (ShouldRecover(battlerAtk, battlerDef, move, healPercent, AI_DEFENDING)) + if (ShouldRecover(battlerAtk, battlerDef, move, healPercent)) ADJUST_SCORE(DECENT_EFFECT); } break; @@ -4058,7 +4434,13 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_MORNING_SUN: case EFFECT_SYNTHESIS: case EFFECT_MOONLIGHT: - if (ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING)) + if (ShouldRecover(battlerAtk, battlerDef, move, 50)) + ADJUST_SCORE(GOOD_EFFECT); + break; + case EFFECT_LIFE_DEW: + if (ShouldRecover(battlerAtk, battlerDef, move, 25)) + ADJUST_SCORE(GOOD_EFFECT); + if (ShouldRecover(BATTLE_PARTNER(battlerAtk), battlerDef, move, 25)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_LIGHT_SCREEN: @@ -4076,12 +4458,12 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) { break; } - else if (ShouldRecover(battlerAtk, battlerDef, move, 100, AI_DEFENDING)) + else if (ShouldRecover(battlerAtk, battlerDef, move, 100)) { if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_SLP || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_STATUS - || HasMoveWithEffect(EFFECT_SLEEP_TALK, battlerAtk) - || HasMoveWithEffect(EFFECT_SNORE, battlerAtk) + || HasMoveWithEffect(battlerAtk, EFFECT_SLEEP_TALK) + || HasMoveWithEffect(battlerAtk, EFFECT_SNORE) || aiData->abilities[battlerAtk] == ABILITY_SHED_SKIN || aiData->abilities[battlerAtk] == ABILITY_EARLY_BIRD || (AI_GetWeather() & B_WEATHER_RAIN && gWishFutureKnock.weatherDuration != 1 && aiData->abilities[battlerAtk] == ABILITY_HYDRATION && aiData->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA)) @@ -4089,9 +4471,10 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_OHKO: + case EFFECT_SHEER_COLD: if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; - else if (gStatuses3[battlerAtk] & STATUS3_ALWAYS_HITS) + else if (gBattleMons[battlerAtk].volatiles.lockOn) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_MEAN_LOOK: @@ -4114,22 +4497,23 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(IncreaseSubstituteMoveScore(battlerAtk, battlerDef, move)); break; case EFFECT_MIMIC: - if (AI_IsFaster(battlerAtk, battlerDef, move)) + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) { - if (gLastMoves[battlerDef] != MOVE_NONE && gLastMoves[battlerDef] != 0xFFFF) - return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score); + if (aiData->lastUsedMove[battlerDef] != MOVE_NONE + && (GetMoveEffect(aiData->lastUsedMove[battlerDef]) != GetMoveEffect(move))) + return AI_CheckViability(battlerAtk, battlerDef, aiData->lastUsedMove[battlerDef], score); } break; case EFFECT_LEECH_SEED: if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) - || gStatuses3[battlerDef] & STATUS3_LEECHSEED + || gBattleMons[battlerDef].volatiles.leechSeed || HasMoveWithEffect(battlerDef, EFFECT_RAPID_SPIN) || aiData->abilities[battlerDef] == ABILITY_LIQUID_OOZE || aiData->abilities[battlerDef] == ABILITY_MAGIC_GUARD) break; ADJUST_SCORE(GOOD_EFFECT); if (!HasDamagingMove(battlerDef) - || (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef)) + || IsBattlerTrapped(battlerAtk, battlerDef) || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) ADJUST_SCORE(DECENT_EFFECT); break; @@ -4137,7 +4521,9 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_HOLD_HANDS: case EFFECT_CELEBRATE: case EFFECT_HAPPY_HOUR: - //todo - check z splash, z celebrate, z happy hour (lol) + case EFFECT_LAST_RESORT: + if (IsConsideringZMove(battlerAtk, battlerDef, move)) + ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_TELEPORT: // Either remove or add better logic if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) || !IsOnPlayerSide(battlerAtk)) @@ -4146,7 +4532,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_HIT_ESCAPE: case EFFECT_PARTING_SHOT: case EFFECT_CHILLY_RECEPTION: - if (!IsDoubleBattle()) + if (!hasPartner) { switch (ShouldPivot(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, movesetIndex)) { @@ -4170,8 +4556,11 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_BATON_PASS: - if ((gAiLogicData->shouldSwitch & (1u << battlerAtk)) && (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE - || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) + if ((aiData->shouldSwitch & (1u << battlerAtk)) && (gBattleMons[battlerAtk].volatiles.substitute + || gBattleMons[battlerAtk].volatiles.powerTrick + || gBattleMons[battlerAtk].volatiles.magnetRise + || gBattleMons[battlerAtk].volatiles.aquaRing + || gBattleMons[battlerAtk].volatiles.root || AnyStatIsRaised(battlerAtk))) ADJUST_SCORE(BEST_EFFECT); break; @@ -4179,12 +4568,11 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; else if (gDisableStructs[battlerDef].disableTimer == 0 - && (gLastMoves[battlerDef] != MOVE_NONE) - && (gLastMoves[battlerDef] != 0xFFFF) + && (aiData->lastUsedMove[battlerDef] != MOVE_NONE) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) - && (AI_IsFaster(battlerAtk, battlerDef, move))) + && (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY))) { - if (CanTargetMoveFaintAi(gLastMoves[battlerDef], battlerDef, battlerAtk, 1)) + if (CanTargetMoveFaintAi(aiData->lastUsedMove[battlerDef], battlerDef, battlerAtk, 1)) ADJUST_SCORE(GOOD_EFFECT); // Disable move that can kill attacker } break; @@ -4193,9 +4581,9 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; - bool32 encourage = gBattleMoveEffects[GetMoveEffect(gLastMoves[battlerDef])].encourageEncore; + bool32 encourage = gBattleMoveEffects[GetMoveEffect(aiData->lastUsedMove[battlerDef])].encourageEncore; - switch(GetMoveNonVolatileStatus(gLastMoves[battlerDef])) + switch(GetMoveNonVolatileStatus(aiData->lastUsedMove[battlerDef])) { case MOVE_EFFECT_POISON: case MOVE_EFFECT_PARALYSIS: @@ -4214,15 +4602,15 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_LOCK_ON: - if (HasMoveWithEffect(battlerAtk, EFFECT_OHKO)) + if (HasMoveWithEffect(battlerAtk, EFFECT_OHKO) || HasMoveWithEffect(battlerAtk, EFFECT_SHEER_COLD)) ADJUST_SCORE(GOOD_EFFECT); - else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 85, TRUE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef])) + else if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 85, TRUE)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_DESTINY_BOND: if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; - else if (AI_IsFaster(battlerAtk, battlerDef, move) && CanTargetFaintAi(battlerDef, battlerAtk)) + else if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SPITE: @@ -4233,10 +4621,19 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (ShouldUseWishAromatherapy(battlerAtk, battlerDef, move)) ADJUST_SCORE(DECENT_EFFECT); break; + case EFFECT_PURIFY: + if (gBattleMons[battlerDef].status1 & STATUS1_ANY) + { + if (ShouldCureStatus(battlerAtk, battlerDef, aiData)) + ADJUST_SCORE(GOOD_EFFECT); + if (ShouldRecover(battlerAtk, battlerDef, move, 50)) + RETURN_SCORE_PLUS(WEAK_EFFECT); + } + break; case EFFECT_CURSE: if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) { - if (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef)) + if (IsBattlerTrapped(battlerAtk, battlerDef)) ADJUST_SCORE(GOOD_EFFECT); else ADJUST_SCORE(WEAK_EFFECT); @@ -4248,36 +4645,39 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_PROTECT: - if (predictedMove == 0xFFFF) + if (predictedMove == MOVE_UNAVAILABLE) predictedMove = MOVE_NONE; - switch (move) + enum ProtectMethod protectMethod = GetMoveProtectMethod(move); + switch (protectMethod) { - case MOVE_QUICK_GUARD: + case PROTECT_QUICK_GUARD: if (predictedMove != MOVE_NONE && GetMovePriority(predictedMove) > 0) - ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + { + ADJUST_SCORE(ProtectChecks(battlerAtk, battlerDef, move, predictedMove)); + } break; - case MOVE_WIDE_GUARD: + case PROTECT_WIDE_GUARD: if (predictedMove != MOVE_NONE && GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_BOTH)) { - ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + ADJUST_SCORE(ProtectChecks(battlerAtk, battlerDef, move, predictedMove)); } - else if (isDoubleBattle && GetBattlerMoveTargetType(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) & MOVE_TARGET_FOES_AND_ALLY) + else if (hasPartner && GetBattlerMoveTargetType(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) & MOVE_TARGET_FOES_AND_ALLY) { if (aiData->abilities[battlerAtk] != ABILITY_TELEPATHY) - ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + ADJUST_SCORE(ProtectChecks(battlerAtk, battlerDef, move, predictedMove)); } break; - case MOVE_CRAFTY_SHIELD: + case PROTECT_CRAFTY_SHIELD: if (predictedMove != MOVE_NONE && IsBattleMoveStatus(predictedMove) && !(GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) - ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + ADJUST_SCORE(ProtectChecks(battlerAtk, battlerDef, move, predictedMove)); break; - case MOVE_MAT_BLOCK: + case PROTECT_MAT_BLOCK: if (gDisableStructs[battlerAtk].isFirstTurn && predictedMove != MOVE_NONE && !IsBattleMoveStatus(predictedMove) && !(GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) - ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + ADJUST_SCORE(ProtectChecks(battlerAtk, battlerDef, move, predictedMove)); break; - case MOVE_KINGS_SHIELD: + case PROTECT_KINGS_SHIELD: if (aiData->abilities[battlerAtk] == ABILITY_STANCE_CHANGE //Special logic for Aegislash && gBattleMons[battlerAtk].species == SPECIES_AEGISLASH_BLADE && !IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef])) @@ -4287,7 +4687,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } //fallthrough default: // protect - ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); + ADJUST_SCORE(ProtectChecks(battlerAtk, battlerDef, move, predictedMove)); break; } break; @@ -4302,11 +4702,13 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); } break; + case EFFECT_CEASELESS_EDGE: case EFFECT_SPIKES: case EFFECT_STEALTH_ROCK: case EFFECT_STICKY_WEB: + case EFFECT_STONE_AXE: case EFFECT_TOXIC_SPIKES: - if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, aiData)) + if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, move, aiData)) { if (gDisableStructs[battlerAtk].isFirstTurn) ADJUST_SCORE(BEST_EFFECT); @@ -4329,13 +4731,16 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_PERISH_SONG: - if (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef)) + if (IsBattlerTrapped(battlerAtk, battlerDef)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SANDSTORM: - if (ShouldSetSandstorm(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk])) + if (ShouldSetWeather(battlerAtk, B_WEATHER_SANDSTORM)) { ADJUST_SCORE(DECENT_EFFECT); + + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_WEATHER_BALL)) + ADJUST_SCORE(WEAK_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_SMOOTH_ROCK) ADJUST_SCORE(WEAK_EFFECT); if (HasMoveWithEffect(battlerDef, EFFECT_MORNING_SUN) @@ -4345,13 +4750,14 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_HAIL: - if (ShouldSetHail(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk])) + if (ShouldSetWeather(battlerAtk, B_WEATHER_HAIL)) { - if ((HasMoveWithEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveWithEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) - && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) - ADJUST_SCORE(GOOD_EFFECT); - ADJUST_SCORE(DECENT_EFFECT); + + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_AURORA_VEIL) && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) + ADJUST_SCORE(GOOD_EFFECT); + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_WEATHER_BALL)) + ADJUST_SCORE(WEAK_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ICY_ROCK) ADJUST_SCORE(WEAK_EFFECT); if (HasMoveWithEffect(battlerDef, EFFECT_MORNING_SUN) @@ -4361,13 +4767,14 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_SNOWSCAPE: - if (ShouldSetSnow(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk])) + if (ShouldSetWeather(battlerAtk, B_WEATHER_SNOW)) { - if ((HasMoveWithEffect(battlerAtk, EFFECT_AURORA_VEIL) || HasMoveWithEffect(BATTLE_PARTNER(battlerAtk), EFFECT_AURORA_VEIL)) - && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) - ADJUST_SCORE(GOOD_EFFECT); - ADJUST_SCORE(DECENT_EFFECT); + + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_AURORA_VEIL) && ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) + ADJUST_SCORE(GOOD_EFFECT); + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_WEATHER_BALL)) + ADJUST_SCORE(WEAK_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ICY_ROCK) ADJUST_SCORE(WEAK_EFFECT); if (HasMoveWithEffect(battlerDef, EFFECT_MORNING_SUN) @@ -4377,27 +4784,33 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_RAIN_DANCE: - if (ShouldSetRain(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk])) + if (ShouldSetWeather(battlerAtk, B_WEATHER_RAIN)) { ADJUST_SCORE(DECENT_EFFECT); + + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_WEATHER_BALL)) + ADJUST_SCORE(WEAK_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_DAMP_ROCK) ADJUST_SCORE(WEAK_EFFECT); - if (HasMoveWithEffect(battlerDef, EFFECT_MORNING_SUN) - || HasMoveWithEffect(battlerDef, EFFECT_SYNTHESIS) - || HasMoveWithEffect(battlerDef, EFFECT_SOLAR_BEAM) - || HasMoveWithEffect(battlerDef, EFFECT_MOONLIGHT)) + if (HasBattlerSideMoveWithEffect(battlerDef, EFFECT_MORNING_SUN) + || HasBattlerSideMoveWithEffect(battlerDef, EFFECT_SYNTHESIS) + || HasBattlerSideMoveWithEffect(battlerDef, EFFECT_SOLAR_BEAM) + || HasBattlerSideMoveWithEffect(battlerDef, EFFECT_MOONLIGHT)) ADJUST_SCORE(WEAK_EFFECT); - if (HasMoveWithType(battlerDef, TYPE_FIRE) || HasMoveWithType(BATTLE_PARTNER(battlerDef), TYPE_FIRE)) + if (HasDamagingMoveOfType(battlerDef, TYPE_FIRE) || HasDamagingMoveOfType(BATTLE_PARTNER(battlerDef), TYPE_FIRE)) ADJUST_SCORE(WEAK_EFFECT); } break; case EFFECT_SUNNY_DAY: - if (ShouldSetSun(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk])) + if (ShouldSetWeather(battlerAtk, B_WEATHER_SUN)) { ADJUST_SCORE(DECENT_EFFECT); + + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_WEATHER_BALL)) + ADJUST_SCORE(WEAK_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_HEAT_ROCK) ADJUST_SCORE(WEAK_EFFECT); - if (HasMoveWithType(battlerDef, TYPE_WATER) || HasMoveWithType(BATTLE_PARTNER(battlerDef), TYPE_WATER)) + if (HasDamagingMoveOfType(battlerDef, TYPE_WATER) || HasDamagingMoveOfType(BATTLE_PARTNER(battlerDef), TYPE_WATER)) ADJUST_SCORE(WEAK_EFFECT); if (HasMoveWithFlag(battlerDef, MoveHas50AccuracyInSun) || HasMoveWithFlag(BATTLE_PARTNER(battlerDef), MoveHas50AccuracyInSun)) ADJUST_SCORE(WEAK_EFFECT); @@ -4420,25 +4833,25 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) score += AI_ShouldCopyStatChanges(battlerAtk, battlerDef); break; case EFFECT_SEMI_INVULNERABLE: - if (predictedMove != MOVE_NONE && !isDoubleBattle) + if (predictedMove != MOVE_NONE && isBattle1v1) { enum BattleMoveEffects predictedEffect = GetMoveEffect(predictedMove); - if ((AI_IsFaster(battlerAtk, battlerDef, move)) - && (predictedEffect == EFFECT_EXPLOSION || predictedEffect == EFFECT_PROTECT)) + if ((AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) + && (predictedEffect == EFFECT_EXPLOSION + || predictedEffect == EFFECT_MISTY_EXPLOSION + || predictedEffect == EFFECT_PROTECT)) ADJUST_SCORE(GOOD_EFFECT); - else if (predictedEffect == EFFECT_SEMI_INVULNERABLE && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) + else if (predictedEffect == EFFECT_SEMI_INVULNERABLE && !IsSemiInvulnerable(battlerDef, CHECK_ALL)) ADJUST_SCORE(GOOD_EFFECT); } break; case EFFECT_DEFENSE_CURL: - if (HasMoveWithEffect(battlerAtk, EFFECT_ROLLOUT) && !(gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL)) + if (HasMoveWithEffect(battlerAtk, EFFECT_ROLLOUT) && !gBattleMons[battlerAtk].volatiles.defenseCurl) ADJUST_SCORE(DECENT_EFFECT); ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); break; case EFFECT_FIRST_TURN_ONLY: - if (ShouldFakeOut(battlerAtk, battlerDef, move) && MoveHasAdditionalEffectWithChance(move, MOVE_EFFECT_FLINCH, 100)) - ADJUST_SCORE(GOOD_EFFECT); - else if (gDisableStructs[battlerAtk].isFirstTurn && GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move) + if (gDisableStructs[battlerAtk].isFirstTurn && GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_STOCKPILE: @@ -4450,65 +4863,92 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; case EFFECT_SWAGGER: + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_FOUL_PLAY) + || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_PSYCH_UP) + || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) + ADJUST_SCORE(DECENT_EFFECT); + if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) + ADJUST_SCORE(GOOD_EFFECT); + IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); + break; case EFFECT_FLATTER: - if (HasMoveWithEffect(battlerAtk, EFFECT_FOUL_PLAY) - || HasMoveWithEffect(battlerAtk, EFFECT_PSYCH_UP) - || HasMoveWithEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_PSYCH_UP) + || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_SPECTRAL_THIEF)) ADJUST_SCORE(DECENT_EFFECT); if (aiData->abilities[battlerDef] == ABILITY_CONTRARY) ADJUST_SCORE(GOOD_EFFECT); IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_FURY_CUTTER: - if (!isDoubleBattle && aiData->holdEffects[battlerAtk] == HOLD_EFFECT_METRONOME) + if (isBattle1v1 && aiData->holdEffects[battlerAtk] == HOLD_EFFECT_METRONOME) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_ATTRACT: - if (!isDoubleBattle - && (AI_IsSlower(battlerAtk, battlerDef, move)) + if (isBattle1v1 + && (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) && BattlerWillFaintFromSecondaryDamage(battlerDef, aiData->abilities[battlerDef])) break; // Don't use if the attract won't have a change to activate if (gBattleMons[battlerDef].status1 & STATUS1_ANY - || (gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - || (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef))) + || gBattleMons[battlerDef].volatiles.confusionTurns > 0 + || IsBattlerTrapped(battlerAtk, battlerDef)) ADJUST_SCORE(GOOD_EFFECT); else ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_SAFEGUARD: - if (!IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_MISTY_TERRAIN) || !IsBattlerGrounded(battlerAtk)) + if (!IsBattlerTerrainAffected(battlerAtk, aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk], STATUS_FIELD_MISTY_TERRAIN) || !AI_IsBattlerGrounded(battlerAtk)) ADJUST_SCORE(DECENT_EFFECT); // TODO: check if opp has status move? //if (CountUsablePartyMons(battlerDef) != 0) //ADJUST_SCORE(8); break; + case EFFECT_COURT_CHANGE: + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_GOOD_COURT) + ADJUST_SCORE(WEAK_EFFECT); + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_BAD_COURT) + ADJUST_SCORE(WEAK_EFFECT); + + if (AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0) + { + ADJUST_SCORE(DECENT_EFFECT); + } + + if (hasPartner) + { + if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards + && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) // partner is going to set up before the Court Change + { + ADJUST_SCORE(-10); + break; + } + } + break; case EFFECT_DEFOG: - if ((gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0) - || (gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST))) + if ((AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0) + || (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_GOOD_FOG)) { ADJUST_SCORE(GOOD_EFFECT); } - else if (!(gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SPIKES)) //Don't blow away hazards if you set them up + else if (!AreAnyHazardsOnSide(GetBattlerSide(battlerDef)) || CountUsablePartyMons(battlerDef) == 0) //Don't blow away hazards if you set them up { - if (isDoubleBattle) + if (hasPartner) { if (IsHazardMove(aiData->partnerMove) // Partner is going to set up hazards - && AI_IsSlower(battlerAtk, BATTLE_PARTNER(battlerAtk), move)) // Partner going first + && AI_IsSlower(battlerAtk, BATTLE_PARTNER(battlerAtk), move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Partner going first break; // Don't use Defog if partner is going to set up hazards } - if (ShouldLowerEvasion(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(DECENT_EFFECT); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_EVASION)); } break; case EFFECT_TORMENT: break; case EFFECT_FOLLOW_ME: - if (isDoubleBattle + if (hasPartner && GetMoveTarget(move) == MOVE_TARGET_USER && !IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) - && (!IsPowderMove(move) || IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) // Rage Powder doesn't affect powder immunities - && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + && (!IsPowderMove(move) || IsAffectedByPowderMove(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef]))) + // Rage Powder doesn't affect powder immunities { - u32 predictedMoveOnPartner = gLastMoves[BATTLE_PARTNER(battlerAtk)]; + u32 predictedMoveOnPartner = aiData->lastUsedMove[BATTLE_PARTNER(battlerAtk)]; if (predictedMoveOnPartner != MOVE_NONE && !IsBattleMoveStatus(predictedMoveOnPartner)) ADJUST_SCORE(GOOD_EFFECT); } @@ -4553,7 +4993,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case HOLD_EFFECT_IRON_BALL: - if (!HasMoveWithEffect(battlerDef, EFFECT_FLING) || !IsBattlerGrounded(battlerDef)) + if (!HasMoveWithEffect(battlerDef, EFFECT_FLING) || !AI_IsBattlerGrounded(battlerDef)) ADJUST_SCORE(DECENT_EFFECT); break; case HOLD_EFFECT_LAGGING_TAIL: @@ -4574,13 +5014,15 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (AI_GetWeather() & B_WEATHER_SUN) ADJUST_SCORE(DECENT_EFFECT); // Slow 'em down break; + default: + break; } } break; case HOLD_EFFECT_EJECT_BUTTON: //if (!IsRaidBattle() && GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX && gNewBS->dynamaxData.timer[battlerDef] > 1 && if (HasDamagingMove(battlerAtk) - || (isDoubleBattle && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && HasDamagingMove(BATTLE_PARTNER(battlerAtk)))) + || (hasPartner && HasDamagingMove(BATTLE_PARTNER(battlerAtk)))) ADJUST_SCORE(DECENT_EFFECT); // Force 'em out next turn break; default: @@ -4634,11 +5076,6 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } } break; - case EFFECT_ROLE_PLAY: - case EFFECT_DOODLE: - if (IsAbilityOfRating(aiData->abilities[battlerDef], 5)) - ADJUST_SCORE(DECENT_EFFECT); - break; case EFFECT_INGRAIN: ADJUST_SCORE(WEAK_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) @@ -4649,19 +5086,19 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_RECYCLE: - if (GetUsedHeldItem(battlerAtk) != ITEM_NONE) + if (GetBattlerPartyState(battlerAtk)->usedHeldItem != ITEM_NONE) ADJUST_SCORE(WEAK_EFFECT); - if (IsRecycleEncouragedItem(GetUsedHeldItem(battlerAtk))) + if (IsRecycleEncouragedItem(GetBattlerPartyState(battlerAtk)->usedHeldItem)) ADJUST_SCORE(WEAK_EFFECT); if (aiData->abilities[battlerAtk] == ABILITY_RIPEN) { - u32 item = GetUsedHeldItem(battlerAtk); + u32 item = GetBattlerPartyState(battlerAtk)->usedHeldItem; u32 toHeal = (GetItemHoldEffectParam(item) == 10) ? 10 : gBattleMons[battlerAtk].maxHP / GetItemHoldEffectParam(item); if (IsStatBoostingBerry(item) && aiData->hpPercents[battlerAtk] > 60) ADJUST_SCORE(WEAK_EFFECT); else if (ShouldRestoreHpBerry(battlerAtk, item) && !CanAIFaintTarget(battlerAtk, battlerDef, 0) - && ((GetWhichBattlerFasterOrTies(battlerAtk, battlerDef, TRUE) == 1 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0)) + && ((AI_GetWhichBattlerFasterOrTies(battlerAtk, battlerDef, TRUE) == 1 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0)) || !CanTargetFaintAiWithMod(battlerDef, battlerAtk, toHeal, 0))) ADJUST_SCORE(WEAK_EFFECT); // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry } @@ -4675,29 +5112,14 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_AURORA_VEIL) ADJUST_SCORE(DECENT_EFFECT); break; - case EFFECT_SKILL_SWAP: - if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) - break; - else if (gAbilitiesInfo[aiData->abilities[battlerDef]].aiRating > gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating) - ADJUST_SCORE(DECENT_EFFECT); - break; - case EFFECT_WORRY_SEED: - case EFFECT_GASTRO_ACID: - case EFFECT_SIMPLE_BEAM: - if (IsAbilityOfRating(aiData->abilities[battlerDef], 5)) - ADJUST_SCORE(DECENT_EFFECT); - break; + case EFFECT_DOODLE: case EFFECT_ENTRAINMENT: - if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) - break; - if (aiData->abilities[battlerDef] != aiData->abilities[battlerAtk] && !(gStatuses3[battlerDef] & STATUS3_GASTRO_ACID)) - { - if (gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating <= 0) - ADJUST_SCORE(DECENT_EFFECT); - else if (IsAbilityOfRating(aiData->abilities[battlerDef], 5) && gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating <= 3) - ADJUST_SCORE(WEAK_EFFECT); - } - break; + case EFFECT_GASTRO_ACID: + case EFFECT_ROLE_PLAY: + case EFFECT_SKILL_SWAP: + case EFFECT_OVERWRITE_ABILITY: + AbilityChangeScore(battlerAtk, battlerDef, move, &score, aiData); + return score; case EFFECT_IMPRISON: if (predictedMove != MOVE_NONE && HasMove(battlerAtk, predictedMove)) ADJUST_SCORE(DECENT_EFFECT); @@ -4705,7 +5127,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(WEAK_EFFECT); break; case EFFECT_REFRESH: - if (gBattleMons[battlerAtk].status1 & STATUS1_ANY) + if ((gBattleMons[battlerAtk].status1 & STATUS1_CAN_MOVE) + && ShouldCureStatus(battlerAtk, battlerAtk, aiData)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_TAKE_HEART: @@ -4741,11 +5164,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(WEAK_EFFECT); break; case EFFECT_TICKLE: - if (gBattleMons[battlerDef].statStages[STAT_DEF] > 4 && HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) - && aiData->abilities[battlerDef] != ABILITY_CONTRARY && ShouldLowerDefense(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(DECENT_EFFECT); - else if (ShouldLowerAttack(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - ADJUST_SCORE(DECENT_EFFECT); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_ATK)); + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_DEF)); break; case EFFECT_COSMIC_POWER: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); @@ -4804,9 +5224,9 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_POWER_TRICK: - if (!(gStatuses3[battlerAtk] & STATUS3_POWER_TRICK) - && gBattleMons[battlerAtk].defense > gBattleMons[battlerAtk].attack - && HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL)) + if (!gBattleMons[battlerAtk].volatiles.powerTrick + && gBattleMons[battlerAtk].defense > gBattleMons[battlerAtk].attack + && HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_HEART_SWAP: @@ -4829,45 +5249,122 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_GUARD_SPLIT: - { - u32 newDefense = (gBattleMons[battlerAtk].defense + gBattleMons[battlerDef].defense) / 2; - u32 newSpDef = (gBattleMons[battlerAtk].spDefense + gBattleMons[battlerDef].spDefense) / 2; + { + u32 atkDefense = gBattleMons[battlerAtk].defense; + u32 defDefense = gBattleMons[battlerDef].defense; + u32 atkSpDefense = gBattleMons[battlerAtk].spDefense; + u32 defSpDefense = gBattleMons[battlerDef].spDefense; - if ((newDefense > gBattleMons[battlerAtk].defense && newSpDef >= gBattleMons[battlerAtk].spDefense) - || (newSpDef > gBattleMons[battlerAtk].spDefense && newDefense >= gBattleMons[battlerAtk].defense)) - ADJUST_SCORE(DECENT_EFFECT); - } + // It's actually * 100 and / 2; + u32 newDefense = (atkDefense + defDefense) * 50; + u32 newSpDefense = (atkSpDefense + defSpDefense) * 50; + + // We want to massively raise our defense. + if (newDefense > atkDefense * GUARD_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (newSpDefense > atkSpDefense * GUARD_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + + // We also want to massively lower theirs. + if (newDefense < defDefense * GUARD_SPLIT_ENEMY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (newSpDefense < defSpDefense * GUARD_SPLIT_ENEMY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + + ADJUST_SCORE(WORST_EFFECT); break; + } case EFFECT_POWER_SPLIT: + { + u32 atkAttack = gBattleMons[battlerAtk].attack; + u32 defAttack = gBattleMons[battlerDef].attack; + u32 atkSpAttack = gBattleMons[battlerAtk].spAttack; + u32 defSpAttack = gBattleMons[battlerDef].spAttack; + + // It's actually * 100 and / 2 + u32 newAttack = (atkAttack + defAttack) * 50; + u32 newSpAtk = (atkSpAttack + defSpAttack) * 50; + + if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) && newAttack > atkAttack * POWER_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && newSpAtk > atkSpAttack * POWER_SPLIT_ALLY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (newAttack < defAttack * POWER_SPLIT_ENEMY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + if (newSpAtk < defSpAttack * POWER_SPLIT_ENEMY_PERCENTAGE) + ADJUST_AND_RETURN_SCORE(GOOD_EFFECT); + + ADJUST_SCORE(WORST_EFFECT); + break; + } + case EFFECT_ELECTRIC_TERRAIN: + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN)) { - u32 newAttack = (gBattleMons[battlerAtk].attack + gBattleMons[battlerDef].attack) / 2; - u32 newSpAtk = (gBattleMons[battlerAtk].spAttack + gBattleMons[battlerDef].spAttack) / 2; - - if ((newAttack > gBattleMons[battlerAtk].attack && newSpAtk >= gBattleMons[battlerAtk].spAttack) - || (newSpAtk > gBattleMons[battlerAtk].spAttack && newAttack >= gBattleMons[battlerAtk].attack)) - ADJUST_SCORE(DECENT_EFFECT); + ADJUST_SCORE(GOOD_EFFECT); + if (gBattleMons[battlerAtk].volatiles.yawn && AI_IsBattlerGrounded(battlerAtk)) + ADJUST_SCORE(BEST_EFFECT); + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_TERRAIN_PULSE)) + ADJUST_SCORE(WEAK_EFFECT); } break; - case EFFECT_ELECTRIC_TERRAIN: case EFFECT_MISTY_TERRAIN: - if (gStatuses3[battlerAtk] & STATUS3_YAWN && IsBattlerGrounded(battlerAtk)) - ADJUST_SCORE(BEST_EFFECT); + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_MISTY_TERRAIN)) + { + ADJUST_SCORE(GOOD_EFFECT); + if (gBattleMons[battlerAtk].volatiles.yawn && AI_IsBattlerGrounded(battlerAtk)) + ADJUST_SCORE(BEST_EFFECT); + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_TERRAIN_PULSE)) + ADJUST_SCORE(WEAK_EFFECT); + } + break; case EFFECT_GRASSY_TERRAIN: + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_GRASSY_TERRAIN)) + { + ADJUST_SCORE(GOOD_EFFECT); + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_TERRAIN_PULSE)) + ADJUST_SCORE(WEAK_EFFECT); + } + break; case EFFECT_PSYCHIC_TERRAIN: - ADJUST_SCORE(GOOD_EFFECT); - if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER) + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN)) + { ADJUST_SCORE(GOOD_EFFECT); + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_TERRAIN_PULSE)) + ADJUST_SCORE(WEAK_EFFECT); + } + break; + case EFFECT_STEEL_ROLLER: + { + u32 terrain = gFieldStatuses & STATUS_FIELD_TERRAIN_ANY; + if (ShouldClearFieldStatus(battlerAtk, terrain)) + ADJUST_SCORE(GOOD_EFFECT); + if (ShouldSetFieldStatus(battlerDef, terrain)) + ADJUST_SCORE(DECENT_EFFECT); + } + break; + case EFFECT_ICE_SPINNER: + { + u32 terrain = gFieldStatuses & STATUS_FIELD_TERRAIN_ANY; + if (ShouldClearFieldStatus(battlerAtk, terrain)) + ADJUST_SCORE(GOOD_EFFECT); + if (ShouldSetFieldStatus(battlerDef, terrain)) + ADJUST_SCORE(DECENT_EFFECT); + } break; case EFFECT_PLEDGE: - if (isDoubleBattle && HasMoveWithEffect(BATTLE_PARTNER(battlerAtk), EFFECT_PLEDGE)) + if (hasPartner && HasMoveWithEffect(BATTLE_PARTNER(battlerAtk), EFFECT_PLEDGE)) ADJUST_SCORE(GOOD_EFFECT); // Partner might use pledge move break; case EFFECT_TRICK_ROOM: if (!(gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_POWERFUL_STATUS)) { - if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) + if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM)) ADJUST_SCORE(GOOD_EFFECT); - else if ((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) >= GetBattlerSideSpeedAverage(battlerDef)) + // Set it for next pokemon in singles. + else if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && !hasPartner && (CountUsablePartyMons(battlerAtk) != 0)) + ADJUST_SCORE(DECENT_EFFECT); + // Don't unset it on last turn. + else if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer > 1 && ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM)) ADJUST_SCORE(GOOD_EFFECT); } break; @@ -4875,7 +5372,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(WEAK_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_NONE && aiData->holdEffects[battlerDef] != HOLD_EFFECT_NONE) ADJUST_SCORE(WEAK_EFFECT); - if (isDoubleBattle && aiData->holdEffects[BATTLE_PARTNER(battlerAtk)] == HOLD_EFFECT_NONE && aiData->holdEffects[BATTLE_PARTNER(battlerDef)] != HOLD_EFFECT_NONE) + if (!isBattle1v1 && aiData->holdEffects[BATTLE_PARTNER(battlerAtk)] == HOLD_EFFECT_NONE && aiData->holdEffects[BATTLE_PARTNER(battlerDef)] != HOLD_EFFECT_NONE) ADJUST_SCORE(WEAK_EFFECT); break; case EFFECT_WONDER_ROOM: @@ -4884,18 +5381,23 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_GRAVITY: - if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) + if (!(gFieldStatuses & STATUS_FIELD_GRAVITY || ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_GRAVITY))) { - if (HasSleepMoveWithLowAccuracy(battlerAtk, battlerDef)) // Has Gravity for a move like Hypnosis + // improve accuracy of Hypnosis + if (HasSleepMoveWithLowAccuracy(battlerAtk, battlerDef) + || HasSleepMoveWithLowAccuracy(BATTLE_PARTNER(battlerAtk), battlerDef)) IncreaseSleepScore(battlerAtk, battlerDef, move, &score); - if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef])) + if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, TRUE) + || HasMoveWithLowAccuracy(BATTLE_PARTNER(battlerAtk), battlerDef, 90, TRUE)) + ADJUST_SCORE(WEAK_EFFECT); + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_GRAVITY)) ADJUST_SCORE(DECENT_EFFECT); } break; case EFFECT_ION_DELUGE: if ((aiData->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE - || (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) + || (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) && predictedType == TYPE_NORMAL) ADJUST_SCORE(DECENT_EFFECT); break; @@ -4931,19 +5433,20 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_TELEKINESIS: - if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]) - || !IsBattlerGrounded(battlerDef)) + if (HasMoveWithLowAccuracy(battlerAtk, battlerDef, 90, FALSE) || !AI_IsBattlerGrounded(battlerDef)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_HEAL_BLOCK: - if (AI_IsFaster(battlerAtk, battlerDef, move) && predictedMove != MOVE_NONE && IsHealingMove(predictedMove)) + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && predictedMove != MOVE_NONE && IsHealingMove(predictedMove)) ADJUST_SCORE(DECENT_EFFECT); // Try to cancel healing move else if (HasHealingEffect(battlerDef) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS || (aiData->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON))) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_SOAK: - if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) || (HasMoveWithEffect(battlerAtk, EFFECT_SUPER_EFFECTIVE_ON_ARG) && GetMoveArgType(move) == TYPE_WATER) ) + if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) + || HasMoveWithType(BATTLE_PARTNER(battlerAtk), TYPE_ELECTRIC) || HasMoveWithType(BATTLE_PARTNER(battlerAtk), TYPE_GRASS) + || (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_SUPER_EFFECTIVE_ON_ARG) && GetMoveArgType(move) == TYPE_WATER) ) ADJUST_SCORE(DECENT_EFFECT); // Get some super effective moves break; case EFFECT_THIRD_TYPE: @@ -4954,7 +5457,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (predictedMove != MOVE_NONE && (aiData->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || aiData->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE - || (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD))) + || (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && aiData->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD))) { ADJUST_SCORE(DECENT_EFFECT); } @@ -4968,22 +5471,58 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_QUASH: - if (isDoubleBattle && AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove)) + if (hasPartner && AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(DECENT_EFFECT); // Attacker partner wouldn't go before target break; case EFFECT_TAILWIND: - if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) - ADJUST_SCORE(GOOD_EFFECT); + { + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer > 1) + break; + + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_ELECTRO_BALL)) + ADJUST_SCORE(WEAK_EFFECT); + + if (isBattle1v1) + { + if (aiData->speedStats[battlerAtk] * 2 > aiData->speedStats[battlerDef]) + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); + + if (CountUsablePartyMons(battlerAtk) != 0) + ADJUST_SCORE(WEAK_EFFECT); + } + else + { + u32 tailwindScore = 0; + u32 speed = aiData->speedStats[battlerAtk]; + u32 partnerSpeed = aiData->speedStats[BATTLE_PARTNER(battlerAtk)]; + u32 foe1Speed = aiData->speedStats[LEFT_FOE(battlerAtk)]; + u32 foe2Speed = aiData->speedStats[RIGHT_FOE(battlerAtk)]; + + if (speed <= foe1Speed && (speed * 2) > foe1Speed) + tailwindScore += 1; + if (speed <= foe2Speed && (speed * 2) > foe2Speed) + tailwindScore += 1; + if (partnerSpeed <= foe1Speed && (speed * 2) > foe1Speed) + tailwindScore += 1; + if (partnerSpeed <= foe1Speed && (speed * 2) > foe1Speed) + tailwindScore += 1; + + if (tailwindScore > 0) + tailwindScore += 1; + + ADJUST_SCORE(tailwindScore); + } break; + } case EFFECT_LUCKY_CHANT: - if (!isDoubleBattle && CountUsablePartyMons(battlerDef) > 0) + if (isBattle1v1 && CountUsablePartyMons(battlerDef) > 0) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_MAGNET_RISE: - if (IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC) + if (AI_IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC) && !(effectiveness == UQ_4_12(0.0))) // Doesn't resist ground move { - if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker goes first { if (predictedType == TYPE_GROUND) ADJUST_SCORE(GOOD_EFFECT); // Cause the enemy's move to fail @@ -4998,7 +5537,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_CAMOUFLAGE: - if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move) // Attacker goes first + if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) // Attacker goes first && !IsBattleMoveStatus(move) && effectiveness != UQ_4_12(0.0)) ADJUST_SCORE(DECENT_EFFECT); break; @@ -5019,22 +5558,22 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SHORE_UP: - if ((AI_GetWeather() & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67, AI_DEFENDING)) + if ((AI_GetWeather() & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67)) ADJUST_SCORE(DECENT_EFFECT); - else if (ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING)) + else if (ShouldRecover(battlerAtk, battlerDef, move, 50)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_ENDEAVOR: - if (AI_IsSlower(battlerAtk, battlerDef, move) && !CanTargetFaintAi(battlerDef, battlerAtk)) + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && !CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_REVIVAL_BLESSING: if (GetFirstFaintedPartyIndex(battlerAtk) != PARTY_SIZE) { ADJUST_SCORE(DECENT_EFFECT); - if (gAiLogicData->shouldSwitch & (1u << battlerAtk)) // Bad matchup + if (aiData->shouldSwitch & (1u << battlerAtk)) // Bad matchup ADJUST_SCORE(WEAK_EFFECT); - if (gAiLogicData->mostSuitableMonId[battlerAtk] != PARTY_SIZE) // Good mon to send in after + if (aiData->mostSuitableMonId[battlerAtk] != PARTY_SIZE) // Good mon to send in after ADJUST_SCORE(WEAK_EFFECT); } break; @@ -5047,21 +5586,27 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) //case EFFECT_SKY_DROP //break; case EFFECT_JUNGLE_HEALING: - if (ShouldRecover(battlerAtk, battlerDef, move, 25, AI_DEFENDING) - || ShouldRecover(BATTLE_PARTNER(battlerAtk), battlerDef, move, 25, AI_DEFENDING) - || gBattleMons[battlerAtk].status1 & STATUS1_ANY - || gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY) + { + bool32 canCureSelf = (gBattleMons[battlerAtk].status1 & STATUS1_ANY) && ShouldCureStatus(battlerAtk, battlerAtk, aiData); + bool32 canCurePartner = (gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY) && ShouldCureStatus(battlerAtk, BATTLE_PARTNER(battlerAtk), aiData); + + if (ShouldRecover(battlerAtk, battlerDef, move, 25) + || ShouldRecover(BATTLE_PARTNER(battlerAtk), battlerDef, move, 25) + || canCureSelf + || canCurePartner) ADJUST_SCORE(GOOD_EFFECT); break; + } case EFFECT_RAPID_SPIN: - if ((gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0) - || (gStatuses3[battlerAtk] & STATUS3_LEECHSEED || gBattleMons[battlerAtk].status2 & STATUS2_WRAPPED)) + if ((AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0) + || (gBattleMons[battlerAtk].volatiles.leechSeed || gBattleMons[battlerAtk].volatiles.wrapped)) ADJUST_SCORE(GOOD_EFFECT); + break; case EFFECT_SPECTRAL_THIEF: ADJUST_SCORE(AI_ShouldCopyStatChanges(battlerAtk, battlerDef)); break; case EFFECT_SMACK_DOWN: - if (!IsBattlerGrounded(battlerDef) && HasDamagingMoveOfType(battlerAtk, TYPE_GROUND) && !CanTargetFaintAi(battlerDef, battlerAtk)) + if (!AI_IsBattlerGrounded(battlerDef) && HasDamagingMoveOfType(battlerAtk, TYPE_GROUND) && !CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_KNOCK_OFF: @@ -5082,15 +5627,84 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } } break; + case EFFECT_STEAL_ITEM: + { + bool32 canSteal = FALSE; + + if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE) + canSteal = TRUE; + + if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || IsOnPlayerSide(battlerAtk)) + canSteal = TRUE; + + if (canSteal && aiData->items[battlerAtk] == ITEM_NONE + && aiData->items[battlerDef] != ITEM_NONE + && CanBattlerGetOrLoseItem(battlerDef, aiData->items[battlerDef]) + && CanBattlerGetOrLoseItem(battlerAtk, aiData->items[battlerDef]) + && !HasMoveWithEffect(battlerAtk, EFFECT_ACROBATICS) + && aiData->abilities[battlerDef] != ABILITY_STICKY_HOLD) + { + switch (aiData->holdEffects[battlerDef]) + { + case HOLD_EFFECT_NONE: + break; + case HOLD_EFFECT_CHOICE_BAND: + case HOLD_EFFECT_CHOICE_SCARF: + case HOLD_EFFECT_CHOICE_SPECS: + ADJUST_SCORE(DECENT_EFFECT); + break; + case HOLD_EFFECT_TOXIC_ORB: + if (ShouldPoison(battlerAtk, battlerAtk)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case HOLD_EFFECT_FLAME_ORB: + if (ShouldBurn(battlerAtk, battlerAtk, aiData->abilities[battlerAtk])) + ADJUST_SCORE(DECENT_EFFECT); + break; + case HOLD_EFFECT_BLACK_SLUDGE: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case HOLD_EFFECT_IRON_BALL: + if (HasMoveWithEffect(battlerAtk, EFFECT_FLING)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case HOLD_EFFECT_LAGGING_TAIL: + case HOLD_EFFECT_STICKY_BARB: + break; + default: + ADJUST_SCORE(WEAK_EFFECT); + break; + } + } + break; + } + break; default: break; } // move effect checks + return score; +} + +static s32 AI_CalcAdditionalEffectScore(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData) +{ + // move data + s32 score = 0; + + u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, aiData); + bool32 hasPartner = HasPartner(battlerAtk); + u32 i; u32 additionalEffectCount = GetMoveAdditionalEffectCount(move); + + if (IsSheerForceAffected(move, aiData->abilities[battlerAtk])) + return score; + // check move additional effects that are likely to happen for (i = 0; i < additionalEffectCount; i++) { const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); + // Only consider effects with a guaranteed chance to happen if (!MoveEffectIsGuaranteed(battlerAtk, aiData->abilities[battlerAtk], additionalEffect)) continue; @@ -5128,6 +5742,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_EVS_PLUS_2: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION)); break; + default: + break; } } else @@ -5171,152 +5787,233 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF)); break; + default: + break; } } } else // consider move effects that hinder the target { + if (IsAdditionalEffectBlocked(battlerAtk, aiData->abilities[battlerAtk], battlerDef, aiData->abilities[battlerDef])) + continue; + switch (additionalEffect->moveEffect) { - case MOVE_EFFECT_FLINCH: - score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move); - break; - case MOVE_EFFECT_SPD_MINUS_1: - case MOVE_EFFECT_SPD_MINUS_2: - if (!ShouldLowerSpeed(battlerAtk, battlerDef, aiData->abilities[battlerDef])) - break; - case MOVE_EFFECT_ATK_MINUS_1: - case MOVE_EFFECT_DEF_MINUS_1: - case MOVE_EFFECT_SP_ATK_MINUS_1: - case MOVE_EFFECT_SP_DEF_MINUS_1: - case MOVE_EFFECT_ACC_MINUS_1: - case MOVE_EFFECT_EVS_MINUS_1: - if (aiData->abilities[battlerDef] != ABILITY_CONTRARY) - ADJUST_SCORE(DECENT_EFFECT); - break; - case MOVE_EFFECT_ATK_MINUS_2: - case MOVE_EFFECT_DEF_MINUS_2: - case MOVE_EFFECT_SP_ATK_MINUS_2: - case MOVE_EFFECT_SP_DEF_MINUS_2: - case MOVE_EFFECT_ACC_MINUS_2: - case MOVE_EFFECT_EVS_MINUS_2: - if (aiData->abilities[battlerDef] != ABILITY_CONTRARY) - ADJUST_SCORE(DECENT_EFFECT); - break; - case MOVE_EFFECT_POISON: - IncreasePoisonScore(battlerAtk, battlerDef, move, &score); + case MOVE_EFFECT_FLINCH: + score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move); + break; + case MOVE_EFFECT_SPD_MINUS_1: + case MOVE_EFFECT_SPD_MINUS_2: + if (CanLowerStat(battlerAtk, battlerDef, aiData, STAT_SPEED)) + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_SPEED)); + break; + case MOVE_EFFECT_ACC_MINUS_1: + case MOVE_EFFECT_ACC_MINUS_2: + if (CanLowerStat(battlerAtk, battlerDef, aiData, STAT_ACC)) + { + u32 scoreIncrease = IncreaseStatDownScore(battlerAtk, battlerDef, STAT_ACC); + if (scoreIncrease == WEAK_EFFECT) + scoreIncrease = DECENT_EFFECT; + ADJUST_SCORE(scoreIncrease); + } + break; + case MOVE_EFFECT_ATK_MINUS_1: + case MOVE_EFFECT_DEF_MINUS_1: + case MOVE_EFFECT_SP_ATK_MINUS_1: + case MOVE_EFFECT_SP_DEF_MINUS_1: + case MOVE_EFFECT_EVS_MINUS_1: + { + u32 statId = STAT_ATK + additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_1; + if (CanLowerStat(battlerAtk, battlerDef, aiData, statId)) + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, statId)); + break; + } + case MOVE_EFFECT_ATK_MINUS_2: + case MOVE_EFFECT_DEF_MINUS_2: + case MOVE_EFFECT_SP_ATK_MINUS_2: + case MOVE_EFFECT_SP_DEF_MINUS_2: + case MOVE_EFFECT_EVS_MINUS_2: + { + u32 statId = STAT_ATK + additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_2; + if (CanLowerStat(battlerAtk, battlerDef, aiData, statId)) + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, statId)); + break; + } + case MOVE_EFFECT_RAISE_TEAM_ATTACK: + case MOVE_EFFECT_RAISE_TEAM_DEFENSE: + case MOVE_EFFECT_RAISE_TEAM_SPEED: + case MOVE_EFFECT_RAISE_TEAM_SP_ATK: + case MOVE_EFFECT_RAISE_TEAM_SP_DEF: + { + enum StatChange StageStatId = STAT_CHANGE_ATK + additionalEffect->moveEffect - MOVE_EFFECT_RAISE_TEAM_ATTACK; + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId)); + if (hasPartner) + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, StageStatId)); + break; + } + case MOVE_EFFECT_LOWER_ATTACK_SIDE: + case MOVE_EFFECT_LOWER_DEFENSE_SIDE: + case MOVE_EFFECT_LOWER_SPEED_SIDE: + case MOVE_EFFECT_LOWER_SP_ATK_SIDE: + case MOVE_EFFECT_LOWER_SP_DEF_SIDE: + { + u32 statId = STAT_ATK + additionalEffect->moveEffect - MOVE_EFFECT_LOWER_ATTACK_SIDE; + if (CanLowerStat(battlerAtk, battlerDef, aiData, statId)) + ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, statId)); + break; + } + case MOVE_EFFECT_POISON: + IncreasePoisonScore(battlerAtk, battlerDef, move, &score); + break; + case MOVE_EFFECT_CLEAR_SMOG: + { + bool32 moveTargetsBothOpponents = HasTwoOpponents(battlerAtk) && (gMovesInfo[move].target & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_ALL_BATTLERS)); + + score += AI_TryToClearStats(battlerAtk, battlerDef, moveTargetsBothOpponents); + break; + } + case MOVE_EFFECT_BUG_BITE: // And pluck + if (gBattleMons[battlerDef].volatiles.substitute || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) break; - case MOVE_EFFECT_CLEAR_SMOG: - score += AI_TryToClearStats(battlerAtk, battlerDef, FALSE); + else if (GetItemPocket(aiData->items[battlerDef]) == POCKET_BERRIES) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_INCINERATE: + if (gBattleMons[battlerDef].volatiles.substitute || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) break; - case MOVE_EFFECT_BUG_BITE: // And pluck - if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) - break; - else if (GetItemPocket(aiData->items[battlerDef]) == POCKET_BERRIES) + else if (GetItemPocket(aiData->items[battlerDef]) == POCKET_BERRIES || aiData->holdEffects[battlerDef] == HOLD_EFFECT_GEMS) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_STEALTH_ROCK: + if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, move, aiData)) + { + if (gDisableStructs[battlerAtk].isFirstTurn) + ADJUST_SCORE(BEST_EFFECT); + else ADJUST_SCORE(DECENT_EFFECT); - break; - case MOVE_EFFECT_INCINERATE: - if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) - break; - else if (GetItemPocket(aiData->items[battlerDef]) == POCKET_BERRIES || aiData->holdEffects[battlerDef] == HOLD_EFFECT_GEMS) + } + break; + case MOVE_EFFECT_FEINT: + if (GetMoveEffect(predictedMove) == EFFECT_PROTECT) + ADJUST_SCORE(GOOD_EFFECT); + break; + case MOVE_EFFECT_THROAT_CHOP: + if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING))) + { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, aiData); + + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) + ADJUST_SCORE(GOOD_EFFECT); + else ADJUST_SCORE(DECENT_EFFECT); + } + break; + case MOVE_EFFECT_WRAP: + if (!HasMoveWithEffect(battlerDef, EFFECT_RAPID_SPIN) && ShouldTrap(battlerAtk, battlerDef, move)) + ADJUST_SCORE(BEST_EFFECT); + break; + case MOVE_EFFECT_SALT_CURE: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_WATER) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_SUN: + if (ShouldSetWeather(battlerAtk, B_WEATHER_SUN)) + ADJUST_SCORE(DECENT_EFFECT); + if (ShouldClearWeather(battlerAtk, B_WEATHER_SUN)) + ADJUST_SCORE(BAD_EFFECT); + break; + case MOVE_EFFECT_RAIN: + if (ShouldSetWeather(battlerAtk, B_WEATHER_RAIN)) + ADJUST_SCORE(DECENT_EFFECT); + if (ShouldClearWeather(battlerAtk, B_WEATHER_RAIN)) + ADJUST_SCORE(BAD_EFFECT); + break; + case MOVE_EFFECT_SANDSTORM: + if (ShouldSetWeather(battlerAtk, B_WEATHER_SANDSTORM)) + ADJUST_SCORE(DECENT_EFFECT); + if (ShouldClearWeather(battlerAtk, B_WEATHER_SANDSTORM)) + ADJUST_SCORE(BAD_EFFECT); + break; + case MOVE_EFFECT_HAIL: + if (ShouldSetWeather(battlerAtk, B_WEATHER_HAIL)) + ADJUST_SCORE(DECENT_EFFECT); + if (ShouldClearWeather(battlerAtk, B_WEATHER_HAIL)) + ADJUST_SCORE(BAD_EFFECT); + break; + case MOVE_EFFECT_MISTY_TERRAIN: + if (ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_MISTY_TERRAIN)) + { + ADJUST_SCORE(BAD_EFFECT); break; - case MOVE_EFFECT_STEAL_ITEM: - { - bool32 canSteal = FALSE; - - if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE) - canSteal = TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER || IsOnPlayerSide(battlerAtk)) - canSteal = TRUE; - - if (canSteal && aiData->items[battlerAtk] == ITEM_NONE - && aiData->items[battlerDef] != ITEM_NONE - && CanBattlerGetOrLoseItem(battlerDef, aiData->items[battlerDef]) - && CanBattlerGetOrLoseItem(battlerAtk, aiData->items[battlerDef]) - && !HasMoveWithEffect(battlerAtk, EFFECT_ACROBATICS) - && aiData->abilities[battlerDef] != ABILITY_STICKY_HOLD) - { - switch (aiData->holdEffects[battlerDef]) - { - case HOLD_EFFECT_NONE: - break; - case HOLD_EFFECT_CHOICE_BAND: - case HOLD_EFFECT_CHOICE_SCARF: - case HOLD_EFFECT_CHOICE_SPECS: - ADJUST_SCORE(DECENT_EFFECT); - break; - case HOLD_EFFECT_TOXIC_ORB: - if (ShouldPoison(battlerAtk, battlerAtk)) - ADJUST_SCORE(DECENT_EFFECT); - break; - case HOLD_EFFECT_FLAME_ORB: - if (ShouldBurn(battlerAtk, battlerAtk, aiData->abilities[battlerAtk])) - ADJUST_SCORE(DECENT_EFFECT); - break; - case HOLD_EFFECT_BLACK_SLUDGE: - if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) - ADJUST_SCORE(DECENT_EFFECT); - break; - case HOLD_EFFECT_IRON_BALL: - if (HasMoveWithEffect(battlerAtk, EFFECT_FLING)) - ADJUST_SCORE(DECENT_EFFECT); - break; - case HOLD_EFFECT_LAGGING_TAIL: - case HOLD_EFFECT_STICKY_BARB: - break; - default: - ADJUST_SCORE(WEAK_EFFECT); - break; - } - } - break; - } - break; - case MOVE_EFFECT_STEALTH_ROCK: - case MOVE_EFFECT_SPIKES: - if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, aiData)); - { - if (gDisableStructs[battlerAtk].isFirstTurn) - ADJUST_SCORE(BEST_EFFECT); - else - ADJUST_SCORE(DECENT_EFFECT); - } - break; - case MOVE_EFFECT_FEINT: - if (GetMoveEffect(predictedMove) == EFFECT_PROTECT) - ADJUST_SCORE(GOOD_EFFECT); + } + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_MISTY_TERRAIN) + || ShouldClearFieldStatus(battlerAtk, gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_GRASSY_TERRAIN: + if (ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_GRASSY_TERRAIN)) + { + ADJUST_SCORE(BAD_EFFECT); break; - case MOVE_EFFECT_THROAT_CHOP: - if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING))) - { - if (AI_IsFaster(battlerAtk, battlerDef, move)) - ADJUST_SCORE(GOOD_EFFECT); - else - ADJUST_SCORE(DECENT_EFFECT); - } + } + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_GRASSY_TERRAIN) + || ShouldClearFieldStatus(battlerAtk, gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_ELECTRIC_TERRAIN: + if (ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN)) + { + ADJUST_SCORE(BAD_EFFECT); break; - case MOVE_EFFECT_WRAP: - if (!HasMoveWithEffect(battlerDef, EFFECT_RAPID_SPIN) && ShouldTrap(battlerAtk, battlerDef, move)) - ADJUST_SCORE(BEST_EFFECT); + } + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN) + || ShouldClearFieldStatus(battlerAtk, gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_PSYCHIC_TERRAIN: + if (ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN)) + { + ADJUST_SCORE(BAD_EFFECT); break; - case MOVE_EFFECT_SALT_CURE: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_WATER) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL)) + } + if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) + || ShouldClearFieldStatus(battlerAtk, gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_GRAVITY: + if (!(gFieldStatuses & STATUS_FIELD_GRAVITY) && ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_GRAVITY)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_AURORA_VEIL: + if (ShouldSetScreen(battlerAtk, battlerDef, EFFECT_AURORA_VEIL)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case MOVE_EFFECT_REMOVE_STATUS: + if (gBattleMons[battlerDef].status1 & GetMoveEffectArg_Status(move)) + { + if (ShouldCureStatus(battlerAtk, battlerDef, aiData)) ADJUST_SCORE(DECENT_EFFECT); - break; - + else if (aiData->holdEffects[battlerDef] == HOLD_EFFECT_FLAME_ORB || aiData->holdEffects[battlerDef] == HOLD_EFFECT_TOXIC_ORB) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(BAD_EFFECT); + } + break; + default: + break; } } } - return score; } // AI_FLAG_CHECK_VIABILITY - Chooses best possible move to hit player static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { + struct AiLogicData *aiData = gAiLogicData; + // Targeting partner, check benefits of doing that instead - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) return score; if (GetMovePower(move) != 0) @@ -5328,13 +6025,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (gAiThinkingStruct->aiFlags[battlerAtk] & (AI_FLAG_RISKY | AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE) && GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move) ADJUST_SCORE(BEST_DAMAGE_MOVE); - else - ADJUST_SCORE(AI_CompareDamagingMoves(battlerAtk, battlerDef, gAiThinkingStruct->movesetIndex)); } } - ADJUST_SCORE(AI_CalcMoveEffectScore(battlerAtk, battlerDef, move)); - ADJUST_SCORE(AI_CalcHoldEffectMoveScore(battlerAtk, battlerDef, move)); + ADJUST_SCORE(AI_CalcMoveEffectScore(battlerAtk, battlerDef, move, aiData)); + ADJUST_SCORE(AI_CalcAdditionalEffectScore(battlerAtk, battlerDef, move, aiData)); + ADJUST_SCORE(AI_CalcHoldEffectMoveScore(battlerAtk, battlerDef, move, aiData)); return score; } @@ -5342,13 +6038,14 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score // Effects that are encouraged on the first turn of battle static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { - u8 i; - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef) + if (IsTargetingPartner(battlerAtk, battlerDef) || gBattleResults.battleTurnCounter != 0) return score; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_SMART_SWITCHING - && AI_IsSlower(battlerAtk, battlerDef, move) + && AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && CanTargetFaintAi(battlerDef, battlerAtk) && GetBattleMovePriority(battlerAtk, gAiLogicData->abilities[battlerAtk], move) == 0) { @@ -5440,27 +6137,10 @@ static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 case EFFECT_CHILLY_RECEPTION: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: + case EFFECT_CEASELESS_EDGE: + case EFFECT_STONE_AXE: ADJUST_SCORE(DECENT_EFFECT); break; - case EFFECT_HIT: - { - // TEMPORARY - should applied to all moves regardless of EFFECT - // Consider move effects - u32 additionalEffectCount = GetMoveAdditionalEffectCount(move); - for (i = 0; i < additionalEffectCount; i++) - { - const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); - switch (additionalEffect->moveEffect) - { - case MOVE_EFFECT_STEALTH_ROCK: - case MOVE_EFFECT_SPIKES: - ADJUST_SCORE(DECENT_EFFECT); - break; - default: - break; - } - } - } default: break; } @@ -5474,7 +6154,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u8 i; struct AiLogicData *aiData = gAiLogicData; - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) return score; if (GetMoveCriticalHitStage(move) > 0) @@ -5484,14 +6164,15 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (GetMoveEffect(move)) { case EFFECT_COUNTER: - if (gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack + 10) + if (GetSpeciesBaseAttack(gBattleMons[battlerDef].species) >= GetSpeciesBaseSpAttack(gBattleMons[battlerDef].species) + 10) ADJUST_SCORE(STRONG_RISKY_EFFECT); break; case EFFECT_MIRROR_COAT: - if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack + 10) + if (GetSpeciesBaseSpAttack(gBattleMons[battlerDef].species) >= GetSpeciesBaseAttack(gBattleMons[battlerDef].species) + 10) ADJUST_SCORE(STRONG_RISKY_EFFECT); break; case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: ADJUST_SCORE(STRONG_RISKY_EFFECT); break; @@ -5501,7 +6182,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; case EFFECT_REVENGE: - if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpeed >= gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed + 10) + if (GetSpeciesBaseSpeed(gBattleMons[battlerDef].species) >= GetSpeciesBaseSpeed(gBattleMons[battlerAtk].species) + 10) ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; case EFFECT_BELLY_DRUM: @@ -5509,12 +6190,12 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; case EFFECT_MAX_HP_50_RECOIL: - case EFFECT_MIND_BLOWN: case EFFECT_CHLOROBLAST: case EFFECT_SWAGGER: case EFFECT_FLATTER: case EFFECT_ATTRACT: case EFFECT_OHKO: + case EFFECT_SHEER_COLD: ADJUST_SCORE(AVERAGE_RISKY_EFFECT); break; case EFFECT_HIT: @@ -5546,7 +6227,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // Adds score bonus to OHKOs and 2HKOs static s32 AI_TryTo2HKO(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) return score; if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, gAiThinkingStruct->movesetIndex, AI_ATTACKING) == 1) @@ -5557,14 +6238,39 @@ static s32 AI_TryTo2HKO(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return score; } +// Adds score bonus to targeting "partner" +static s32 AI_AttacksPartner(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) +{ + if (battlerDef == BATTLE_PARTNER(battlerAtk) + // natural enemies in wild battles try to kill each other + && ((IsNaturalEnemy(gBattleMons[battlerAtk].species, gBattleMons[battlerDef].species) && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER))) + || AI_FLAG_ATTACKS_PARTNER_FOCUSES_PARTNER)) + { + u32 movesetIndex = gAiThinkingStruct->movesetIndex; + + if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, AI_ATTACKING)) + ADJUST_SCORE(BEST_EFFECT); + + u32 hitsToKO = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, gAiThinkingStruct->movesetIndex, AI_ATTACKING); + + if (GetMoveTarget(move) == MOVE_TARGET_FOES_AND_ALLY && hitsToKO > 0 && + (GetNoOfHitsToKOBattler(battlerAtk, LEFT_FOE(battlerAtk), gAiThinkingStruct->movesetIndex, AI_ATTACKING) > 0 || GetNoOfHitsToKOBattler(battlerAtk, LEFT_FOE(battlerDef), gAiThinkingStruct->movesetIndex, AI_ATTACKING) > 0)) + ADJUST_SCORE(BEST_EFFECT); + + if (hitsToKO > 0) + ADJUST_SCORE(DECENT_EFFECT); + } + return score; +} + // Prefers moves that are good for baton pass static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef) + if (IsTargetingPartner(battlerAtk, battlerDef) || CountUsablePartyMons(battlerAtk) == 0 || !IsBattleMoveStatus(move) || !HasMoveWithEffect(battlerAtk, EFFECT_BATON_PASS) - || (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk))) + || IsBattlerTrapped(battlerAtk, battlerDef)) return score; enum BattleMoveEffects effect = GetMoveEffect(move); @@ -5583,23 +6289,23 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor switch (effect) { case EFFECT_INGRAIN: - if (!(gStatuses3[battlerAtk] & STATUS3_ROOTED)) + if (!gBattleMons[battlerAtk].volatiles.root) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_AQUA_RING: - if (!(gStatuses3[battlerAtk] & STATUS3_AQUA_RING)) + if (!gBattleMons[battlerAtk].volatiles.aquaRing) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_PROTECT: - if (gLastMoves[battlerAtk] == MOVE_PROTECT || gLastMoves[battlerAtk] == MOVE_DETECT) + if (GetProtectType(GetMoveProtectMethod(gAiLogicData->lastUsedMove[battlerAtk])) == PROTECT_TYPE_SINGLE) ADJUST_SCORE(-2); else ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_BATON_PASS: - if (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING)) + if (gBattleMons[battlerAtk].volatiles.root || gBattleMons[battlerAtk].volatiles.aquaRing) ADJUST_SCORE(DECENT_EFFECT); - if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED) + if (gBattleMons[battlerAtk].volatiles.leechSeed) ADJUST_SCORE(-3); ADJUST_SCORE(CountPositiveStatStages(battlerAtk) - CountNegativeStatStages(battlerAtk)); break; @@ -5613,23 +6319,23 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { enum BattleMoveEffects effect = GetMoveEffect(move); - u32 moveType = 0; + enum Type moveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); moveType = GetBattleMoveType(move); - if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsTargetingPartner(battlerAtk, battlerDef)) { if ((effect == EFFECT_HEAL_PULSE || effect == EFFECT_HIT_ENEMY_HEAL_ALLY) || (moveType == TYPE_ELECTRIC && gAiLogicData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_VOLT_ABSORB) || (moveType == TYPE_GROUND && gAiLogicData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_EARTH_EATER) || (moveType == TYPE_WATER && (gAiLogicData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_DRY_SKIN || gAiLogicData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_WATER_ABSORB))) { - if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battlerDef].volatiles.healBlock) return 0; - if (CanTargetFaintAi(FOE(battlerAtk), BATTLE_PARTNER(battlerAtk)) - || (CanTargetFaintAi(BATTLE_PARTNER(FOE(battlerAtk)), BATTLE_PARTNER(battlerAtk)))) + if (CanTargetFaintAi(LEFT_FOE(battlerAtk), BATTLE_PARTNER(battlerAtk)) + || CanTargetFaintAi(RIGHT_FOE(battlerAtk), BATTLE_PARTNER(battlerAtk))) ADJUST_SCORE(-1); if (gAiLogicData->hpPercents[battlerDef] <= 50) @@ -5645,6 +6351,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (effect) { case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: case EFFECT_RESTORE_HP: case EFFECT_REST: case EFFECT_DESTINY_BOND: @@ -5673,6 +6380,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (effect) { case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: case EFFECT_BIDE: case EFFECT_CONVERSION: case EFFECT_LIGHT_SCREEN: @@ -5855,7 +6563,7 @@ static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_STEALTH_ROCK: case EFFECT_STICKY_WEB: case EFFECT_TOXIC_SPIKES: - if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, gAiLogicData)) + if (AI_ShouldSetUpHazards(battlerAtk, battlerDef, move, gAiLogicData)) ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; case EFFECT_GRASSY_TERRAIN: @@ -5887,11 +6595,8 @@ static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; case EFFECT_HAIL: - if (IsWeatherActive(B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) == WEATHER_INACTIVE) - ADJUST_SCORE(POWERFUL_STATUS_MOVE); - break; case EFFECT_SNOWSCAPE: - if (IsWeatherActive(B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) == WEATHER_INACTIVE) + if (IsWeatherActive(B_WEATHER_ICY_ANY | B_WEATHER_PRIMAL_ANY) == WEATHER_INACTIVE) ADJUST_SCORE(POWERFUL_STATUS_MOVE); break; default: @@ -5901,17 +6606,36 @@ static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score return score; } +bool32 DoesSideHaveDamagingHazards(u32 side) +{ + for (u32 counter = 0; counter < HAZARDS_MAX_COUNT; counter++) + { + switch (gBattleStruct->hazardsQueue[side][counter]) + { + case HAZARDS_SPIKES: + case HAZARDS_TOXIC_SPIKES: + case HAZARDS_STEALTH_ROCK: + case HAZARDS_STEELSURGE: + return TRUE; + default: + return FALSE; + } + } + return FALSE; +} + static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 i; u32 unmodifiedScore = score; - u32 ability = gBattleMons[battlerAtk].ability; - u32 opposingHazardFlags = gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_TOXIC_SPIKES); - u32 aiHazardFlags = gSideStatuses[GetBattlerSide(battlerAtk)] & (SIDE_STATUS_HAZARDS_ANY); + enum Ability ability = gBattleMons[battlerAtk].ability; + bool32 opposingHazardFlags = DoesSideHaveDamagingHazards(GetBattlerSide(battlerDef)); + bool32 aiHazardFlags = AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)); enum BattleMoveEffects moveEffect = GetMoveEffect(move); struct AiLogicData *aiData = gAiLogicData; uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex]; u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); // Switch benefit switch (moveEffect) @@ -5923,7 +6647,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(GOOD_EFFECT); else if (hitsToKO == 1) ADJUST_SCORE(BEST_EFFECT); - else if (IsSwitchOutEffect(GetMoveEffect(predictedMove)) && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Pursuit against fast U-Turn + else if (IsSwitchOutEffect(GetMoveEffect(predictedMove)) && AI_WhoStrikesFirst(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) == AI_IS_SLOWER) // Pursuit against fast U-Turn ADJUST_SCORE(DECENT_EFFECT); break; } @@ -5934,9 +6658,10 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < UQ_4_12(2.0)) ADJUST_SCORE(10); - if (HasDamagingMove(battlerDef) && !((gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE) + if (HasDamagingMove(battlerDef) && !(gBattleMons[battlerAtk].volatiles.substitute || IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) - || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))) + || gBattleMons[battlerDef].volatiles.infatuation + || gBattleMons[battlerDef].volatiles.confusionTurns > 0)) ADJUST_SCORE(10); } break; @@ -5968,21 +6693,21 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_HIT_SWITCH_TARGET: - if (opposingHazardFlags != 0) + if (opposingHazardFlags) ADJUST_SCORE(BEST_EFFECT); else ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_ROAR: - if (opposingHazardFlags != 0) + if (opposingHazardFlags) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_RAPID_SPIN: - if (aiHazardFlags != 0) + if (aiHazardFlags) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_DEFOG: - if (aiHazardFlags != 0) + if (aiHazardFlags) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_WISH: @@ -6014,7 +6739,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_ION_DELUGE: case EFFECT_MAGIC_COAT: case EFFECT_SNATCH: - ADJUST_SCORE(-BEST_EFFECT); + ADJUST_SCORE(WORST_EFFECT); break; // Get stuck in bad matchup @@ -6024,7 +6749,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_INGRAIN: case EFFECT_NO_RETREAT: case EFFECT_MEAN_LOOK: - ADJUST_SCORE(-GOOD_EFFECT); + ADJUST_SCORE(AWFUL_EFFECT); break; default: @@ -6036,18 +6761,20 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { switch (GetMoveAdditionalEffectById(move, i)->moveEffect) { - case MOVE_EFFECT_WRAP: - ADJUST_SCORE(-GOOD_EFFECT); - break; - case MOVE_EFFECT_FEINT: - ADJUST_SCORE(-BEST_EFFECT); - break; + case MOVE_EFFECT_WRAP: + ADJUST_SCORE(AWFUL_EFFECT); + break; + case MOVE_EFFECT_FEINT: + ADJUST_SCORE(WORST_EFFECT); + break; + default: + break; } } // Take advantage of ability damage bonus if ((ability == ABILITY_STAKEOUT || ability == ABILITY_ANALYTIC) && IsBattleMoveStatus(move)) - ADJUST_SCORE(-WEAK_EFFECT); + ADJUST_SCORE(BAD_EFFECT); // This must be last or the player can gauge whether the AI is predicting based on how long it thinks if (!IsBattlerPredictedToSwitch(battlerDef)) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index c6a4b8708f04..05091a815e32 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -7,7 +7,6 @@ #include "battle_anim.h" #include "battle_controllers.h" #include "battle_main.h" -#include "constants/hold_effects.h" #include "battle_setup.h" #include "data.h" #include "item.h" @@ -29,8 +28,9 @@ static bool32 AiExpectsToFaintPlayer(u32 battler); static bool32 AI_ShouldHeal(u32 battler, u32 healAmount); static bool32 AI_OpponentCanFaintAiWithMod(u32 battler, u32 healAmount); static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon); -static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent); +static bool32 CanAbilityTrapOpponent(enum Ability ability, u32 opponent); static u32 GetHPHealAmount(u8 itemEffectParam, struct Pokemon *mon); +static u32 GetBattleMonTypeMatchup(struct BattlePokemon opposingBattleMon, struct BattlePokemon battleMon); static void InitializeSwitchinCandidate(struct Pokemon *mon) { @@ -110,11 +110,11 @@ u32 GetSwitchChance(enum ShouldSwitchScenario shouldSwitchScenario) static bool32 IsAceMon(u32 battler, u32 monPartyId) { - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_ACE_POKEMON + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_ACE_POKEMON && !gBattleStruct->battlerState[battler].forcedSwitch && monPartyId == CalculateEnemyPartyCountInSide(battler)-1) return TRUE; - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_DOUBLE_ACE_POKEMON + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_DOUBLE_ACE_POKEMON && !gBattleStruct->battlerState[battler].forcedSwitch && (monPartyId == CalculateEnemyPartyCount()-1 || monPartyId == CalculateEnemyPartyCount()-2)) return TRUE; @@ -160,30 +160,61 @@ static inline bool32 SetSwitchinAndSwitch(u32 battler, u32 switchinId) return TRUE; } -static bool32 AI_DoesChoiceItemBlockMove(u32 battler, u32 move) +static bool32 AI_DoesChoiceEffectBlockMove(u32 battler, u32 move) { // Choice locked into something else - if (gAiLogicData->lastUsedMove[battler] != MOVE_NONE && gAiLogicData->lastUsedMove[battler] != move && HOLD_EFFECT_CHOICE(GetBattlerHoldEffect(battler, FALSE)) && IsBattlerItemEnabled(battler)) + if (gAiLogicData->lastUsedMove[battler] != MOVE_NONE && gAiLogicData->lastUsedMove[battler] != move + && (IsHoldEffectChoice(GetBattlerHoldEffect(battler) && IsBattlerItemEnabled(battler)) + || gBattleMons[battler].ability == ABILITY_GORILLA_TACTICS)) return TRUE; return FALSE; } +static inline bool32 CanBattlerWin1v1(u32 hitsToKOAI, u32 hitsToKOPlayer, bool32 isBattlerFirst) +{ + // Player's best move deals 0 damage + if (hitsToKOAI == 0 && hitsToKOPlayer > 0) + return TRUE; + + // AI's best move deals 0 damage + if (hitsToKOPlayer == 0 && hitsToKOAI > 0) + return FALSE; + + // Neither mon can damage the other + if (hitsToKOPlayer == 0 && hitsToKOAI == 0) + return FALSE; + + // Different KO thresholds depending on who goes first + if (isBattlerFirst) + { + if (hitsToKOAI >= hitsToKOPlayer) + return TRUE; + } + else + { + if (hitsToKOAI > hitsToKOPlayer) + return TRUE; + } + return FALSE; +} + // Note that as many return statements as possible are INTENTIONALLY put after all of the loops; // the function can take a max of about 0.06s to run, and this prevents the player from identifying // whether the mon will switch or not by seeing how long the delay is before they select a move static bool32 ShouldSwitchIfHasBadOdds(u32 battler) { //Variable initialization - u8 opposingPosition, atkType1, atkType2, defType1, defType2; - s32 i, damageDealt = 0, maxDamageDealt = 0, damageTaken = 0, maxDamageTaken = 0; - u32 aiMove, playerMove, aiBestMove = MOVE_NONE, aiAbility = gAiLogicData->abilities[battler], opposingBattler; + u8 opposingPosition; + s32 i, damageDealt = 0, maxDamageDealt = 0, damageTaken = 0, maxDamageTaken = 0, maxDamageTakenPriority = 0; + u32 aiMove, playerMove, bestPlayerPriorityMove = MOVE_NONE, bestPlayerMove = MOVE_NONE, expectedMove = MOVE_NONE, aiAbility = gAiLogicData->abilities[battler], opposingBattler; bool32 getsOneShot = FALSE, hasStatusMove = FALSE, hasSuperEffectiveMove = FALSE; - u16 typeEffectiveness = UQ_4_12(1.0); //baseline typing damage + u32 typeMatchup; enum BattleMoveEffects aiMoveEffect; - u32 hitsToKoPlayer = 0, hitsToKoAI = 0; + u32 hitsToKoAI = 0, hitsToKoAIPriority = 0, hitsToKoPlayer = 0; + bool32 canBattlerWin1v1 = FALSE, isBattlerFirst, isBattlerFirstPriority; // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer - if (!(gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) + if (!(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic @@ -192,24 +223,43 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); opposingBattler = GetBattlerAtPosition(opposingPosition); + u16 *playerMoves = GetMovesArray(opposingBattler); + + // Get max damage mon could take + for (i = 0; i < MAX_MON_MOVES; i++) + { + playerMove = SMART_SWITCHING_OMNISCIENT ? gBattleMons[opposingBattler].moves[i] : playerMoves[i]; + if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH && gBattleMons[opposingBattler].pp[i] > 0) + { + damageTaken = AI_GetDamage(opposingBattler, battler, i, AI_DEFENDING, gAiLogicData); + if (damageTaken > maxDamageTaken && !AI_DoesChoiceEffectBlockMove(opposingBattler, playerMove)) + { + maxDamageTaken = damageTaken; + bestPlayerMove = playerMove; + } + if (GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], playerMove) > 0 && damageTaken > maxDamageTakenPriority && !AI_DoesChoiceEffectBlockMove(opposingBattler, playerMove)) + { + maxDamageTakenPriority = damageTaken; + bestPlayerPriorityMove = playerMove; + } + } + } - // Gets types of player (opposingBattler) and computer (battler) - atkType1 = gBattleMons[opposingBattler].types[0]; - atkType2 = gBattleMons[opposingBattler].types[1]; - defType1 = gBattleMons[battler].types[0]; - defType2 = gBattleMons[battler].types[1]; + hitsToKoAI = GetNoOfHitsToKOBattlerDmg(maxDamageTaken, battler); + hitsToKoAIPriority = GetNoOfHitsToKOBattlerDmg(maxDamageTakenPriority, battler); + expectedMove = gAiThinkingStruct->aiFlags[battler] & AI_FLAG_PREDICT_MOVE ? GetIncomingMove(battler, opposingBattler, gAiLogicData) : bestPlayerMove; for (i = 0; i < MAX_MON_MOVES; i++) { aiMove = gBattleMons[battler].moves[i]; aiMoveEffect = GetMoveEffect(aiMove); - if (aiMove != MOVE_NONE) + if (aiMove != MOVE_NONE && gBattleMons[battler].pp[i] > 0) { u32 nonVolatileStatus = GetMoveNonVolatileStatus(aiMove); // Check if mon has an "important" status move if (aiMoveEffect == EFFECT_REFLECT || aiMoveEffect == EFFECT_LIGHT_SCREEN || aiMoveEffect == EFFECT_SPIKES || aiMoveEffect == EFFECT_TOXIC_SPIKES || aiMoveEffect == EFFECT_STEALTH_ROCK || aiMoveEffect == EFFECT_STICKY_WEB || aiMoveEffect == EFFECT_LEECH_SEED - || aiMoveEffect == EFFECT_EXPLOSION + || aiMoveEffect == EFFECT_EXPLOSION || aiMoveEffect == EFFECT_MISTY_EXPLOSION || nonVolatileStatus == MOVE_EFFECT_SLEEP || nonVolatileStatus == MOVE_EFFECT_TOXIC || nonVolatileStatus == MOVE_EFFECT_PARALYSIS @@ -222,64 +272,39 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) } // Only check damage if it's a damaging move - if (!IsBattleMoveStatus(aiMove)) + if (!IsBattleMoveStatus(aiMove) && !AI_DoesChoiceEffectBlockMove(battler, aiMove)) { // Check if mon has a super effective move - if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0) && !AI_DoesChoiceItemBlockMove(battler, aiMove)) + if (gAiLogicData->effectiveness[battler][opposingBattler][i] >= UQ_4_12(2.0)) hasSuperEffectiveMove = TRUE; // Get maximum damage mon can deal damageDealt = AI_GetDamage(battler, opposingBattler, i, AI_ATTACKING, gAiLogicData); - if (damageDealt > maxDamageDealt && !AI_DoesChoiceItemBlockMove(battler, aiMove)) - { + if (damageDealt > maxDamageDealt) maxDamageDealt = damageDealt; - aiBestMove = aiMove; + if (!canBattlerWin1v1 ) // Once we can win a 1v1 we don't need to track this, but want to run the rest of the function to keep the runtime the same regardless of when we find the winning move + { + hitsToKoPlayer = GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler); + isBattlerFirst = AI_IsFaster(battler, opposingBattler, aiMove, expectedMove, CONSIDER_PRIORITY); + isBattlerFirstPriority = AI_IsFaster(battler, opposingBattler, aiMove, bestPlayerPriorityMove, CONSIDER_PRIORITY); + canBattlerWin1v1 = CanBattlerWin1v1(hitsToKoAI, hitsToKoPlayer, isBattlerFirst) && CanBattlerWin1v1(hitsToKoAIPriority, hitsToKoPlayer, isBattlerFirstPriority); } } } } - hitsToKoPlayer = GetNoOfHitsToKOBattlerDmg(maxDamageDealt, opposingBattler); - // Calculate type advantage - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType1))); - if (atkType2 != atkType1) - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType1))); - if (defType2 != defType1) - { - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType2))); - if (atkType2 != atkType1) - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType2))); - } - - // Get max damage mon could take - for (i = 0; i < MAX_MON_MOVES; i++) - { - playerMove = gBattleMons[opposingBattler].moves[i]; - if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) - { - damageTaken = AI_GetDamage(opposingBattler, battler, i, AI_DEFENDING, gAiLogicData); - if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move - { - return maxDamageTaken = damageTaken; - break; - } - if (damageTaken > maxDamageTaken) - maxDamageTaken = damageTaken; - } - } - - hitsToKoAI = GetNoOfHitsToKOBattlerDmg(maxDamageTaken, battler); + typeMatchup = GetBattleMonTypeMatchup(gBattleMons[opposingBattler], gBattleMons[battler]); // Check if mon gets one shot if (maxDamageTaken > gBattleMons[battler].hp - && !(gItemsInfo[gBattleMons[battler].item].holdEffect == HOLD_EFFECT_FOCUS_SASH || (!IsMoldBreakerTypeAbility(opposingBattler, gBattleMons[opposingBattler].ability) && B_STURDY >= GEN_5 && aiAbility == ABILITY_STURDY))) + && !(gItemsInfo[gBattleMons[battler].item].holdEffect == HOLD_EFFECT_FOCUS_SASH || (!IsMoldBreakerTypeAbility(opposingBattler, gAiLogicData->abilities[opposingBattler]) && GetConfig(CONFIG_STURDY) >= GEN_5 && aiAbility == ABILITY_STURDY))) { getsOneShot = TRUE; } // Check if current mon can 1v1 in spite of bad matchup, and don't switch out if it can - if (hitsToKoPlayer < hitsToKoAI || (hitsToKoPlayer == hitsToKoAI && AI_IsFaster(battler, opposingBattler, aiBestMove))) + if (canBattlerWin1v1) return FALSE; // If we don't have any other viable options, don't switch out @@ -288,11 +313,8 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) // Start assessing whether or not mon has bad odds // Jump straight to switching out in cases where mon gets OHKO'd - if (((getsOneShot && gBattleMons[opposingBattler].speed > gBattleMons[battler].speed) // If the player OHKOs and outspeeds OR OHKOs, doesn't outspeed but isn't 2HKO'd - || (getsOneShot && gBattleMons[opposingBattler].speed <= gBattleMons[battler].speed && maxDamageDealt < gBattleMons[opposingBattler].hp / 2)) - && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 // And the current mon has at least 1/2 their HP, or 1/4 HP and Regenerator - || (aiAbility == ABILITY_REGENERATOR - && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4))) + if ((getsOneShot && !canBattlerWin1v1) && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 // And the current mon has at least 1/2 their HP, or 1/4 HP and Regenerator + || (aiAbility == ABILITY_REGENERATOR && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4))) { // 50% chance to stay in regardless if (RandomPercentage(RNG_AI_SWITCH_HASBADODDS, (100 - GetSwitchChance(SHOULD_SWITCH_HASBADODDS))) && !gAiLogicData->aiPredictionInProgress) @@ -303,7 +325,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) } // General bad type matchups have more wiggle room - if (typeEffectiveness >= UQ_4_12(2.0)) // If the player has at least a 2x type advantage + if (typeMatchup > UQ_4_12(2.0)) // If the player has favourable offensive matchup (2.0 is neutral, this must be worse) { if (!hasSuperEffectiveMove // If the AI doesn't have a super effective move && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 // And the current mon has at least 1/2 their HP, or 1/4 HP and Regenerator @@ -364,7 +386,7 @@ static u32 FindMonWithMoveOfEffectiveness(u32 battler, u32 opposingBattler, uq4_ for (j = 0; j < MAX_MON_MOVES; j++) { move = GetMonData(&party[i], MON_DATA_MOVE1 + j); - if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= effectiveness && gMovesInfo[move].power != 0) + if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= effectiveness && GetMovePower(move) != 0) return SetSwitchinAndSwitch(battler, i); } } @@ -385,9 +407,10 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler) for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { aiMove = gBattleMons[battler].moves[moveIndex]; - if ((AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) - || AI_GetMoveEffectiveness(aiMove, battler, opposingPartner) > UQ_4_12(0.0)) - && aiMove != MOVE_NONE) + if (aiMove == MOVE_NONE) + continue; + if (gAiLogicData->effectiveness[battler][opposingBattler][moveIndex] > UQ_4_12(0.0) + || gAiLogicData->effectiveness[battler][opposingPartner][moveIndex] > UQ_4_12(0.0)) return FALSE; } } @@ -396,8 +419,10 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler) for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { aiMove = gBattleMons[battler].moves[moveIndex]; - if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) && aiMove != MOVE_NONE - && (!ALL_MOVES_BAD_STATUS_MOVES_BAD || gMovesInfo[aiMove].power != 0)) // If using ALL_MOVES_BAD_STATUS_MOVES_BAD, then need power to be non-zero + if (gAiLogicData->effectiveness[battler][opposingBattler][moveIndex] > UQ_4_12(0.0) && aiMove != MOVE_NONE + && !CanAbilityAbsorbMove(battler, opposingBattler, gAiLogicData->abilities[opposingBattler], aiMove, GetBattleMoveType(aiMove), AI_CHECK) + && !CanAbilityBlockMove(battler, opposingBattler, gBattleMons[battler].ability, gAiLogicData->abilities[opposingBattler], aiMove, AI_CHECK) + && (!ALL_MOVES_BAD_STATUS_MOVES_BAD || GetMovePower(aiMove) != 0)) // If using ALL_MOVES_BAD_STATUS_MOVES_BAD, then need power to be non-zero return FALSE; } } @@ -416,7 +441,7 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler) static bool32 ShouldSwitchIfWonderGuard(u32 battler) { u32 opposingBattler = GetOppositeBattler(battler); - u32 i, move; + u32 i; if (IsDoubleBattle()) return FALSE; @@ -427,12 +452,8 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler) // Check if PokΓ©mon has a super effective move. for (i = 0; i < MAX_MON_MOVES; i++) { - move = gBattleMons[battler].moves[i]; - if (move != MOVE_NONE) - { - if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) - return FALSE; - } + if (gBattleMons[battler].moves[i] != MOVE_NONE && gAiLogicData->effectiveness[battler][opposingBattler][i] >= UQ_4_12(2.0)) + return FALSE; } if (RandomPercentage(RNG_AI_SWITCH_WONDER_GUARD, GetSwitchChance(SHOULD_SWITCH_WONDER_GUARD))) @@ -450,18 +471,21 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) { u8 battlerIn1, battlerIn2; u8 numAbsorbingAbilities = 0; - u16 absorbingTypeAbilities[3]; // Array size is maximum number of absorbing abilities for a single type + enum Ability absorbingTypeAbilities[3]; // Array size is maximum number of absorbing abilities for a single type s32 firstId; s32 lastId; struct Pokemon *party; - u16 monAbility, aiMove; + enum Ability monAbility; + u16 aiMove; u32 opposingBattler = GetOppositeBattler(battler); u32 incomingMove = GetIncomingMove(battler, opposingBattler, gAiLogicData); - u32 incomingType = GetMoveType(incomingMove); - bool32 isOpposingBattlerChargingOrInvulnerable = (IsSemiInvulnerable(opposingBattler, incomingMove) || IsTwoTurnNotSemiInvulnerableMove(opposingBattler, incomingMove)); + enum Type incomingType = CheckDynamicMoveType(GetBattlerMon(opposingBattler), incomingMove, opposingBattler, MON_IN_BATTLE); + bool32 isOpposingBattlerChargingOrInvulnerable = !BreaksThroughSemiInvulnerablity(opposingBattler, incomingMove) || IsTwoTurnNotSemiInvulnerableMove(opposingBattler, incomingMove); s32 i, j; - if (!(gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) + if (!(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) + return FALSE; + if (GetMoveEffect(incomingMove) == EFFECT_HIDDEN_POWER && RandomPercentage(RNG_AI_SWITCH_ABSORBING_HIDDEN_POWER, SHOULD_SWITCH_ABSORBS_HIDDEN_POWER_PERCENTAGE)) return FALSE; if (gBattleStruct->prevTurnSpecies[battler] != gBattleMons[battler].species && !(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_PREDICT_MOVE)) // AI mon has changed, player's behaviour no longer reliable; override this if using AI_FLAG_PREDICT_MOVE return FALSE; @@ -481,7 +505,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) // Only check damage if it's a damaging move if (!IsBattleMoveStatus(aiMove)) { - if (!AI_DoesChoiceItemBlockMove(battler, aiMove) && AI_GetDamage(battler, opposingBattler, i, AI_ATTACKING, gAiLogicData) > gBattleMons[opposingBattler].hp) + if (!AI_DoesChoiceEffectBlockMove(battler, aiMove) && AI_GetDamage(battler, opposingBattler, i, AI_ATTACKING, gAiLogicData) > gBattleMons[opposingBattler].hp) return FALSE; } } @@ -510,14 +534,14 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_WATER_ABSORB; absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_DRY_SKIN; - if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_STORM_DRAIN; } else if (incomingType == TYPE_ELECTRIC || (isOpposingBattlerChargingOrInvulnerable && incomingType == TYPE_ELECTRIC)) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_VOLT_ABSORB; absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_MOTOR_DRIVE; - if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_LIGHTNING_ROD; } else if (incomingType == TYPE_GRASS || (isOpposingBattlerChargingOrInvulnerable && incomingType == TYPE_GRASS)) @@ -589,11 +613,12 @@ static bool32 ShouldSwitchIfOpponentChargingOrInvulnerable(u32 battler) u32 opposingBattler = GetOppositeBattler(battler); u32 incomingMove = GetIncomingMove(battler, opposingBattler, gAiLogicData); - bool32 isOpposingBattlerChargingOrInvulnerable = (IsSemiInvulnerable(opposingBattler, incomingMove) || IsTwoTurnNotSemiInvulnerableMove(opposingBattler, incomingMove)); + bool32 isOpposingBattlerChargingOrInvulnerable = !BreaksThroughSemiInvulnerablity(opposingBattler, incomingMove) || IsTwoTurnNotSemiInvulnerableMove(opposingBattler, incomingMove); - if (IsDoubleBattle() || !(gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) + if (IsDoubleBattle() || !(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; + // In a world with a unified ShouldSwitch function, also want to check whether we already win 1v1 and if we do don't switch; not worth doubling the HasBadOdds computation for now if (isOpposingBattlerChargingOrInvulnerable && gAiLogicData->mostSuitableMonId[battler] != PARTY_SIZE && RandomPercentage(RNG_AI_SWITCH_FREE_TURN, GetSwitchChance(SHOULD_SWITCH_FREE_TURN))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); @@ -606,11 +631,11 @@ static bool32 ShouldSwitchIfTrapperInParty(u32 battler) s32 lastId; struct Pokemon *party; s32 i; - u16 monAbility; + enum Ability monAbility; s32 opposingBattler = GetOppositeBattler(battler); // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer - if (!(gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) + if (!(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; // Check if current mon has an ability that traps opponent @@ -628,10 +653,10 @@ static bool32 ShouldSwitchIfTrapperInParty(u32 battler) monAbility = GetMonAbility(&party[i]); - if (CanAbilityTrapOpponent(monAbility, opposingBattler) || (CanAbilityTrapOpponent(AI_GetBattlerAbility(opposingBattler), opposingBattler) && monAbility == ABILITY_TRACE)) + if (CanAbilityTrapOpponent(monAbility, opposingBattler) || (CanAbilityTrapOpponent(gAiLogicData->abilities[opposingBattler], opposingBattler) && monAbility == ABILITY_TRACE)) { // If mon in slot i is the most suitable switchin candidate, then it's a trapper than wins 1v1 - if (i == gAiLogicData->mostSuitableMonId[battler] && RandomPercentage(RNG_AI_SWITCH_FREE_TURN, GetSwitchChance(SHOULD_SWITCH_FREE_TURN))) + if (i == gAiLogicData->mostSuitableMonId[battler] && RandomPercentage(RNG_AI_SWITCH_TRAPPER, GetSwitchChance(SHOULD_SWITCH_TRAPPER))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } } @@ -641,23 +666,23 @@ static bool32 ShouldSwitchIfTrapperInParty(u32 battler) static bool32 ShouldSwitchIfBadlyStatused(u32 battler) { bool32 switchMon = FALSE; - u16 monAbility = gAiLogicData->abilities[battler]; - enum ItemHoldEffect holdEffect = gAiLogicData->holdEffects[battler]; + enum Ability monAbility = gAiLogicData->abilities[battler]; + enum HoldEffect holdEffect = gAiLogicData->holdEffects[battler]; u8 opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); u8 opposingBattler = GetBattlerAtPosition(opposingPosition); bool32 hasStatRaised = AnyStatIsRaised(battler); //Perish Song - if (gStatuses3[battler] & STATUS3_PERISH_SONG + if (gBattleMons[battler].volatiles.perishSong && gDisableStructs[battler].perishSongTimer == 0 && monAbility != ABILITY_SOUNDPROOF && RandomPercentage(RNG_AI_SWITCH_PERISH_SONG, GetSwitchChance(SHOULD_SWITCH_PERISH_SONG))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING) + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) { //Yawn - if (gStatuses3[battler] & STATUS3_YAWN + if (gBattleMons[battler].volatiles.yawn && CanBeSlept(battler, battler, monAbility, BLOCKED_BY_SLEEP_CLAUSE) // TODO: ask for help from pawwkie && gBattleMons[battler].hp > gBattleMons[battler].maxHP / 3 && RandomPercentage(RNG_AI_SWITCH_YAWN, GetSwitchChance(SHOULD_SWITCH_YAWN))) @@ -679,8 +704,8 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) || monAbility == ABILITY_EARLY_BIRD) || holdEffect == (HOLD_EFFECT_CURE_SLP | HOLD_EFFECT_CURE_STATUS) || HasMove(battler, MOVE_SLEEP_TALK) - || (HasMoveWithEffect(battler, MOVE_SNORE) && AI_GetMoveEffectiveness(MOVE_SNORE, battler, opposingBattler) >= UQ_4_12(2.0)) - || (IsBattlerGrounded(battler) + || (HasMove(battler, MOVE_SNORE) && gAiLogicData->effectiveness[battler][opposingBattler][GetIndexInMoveArray(battler, MOVE_SNORE)] >= UQ_4_12(2.0)) + || (IsBattlerGrounded(battler, monAbility, gAiLogicData->holdEffects[battler]) && (HasMove(battler, MOVE_MISTY_TERRAIN) || HasMove(battler, MOVE_ELECTRIC_TERRAIN))) ) switchMon = FALSE; @@ -690,9 +715,9 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) && gAiLogicData->abilities[opposingBattler] != ABILITY_UNAWARE && gAiLogicData->abilities[opposingBattler] != ABILITY_KEEN_EYE && gAiLogicData->abilities[opposingBattler] != ABILITY_MINDS_EYE - && (B_ILLUMINATE_EFFECT >= GEN_9 && gAiLogicData->abilities[opposingBattler] != ABILITY_ILLUMINATE) - && !(gBattleMons[battler].status2 & STATUS2_FORESIGHT) - && !(gStatuses3[battler] & STATUS3_MIRACLE_EYED)) + && (GetConfig(CONFIG_ILLUMINATE_EFFECT) >= GEN_9 && gAiLogicData->abilities[opposingBattler] != ABILITY_ILLUMINATE) + && !gBattleMons[battler].volatiles.foresight + && !gBattleMons[battler].volatiles.miracleEye) switchMon = FALSE; if (switchMon) @@ -712,23 +737,23 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) return SetSwitchinAndSwitch(battler, PARTY_SIZE); //Cursed - if (gBattleMons[battler].status2 & STATUS2_CURSED + if (gBattleMons[battler].volatiles.cursed && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_CURSED, GetSwitchChance(SHOULD_SWITCH_CURSED_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_CURSED, GetSwitchChance(SHOULD_SWITCH_CURSED)))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); //Nightmare - if (gBattleMons[battler].status2 & STATUS2_NIGHTMARE + if (gBattleMons[battler].volatiles.nightmare && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NIGHTMARE, GetSwitchChance(SHOULD_SWITCH_NIGHTMARE_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_NIGHTMARE, GetSwitchChance(SHOULD_SWITCH_NIGHTMARE)))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); //Leech Seed - if (gStatuses3[battler] & STATUS3_LEECHSEED + if (gBattleMons[battler].volatiles.leechSeed && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_SEEDED, GetSwitchChance(SHOULD_SWITCH_SEEDED_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_SEEDED, GetSwitchChance(SHOULD_SWITCH_SEEDED)))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } // Infatuation - if (gBattleMons[battler].status2 & STATUS2_INFATUATION + if (gBattleMons[battler].volatiles.infatuation && !AiExpectsToFaintPlayer(battler) && gAiLogicData->mostSuitableMonId[battler] != PARTY_SIZE && RandomPercentage(RNG_AI_SWITCH_INFATUATION, GetSwitchChance(SHOULD_SWITCH_INFATUATION))) @@ -743,7 +768,7 @@ static bool32 ShouldSwitchIfAbilityBenefit(u32 battler) bool32 hasStatRaised = AnyStatIsRaised(battler); //Check if ability is blocked - if (gStatuses3[battler] & STATUS3_GASTRO_ACID + if (gBattleMons[battler].volatiles.gastroAcid || IsNeutralizingGasOnField()) return FALSE; @@ -800,13 +825,11 @@ static bool32 CanUseSuperEffectiveMoveAgainstOpponents(u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { move = gBattleMons[battler].moves[i]; - if (move == MOVE_NONE || AI_DoesChoiceItemBlockMove(battler, move)) + if (move == MOVE_NONE || AI_DoesChoiceEffectBlockMove(battler, move)) continue; - if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) - { + if (gAiLogicData->effectiveness[battler][opposingBattler][i] >= UQ_4_12(2.0)) return TRUE; - } } } if (!IsDoubleBattle()) @@ -819,13 +842,11 @@ static bool32 CanUseSuperEffectiveMoveAgainstOpponents(u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { move = gBattleMons[battler].moves[i]; - if (move == MOVE_NONE || AI_DoesChoiceItemBlockMove(battler, move)) + if (move == MOVE_NONE || AI_DoesChoiceEffectBlockMove(battler, move)) continue; - if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0)) - { + if (gAiLogicData->effectiveness[battler][opposingBattler][i] >= UQ_4_12(2.0)) return TRUE; - } } } @@ -842,7 +863,7 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 perc u16 move; // Similar functionality handled more thoroughly by ShouldSwitchIfHasBadOdds - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING) + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) return FALSE; if (gLastLandedMoves[battler] == MOVE_NONE) @@ -873,7 +894,8 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 perc for (i = firstId; i < lastId; i++) { - u16 species, monAbility; + u16 species; + enum Ability monAbility; uq4_12_t typeMultiplier; u16 moveFlags = 0; @@ -901,7 +923,7 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 perc for (j = 0; j < MAX_MON_MOVES; j++) { move = GetMonData(&party[i], MON_DATA_MOVE1 + j); - if (move == 0) + if (move == MOVE_NONE) continue; if (AI_GetMoveEffectiveness(move, battler, battlerIn1) >= UQ_4_12(2.0) && (RandomPercentage(RNG_AI_SWITCH_SE_DEFENSIVE, percentChance) || gAiLogicData->aiPredictionInProgress)) @@ -917,7 +939,7 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) { u32 battlerIn1, battlerIn2; u32 hazardDamage = 0, battlerHp = gBattleMons[battler].hp; - u32 ability = gAiLogicData->abilities[battler], aiMove; + enum Ability ability = gAiLogicData->abilities[battler], aiMove; s32 firstId, lastId, i, j; struct Pokemon *party; @@ -980,7 +1002,7 @@ static bool32 ShouldSwitchIfEncored(u32 battler) u32 opposingBattler = GetOppositeBattler(battler); // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer - if (!(gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) + if (!(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; // If not Encore'd don't switch @@ -992,7 +1014,7 @@ static bool32 ShouldSwitchIfEncored(u32 battler) return SetSwitchinAndSwitch(battler, PARTY_SIZE); // Stay in if effective move - else if (AI_GetMoveEffectiveness(encoredMove, battler, opposingBattler) >= UQ_4_12(2.0)) + else if (gAiLogicData->effectiveness[battler][opposingBattler][GetIndexInMoveArray(battler, encoredMove)] >= UQ_4_12(2.0)) return FALSE; // Switch out 50% of the time otherwise @@ -1004,17 +1026,17 @@ static bool32 ShouldSwitchIfEncored(u32 battler) static bool32 ShouldSwitchIfBadChoiceLock(u32 battler) { - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, FALSE); + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); u32 lastUsedMove = gAiLogicData->lastUsedMove[battler]; u32 opposingBattler = GetOppositeBattler(battler); bool32 moveAffectsTarget = TRUE; if (lastUsedMove != MOVE_NONE && (AI_GetMoveEffectiveness(lastUsedMove, battler, opposingBattler) == UQ_4_12(0.0) - || CanAbilityAbsorbMove(battler, opposingBattler, gAiLogicData->abilities[opposingBattler], lastUsedMove, GetMoveType(lastUsedMove), ABILITY_CHECK_TRIGGER) - || CanAbilityBlockMove(battler, opposingBattler, gAiLogicData->abilities[battler], gAiLogicData->abilities[opposingBattler], lastUsedMove, ABILITY_CHECK_TRIGGER))) + || CanAbilityAbsorbMove(battler, opposingBattler, gAiLogicData->abilities[opposingBattler], lastUsedMove, CheckDynamicMoveType(GetBattlerMon(battler), lastUsedMove, battler, MON_IN_BATTLE), AI_CHECK) + || CanAbilityBlockMove(battler, opposingBattler, gAiLogicData->abilities[battler], gAiLogicData->abilities[opposingBattler], lastUsedMove, AI_CHECK))) moveAffectsTarget = FALSE; - if (HOLD_EFFECT_CHOICE(holdEffect) && IsBattlerItemEnabled(battler)) + if (IsHoldEffectChoice(holdEffect) && IsBattlerItemEnabled(battler)) { if ((GetMoveCategory(lastUsedMove) == DAMAGE_CATEGORY_STATUS || !moveAffectsTarget) && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); @@ -1030,7 +1052,7 @@ static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler) s8 spAttackingStage = gBattleMons[battler].statStages[STAT_SPATK]; // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer - if (!(gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) + if (!(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; // Physical attacker @@ -1078,9 +1100,11 @@ bool32 ShouldSwitch(u32 battler) s32 i; s32 availableToSwitch; - if (gBattleMons[battler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + if (gBattleMons[battler].volatiles.wrapped) return FALSE; - if (gStatuses3[battler] & STATUS3_ROOTED) + if (gBattleMons[battler].volatiles.escapePrevention) + return FALSE; + if (gBattleMons[battler].volatiles.root) return FALSE; if (IsAbilityPreventingEscape(battler)) return FALSE; @@ -1088,14 +1112,14 @@ bool32 ShouldSwitch(u32 battler) return FALSE; // Sequence Switching AI never switches mid-battle - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SEQUENCE_SWITCHING) + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING) return FALSE; availableToSwitch = 0; if (IsDoubleBattle()) { - u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerAtPosition(battler))); + u32 partner = BATTLE_PARTNER(battler); battlerIn1 = battler; if (gAbsentBattlerFlags & (1u << partner)) battlerIn2 = battler; @@ -1140,7 +1164,7 @@ bool32 ShouldSwitch(u32 battler) if (ShouldSwitchIfWonderGuard(battler)) return TRUE; - if ((gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING) && (CanMonSurviveHazardSwitchin(battler) == FALSE)) + if ((gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) && (CanMonSurviveHazardSwitchin(battler) == FALSE)) return FALSE; if (ShouldSwitchIfTrapperInParty(battler)) return TRUE; @@ -1168,7 +1192,7 @@ bool32 ShouldSwitch(u32 battler) // Removing switch capabilites under specific conditions // These Functions prevent the "FindMonWithFlagsAndSuperEffective" from getting out of hand. // We don't use FindMonWithFlagsAndSuperEffective with AI_FLAG_SMART_SWITCHING, so we can bail early. - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING) + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) return FALSE; if (CanUseSuperEffectiveMoveAgainstOpponents(battler)) return FALSE; @@ -1187,7 +1211,7 @@ bool32 ShouldSwitch(u32 battler) bool32 ShouldSwitchIfAllScoresBad(u32 battler) { u32 i, score, opposingBattler = GetOppositeBattler(battler); - if (!(gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING)) + if (!(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; for (i = 0; i < MAX_MON_MOVES; i++) @@ -1227,9 +1251,11 @@ void ModifySwitchAfterMoveScoring(u32 battler) s32 i; s32 availableToSwitch; - if (gBattleMons[battler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + if (gBattleMons[battler].volatiles.wrapped) + return; + if (gBattleMons[battler].volatiles.escapePrevention) return; - if (gStatuses3[battler] & STATUS3_ROOTED) + if (gBattleMons[battler].volatiles.root) return; if (IsAbilityPreventingEscape(battler)) return; @@ -1237,14 +1263,14 @@ void ModifySwitchAfterMoveScoring(u32 battler) return; // Sequence Switching AI never switches mid-battle - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SEQUENCE_SWITCHING) + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING) return; availableToSwitch = 0; if (IsDoubleBattle()) { - u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerAtPosition(battler))); + u32 partner = BATTLE_PARTNER(battler); battlerIn1 = battler; if (gAbsentBattlerFlags & (1u << partner)) battlerIn2 = battler; @@ -1292,7 +1318,7 @@ bool32 IsSwitchinValid(u32 battler) // Edge case: See if partner already chose to switch into the same mon if (IsDoubleBattle()) { - u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerAtPosition(battler))); + u32 partner = BATTLE_PARTNER(battler); if (gBattleStruct->AI_monToSwitchIntoId[battler] == PARTY_SIZE) // Generic switch { if ((gAiLogicData->shouldSwitch & (1u << partner)) && gAiLogicData->monToSwitchInId[partner] == gAiLogicData->mostSuitableMonId[battler]) @@ -1324,7 +1350,8 @@ void AI_TrySwitchOrUseItem(u32 battler) { if (gAiLogicData->shouldSwitch & (1u << battler) && IsSwitchinValid(battler)) { - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_SWITCH, 0); + SetAIUsingGimmick(battler, NO_GIMMICK); if (gBattleStruct->AI_monToSwitchIntoId[battler] == PARTY_SIZE) { s32 monToSwitchId = gAiLogicData->mostSuitableMonId[battler]; @@ -1371,6 +1398,7 @@ void AI_TrySwitchOrUseItem(u32 battler) } else if (ShouldUseItem(battler)) { + SetAIUsingGimmick(battler, NO_GIMMICK); return; } } @@ -1414,33 +1442,18 @@ static u32 GetBestMonBatonPass(struct Pokemon *party, int firstId, int lastId, u static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, u8 invalidMons, u32 battler, u32 opposingBattler) { int i, bits = 0; - while (bits != 0x3F) // All mons were checked. { - uq4_12_t bestResist = UQ_4_12(1.0); + u32 bestResist = UQ_4_12(2.0); int bestMonId = PARTY_SIZE; // Find the mon whose type is the most suitable defensively. for (i = firstId; i < lastId; i++) { if (!((1u << i) & invalidMons) && !((1u << i) & bits)) { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES); - uq4_12_t typeEffectiveness = UQ_4_12(1.0); - - u8 atkType1 = gBattleMons[opposingBattler].types[0]; - u8 atkType2 = gBattleMons[opposingBattler].types[1]; - u8 defType1 = gSpeciesInfo[species].types[0]; - u8 defType2 = gSpeciesInfo[species].types[1]; - - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType1))); - if (atkType2 != atkType1) - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType1))); - if (defType2 != defType1) - { - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType2))); - if (atkType2 != atkType1) - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType2))); - } + InitializeSwitchinCandidate(&party[i]); + + u32 typeEffectiveness = GetBattleMonTypeMatchup(gBattleMons[opposingBattler], gAiLogicData->switchinCandidate.battleMon); if (typeEffectiveness < bestResist) { bestResist = typeEffectiveness; @@ -1478,8 +1491,8 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva int i, j; int dmg, bestDmg = 0; int bestMonId = PARTY_SIZE; - u32 aiMove; + uq4_12_t effectiveness; // If we couldn't find the best mon in terms of typing, find the one that deals most damage. for (i = firstId; i < lastId; i++) @@ -1493,7 +1506,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva if (aiMove != MOVE_NONE && !IsBattleMoveStatus(aiMove)) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j); - dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, AI_ATTACKING); + dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, &effectiveness, AI_ATTACKING); if (bestDmg < dmg) { bestDmg = dmg; @@ -1506,7 +1519,22 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva return bestMonId; } -bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) +static u32 GetFirstNonInvalidMon(u32 firstId, u32 lastId, u32 invalidMons) +{ + u32 chosenMonId = PARTY_SIZE; + for (u32 i = (lastId-1); i > firstId; i--) + { + if (!((1 << i) & invalidMons)) + { + // first non invalid mon found + chosenMonId = i; + break; + } + } + return chosenMonId; +} + +bool32 IsMonGrounded(enum HoldEffect heldItemEffect, enum Ability ability, enum Type type1, enum Type type2) { // List that makes mon not grounded if (type1 == TYPE_FLYING || type2 == TYPE_FLYING || ability == ABILITY_LEVITATE @@ -1525,24 +1553,26 @@ bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) // Gets hazard damage static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon) { - u8 defType1 = battleMon->types[0], defType2 = battleMon->types[1], tSpikesLayers; + enum Type defType1 = battleMon->types[0], defType2 = battleMon->types[1]; + u8 tSpikesLayers; u16 heldItemEffect = GetItemHoldEffect(battleMon->item); - u32 maxHP = battleMon->maxHP, ability = battleMon->ability, status = battleMon->status1; + u32 maxHP = battleMon->maxHP; + enum Ability ability = battleMon->ability, status = battleMon->status1; u32 spikesDamage = 0, tSpikesDamage = 0, hazardDamage = 0; - u32 hazardFlags = gSideStatuses[GetBattlerSide(battler)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_SAFEGUARD); + u32 side = GetBattlerSide(battler); // Check ways mon might avoid all hazards if (ability != ABILITY_MAGIC_GUARD || (heldItemEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS && !((gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) || ability == ABILITY_KLUTZ))) { // Stealth Rock - if ((hazardFlags & SIDE_STATUS_STEALTH_ROCK) && heldItemEffect != HOLD_EFFECT_HEAVY_DUTY_BOOTS) + if (IsHazardOnSide(side, HAZARDS_STEALTH_ROCK) && heldItemEffect != HOLD_EFFECT_HEAVY_DUTY_BOOTS) hazardDamage += GetStealthHazardDamageByTypesAndHP(TYPE_SIDE_HAZARD_POINTED_STONES, defType1, defType2, battleMon->maxHP); // G-Max Steelsurge - if ((hazardFlags & SIDE_STATUS_STEELSURGE) && heldItemEffect != HOLD_EFFECT_HEAVY_DUTY_BOOTS) + if (IsHazardOnSide(side, HAZARDS_STEELSURGE) && heldItemEffect != HOLD_EFFECT_HEAVY_DUTY_BOOTS) hazardDamage += GetStealthHazardDamageByTypesAndHP(TYPE_SIDE_HAZARD_SHARP_STEEL, defType1, defType2, battleMon->maxHP); // Spikes - if ((hazardFlags & SIDE_STATUS_SPIKES) && IsMonGrounded(heldItemEffect, ability, defType1, defType2)) + if (IsHazardOnSide(side, HAZARDS_SPIKES) && IsMonGrounded(heldItemEffect, ability, defType1, defType2)) { spikesDamage = maxHP / ((5 - gSideTimers[GetBattlerSide(battler)].spikesAmount) * 2); if (spikesDamage == 0) @@ -1550,13 +1580,13 @@ static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon hazardDamage += spikesDamage; } - if ((hazardFlags & SIDE_STATUS_TOXIC_SPIKES) && (defType1 != TYPE_POISON && defType2 != TYPE_POISON + if (IsHazardOnSide(side, HAZARDS_TOXIC_SPIKES) && (defType1 != TYPE_POISON && defType2 != TYPE_POISON && defType1 != TYPE_STEEL && defType2 != TYPE_STEEL && ability != ABILITY_IMMUNITY && ability != ABILITY_POISON_HEAL && ability != ABILITY_COMATOSE && status == 0 - && !(hazardFlags & SIDE_STATUS_SAFEGUARD) + && !(gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) && !IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL) - && !IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN) + && !IsBattlerTerrainAffected(battler, ability, gAiLogicData->holdEffects[battler], STATUS_FIELD_MISTY_TERRAIN) && !IsAbilityStatusProtected(battler, ability) && heldItemEffect != HOLD_EFFECT_CURE_PSN && heldItemEffect != HOLD_EFFECT_CURE_STATUS && IsMonGrounded(heldItemEffect, ability, defType1, defType2))) @@ -1583,8 +1613,9 @@ static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon // Gets damage / healing from weather static s32 GetSwitchinWeatherImpact(void) { - s32 weatherImpact = 0, maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP, ability = gAiLogicData->switchinCandidate.battleMon.ability; - enum ItemHoldEffect holdEffect = GetItemHoldEffect(gAiLogicData->switchinCandidate.battleMon.item); + s32 weatherImpact = 0, maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP; + enum Ability ability = gAiLogicData->switchinCandidate.battleMon.ability; + enum HoldEffect holdEffect = GetItemHoldEffect(gAiLogicData->switchinCandidate.battleMon.item); if (HasWeatherEffect()) { @@ -1647,8 +1678,9 @@ static s32 GetSwitchinWeatherImpact(void) // Gets one turn of recurring healing static u32 GetSwitchinRecurringHealing(void) { - u32 recurringHealing = 0, maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP, ability = gAiLogicData->switchinCandidate.battleMon.ability; - enum ItemHoldEffect holdEffect = GetItemHoldEffect(gAiLogicData->switchinCandidate.battleMon.item); + u32 recurringHealing = 0, maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP; + enum Ability ability = gAiLogicData->switchinCandidate.battleMon.ability; + enum HoldEffect holdEffect = GetItemHoldEffect(gAiLogicData->switchinCandidate.battleMon.item); // Items if (ability != ABILITY_KLUTZ) @@ -1681,8 +1713,9 @@ static u32 GetSwitchinRecurringHealing(void) // Gets one turn of recurring damage static u32 GetSwitchinRecurringDamage(void) { - u32 passiveDamage = 0, maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP, ability = gAiLogicData->switchinCandidate.battleMon.ability; - enum ItemHoldEffect holdEffect = GetItemHoldEffect(gAiLogicData->switchinCandidate.battleMon.item); + u32 passiveDamage = 0, maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP; + enum Ability ability = gAiLogicData->switchinCandidate.battleMon.ability; + enum HoldEffect holdEffect = GetItemHoldEffect(gAiLogicData->switchinCandidate.battleMon.item); // Items if (ability != ABILITY_MAGIC_GUARD && ability != ABILITY_KLUTZ) @@ -1712,10 +1745,11 @@ static u32 GetSwitchinRecurringDamage(void) // Gets one turn of status damage static u32 GetSwitchinStatusDamage(u32 battler) { - u8 defType1 = gAiLogicData->switchinCandidate.battleMon.types[0], defType2 = gAiLogicData->switchinCandidate.battleMon.types[1]; + enum Type defType1 = gAiLogicData->switchinCandidate.battleMon.types[0], defType2 = gAiLogicData->switchinCandidate.battleMon.types[1]; u8 tSpikesLayers = gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount; u16 heldItemEffect = GetItemHoldEffect(gAiLogicData->switchinCandidate.battleMon.item); - u32 status = gAiLogicData->switchinCandidate.battleMon.status1, ability = gAiLogicData->switchinCandidate.battleMon.ability, maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP; + u32 status = gAiLogicData->switchinCandidate.battleMon.status1; + enum Ability ability = gAiLogicData->switchinCandidate.battleMon.ability, maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP; u32 statusDamage = 0; // Status condition damage @@ -1723,7 +1757,7 @@ static u32 GetSwitchinStatusDamage(u32 battler) { if (status & STATUS1_BURN) { - if (B_BURN_DAMAGE >= GEN_7) + if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7) statusDamage = maxHP / 16; else statusDamage = maxHP / 8; @@ -1734,7 +1768,7 @@ static u32 GetSwitchinStatusDamage(u32 battler) } else if (status & STATUS1_FROSTBITE) { - if (B_BURN_DAMAGE >= GEN_7) + if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7) statusDamage = maxHP / 16; else statusDamage = maxHP / 8; @@ -1791,17 +1825,17 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) u32 recurringDamage = GetSwitchinRecurringDamage(); u32 recurringHealing = GetSwitchinRecurringHealing(); u32 statusDamage = GetSwitchinStatusDamage(battler); - u32 hitsToKO = 0, singleUseItemHeal = 0; + u32 hitsToKO = 0; u16 maxHP = gAiLogicData->switchinCandidate.battleMon.maxHP, item = gAiLogicData->switchinCandidate.battleMon.item, heldItemEffect = GetItemHoldEffect(item); u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = GetItemHoldEffectParam(item); u32 opposingBattler = GetOppositeBattler(battler); - u32 opposingAbility = gBattleMons[opposingBattler].ability, ability = gAiLogicData->switchinCandidate.battleMon.ability; + enum Ability opposingAbility = gAiLogicData->abilities[opposingBattler], ability = gAiLogicData->switchinCandidate.battleMon.ability; bool32 usedSingleUseHealingItem = FALSE, opponentCanBreakMold = IsMoldBreakerTypeAbility(opposingBattler, opposingAbility); - s32 currentHP = startingHP; + s32 currentHP = startingHP, singleUseItemHeal = 0; // No damage being dealt if ((damageTaken + statusDamage + recurringDamage <= recurringHealing) || damageTaken + statusDamage + recurringDamage == 0) - return startingHP; + return hitsToKO; // Mon fainted to hazards if (startingHP == 0) @@ -1818,16 +1852,16 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) currentHP = currentHP - damageTaken; // One shot prevention effects - if (damageTaken >= maxHP && startingHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && B_STURDY >= GEN_5 && ability == ABILITY_STURDY)) && hitsToKO < 1) + if (damageTaken >= maxHP && startingHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && GetConfig(CONFIG_STURDY) >= GEN_5 && ability == ABILITY_STURDY)) && hitsToKO < 1) currentHP = 1; // If mon is still alive, apply weather impact first, as it might KO the mon before it can heal with its item (order is weather -> item -> status) - if (currentHP != 0) + if (currentHP > 0) currentHP = currentHP - weatherImpact; // Check if we're at a single use healing item threshold - if (gAiLogicData->switchinCandidate.battleMon.ability != ABILITY_KLUTZ && usedSingleUseHealingItem == FALSE - && !(opposingAbility == ABILITY_UNNERVE && GetPocketByItemId(item) == POCKET_BERRIES)) + if (currentHP > 0 && gAiLogicData->switchinCandidate.battleMon.ability != ABILITY_KLUTZ && usedSingleUseHealingItem == FALSE + && !(opposingAbility == ABILITY_UNNERVE && GetItemPocket(item) == POCKET_BERRIES)) { switch (heldItemEffect) { @@ -1869,7 +1903,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) } // Healing from items occurs before status so we can do the rest in one line - if (currentHP >= 0) + if (currentHP > 0) currentHP = currentHP + recurringHealing - recurringDamage - statusDamage; // Recalculate toxic damage if needed @@ -1884,7 +1918,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) } // Disguise will always add an extra hit to KO - if (opponentCanBreakMold && gAiLogicData->switchinCandidate.battleMon.species == SPECIES_MIMIKYU_DISGUISED) + if (!opponentCanBreakMold && gAiLogicData->switchinCandidate.battleMon.species == SPECIES_MIMIKYU_DISGUISED) hitsToKO++; // If mon had a hypothetical status from TSpikes, clear it @@ -1896,25 +1930,34 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) return hitsToKO; } -static u16 GetSwitchinTypeMatchup(u32 opposingBattler, struct BattlePokemon battleMon) +static u32 GetBattleMonTypeMatchup(struct BattlePokemon opposingBattleMon, struct BattlePokemon battleMon) { - // Check type matchup - u16 typeEffectiveness = UQ_4_12(1.0); - u8 atkType1 = gSpeciesInfo[gBattleMons[opposingBattler].species].types[0], atkType2 = gSpeciesInfo[gBattleMons[opposingBattler].species].types[1], - defType1 = battleMon.types[0], defType2 = battleMon.types[1]; + u32 typeEffectiveness1 = UQ_4_12(1.0), typeEffectiveness2 = UQ_4_12(1.0); + enum Type atkType1 = opposingBattleMon.types[0], atkType2 = opposingBattleMon.types[1]; + enum Type defType1 = battleMon.types[0], defType2 = battleMon.types[1]; - // Multiply type effectiveness by a factor depending on type matchup - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType1))); - if (atkType2 != atkType1) - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType1))); + // Add each independent defensive type matchup together + typeEffectiveness1 = uq4_12_multiply(typeEffectiveness1, (GetTypeModifier(atkType1, defType1))); if (defType2 != defType1) + typeEffectiveness1 = uq4_12_multiply(typeEffectiveness1, (GetTypeModifier(atkType1, defType2))); + if (typeEffectiveness1 == 0) // Immunity + typeEffectiveness1 = UQ_4_12(0.1); + + if (atkType2 != atkType1) { - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType2))); - if (atkType2 != atkType1) - typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType2, defType2))); + typeEffectiveness2 = uq4_12_multiply(typeEffectiveness2, (GetTypeModifier(atkType2, defType1))); + if (defType2 != defType1) + typeEffectiveness2 = uq4_12_multiply(typeEffectiveness2, (GetTypeModifier(atkType2, defType2))); + if (typeEffectiveness2 == 0) // Immunity + typeEffectiveness2 = UQ_4_12(0.1); } - return typeEffectiveness; + else + { + typeEffectiveness2 = typeEffectiveness1; + } + + return typeEffectiveness1 + typeEffectiveness2; } static int GetRandomSwitchinWithBatonPass(int aliveCount, int bits, int firstId, int lastId, int currentMonId) @@ -1937,28 +1980,69 @@ static int GetRandomSwitchinWithBatonPass(int aliveCount, int bits, int firstId, return PARTY_SIZE; } -static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattler, struct BattlePokemon battleMon) +static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattler, struct BattlePokemon battleMon, u32 *bestPlayerMove) +{ + int i = 0; + u32 playerMove; + u16 *playerMoves = GetMovesArray(opposingBattler); + s32 damageTaken = 0, maxDamageTaken = 0; + uq4_12_t effectiveness; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + playerMove = SMART_SWITCHING_OMNISCIENT ? gBattleMons[opposingBattler].moves[i] : playerMoves[i]; + if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH && gBattleMons[opposingBattler].pp[i] > 0) + { + damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, &effectiveness, AI_DEFENDING); + if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move + { + *bestPlayerMove = playerMove; + return damageTaken; + } + if (damageTaken > maxDamageTaken) + { + maxDamageTaken = damageTaken; + *bestPlayerMove = playerMove; + } + } + } + return maxDamageTaken; +} + +static s32 GetMaxPriorityDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattler, struct BattlePokemon battleMon, u32 *bestPlayerPriorityMove) { int i = 0; u32 playerMove; + u16 *playerMoves = GetMovesArray(opposingBattler); s32 damageTaken = 0, maxDamageTaken = 0; + uq4_12_t effectiveness = UQ_4_12(1.0); for (i = 0; i < MAX_MON_MOVES; i++) { - playerMove = gBattleMons[opposingBattler].moves[i]; - if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) + // If player is choiced into a non-priority move, AI understands that it can't deal priority damage + if (gBattleStruct->choicedMove[opposingBattler] !=MOVE_NONE && GetMovePriority(gBattleStruct->choicedMove[opposingBattler]) < 1) + break; + playerMove = SMART_SWITCHING_OMNISCIENT ? gBattleMons[opposingBattler].moves[i] : playerMoves[i]; + if (GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], playerMove) > 0 + && playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH && gBattleMons[opposingBattler].pp[i] > 0) { - damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, AI_DEFENDING); + damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, &effectiveness, AI_DEFENDING); if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move + { + *bestPlayerPriorityMove = playerMove; return damageTaken; + } if (damageTaken > maxDamageTaken) + { maxDamageTaken = damageTaken; + *bestPlayerPriorityMove = playerMove; + } } } return maxDamageTaken; } -static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent) +static bool32 CanAbilityTrapOpponent(enum Ability ability, u32 opponent) { if ((B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(opponent, TYPE_GHOST))) return FALSE; @@ -1969,7 +2053,7 @@ static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent) else return TRUE; } - else if (ability == ABILITY_ARENA_TRAP && IsBattlerGrounded(opponent)) + else if (ability == ABILITY_ARENA_TRAP && IsBattlerGrounded(opponent, gAiLogicData->abilities[opponent], gAiLogicData->holdEffects[opponent])) return TRUE; else if (ability == ABILITY_MAGNET_PULL && IS_BATTLER_OF_TYPE(opponent, TYPE_STEEL)) return TRUE; @@ -1990,7 +2074,7 @@ static inline bool32 IsFreeSwitch(enum SwitchType switchType, u32 battlerSwitchi return TRUE; if (gAiLogicData->ejectPackSwitch) { - u32 opposingAbility = AI_GetBattlerAbility(opposingBattler); + enum Ability opposingAbility = GetBattlerAbilityIgnoreMoldBreaker(opposingBattler); // If faster, not a free switch; likely lowered own stats if (!movedSecond && opposingAbility != ABILITY_INTIMIDATE && opposingAbility != ABILITY_SUPERSWEET_SYRUP) // Intimidate triggers switches before turn starts return FALSE; @@ -2008,6 +2092,18 @@ static inline bool32 IsFreeSwitch(enum SwitchType switchType, u32 battlerSwitchi static inline bool32 CanSwitchinWin1v1(u32 hitsToKOAI, u32 hitsToKOPlayer, bool32 isSwitchinFirst, bool32 isFreeSwitch) { + // Player's best move deals 0 damage + if (hitsToKOAI == 0 && hitsToKOPlayer > 0) + return TRUE; + + // AI's best move deals 0 damage + if (hitsToKOPlayer == 0 && hitsToKOAI > 0) + return FALSE; + + // Neither mon can damage the other + if (hitsToKOPlayer == 0 && hitsToKOAI == 0) + return FALSE; + // Free switch, need to outspeed or take 1 extra hit if (isFreeSwitch) { @@ -2024,14 +2120,16 @@ static inline bool32 CanSwitchinWin1v1(u32 hitsToKOAI, u32 hitsToKOPlayer, bool3 // Everything runs in the same loop to minimize computation time. This makes it harder to read, but hopefully the comments can guide you! static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u32 battlerIn1, u32 battlerIn2, enum SwitchType switchType) { - int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE; + int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE, generic1v1MonId = PARTY_SIZE; int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE, trapperId = PARTY_SIZE; int i, j, aliveCount = 0, bits = 0, aceMonCount = 0; s32 defensiveMonHitKOThreshold = 3; // 3HKO threshold that candidate defensive mons must exceed - s32 playerMonHP = gBattleMons[opposingBattler].hp, maxDamageDealt = 0, damageDealt = 0; - u32 aiMove, hitsToKOAI, maxHitsToKO = 0; - u16 bestResist = UQ_4_12(1.0), bestResistEffective = UQ_4_12(1.0), typeMatchup; - bool32 isFreeSwitch = IsFreeSwitch(switchType, battlerIn1, opposingBattler), isSwitchinFirst, canSwitchinWin1v1; + s32 playerMonHP = gBattleMons[opposingBattler].hp, maxDamageDealt = 0, damageDealt = 0, monMaxDamage = 0; + u32 aiMove, hitsToKOAI, hitsToKOPlayer, hitsToKOAIPriority, bestPlayerMove = MOVE_NONE, bestPlayerPriorityMove = MOVE_NONE, maxHitsToKO = 0; + u32 bestResist = UQ_4_12(2.0), bestResistEffective = UQ_4_12(2.0), typeMatchup; // 2.0 is the default "Neutral" matchup from GetBattleMonTypeMatchup + bool32 isFreeSwitch = IsFreeSwitch(switchType, battlerIn1, opposingBattler), isSwitchinFirst, isSwitchinFirstPriority, canSwitchinWin1v1; + u32 invalidMons = 0; + uq4_12_t effectiveness = UQ_4_12(1.0); // Iterate through mons for (i = firstId; i < lastId; i++) @@ -2043,6 +2141,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, || i == gBattleStruct->monToSwitchIntoId[battlerIn1] || i == gBattleStruct->monToSwitchIntoId[battlerIn2]) { + invalidMons |= 1u << i; continue; } // Save Ace Pokemon for last @@ -2050,6 +2149,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, { aceMonId = i; aceMonCount++; + invalidMons |= 1u << i; continue; } else @@ -2062,20 +2162,27 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, continue; // Get max number of hits for player to KO AI mon and type matchup for defensive switching - hitsToKOAI = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon), battler); - typeMatchup = GetSwitchinTypeMatchup(opposingBattler, gAiLogicData->switchinCandidate.battleMon); + hitsToKOAI = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, &bestPlayerMove), battler); + hitsToKOAIPriority = GetSwitchinHitsToKO(GetMaxPriorityDamagePlayerCouldDealToSwitchin(battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, &bestPlayerPriorityMove), battler); + typeMatchup = GetBattleMonTypeMatchup(gBattleMons[opposingBattler], gAiLogicData->switchinCandidate.battleMon); + + monMaxDamage = 0; // Check through current mon's moves for (j = 0; j < MAX_MON_MOVES; j++) { - aiMove = gAiLogicData->switchinCandidate.battleMon.moves[j]; + // Check that move has PP remaining before running calcs + if (gAiLogicData->switchinCandidate.battleMon.pp[j] < 1) + continue; - if (aiMove != MOVE_NONE && !IsBattleMoveStatus(aiMove)) - damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, AI_ATTACKING); + aiMove = gAiLogicData->switchinCandidate.battleMon.moves[j]; + damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, &effectiveness, AI_ATTACKING); + hitsToKOPlayer = GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler); // Offensive switchin decisions are based on which whether switchin moves first and whether it can win a 1v1 - isSwitchinFirst = AI_WhoStrikesFirstPartyMon(battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, aiMove); - canSwitchinWin1v1 = CanSwitchinWin1v1(hitsToKOAI, GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler), isSwitchinFirst, isFreeSwitch); + isSwitchinFirst = AI_IsPartyMonFaster(battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, aiMove, bestPlayerMove, CONSIDER_PRIORITY); + isSwitchinFirstPriority = AI_IsPartyMonFaster(battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, aiMove, bestPlayerPriorityMove, CONSIDER_PRIORITY); + canSwitchinWin1v1 = CanSwitchinWin1v1(hitsToKOAI, hitsToKOPlayer, isSwitchinFirst, isFreeSwitch) && CanSwitchinWin1v1(hitsToKOAIPriority, hitsToKOPlayer, isSwitchinFirstPriority, isFreeSwitch); // AI must successfully 1v1 with and without priority to be considered a good option // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not if (GetMoveEffect(aiMove) == EFFECT_BATON_PASS) @@ -2102,12 +2209,15 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, defensiveMonId = i; } + if (canSwitchinWin1v1) + generic1v1MonId = i; + // Check for mon with resistance and super effective move for best type matchup mon with effective move if (aiMove != MOVE_NONE && !IsBattleMoveStatus(aiMove)) { if (typeMatchup < bestResistEffective) { - if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) + if (effectiveness >= UQ_4_12(2.0)) { if (canSwitchinWin1v1) { @@ -2118,9 +2228,13 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, } // If a self destruction move doesn't OHKO, don't factor it into revenge killing - if (GetMoveEffect(aiMove) == EFFECT_EXPLOSION && damageDealt < playerMonHP) + enum BattleMoveEffects aiEffect = GetMoveEffect(aiMove); + if ((aiEffect == EFFECT_EXPLOSION || aiEffect == EFFECT_MISTY_EXPLOSION) + && damageDealt < playerMonHP) continue; + if (damageDealt > monMaxDamage) + monMaxDamage = damageDealt; // Check that mon isn't one shot and set best damage mon if (damageDealt > maxDamageDealt) { @@ -2133,7 +2247,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Check if current mon can revenge kill in some capacity // If AI mon can one shot - if (damageDealt > playerMonHP) + if (damageDealt >= playerMonHP) { if (canSwitchinWin1v1) { @@ -2145,7 +2259,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, } // If AI mon can two shot - if (damageDealt > playerMonHP / 2) + if (damageDealt >= (playerMonHP / 2 + playerMonHP % 2)) // Modulo to handle odd numbers in non-decimal division { if (canSwitchinWin1v1) { @@ -2158,12 +2272,14 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // If mon can trap if ((CanAbilityTrapOpponent(gAiLogicData->switchinCandidate.battleMon.ability, opposingBattler) - || (CanAbilityTrapOpponent(AI_GetBattlerAbility(opposingBattler), opposingBattler) && gAiLogicData->switchinCandidate.battleMon.ability == ABILITY_TRACE)) + || (CanAbilityTrapOpponent(gAiLogicData->abilities[opposingBattler], opposingBattler) && gAiLogicData->switchinCandidate.battleMon.ability == ABILITY_TRACE)) && CountUsablePartyMons(opposingBattler) > 0 && canSwitchinWin1v1) trapperId = i; } } + if (monMaxDamage == 0) + invalidMons |= 1u << i; } batonPassId = GetRandomSwitchinWithBatonPass(aliveCount, bits, firstId, lastId, i); @@ -2180,6 +2296,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId; else if (typeMatchupId != PARTY_SIZE) return typeMatchupId; else if (batonPassId != PARTY_SIZE) return batonPassId; + else if (generic1v1MonId != PARTY_SIZE) return generic1v1MonId; else if (damageMonId != PARTY_SIZE) return damageMonId; } else @@ -2190,10 +2307,19 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else if (typeMatchupId != PARTY_SIZE) return typeMatchupId; else if (defensiveMonId != PARTY_SIZE) return defensiveMonId; else if (batonPassId != PARTY_SIZE) return batonPassId; + else if (generic1v1MonId != PARTY_SIZE) return generic1v1MonId; } + + if (switchType == SWITCH_MID_BATTLE_OPTIONAL) + return PARTY_SIZE; + + // Fallback + u32 bestMonId = GetFirstNonInvalidMon(firstId, lastId, invalidMons); + if (bestMonId != PARTY_SIZE) + return bestMonId; + // If ace mon is the last available Pokemon and U-Turn/Volt Switch or Eject Pack/Button was used - switch to the mon. - if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount - && (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || gAiLogicData->ejectButtonSwitch || gAiLogicData->ejectPackSwitch)) + if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount) return aceMonId; return PARTY_SIZE; @@ -2255,14 +2381,14 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType) GetAIPartyIndexes(battler, &firstId, &lastId); party = GetBattlerParty(battler); - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SEQUENCE_SWITCHING) + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING) { bestMonId = GetNextMonInParty(party, firstId, lastId, battlerIn1, battlerIn2); return bestMonId; } // Only use better mon selection if AI_FLAG_SMART_MON_CHOICES is set for the trainer. - if (gAiThinkingStruct->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_MON_CHOICES && !IsDoubleBattle()) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !IsDoubleBattle()) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic { bestMonId = GetBestMonIntegrated(party, firstId, lastId, battler, opposingBattler, battlerIn1, battlerIn2, switchType); return bestMonId; @@ -2300,6 +2426,9 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType) if (bestMonId != PARTY_SIZE) return bestMonId; + if (aceMonId != PARTY_SIZE && aliveCount == 0) + return aceMonId; + bestMonId = GetBestMonTypeMatchup(party, firstId, lastId, invalidMons, battler, opposingBattler); if (bestMonId != PARTY_SIZE) return bestMonId; @@ -2308,9 +2437,15 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType) if (bestMonId != PARTY_SIZE) return bestMonId; - // If ace mon is the last available Pokemon and U-Turn/Volt Switch or Eject Pack/Button was used - switch to the mon. - if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount - && (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || gAiLogicData->ejectButtonSwitch || gAiLogicData->ejectPackSwitch)) + if (switchType == SWITCH_MID_BATTLE_OPTIONAL) + return PARTY_SIZE; + + // Fallback + bestMonId = GetFirstNonInvalidMon(firstId, lastId, invalidMons); + if (bestMonId != PARTY_SIZE) + return bestMonId; + + if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount) return aceMonId; return PARTY_SIZE; @@ -2326,7 +2461,7 @@ static bool32 AiExpectsToFaintPlayer(u32 battler) if (!IsBattlerAlly(target, battler) && CanIndexMoveFaintTarget(battler, target, gAiBattleData->chosenMoveIndex[battler], AI_ATTACKING) - && AI_IsFaster(battler, target, GetAIChosenMove(battler))) + && AI_IsFaster(battler, target, GetAIChosenMove(battler), GetIncomingMove(battler, target, gAiLogicData), CONSIDER_PRIORITY)) { // We expect to faint the target and move first -> dont use an item return TRUE; @@ -2348,10 +2483,10 @@ static bool32 ShouldUseItem(u32 battler) // If teaming up with player and Pokemon is on the right, or Pokemon is currently held by Sky Drop if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT) - || gStatuses3[battler] & STATUS3_SKY_DROPPED) + || gBattleMons[battler].volatiles.semiInvulnerable == STATE_SKY_DROP) return FALSE; - if (gStatuses3[battler] & STATUS3_EMBARGO) + if (gBattleMons[battler].volatiles.embargo) return FALSE; if (AiExpectsToFaintPlayer(battler)) @@ -2391,19 +2526,13 @@ static bool32 ShouldUseItem(u32 battler) shouldUse = AI_ShouldHeal(battler, healAmount); break; case EFFECT_ITEM_CURE_STATUS: - if (itemEffects[3] & ITEM3_SLEEP && gBattleMons[battler].status1 & STATUS1_SLEEP) - shouldUse = TRUE; - if (itemEffects[3] & ITEM3_POISON && (gBattleMons[battler].status1 & STATUS1_POISON - || gBattleMons[battler].status1 & STATUS1_TOXIC_POISON)) - shouldUse = TRUE; - if (itemEffects[3] & ITEM3_BURN && gBattleMons[battler].status1 & STATUS1_BURN) - shouldUse = TRUE; - if (itemEffects[3] & ITEM3_FREEZE && (gBattleMons[battler].status1 & STATUS1_FREEZE || gBattleMons[battler].status1 & STATUS1_FROSTBITE)) - shouldUse = TRUE; - if (itemEffects[3] & ITEM3_PARALYSIS && gBattleMons[battler].status1 & STATUS1_PARALYSIS) - shouldUse = TRUE; - if (itemEffects[3] & ITEM3_CONFUSION && gBattleMons[battler].status2 & STATUS2_CONFUSION) - shouldUse = TRUE; + if ((itemEffects[3] & ITEM3_SLEEP && gBattleMons[battler].status1 & STATUS1_SLEEP) + || (itemEffects[3] & ITEM3_POISON && gBattleMons[battler].status1 & STATUS1_PSN_ANY) + || (itemEffects[3] & ITEM3_BURN && gBattleMons[battler].status1 & STATUS1_BURN) + || (itemEffects[3] & ITEM3_FREEZE && gBattleMons[battler].status1 & STATUS1_ICY_ANY) + || (itemEffects[3] & ITEM3_PARALYSIS && gBattleMons[battler].status1 & STATUS1_PARALYSIS) + || (itemEffects[3] & ITEM3_CONFUSION && gBattleMons[battler].volatiles.confusionTurns > 0)) + shouldUse = ShouldCureStatusWithItem(battler, battler, gAiLogicData); break; case EFFECT_ITEM_INCREASE_STAT: case EFFECT_ITEM_INCREASE_ALL_STATS: @@ -2414,7 +2543,8 @@ static bool32 ShouldUseItem(u32 battler) break; case EFFECT_ITEM_SET_FOCUS_ENERGY: if (!gDisableStructs[battler].isFirstTurn - || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY + || gBattleMons[battler].volatiles.dragonCheer + || gBattleMons[battler].volatiles.focusEnergy || AI_OpponentCanFaintAiWithMod(battler, 0)) break; shouldUse = TRUE; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 93801927bdad..20ebfdb27f00 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3,6 +3,7 @@ #include "malloc.h" #include "battle.h" #include "battle_anim.h" +#include "battle_ai_field_statuses.h" #include "battle_ai_util.h" #include "battle_ai_main.h" #include "battle_ai_switch_items.h" @@ -19,11 +20,24 @@ #include "constants/abilities.h" #include "constants/battle_ai.h" #include "constants/battle_move_effects.h" -#include "constants/hold_effects.h" #include "constants/moves.h" #include "constants/items.h" +static u32 GetAIEffectGroup(enum BattleMoveEffects effect); +static u32 GetAIEffectGroupFromMove(u32 battler, u32 move); + // Functions +static u32 AI_GetMoldBreakerSanitizedAbility(u32 battlerAtk, enum Ability abilityAtk, enum Ability abilityDef, u32 holdEffectDef, u32 move) +{ + if (MoveIgnoresTargetAbility(move)) + return ABILITY_NONE; + + if (holdEffectDef != HOLD_EFFECT_ABILITY_SHIELD && IsMoldBreakerTypeAbility(battlerAtk, abilityAtk)) + return ABILITY_NONE; + + return abilityDef; +} + static bool32 AI_IsDoubleSpreadMove(u32 battlerAtk, u32 move) { u32 numOfTargets = 0; @@ -50,6 +64,11 @@ static bool32 AI_IsDoubleSpreadMove(u32 battlerAtk, u32 move) return FALSE; } +bool32 AI_IsBattlerGrounded(u32 battler) +{ + return IsBattlerGrounded(battler, gAiLogicData->abilities[battler], gAiLogicData->holdEffects[battler]); +} + u32 AI_GetDamage(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext, struct AiLogicData *aiData) { if (calcContext == AI_ATTACKING && BattlerHasAi(battlerAtk)) @@ -75,14 +94,24 @@ u32 AI_GetDamage(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcC } } -bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move) +bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 aiMove, u32 playerMove, enum ConsiderPriority considerPriority) +{ + return (AI_WhoStrikesFirst(battlerAi, battlerDef, aiMove, playerMove, considerPriority) == AI_IS_FASTER); +} + +bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 aiMove, u32 playerMove, enum ConsiderPriority considerPriority) +{ + return (AI_WhoStrikesFirst(battlerAi, battlerDef, aiMove, playerMove, considerPriority) == AI_IS_SLOWER); +} + +bool32 AI_IsPartyMonFaster(u32 battlerAi, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 aiMove, u32 playerMove, enum ConsiderPriority considerPriority) { - return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER); + return (AI_WhoStrikesFirstPartyMon(battlerAi, battlerDef, switchinCandidate, aiMove, playerMove, considerPriority) == AI_IS_FASTER); } -bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move) +bool32 AI_IsPartyMonSlower(u32 battlerAi, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 aiMove, u32 playerMove, enum ConsiderPriority considerPriority) { - return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_SLOWER); + return (AI_WhoStrikesFirstPartyMon(battlerAi, battlerDef, switchinCandidate, aiMove, playerMove, considerPriority) == AI_IS_SLOWER); } u32 GetAIChosenMove(u32 battlerId) @@ -132,6 +161,24 @@ bool32 IsAiBattlerAware(u32 battlerId) return BattlerHasAi(battlerId); } +bool32 IsAiBattlerAssumingStab() +{ + if (gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] & AI_FLAG_ASSUME_STAB + || gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] & AI_FLAG_ASSUME_STAB) + return TRUE; + + return FALSE; +} + +bool32 IsAiBattlerAssumingStatusMoves() +{ + if (gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] & AI_FLAG_ASSUME_STATUS_MOVES + || gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] & AI_FLAG_ASSUME_STATUS_MOVES) + return TRUE; + + return FALSE; +} + bool32 IsAiBattlerPredictingAbility(u32 battlerId) { if (gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] & AI_FLAG_WEIGH_ABILITY_PREDICTION @@ -141,11 +188,17 @@ bool32 IsAiBattlerPredictingAbility(u32 battlerId) return BattlerHasAi(battlerId); } +bool32 CanAiPredictMove(void) +{ + return gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] & AI_FLAG_PREDICT_MOVE + || gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] & AI_FLAG_PREDICT_MOVE; +} + bool32 IsBattlerPredictedToSwitch(u32 battler) { // Check for prediction flag on AI, whether they're using those predictions this turn, and whether the AI thinks the player should switch - if (gAiThinkingStruct->aiFlags[gAiLogicData->battlerDoingPrediction] & AI_FLAG_PREDICT_SWITCH - || gAiThinkingStruct->aiFlags[gAiLogicData->battlerDoingPrediction] & AI_FLAG_PREDICT_SWITCH) + if (gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_LEFT] & AI_FLAG_PREDICT_SWITCH + || gAiThinkingStruct->aiFlags[B_POSITION_OPPONENT_RIGHT] & AI_FLAG_PREDICT_SWITCH) { if (gAiLogicData->predictingSwitch && gAiLogicData->shouldSwitch & (1u << battler)) return TRUE; @@ -156,12 +209,19 @@ bool32 IsBattlerPredictedToSwitch(u32 battler) // Either a predicted move or the last used move from an opposing battler u32 GetIncomingMove(u32 battler, u32 opposingBattler, struct AiLogicData *aiData) { - if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_PREDICT_MOVE && aiData->predictingMove) + if (aiData->predictingMove && CanAiPredictMove()) return aiData->predictedMove[opposingBattler]; - return aiData->lastUsedMove[opposingBattler]; } +// When not predicting, don't want to reference player's previous move; leads to weird behaviour for cases like Fake Out or Protect, especially in doubles +u32 GetIncomingMoveSpeedCheck(u32 battler, u32 opposingBattler, struct AiLogicData *aiData) +{ + if (aiData->predictingMove && CanAiPredictMove()) + return aiData->predictedMove[opposingBattler]; + return MOVE_NONE; +} + void ClearBattlerMoveHistory(u32 battlerId) { memset(gBattleHistory->usedMoves[battlerId], 0, sizeof(gBattleHistory->usedMoves[battlerId])); @@ -200,7 +260,7 @@ void RecordAllMoves(u32 battler) memcpy(gAiPartyData->mons[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].moves, gBattleMons[battler].moves, MAX_MON_MOVES * sizeof(u16)); } -void RecordAbilityBattle(u32 battlerId, u32 abilityId) +void RecordAbilityBattle(u32 battlerId, enum Ability abilityId) { gBattleHistory->abilities[battlerId] = abilityId; gAiPartyData->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability = abilityId; @@ -211,7 +271,7 @@ void ClearBattlerAbilityHistory(u32 battlerId) gBattleHistory->abilities[battlerId] = ABILITY_NONE; } -void RecordItemEffectBattle(u32 battlerId, u32 itemEffect) +void RecordItemEffectBattle(u32 battlerId, enum HoldEffect itemEffect) { gBattleHistory->itemEffects[battlerId] = itemEffect; gAiPartyData->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect = itemEffect; @@ -240,6 +300,66 @@ void SaveBattlerData(u32 battlerId) gAiThinkingStruct->saved[battlerId].types[1] = gBattleMons[battlerId].types[1]; } +bool32 ShouldRecordStatusMove(u32 move) +{ + if (ASSUME_STATUS_MOVES_HAS_TUNING) + { + switch (GetMoveEffect(move)) + { + // variable odds by additional effect + case EFFECT_NON_VOLATILE_STATUS: + if (GetMoveNonVolatileStatus(move) == MOVE_EFFECT_SLEEP && RandomPercentage(RNG_AI_ASSUME_STATUS_SLEEP, ASSUME_STATUS_HIGH_ODDS)) + return TRUE; + else if (RandomPercentage(RNG_AI_ASSUME_STATUS_NONVOLATILE, ASSUME_STATUS_MEDIUM_ODDS)) + return TRUE; + break; + // High odds + case EFFECT_AURORA_VEIL: + case EFFECT_CHILLY_RECEPTION: + case EFFECT_FIRST_TURN_ONLY: + case EFFECT_FOLLOW_ME: + case EFFECT_INSTRUCT: + case EFFECT_JUNGLE_HEALING: + case EFFECT_SHED_TAIL: + return RandomPercentage(RNG_AI_ASSUME_STATUS_HIGH_ODDS, ASSUME_STATUS_HIGH_ODDS); + // Medium odds + case EFFECT_AFTER_YOU: + case EFFECT_DOODLE: + case EFFECT_ENCORE: + case EFFECT_HAZE: + case EFFECT_PARTING_SHOT: + case EFFECT_PROTECT: + case EFFECT_REST: + case EFFECT_ROAR: + case EFFECT_ROOST: + case EFFECT_SLEEP_TALK: + case EFFECT_TAUNT: + case EFFECT_TAILWIND: + case EFFECT_TRICK: + case EFFECT_TRICK_ROOM: + // defoggables / screens and hazards + case EFFECT_LIGHT_SCREEN: + case EFFECT_REFLECT: + case EFFECT_SPIKES: + case EFFECT_STEALTH_ROCK: + case EFFECT_STICKY_WEB: + case EFFECT_TOXIC_SPIKES: + return RandomPercentage(RNG_AI_ASSUME_STATUS_MEDIUM_ODDS, ASSUME_STATUS_MEDIUM_ODDS); + // Low odds + case EFFECT_ENTRAINMENT: + case EFFECT_FIXED_PERCENT_DAMAGE: + case EFFECT_GASTRO_ACID: + case EFFECT_IMPRISON: + case EFFECT_TELEPORT: + return RandomPercentage(RNG_AI_ASSUME_STATUS_LOW_ODDS, ASSUME_STATUS_LOW_ODDS); + default: + break; + } + } + + return RandomPercentage(RNG_AI_ASSUME_ALL_STATUS, ASSUME_ALL_STATUS_ODDS) && IsBattleMoveStatus(move); +} + static bool32 ShouldFailForIllusion(u32 illusionSpecies, u32 battlerId) { u32 i, j; @@ -289,11 +409,11 @@ void SetBattlerData(u32 battlerId) if (illusionSpecies != SPECIES_NONE && ShouldFailForIllusion(illusionSpecies, battlerId)) { // If the battler's type has not been changed, AI assumes the types of the illusion mon. - if (gBattleMons[battlerId].types[0] == gSpeciesInfo[species].types[0] - && gBattleMons[battlerId].types[1] == gSpeciesInfo[species].types[1]) + if (gBattleMons[battlerId].types[0] == GetSpeciesType(species, 0) + && gBattleMons[battlerId].types[1] == GetSpeciesType(species, 1)) { - gBattleMons[battlerId].types[0] = gSpeciesInfo[illusionSpecies].types[0]; - gBattleMons[battlerId].types[1] = gSpeciesInfo[illusionSpecies].types[1]; + gBattleMons[battlerId].types[0] = GetSpeciesType(illusionSpecies, 0); + gBattleMons[battlerId].types[1] = GetSpeciesType(illusionSpecies, 1); } species = illusionSpecies; } @@ -302,9 +422,9 @@ void SetBattlerData(u32 battlerId) if (gAiPartyData->mons[side][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) gBattleMons[battlerId].ability = gAiPartyData->mons[side][gBattlerPartyIndexes[battlerId]].ability; // Check if mon can only have one ability. - else if (gSpeciesInfo[species].abilities[1] == ABILITY_NONE - || gSpeciesInfo[species].abilities[1] == gSpeciesInfo[species].abilities[0]) - gBattleMons[battlerId].ability = gSpeciesInfo[species].abilities[0]; + else if (GetSpeciesAbility(species, 1) == ABILITY_NONE + || GetSpeciesAbility(species, 1) == GetSpeciesAbility(species, 0)) + gBattleMons[battlerId].ability = GetSpeciesAbility(species, 0); // The ability is unknown. else gBattleMons[battlerId].ability = ABILITY_NONE; @@ -352,7 +472,7 @@ bool32 AI_BattlerAtMaxHp(u32 battlerId) bool32 AI_CanBattlerEscape(u32 battler) { - enum ItemHoldEffect holdEffect = gAiLogicData->holdEffects[battler]; + enum HoldEffect holdEffect = gAiLogicData->holdEffects[battler]; if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return TRUE; @@ -364,9 +484,16 @@ bool32 AI_CanBattlerEscape(u32 battler) bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef) { - if (gBattleMons[battlerDef].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) + if (AI_CanBattlerEscape(battlerDef)) + return FALSE; + + if (gBattleMons[battlerDef].volatiles.wrapped) + return TRUE; + if (gBattleMons[battlerDef].volatiles.escapePrevention) + return TRUE; + if (gBattleMons[battlerDef].volatiles.semiInvulnerable == STATE_SKY_DROP) return TRUE; - if (gStatuses3[battlerDef] & (STATUS3_ROOTED | STATUS3_SKY_DROPPED)) + if (gBattleMons[battlerDef].volatiles.root) return TRUE; if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) return TRUE; @@ -374,28 +501,32 @@ bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef) && (B_SHADOW_TAG_ESCAPE >= GEN_4 && gAiLogicData->abilities[battlerDef] != ABILITY_SHADOW_TAG)) return TRUE; if (AI_IsAbilityOnSide(battlerAtk, ABILITY_ARENA_TRAP) - && IsBattlerGrounded(battlerAtk)) + && AI_IsBattlerGrounded(battlerAtk)) return TRUE; if (AI_IsAbilityOnSide(battlerAtk, ABILITY_MAGNET_PULL) && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_STEEL)) return TRUE; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && CountUsablePartyMons(battlerDef) == 0) + return TRUE; + return FALSE; } u32 GetTotalBaseStat(u32 species) { - return gSpeciesInfo[species].baseHP - + gSpeciesInfo[species].baseAttack - + gSpeciesInfo[species].baseDefense - + gSpeciesInfo[species].baseSpeed - + gSpeciesInfo[species].baseSpAttack - + gSpeciesInfo[species].baseSpDefense; + return GetSpeciesBaseHP(species) + + GetSpeciesBaseAttack(species) + + GetSpeciesBaseDefense(species) + + GetSpeciesBaseSpeed(species) + + GetSpeciesBaseSpAttack(species) + + GetSpeciesBaseSpDefense(species); } bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) { int i; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAI, opposingBattler, gAiLogicData); for (i = 0; i < MAX_MON_MOVES; i++) { @@ -403,32 +534,49 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) enum BattleMoveEffects effect = GetMoveEffect(move); if (effect == EFFECT_PROTECT && move != MOVE_ENDURE) return TRUE; - if (effect == EFFECT_SEMI_INVULNERABLE && AI_IsSlower(battlerAI, opposingBattler, GetAIChosenMove(battlerAI))) + if (effect == EFFECT_SEMI_INVULNERABLE && AI_IsSlower(battlerAI, opposingBattler, GetAIChosenMove(battlerAI), predictedMoveSpeedCheck, CONSIDER_PRIORITY)) return TRUE; } return FALSE; } -// move checks -bool32 IsAffectedByPowder(u32 battler, u32 ability, enum ItemHoldEffect holdEffect) +bool32 Ai_IsPriorityBlocked(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData) { - if (ability == ABILITY_OVERCOAT - || (B_POWDER_GRASS >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS)) - || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES) + s32 atkPriority = GetBattleMovePriority(battlerAtk, aiData->abilities[battlerAtk], move); + + if (atkPriority <= 0 || IsBattlerAlly(battlerAtk, battlerDef)) return FALSE; - return TRUE; + + if (IsMoldBreakerTypeAbility(battlerAtk, aiData->abilities[battlerAtk]) || MoveIgnoresTargetAbility(move)) + return FALSE; + + if (IsDazzlingAbility(aiData->abilities[battlerDef])) + return TRUE; + + if (IsDoubleBattle() && IsDazzlingAbility(aiData->abilities[BATTLE_PARTNER(battlerDef)])) + return TRUE; + + return FALSE; } // This function checks if all physical/special moves are either unusable or unreasonable to use. // Consider a pokemon boosting their attack against a ghost pokemon having only normal-type physical attacks. -bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) +bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, enum DamageCategory category) { - s32 i, moveType; u32 usable = 0; u16 *moves = GetMovesArray(attacker); u32 moveLimitations = gAiLogicData->moveLimitations[attacker]; - for (i = 0; i < MAX_MON_MOVES; i++) + struct DamageContext ctx = {0}; + ctx.battlerAtk = attacker; + ctx.battlerDef = target; + ctx.updateFlags = FALSE; + ctx.abilityAtk = gAiLogicData->abilities[attacker]; + ctx.abilityDef = gAiLogicData->abilities[target]; + ctx.holdEffectAtk = gAiLogicData->items[attacker]; + ctx.holdEffectDef = gAiLogicData->items[target]; + + for (u32 i = 0; i < MAX_MON_MOVES; i++) { if (IsMoveUnusable(i, moves[i], moveLimitations)) continue; @@ -436,8 +584,10 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) if (GetBattleMoveCategory(moves[i]) == category) { SetTypeBeforeUsingMove(moves[i], attacker); - moveType = GetBattleMoveType(moves[i]); - if (CalcTypeEffectivenessMultiplier(moves[i], moveType, attacker, target, gAiLogicData->abilities[target], FALSE) != 0) + ctx.move = ctx.chosenMove = moves[i]; + ctx.moveType = GetBattleMoveType(moves[i]); + + if (CalcTypeEffectivenessMultiplier(&ctx)) usable |= 1u << i; } } @@ -446,7 +596,7 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) } // To save computation time this function has 2 variants. One saves, sets and restores battlers, while the other doesn't. -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower) +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, enum AIConsiderGimmick considerGimmickAtk, enum AIConsiderGimmick considerGimmickDef) { struct SimulatedDamage dmg; @@ -454,7 +604,7 @@ struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 b SaveBattlerData(battlerDef); SetBattlerData(battlerAtk); SetBattlerData(battlerDef); - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather()); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerGimmickAtk, considerGimmickDef, AI_GetWeather()); RestoreBattlerData(battlerAtk); RestoreBattlerData(battlerDef); return dmg; @@ -481,88 +631,89 @@ static inline s32 DmgRoll(s32 dmg) return dmg; } -bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveType, uq4_12_t effectiveness, u32 weather) +bool32 IsDamageMoveUnusable(struct DamageContext *ctx) { - u32 battlerDefAbility; - u32 partnerDefAbility; + enum Ability battlerDefAbility; + enum Ability partnerDefAbility; struct AiLogicData *aiData = gAiLogicData; - if (effectiveness == UQ_4_12(0.0)) + if (ctx->typeEffectivenessModifier == UQ_4_12(0.0)) return TRUE; - if (gBattleStruct->battlerState[battlerDef].commandingDondozo) + if (gBattleStruct->battlerState[ctx->battlerDef].commandingDondozo) return TRUE; // aiData->abilities does not check for Mold Breaker since it happens during combat so it needs to be done manually - if (IsMoldBreakerTypeAbility(battlerAtk, aiData->abilities[battlerAtk]) || MoveIgnoresTargetAbility(move)) + if (IsMoldBreakerTypeAbility(ctx->battlerAtk, ctx->abilityAtk) || MoveIgnoresTargetAbility(ctx->move)) { battlerDefAbility = ABILITY_NONE; partnerDefAbility = ABILITY_NONE; } else { - battlerDefAbility = aiData->abilities[battlerDef]; - partnerDefAbility = aiData->abilities[BATTLE_PARTNER(battlerDef)]; + battlerDefAbility = ctx->abilityDef; + partnerDefAbility = aiData->abilities[BATTLE_PARTNER(ctx->battlerDef)]; } - if (CanAbilityBlockMove(battlerAtk, battlerDef, aiData->abilities[battlerAtk], battlerDefAbility, move, ABILITY_CHECK_TRIGGER)) + if (Ai_IsPriorityBlocked(ctx->battlerAtk, ctx->battlerDef, ctx->move, aiData)) + return TRUE; + + if (CanAbilityBlockMove(ctx->battlerAtk, ctx->battlerDef, ctx->abilityAtk, battlerDefAbility, ctx->move, AI_CHECK)) return TRUE; - if (CanAbilityAbsorbMove(battlerAtk, battlerDef, battlerDefAbility, move, moveType, ABILITY_CHECK_TRIGGER)) + if (CanAbilityAbsorbMove(ctx->battlerAtk, ctx->battlerDef, battlerDefAbility, ctx->move, ctx->moveType, AI_CHECK)) return TRUE; // Limited to Lighning Rod and Storm Drain because otherwise the AI would consider Water Absorb, etc... if (partnerDefAbility == ABILITY_LIGHTNING_ROD || partnerDefAbility == ABILITY_STORM_DRAIN) { - if (CanAbilityAbsorbMove(battlerAtk, BATTLE_PARTNER(battlerDef), partnerDefAbility, move, moveType, ABILITY_CHECK_TRIGGER)) + if (CanAbilityAbsorbMove(ctx->battlerAtk, BATTLE_PARTNER(ctx->battlerDef), partnerDefAbility, ctx->move, ctx->moveType, AI_CHECK)) return TRUE; } if (HasWeatherEffect()) { - if (weather & B_WEATHER_SUN_PRIMAL && moveType == TYPE_WATER) + if (ctx->weather & B_WEATHER_SUN_PRIMAL && ctx->moveType == TYPE_WATER) return TRUE; - if (weather & B_WEATHER_RAIN_PRIMAL && moveType == TYPE_FIRE) + if (ctx->weather & B_WEATHER_RAIN_PRIMAL && ctx->moveType == TYPE_FIRE) return TRUE; } - switch (GetMoveEffect(move)) + if (IsMoveDampBanned(ctx->move) && (battlerDefAbility == ABILITY_DAMP || partnerDefAbility == ABILITY_DAMP)) + return TRUE; + + switch (GetMoveEffect(ctx->move)) { case EFFECT_DREAM_EATER: - if (!AI_IsBattlerAsleepOrComatose(battlerDef)) + if (!AI_IsBattlerAsleepOrComatose(ctx->battlerDef)) return TRUE; break; case EFFECT_BELCH: - if (IsBelchPreventingMove(battlerAtk, move)) + if (IsBelchPreventingMove(ctx->battlerAtk, ctx->move)) return TRUE; break; case EFFECT_LAST_RESORT: - if (!CanUseLastResort(battlerAtk)) + if (!CanUseLastResort(ctx->battlerAtk) && !IsConsideringZMove(ctx->battlerAtk, ctx->battlerDef, ctx->move)) return TRUE; break; case EFFECT_LOW_KICK: case EFFECT_HEAT_CRASH: - if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) + if (GetActiveGimmick(ctx->battlerDef) == GIMMICK_DYNAMAX) return TRUE; break; case EFFECT_FAIL_IF_NOT_ARG_TYPE: - if (!IS_BATTLER_OF_TYPE(battlerAtk, GetMoveArgType(move))) + if (!IS_BATTLER_OF_TYPE(ctx->battlerAtk, GetMoveArgType(ctx->move))) return TRUE; break; - case EFFECT_HIT_SET_REMOVE_TERRAIN: - if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) && GetMoveEffectArg_MoveProperty(move) == ARG_TRY_REMOVE_TERRAIN_FAIL) + case EFFECT_STEEL_ROLLER: + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) return TRUE; break; case EFFECT_POLTERGEIST: - if (gAiLogicData->items[battlerDef] == ITEM_NONE || !IsBattlerItemEnabled(battlerDef)) + if (gAiLogicData->items[ctx->battlerDef] == ITEM_NONE || !IsBattlerItemEnabled(ctx->battlerDef)) return TRUE; break; case EFFECT_FIRST_TURN_ONLY: - if (!gDisableStructs[battlerAtk].isFirstTurn) - return TRUE; - break; - case EFFECT_EXPLOSION: - case EFFECT_MIND_BLOWN: - if (battlerDefAbility == ABILITY_DAMP || partnerDefAbility == ABILITY_DAMP) + if (!gDisableStructs[ctx->battlerAtk].isFirstTurn) return TRUE; break; default: @@ -572,6 +723,17 @@ bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveTy return FALSE; } +bool32 IsAdditionalEffectBlocked(u32 battlerAtk, u32 abilityAtk, u32 battlerDef, u32 abilityDef) +{ + if (gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK) + return TRUE; + + if (abilityDef == ABILITY_SHIELD_DUST && !IsMoldBreakerTypeAbility(battlerAtk, abilityAtk)) + return TRUE; + + return FALSE; +} + static inline s32 GetDamageByRollType(s32 dmg, enum DamageRollType rollType) { if (rollType == DMG_ROLL_LOWEST) @@ -601,24 +763,23 @@ static inline s32 SetFixedMoveBasePower(u32 battlerAtk, u32 move) return fixedBasePower; } -static inline void AI_StoreBattlerTypes(u32 battlerAtk, u32 *types) +static inline void AI_StoreBattlerTypes(u32 battlerAtk, enum Type *types) { types[0] = gBattleMons[battlerAtk].types[0]; types[1] = gBattleMons[battlerAtk].types[1]; types[2] = gBattleMons[battlerAtk].types[2]; } -static inline void AI_RestoreBattlerTypes(u32 battlerAtk, u32 *types) +static inline void AI_RestoreBattlerTypes(u32 battlerAtk, enum Type *types) { gBattleMons[battlerAtk].types[0] = types[0]; gBattleMons[battlerAtk].types[1] = types[1]; gBattleMons[battlerAtk].types[2] = types[2]; } -static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCalcData, u16 *medianDamage, u16 *minimumDamage, u16 *maximumDamage, enum ItemHoldEffect holdEffectAtk, u32 abilityAtk) +static inline void CalcDynamicMoveDamage(struct DamageContext *ctx, u16 *medianDamage, u16 *minimumDamage, u16 *maximumDamage) { - u32 move = damageCalcData->move; - enum BattleMoveEffects effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(ctx->move); u16 median = *medianDamage; u16 minimum = *minimumDamage; u16 maximum = *maximumDamage; @@ -626,19 +787,19 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal switch (effect) { case EFFECT_MULTI_HIT: - if (move == MOVE_WATER_SHURIKEN && gBattleMons[damageCalcData->battlerAtk].species == SPECIES_GRENINJA_ASH) + if (ctx->move == MOVE_WATER_SHURIKEN && gBattleMons[ctx->battlerAtk].species == SPECIES_GRENINJA_ASH) { median *= 3; minimum *= 3; maximum *= 3; } - else if (abilityAtk == ABILITY_SKILL_LINK) + else if (ctx->abilityAtk == ABILITY_SKILL_LINK) { median *= 5; minimum *= 5; maximum *= 5; } - else if (holdEffectAtk == HOLD_EFFECT_LOADED_DICE) + else if (ctx->holdEffectAtk == HOLD_EFFECT_LOADED_DICE) { median *= 9; median /= 2; @@ -654,21 +815,19 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal break; case EFFECT_ENDEAVOR: // If target has less HP than user, Endeavor does no damage - median = maximum = minimum = max(0, gBattleMons[damageCalcData->battlerDef].hp - gBattleMons[damageCalcData->battlerAtk].hp); - break; - case EFFECT_FINAL_GAMBIT: - median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].hp; + median = maximum = minimum = max(0, gBattleMons[ctx->battlerDef].hp - gBattleMons[ctx->battlerAtk].hp); break; case EFFECT_BEAT_UP: - if (B_BEAT_UP >= GEN_5) + if (GetConfig(CONFIG_BEAT_UP) >= GEN_5) { - u32 partyCount = CalculatePartyCount(GetBattlerParty(damageCalcData->battlerAtk)); + u32 partyCount = CalculatePartyCount(GetBattlerParty(ctx->battlerAtk)); u32 i; gBattleStruct->beatUpSlot = 0; - damageCalcData->isCrit = FALSE; + ctx->isCrit = FALSE; + ctx->fixedBasePower = 0; median = 0; for (i = 0; i < partyCount; i++) - median += CalculateMoveDamage(damageCalcData, 0); + median += CalculateMoveDamage(ctx); maximum = minimum = median; gBattleStruct->beatUpSlot = 0; } @@ -678,7 +837,7 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal } // Handle other multi-strike moves - u32 strikeCount = GetMoveStrikeCount(move); + u32 strikeCount = GetMoveStrikeCount(ctx->move); if (strikeCount > 1 && effect != EFFECT_TRIPLE_KICK) { median *= strikeCount; @@ -686,11 +845,11 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal maximum *= strikeCount; } - if (abilityAtk == ABILITY_PARENTAL_BOND + if (ctx->abilityAtk == ABILITY_PARENTAL_BOND && !strikeCount && effect != EFFECT_TRIPLE_KICK && effect != EFFECT_MULTI_HIT - && !AI_IsDoubleSpreadMove(damageCalcData->battlerAtk, move)) + && !AI_IsDoubleSpreadMove(ctx->battlerAtk, ctx->move)) { median += median / (B_PARENTAL_BOND_DMG >= GEN_7 ? 4 : 2); minimum += minimum / (B_PARENTAL_BOND_DMG >= GEN_7 ? 4 : 2); @@ -714,7 +873,7 @@ static inline bool32 ShouldCalcCritDamage(u32 battlerAtk, u32 battlerDef, u32 mo s32 critChanceIndex = 0; // Get crit chance - if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) critChanceIndex = CalcCritChanceStageGen1(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); else critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); @@ -723,23 +882,22 @@ static inline bool32 ShouldCalcCritDamage(u32 battlerAtk, u32 battlerDef, u32 mo return TRUE; if (critChanceIndex >= RISKY_AI_CRIT_STAGE_THRESHOLD // Not guaranteed but above Risky threshold && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_RISKY) - && GetGenConfig(GEN_CONFIG_CRIT_CHANCE) != GEN_1) + && GetConfig(CONFIG_CRIT_CHANCE) != GEN_1) return TRUE; if (critChanceIndex >= RISKY_AI_CRIT_THRESHOLD_GEN_1 // Not guaranteed but above Risky threshold && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_RISKY) - && GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + && GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) return TRUE; return FALSE; } -struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather) +struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, enum AIConsiderGimmick considerGimmickAtk, enum AIConsiderGimmick considerGimmickDef, u32 weather) { - struct SimulatedDamage simDamage; - s32 moveType; + struct SimulatedDamage simDamage = {0}; enum BattleMoveEffects moveEffect = GetMoveEffect(move); - uq4_12_t effectivenessMultiplier; bool32 isDamageMoveUnusable = FALSE; - bool32 toggledGimmick = FALSE; + bool32 toggledGimmickAtk = FALSE; + bool32 toggledGimmickDef = FALSE; struct AiLogicData *aiData = gAiLogicData; gAiLogicData->aiCalcInProgress = TRUE; @@ -748,101 +906,91 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u // Temporarily enable gimmicks for damage calcs if planned if (gBattleStruct->gimmick.usableGimmick[battlerAtk] && GetActiveGimmick(battlerAtk) == GIMMICK_NONE - && !(gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && !considerZPower)) + && gBattleStruct->gimmick.usableGimmick[battlerAtk] != GIMMICK_NONE && considerGimmickAtk == USE_GIMMICK) { - // Set Z-Move variables if needed - if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && IsViableZMove(battlerAtk, move)) - gBattleStruct->zmove.baseMoves[battlerAtk] = move; - - toggledGimmick = TRUE; + toggledGimmickAtk = TRUE; SetActiveGimmick(battlerAtk, gBattleStruct->gimmick.usableGimmick[battlerAtk]); } + if (gBattleStruct->gimmick.usableGimmick[battlerDef] && GetActiveGimmick(battlerDef) == GIMMICK_NONE + && gBattleStruct->gimmick.usableGimmick[battlerDef] != GIMMICK_NONE && considerGimmickDef == USE_GIMMICK) + { + toggledGimmickDef = TRUE; + SetActiveGimmick(battlerDef, gBattleStruct->gimmick.usableGimmick[battlerDef]); + } + SetDynamicMoveCategory(battlerAtk, battlerDef, move); SetTypeBeforeUsingMove(move, battlerAtk); - moveType = GetBattleMoveType(move); - effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, aiData->abilities[battlerDef], FALSE); + + // We can set those globals because they are going to get rerolled on attack execution + gBattleStruct->magnitudeBasePower = 70; + gBattleStruct->presentBasePower = 80; + + struct DamageContext ctx = {0}; + ctx.battlerAtk = battlerAtk; + ctx.battlerDef = battlerDef; + ctx.move = ctx.chosenMove = move; + ctx.moveType = GetBattleMoveType(move); + ctx.isCrit = ShouldCalcCritDamage(battlerAtk, battlerDef, move, aiData); + ctx.randomFactor = FALSE; + ctx.updateFlags = FALSE; + ctx.weather = weather; + ctx.fixedBasePower = SetFixedMoveBasePower(battlerAtk, move); + ctx.holdEffectAtk = aiData->holdEffects[battlerAtk]; + ctx.holdEffectDef = aiData->holdEffects[battlerDef]; + ctx.abilityAtk = aiData->abilities[battlerAtk]; + ctx.abilityDef = AI_GetMoldBreakerSanitizedAbility(battlerAtk, ctx.abilityAtk, aiData->abilities[battlerDef], ctx.holdEffectDef, move); + ctx.typeEffectivenessModifier = CalcTypeEffectivenessMultiplier(&ctx); u32 movePower = GetMovePower(move); if (movePower) - isDamageMoveUnusable = IsDamageMoveUnusable(battlerAtk, battlerDef, move, moveType, effectivenessMultiplier, weather); + isDamageMoveUnusable = IsDamageMoveUnusable(&ctx); if (movePower && !isDamageMoveUnusable) { - u32 types[3]; + enum Type types[3]; AI_StoreBattlerTypes(battlerAtk, types); + ProteanTryChangeType(battlerAtk, aiData->abilities[battlerAtk], move, ctx.moveType); - ProteanTryChangeType(battlerAtk, aiData->abilities[battlerAtk], move, moveType); - s32 fixedBasePower = SetFixedMoveBasePower(battlerAtk, move); - - struct DamageCalculationData damageCalcData; - damageCalcData.battlerAtk = battlerAtk; - damageCalcData.battlerDef = battlerDef; - damageCalcData.move = move; - damageCalcData.moveType = moveType; - damageCalcData.isCrit = ShouldCalcCritDamage(battlerAtk, battlerDef, move, aiData); - damageCalcData.randomFactor = FALSE; - damageCalcData.updateFlags = FALSE; - - if (moveEffect == EFFECT_TRIPLE_KICK) + s32 fixedDamage = DoFixedDamageMoveCalc(&ctx); + if (fixedDamage != INT32_MAX) + { + simDamage.minimum = simDamage.median = simDamage.maximum = fixedDamage; + } + else if (moveEffect == EFFECT_TRIPLE_KICK) { for (gMultiHitCounter = GetMoveStrikeCount(move); gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done { s32 damageByRollType = 0; - s32 oneTripleKickHit = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, - effectivenessMultiplier, weather, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + s32 oneTripleKickHit = CalculateMoveDamageVars(&ctx); damageByRollType = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_LOWEST); - simDamage.minimum += ApplyModifiersAfterDmgRoll(damageByRollType, &damageCalcData, effectivenessMultiplier, - aiData->abilities[battlerAtk], aiData->abilities[battlerDef], - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); + simDamage.minimum += ApplyModifiersAfterDmgRoll(&ctx, damageByRollType); damageByRollType = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_DEFAULT); - simDamage.median += ApplyModifiersAfterDmgRoll(damageByRollType, &damageCalcData, effectivenessMultiplier, - aiData->abilities[battlerAtk], aiData->abilities[battlerDef], - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); + simDamage.median += ApplyModifiersAfterDmgRoll(&ctx, damageByRollType); damageByRollType = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_HIGHEST); - simDamage.maximum += ApplyModifiersAfterDmgRoll(damageByRollType, &damageCalcData, effectivenessMultiplier, - aiData->abilities[battlerAtk], aiData->abilities[battlerDef], - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); + simDamage.maximum += ApplyModifiersAfterDmgRoll(&ctx, damageByRollType); } } else { - u32 damage = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, - effectivenessMultiplier, weather, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + u32 damage = CalculateMoveDamageVars(&ctx); simDamage.minimum = GetDamageByRollType(damage, DMG_ROLL_LOWEST); - simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, - aiData->abilities[battlerAtk], aiData->abilities[battlerDef], - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); + simDamage.minimum = ApplyModifiersAfterDmgRoll(&ctx, simDamage.minimum); simDamage.median = GetDamageByRollType(damage, DMG_ROLL_DEFAULT); - simDamage.median = ApplyModifiersAfterDmgRoll(simDamage.median, &damageCalcData, effectivenessMultiplier, - aiData->abilities[battlerAtk], aiData->abilities[battlerDef], - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); - + simDamage.median = ApplyModifiersAfterDmgRoll(&ctx, simDamage.median); + simDamage.maximum = GetDamageByRollType(damage, DMG_ROLL_HIGHEST); - simDamage.maximum = ApplyModifiersAfterDmgRoll(simDamage.maximum, &damageCalcData, effectivenessMultiplier, - aiData->abilities[battlerAtk], aiData->abilities[battlerDef], - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); + simDamage.maximum = ApplyModifiersAfterDmgRoll(&ctx, simDamage.maximum); } if (GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) - { - CalcDynamicMoveDamage(&damageCalcData, - &simDamage.median, - &simDamage.minimum, - &simDamage.maximum, - aiData->holdEffects[battlerAtk], - aiData->abilities[battlerAtk]); - } + CalcDynamicMoveDamage(&ctx, &simDamage.median, &simDamage.minimum, &simDamage.maximum); AI_RestoreBattlerTypes(battlerAtk, types); } @@ -854,21 +1002,22 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u } // convert multiper to AI_EFFECTIVENESS_xX - *typeEffectiveness = effectivenessMultiplier; + *typeEffectiveness = ctx.typeEffectivenessModifier; // Undo temporary settings gBattleStruct->dynamicMoveType = 0; gBattleStruct->swapDamageCategory = FALSE; - gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE; - if (toggledGimmick) + if (toggledGimmickAtk) SetActiveGimmick(battlerAtk, GIMMICK_NONE); + if (toggledGimmickDef) + SetActiveGimmick(battlerDef, GIMMICK_NONE); gAiLogicData->aiCalcInProgress = FALSE; return simDamage; } bool32 AI_IsDamagedByRecoil(u32 battler) { - u32 ability = gAiLogicData->abilities[battler]; + enum Ability ability = gAiLogicData->abilities[battler]; if (ability == ABILITY_MAGIC_GUARD || ability == ABILITY_ROCK_HEAD) return FALSE; return TRUE; @@ -878,8 +1027,11 @@ bool32 AI_IsDamagedByRecoil(u32 battler) static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s32 noOfHitsToKo) { u32 i; - u32 abilityDef = gAiLogicData->abilities[battlerDef]; - u32 abilityAtk = gAiLogicData->abilities[battlerAtk]; + enum Ability abilityDef = gAiLogicData->abilities[battlerDef]; + enum Ability abilityAtk = gAiLogicData->abilities[battlerAtk]; + + if (IsSheerForceAffected(move, abilityAtk)) + return FALSE; switch (GetMoveEffect(move)) { @@ -909,6 +1061,49 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 { switch (additionalEffect->moveEffect) { + case MOVE_EFFECT_ATK_MINUS_1: + case MOVE_EFFECT_ATK_MINUS_2: + if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK)) + return TRUE; + break; + case MOVE_EFFECT_DEF_MINUS_1: + case MOVE_EFFECT_DEF_MINUS_2: + if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK)) + return TRUE; + break; + case MOVE_EFFECT_SPD_MINUS_1: + case MOVE_EFFECT_SPD_MINUS_2: + if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF)) + return TRUE; + break; + case MOVE_EFFECT_SP_ATK_MINUS_1: + case MOVE_EFFECT_SP_ATK_MINUS_2: + if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPATK)) + return TRUE; + break; + case MOVE_EFFECT_SP_DEF_MINUS_1: + case MOVE_EFFECT_SP_DEF_MINUS_2: + if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPDEF)) + return TRUE; + break; + case MOVE_EFFECT_EVS_MINUS_1: + case MOVE_EFFECT_EVS_MINUS_2: + if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_EVASION)) + return TRUE; + break; + case MOVE_EFFECT_ACC_MINUS_1: + case MOVE_EFFECT_ACC_MINUS_2: + if (abilityAtk == ABILITY_CONTRARY && BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ACC)) + return TRUE; + break; + case MOVE_EFFECT_ATK_DEF_DOWN: + if (abilityAtk == ABILITY_CONTRARY && (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK) || BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF))) + return TRUE; + break; + case MOVE_EFFECT_DEF_SPDEF_DOWN: + if (abilityAtk == ABILITY_CONTRARY && (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_DEF) || BattlerStatCanRise(battlerAtk, abilityAtk, STAT_SPDEF))) + return TRUE; + break; case MOVE_EFFECT_ATK_PLUS_1: case MOVE_EFFECT_ATK_PLUS_2: if (BattlerStatCanRise(battlerAtk, abilityAtk, STAT_ATK)) @@ -946,10 +1141,15 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 return TRUE; } break; + default: + break; } } else // consider move effects that hinder the target { + if (IsAdditionalEffectBlocked(battlerAtk, abilityAtk, battlerDef, abilityDef)) + continue; + switch (additionalEffect->moveEffect) { case MOVE_EFFECT_POISON: @@ -984,7 +1184,7 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 case MOVE_EFFECT_SP_DEF_MINUS_1: case MOVE_EFFECT_ACC_MINUS_1: case MOVE_EFFECT_EVS_MINUS_1: - if (ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo != 1) + if (CanLowerStat(battlerAtk, battlerDef, gAiLogicData, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo > 1) return TRUE; break; case MOVE_EFFECT_ATK_MINUS_2: @@ -994,9 +1194,11 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 case MOVE_EFFECT_SP_DEF_MINUS_2: case MOVE_EFFECT_ACC_MINUS_2: case MOVE_EFFECT_EVS_MINUS_2: - if (ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1) + if (CanLowerStat(battlerAtk, battlerDef, gAiLogicData, STAT_ATK + (additionalEffect->moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo > 1) return TRUE; break; + default: + break; } } } @@ -1006,16 +1208,16 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s32 noOfHitsToKo) { - u32 abilityAtk = gAiLogicData->abilities[battlerAtk]; - u32 abilityDef = gAiLogicData->abilities[battlerDef]; + enum Ability abilityAtk = gAiLogicData->abilities[battlerAtk]; + enum Ability abilityDef = gAiLogicData->abilities[battlerDef]; u8 i; switch (GetMoveEffect(move)) { case EFFECT_MAX_HP_50_RECOIL: - case EFFECT_MIND_BLOWN: case EFFECT_CHLOROBLAST: case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: case EFFECT_FINAL_GAMBIT: return TRUE; case EFFECT_RECOIL: @@ -1049,7 +1251,7 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s case MOVE_EFFECT_ATK_DEF_DOWN: case MOVE_EFFECT_DEF_SPDEF_DOWN: if ((additionalEffect->self && abilityAtk != ABILITY_CONTRARY) - || (noOfHitsToKo != 1 && abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move))) + || (noOfHitsToKo > 1 && !additionalEffect->self && abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move))) return TRUE; break; case MOVE_EFFECT_RECHARGE: @@ -1070,9 +1272,11 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s case MOVE_EFFECT_ACC_PLUS_2: case MOVE_EFFECT_ALL_STATS_UP: if ((additionalEffect->self && abilityAtk == ABILITY_CONTRARY) - || (noOfHitsToKo != 1 && !(abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move)))) + || (noOfHitsToKo > 1 && !additionalEffect->self && !(abilityDef == ABILITY_CONTRARY && !DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move)))) return TRUE; break; + default: + break; } } break; @@ -1082,11 +1286,11 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s } // Checks if one of the moves has side effects or perks, assuming equal dmg or equal no of hits to KO -s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo) +enum MoveComparisonResult AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo) { bool32 effect1, effect2; - u32 defAbility = gAiLogicData->abilities[battlerDef]; - u32 atkAbility = gAiLogicData->abilities[battlerAtk]; + enum Ability defAbility = gAiLogicData->abilities[battlerDef]; + enum Ability atkAbility = gAiLogicData->abilities[battlerAtk]; // Check if physical moves hurt. if (gAiLogicData->holdEffects[battlerAtk] != HOLD_EFFECT_PROTECTIVE_PADS && atkAbility != ABILITY_LONG_REACH @@ -1096,27 +1300,27 @@ s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 bool32 moveContact1 = MoveMakesContact(move1); bool32 moveContact2 = MoveMakesContact(move2); if (moveContact1 && !moveContact2) - return -1; + return MOVE_LOST_COMPARISON; if (moveContact2 && !moveContact1) - return 1; + return MOVE_WON_COMPARISON; } // Check additional effects. effect1 = AI_IsMoveEffectInMinus(battlerAtk, battlerDef, move1, noOfHitsToKo); effect2 = AI_IsMoveEffectInMinus(battlerAtk, battlerDef, move2, noOfHitsToKo); if (effect2 && !effect1) - return 1; + return MOVE_WON_COMPARISON; if (effect1 && !effect2) - return -1; + return MOVE_LOST_COMPARISON; effect1 = AI_IsMoveEffectInPlus(battlerAtk, battlerDef, move1, noOfHitsToKo); effect2 = AI_IsMoveEffectInPlus(battlerAtk, battlerDef, move2, noOfHitsToKo); if (effect2 && !effect1) - return -1; + return MOVE_LOST_COMPARISON; if (effect1 && !effect2) - return 1; + return MOVE_WON_COMPARISON; - return 0; + return MOVE_NEUTRAL_COMPARISON; } u32 GetNoOfHitsToKO(u32 dmg, s32 hp) @@ -1136,6 +1340,29 @@ u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum D return GetNoOfHitsToKOBattlerDmg(AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, gAiLogicData), battlerDef); } +u32 GetBestNoOfHitsToKO(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext) +{ + u32 result = 100; + u32 tempResult = 0; + + struct AiLogicData *aiData = gAiLogicData; + s32 moveIndex; + u16 *moves = GetMovesArray(battlerAtk); + u32 moveLimitations = aiData->moveLimitations[battlerAtk]; + + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + if (IsMoveUnusable(moveIndex, moves[moveIndex], moveLimitations)) + continue; + + tempResult = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, moveIndex, calcContext); + if (tempResult != 0 && tempResult < result) + result = tempResult; + } + + return result; +} + u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext) { int bestDmg = AI_GetDamage(battlerAtk, battlerDef, gAiThinkingStruct->movesetIndex, calcContext, gAiLogicData); @@ -1146,7 +1373,6 @@ u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContex uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) { uq4_12_t typeEffectiveness; - u32 moveType; SaveBattlerData(battlerAtk); SaveBattlerData(battlerDef); @@ -1156,8 +1382,17 @@ uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) gBattleStruct->dynamicMoveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - moveType = GetBattleMoveType(move); - typeEffectiveness = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, gAiLogicData->abilities[battlerDef], FALSE); + struct DamageContext ctx = {0}; + ctx.battlerAtk = battlerAtk; + ctx.battlerDef = battlerDef; + ctx.move = ctx.chosenMove = move; + ctx.moveType = GetBattleMoveType(move); + ctx.updateFlags = FALSE; + ctx.abilityAtk = gAiLogicData->abilities[battlerAtk]; + ctx.abilityDef = gAiLogicData->abilities[battlerDef]; + ctx.holdEffectAtk = gAiLogicData->items[battlerAtk]; + ctx.holdEffectDef = gAiLogicData->items[battlerDef]; + typeEffectiveness = CalcTypeEffectivenessMultiplier(&ctx); RestoreBattlerData(battlerAtk); RestoreBattlerData(battlerDef); @@ -1171,26 +1406,27 @@ uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) * AI_IS_FASTER: is user(ai) faster * AI_IS_SLOWER: is target faster */ -s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 moveConsidered) +s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 aiMoveConsidered, u32 playerMoveConsidered, enum ConsiderPriority considerPriority) { u32 speedBattlerAI, speedBattler; - enum ItemHoldEffect holdEffectAI = gAiLogicData->holdEffects[battlerAI]; - enum ItemHoldEffect holdEffectPlayer = gAiLogicData->holdEffects[battler]; - u32 abilityAI = gAiLogicData->abilities[battlerAI]; - u32 abilityPlayer = gAiLogicData->abilities[battler]; - - u32 predictedMove = GetIncomingMove(battlerAI, battler, gAiLogicData); + enum HoldEffect holdEffectAI = gAiLogicData->holdEffects[battlerAI]; + enum HoldEffect holdEffectPlayer = gAiLogicData->holdEffects[battler]; + enum Ability abilityAI = gAiLogicData->abilities[battlerAI]; + enum Ability abilityPlayer = gAiLogicData->abilities[battler]; - s8 aiPriority = GetBattleMovePriority(battlerAI, abilityAI, moveConsidered); - s8 playerPriority = GetBattleMovePriority(battler, abilityPlayer, predictedMove); + if (considerPriority == CONSIDER_PRIORITY) + { + s8 aiPriority = GetBattleMovePriority(battlerAI, abilityAI, aiMoveConsidered); + s8 playerPriority = GetBattleMovePriority(battler, abilityPlayer, playerMoveConsidered); - if (aiPriority > playerPriority) - return AI_IS_FASTER; - else if (aiPriority < playerPriority) - return AI_IS_SLOWER; + if (aiPriority > playerPriority) + return AI_IS_FASTER; + else if (aiPriority < playerPriority) + return AI_IS_SLOWER; + } - speedBattlerAI = GetBattlerTotalSpeedStatArgs(battlerAI, abilityAI, holdEffectAI); - speedBattler = GetBattlerTotalSpeedStatArgs(battler, abilityPlayer, holdEffectPlayer); + speedBattlerAI = GetBattlerTotalSpeedStat(battlerAI, abilityAI, holdEffectAI); + speedBattler = GetBattlerTotalSpeedStat(battler, abilityPlayer, holdEffectPlayer); if (holdEffectAI == HOLD_EFFECT_LAGGING_TAIL && holdEffectPlayer != HOLD_EFFECT_LAGGING_TAIL) return AI_IS_SLOWER; @@ -1224,21 +1460,21 @@ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 moveConsidered) return AI_IS_SLOWER; } -static bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) +bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) { enum BattleMoveEffects effect = GetMoveEffect(move); - if (!AI_BattlerAtMaxHp(battlerTarget) || effect == EFFECT_MULTI_HIT) + if (!AI_BattlerAtMaxHp(battlerTarget) || effect == EFFECT_MULTI_HIT || gAiLogicData->abilities[battler] == ABILITY_PARENTAL_BOND) return FALSE; - if (GetMoveStrikeCount(move) > 1 && !(effect == EFFECT_DRAGON_DARTS && IsValidDoubleBattle(battlerTarget))) + if (GetMoveStrikeCount(move) > 1 && !(effect == EFFECT_DRAGON_DARTS && !HasTwoOpponents(battler))) return FALSE; if (gAiLogicData->holdEffects[battlerTarget] == HOLD_EFFECT_FOCUS_SASH) return TRUE; if (!DoesBattlerIgnoreAbilityChecks(battler, gAiLogicData->abilities[battler], move)) { - if (B_STURDY >= GEN_5 && gAiLogicData->abilities[battlerTarget] == ABILITY_STURDY) + if (GetConfig(CONFIG_STURDY) >= GEN_5 && gAiLogicData->abilities[battlerTarget] == ABILITY_STURDY) return TRUE; - if (gBattleMons[battlerTarget].species == SPECIES_MIMIKYU_DISGUISED) + if (IsMimikyuDisguised(battlerTarget)) return TRUE; } @@ -1266,7 +1502,7 @@ bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) return FALSE; } -u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk) +u32 NoOfHitsForTargetToFaintBattler(u32 battlerDef, u32 battlerAtk) { u32 i; u32 currNumberOfHits; @@ -1284,6 +1520,32 @@ u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk) return leastNumberOfHits; } +u32 NoOfHitsForTargetToFaintBattlerWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod) +{ + u32 i; + u32 currNumberOfHits; + u32 leastNumberOfHits = UNKNOWN_NO_OF_HITS; + u32 hpCheck = gBattleMons[battlerAtk].hp + hpMod; + u32 damageDealt = 0; + + if (hpCheck > gBattleMons[battlerAtk].maxHP) + hpCheck = gBattleMons[battlerAtk].maxHP; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + damageDealt = AI_GetDamage(battlerDef, battlerAtk, i, AI_DEFENDING, gAiLogicData); + if (damageDealt == 0) + continue; + currNumberOfHits = hpCheck / (damageDealt + 1) + 1; + if (currNumberOfHits != 0) + { + if (currNumberOfHits < leastNumberOfHits) + leastNumberOfHits = currNumberOfHits; + } + } + return leastNumberOfHits; +} + u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext) { struct AiLogicData *aiData = gAiLogicData; @@ -1360,12 +1622,33 @@ bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) return FALSE; } +// Can battler KO the target ignoring any Endure effects (Sturdy, Focus Sash, etc.) +bool32 CanBattlerKOTargetIgnoringSturdy(u32 battlerAtk, u32 battlerDef) +{ + struct AiLogicData *aiData = gAiLogicData; + s32 moveIndex, dmg; + u16 *moves = GetMovesArray(battlerAtk); + u32 moveLimitations = aiData->moveLimitations[battlerAtk]; + + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + if (IsMoveUnusable(moveIndex, moves[moveIndex], moveLimitations)) + continue; + dmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, AI_ATTACKING, aiData); + + if (gBattleMons[battlerDef].hp <= dmg && CanEndureHit(battlerAtk, battlerDef, moves[moveIndex])) + return TRUE; + } + return FALSE; +} + bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits) { u32 indexSlot = GetMoveSlot(GetMovesArray(battlerDef), move); if (indexSlot < MAX_MON_MOVES) { - if (GetNoOfHitsToKO(AI_GetDamage(battlerDef, battlerAtk, indexSlot, AI_DEFENDING, gAiLogicData), gBattleMons[battlerAtk].hp) <= nHits) + u32 hitsToKO = GetNoOfHitsToKO(AI_GetDamage(battlerDef, battlerAtk, indexSlot, AI_DEFENDING, gAiLogicData), gBattleMons[battlerAtk].hp); + if (hitsToKO <= nHits && hitsToKO != 0 && !(CanEndureHit(battlerDef, battlerAtk, move) && hitsToKO == 1)) return TRUE; } return FALSE; @@ -1394,14 +1677,21 @@ bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dm if (dmgMod) dmg *= dmgMod; - if (dmg >= hpCheck) + // Applies modified HP percent to AI data for consideration when running CanEndureHit + gAiLogicData->hpPercents[battlerAtk] = (hpCheck/gBattleMons[battlerAtk].maxHP)*100; + + if (dmg >= hpCheck && !(CanEndureHit(battlerDef, battlerAtk, moves[moveIndex]) && (dmgMod <= 1))) + { + gAiLogicData->hpPercents[battlerAtk] = (gBattleMons[battlerAtk].hp / gBattleMons[battlerAtk].maxHP) * 100; return TRUE; + } + gAiLogicData->hpPercents[battlerAtk] = (gBattleMons[battlerAtk].hp / gBattleMons[battlerAtk].maxHP) * 100; } return FALSE; } -bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability) +bool32 AI_IsAbilityOnSide(u32 battlerId, enum Ability ability) { if (IsBattlerAlive(battlerId) && gAiLogicData->abilities[battlerId] == ability) return TRUE; @@ -1411,37 +1701,21 @@ bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability) return FALSE; } -u32 AI_GetBattlerAbility(u32 battler) -{ - if (gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed) - return gBattleMons[battler].ability; - - if (gStatuses3[battler] & STATUS3_GASTRO_ACID) - return ABILITY_NONE; - - if (IsNeutralizingGasOnField() - && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS - && GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD) - return ABILITY_NONE; - - return gBattleMons[battler].ability; -} - // does NOT include ability suppression checks -s32 AI_DecideKnownAbilityForTurn(u32 battlerId) +enum Ability AI_DecideKnownAbilityForTurn(u32 battlerId) { u32 validAbilities[NUM_ABILITY_SLOTS]; u8 i, numValidAbilities = 0; - u32 knownAbility = AI_GetBattlerAbility(battlerId); - u32 indexAbility; - u32 abilityAiRatings[NUM_ABILITY_SLOTS] = {0}; + enum Ability knownAbility = GetBattlerAbilityIgnoreMoldBreaker(battlerId); + enum Ability indexAbility; + enum Ability abilityAiRatings[NUM_ABILITY_SLOTS] = {0}; // We've had ability overwritten by e.g. Worry Seed. It is not part of gAiPartyData in case of switching if (gDisableStructs[battlerId].overwrittenAbility) return gDisableStructs[battlerId].overwrittenAbility; - // The AI knows its own ability. - if (IsAiBattlerAware(battlerId)) + // The AI knows its own ability, and omniscience handling + if (IsAiBattlerAware(battlerId) || (IsAiBattlerAssumingStab() && ASSUME_STAB_SEES_ABILITY)) return knownAbility; // Check neutralizing gas, gastro acid @@ -1457,7 +1731,7 @@ s32 AI_DecideKnownAbilityForTurn(u32 battlerId) for (i = 0; i < NUM_ABILITY_SLOTS; i++) { - indexAbility = gSpeciesInfo[gBattleMons[battlerId].species].abilities[i]; + indexAbility = GetSpeciesAbility(gBattleMons[battlerId].species, i); if (indexAbility != ABILITY_NONE) { abilityAiRatings[numValidAbilities] = gAbilitiesInfo[indexAbility].aiRating; @@ -1474,33 +1748,39 @@ s32 AI_DecideKnownAbilityForTurn(u32 battlerId) return ABILITY_NONE; // Unknown. } -enum ItemHoldEffect AI_DecideHoldEffectForTurn(u32 battlerId) +enum HoldEffect AI_DecideHoldEffectForTurn(u32 battlerId) { - enum ItemHoldEffect holdEffect; + enum HoldEffect holdEffect = HOLD_EFFECT_NONE; + + if (gBattleMons[battlerId].item == ITEM_NONE) // Failsafe for when user recorded an item but it was consumed + return holdEffect; if (!IsAiBattlerAware(battlerId)) holdEffect = gAiPartyData->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else - holdEffect = GetBattlerHoldEffect(battlerId, FALSE); + holdEffect = GetBattlerHoldEffectIgnoreNegation(battlerId); if (gAiThinkingStruct->aiFlags[battlerId] & AI_FLAG_NEGATE_UNAWARE) return holdEffect; - if (gStatuses3[battlerId] & STATUS3_EMBARGO) + if (gBattleMons[battlerId].volatiles.embargo) return HOLD_EFFECT_NONE; if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) return HOLD_EFFECT_NONE; - if (gAiLogicData->abilities[battlerId] == ABILITY_KLUTZ && !(gStatuses3[battlerId] & STATUS3_GASTRO_ACID)) + if (gAiLogicData->abilities[battlerId] == ABILITY_KLUTZ && !gBattleMons[battlerId].volatiles.gastroAcid) return HOLD_EFFECT_NONE; return holdEffect; } -bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, u32 atkAbility, u32 move) +bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, enum Ability atkAbility, u32 move) { if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_NEGATE_UNAWARE) return FALSE; // AI handicap flag: doesn't understand ability suppression concept + if (atkAbility == ABILITY_MYCELIUM_MIGHT && IsBattleMoveStatus(move)) + return TRUE; + if (IsMoldBreakerTypeAbility(battlerAtk, atkAbility) || MoveIgnoresTargetAbility(move)) return TRUE; @@ -1525,6 +1805,33 @@ u32 AI_GetWeather(void) return gBattleWeather; } +u32 AI_GetSwitchinWeather(struct BattlePokemon battleMon) +{ + enum Ability ability = battleMon.ability; + // Forced weather behaviour + if (!AI_WeatherHasEffect()) + return B_WEATHER_NONE; + if (ability == ABILITY_CLOUD_NINE || ability == ABILITY_AIR_LOCK) + return B_WEATHER_NONE; + if (gBattleWeather & B_WEATHER_PRIMAL_ANY) + return gBattleWeather; + + // Switchin will introduce new weather + switch(ability) + { + case ABILITY_DRIZZLE: + return B_WEATHER_RAIN_NORMAL; + case ABILITY_DROUGHT: + return B_WEATHER_SUN_NORMAL; + case ABILITY_SAND_STREAM: + return B_WEATHER_SANDSTORM; + case ABILITY_SNOW_WARNING: + return GetConfig(CONFIG_SNOW_WARNING) >= GEN_9 ? B_WEATHER_SNOW : B_WEATHER_HAIL; + default: + return gBattleWeather; + } +} + enum WeatherState IsWeatherActive(u32 flags) { enum WeatherState state = WEATHER_INACTIVE; @@ -1585,10 +1892,12 @@ bool32 IsHazardMove(u32 move) u32 i, moveEffect = GetMoveEffect(move); switch (moveEffect) { + case EFFECT_CEASELESS_EDGE: case EFFECT_SPIKES: - case EFFECT_TOXIC_SPIKES: - case EFFECT_STICKY_WEB: case EFFECT_STEALTH_ROCK: + case EFFECT_STICKY_WEB: + case EFFECT_STONE_AXE: + case EFFECT_TOXIC_SPIKES: return TRUE; } @@ -1598,8 +1907,11 @@ bool32 IsHazardMove(u32 move) const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); switch (additionalEffect->moveEffect) { + case MOVE_EFFECT_STEALTH_ROCK: case MOVE_EFFECT_STEELSURGE: return TRUE; + default: + break; } } return FALSE; @@ -1615,7 +1927,7 @@ bool32 IsHazardClearingMove(u32 move) case EFFECT_TIDY_UP: return TRUE; case EFFECT_DEFOG: - if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + if (GetConfig(CONFIG_DEFOG_EFFECT_CLEARING) >= GEN_6) return TRUE; break; } @@ -1628,6 +1940,8 @@ bool32 IsHazardClearingMove(u32 move) { case MOVE_EFFECT_DEFOG: return TRUE; + default: + break; } } @@ -1679,7 +1993,7 @@ bool32 IsAllyProtectingFromMove(u32 battlerAtk, u32 attackerMove, u32 allyMove) } } -bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility) +bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, enum Ability atkAbility) { if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_NEGATE_UNAWARE) return FALSE; @@ -1693,75 +2007,21 @@ bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility) return FALSE; } -bool32 IsSemiInvulnerable(u32 battlerDef, u32 move) +bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, enum Ability atkAbility, enum Ability defAbility, u32 move) { - if (gStatuses3[battlerDef] & STATUS3_PHANTOM_FORCE) - return TRUE; - else if (gBattleStruct->battlerState[battlerDef].commandingDondozo) - return TRUE; - else if (!MoveDamagesAirborne(move) && gStatuses3[battlerDef] & STATUS3_ON_AIR) - return TRUE; - else if (!MoveDamagesUnderWater(move) && gStatuses3[battlerDef] & STATUS3_UNDERWATER) - return TRUE; - else if (!MoveDamagesUnderground(move) && gStatuses3[battlerDef] & STATUS3_UNDERGROUND) - return TRUE; - else - return FALSE; -} + enum HoldEffect holdEffect = gAiLogicData->holdEffects[battlerDef]; + u32 accuracy = gAiLogicData->moveAccuracy[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex]; -bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move) -{ - u32 weather; - if (IsSemiInvulnerable(battlerDef, move)) + gPotentialItemEffectBattler = battlerDef; + if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < gAiLogicData->holdEffectParams[battlerDef]) + return FALSE; //probabilistically speaking, focus band should activate so dont OHKO + else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && AI_BattlerAtMaxHp(battlerDef)) return FALSE; - //TODO - anticipate protect move? - - // always hits - if (gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS || gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) - return TRUE; + if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, atkAbility, move) && defAbility == ABILITY_STURDY) + return FALSE; - if (gAiLogicData->abilities[battlerDef] == ABILITY_NO_GUARD || gAiLogicData->abilities[battlerAtk] == ABILITY_NO_GUARD) - return TRUE; - - u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); - if (B_TOXIC_NEVER_MISS >= GEN_6 - && nonVolatileStatus == MOVE_EFFECT_TOXIC - && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) - return TRUE; - - // discouraged from hitting - weather = AI_GetWeather(); - if ((weather & B_WEATHER_SUN) && MoveHas50AccuracyInSun(move)) - return FALSE; - - if ((weather & B_WEATHER_RAIN) && MoveAlwaysHitsInRain(move)) - return TRUE; - if ((weather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && MoveAlwaysHitsInHailSnow(move)) - return TRUE; - if (B_MINIMIZE_DMG_ACC >= GEN_6 && (gStatuses3[battlerDef] & STATUS3_MINIMIZED) && MoveIncreasesPowerToMinimizedTargets(move)) - return TRUE; - if (GetMoveAccuracy(move) == 0) - return TRUE; - - return FALSE; -} - -bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move) -{ - enum ItemHoldEffect holdEffect = gAiLogicData->holdEffects[battlerDef]; - u32 accuracy = gAiLogicData->moveAccuracy[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex]; - - gPotentialItemEffectBattler = battlerDef; - if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < gAiLogicData->holdEffectParams[battlerDef]) - return FALSE; //probabilistically speaking, focus band should activate so dont OHKO - else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && AI_BattlerAtMaxHp(battlerDef)) - return FALSE; - - if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, atkAbility, move) && defAbility == ABILITY_STURDY) - return FALSE; - - if ((((gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS) + if (((gBattleMons[battlerDef].volatiles.lockOn && gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) || atkAbility == ABILITY_NO_GUARD || defAbility == ABILITY_NO_GUARD) && gBattleMons[battlerAtk].level >= gBattleMons[battlerDef].level) @@ -1771,7 +2031,7 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil else // test the odds { u32 odds = accuracy + (gBattleMons[battlerAtk].level - gBattleMons[battlerDef].level); - if (B_SHEER_COLD_ACC >= GEN_7 && move == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) + if (B_SHEER_COLD_ACC >= GEN_7 && GetMoveEffect(move) == EFFECT_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) odds -= 10; if (Random() % 100 + 1 < odds && gBattleMons[battlerAtk].level >= gBattleMons[battlerDef].level) return TRUE; @@ -1779,114 +2039,87 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil return FALSE; } -bool32 ShouldSetSandstorm(u32 battler, u32 ability, enum ItemHoldEffect holdEffect) +bool32 ShouldRaiseAnyStat(u32 battlerAtk, u32 battlerDef) { - if (IsWeatherActive(B_WEATHER_SANDSTORM | B_WEATHER_PRIMAL_ANY) != WEATHER_INACTIVE) + if (AreBattlersStatsMaxed(battlerAtk)) return FALSE; - if (ability == ABILITY_SAND_VEIL - || ability == ABILITY_SAND_RUSH - || ability == ABILITY_SAND_FORCE - || ability == ABILITY_OVERCOAT - || ability == ABILITY_MAGIC_GUARD - || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES - || IS_BATTLER_ANY_TYPE(battler, TYPE_ROCK, TYPE_GROUND, TYPE_STEEL) - || HasMoveWithEffect(battler, EFFECT_SHORE_UP) - || HasMoveWithEffect(battler, EFFECT_WEATHER_BALL)) - { - return TRUE; - } - return FALSE; -} + // Don't increase stats if opposing battler has Unaware + if (AI_IsAbilityOnSide(battlerDef, ABILITY_UNAWARE)) + return FALSE; -bool32 ShouldSetHail(u32 battler, u32 ability, enum ItemHoldEffect holdEffect) -{ - if (IsWeatherActive(B_WEATHER_HAIL | B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) != WEATHER_INACTIVE) + // Don't set up if AI is dead to residual damage from weather + if (GetBattlerSecondaryDamage(battlerAtk) >= gBattleMons[battlerAtk].hp) return FALSE; - if (ability == ABILITY_SNOW_CLOAK - || ability == ABILITY_ICE_BODY - || ability == ABILITY_FORECAST - || ability == ABILITY_SLUSH_RUSH - || ability == ABILITY_MAGIC_GUARD - || ability == ABILITY_OVERCOAT - || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES - || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) - || HasMoveWithFlag(battler, MoveAlwaysHitsInHailSnow) - || HasMoveWithEffect(battler, EFFECT_AURORA_VEIL) - || HasMoveWithEffect(battler, EFFECT_WEATHER_BALL)) - { - return TRUE; - } - return FALSE; + // Don't increase stats if opposing battler has Opportunist + if (AI_IsAbilityOnSide(battlerDef, ABILITY_OPPORTUNIST)) + return FALSE; + + // Don't increase stats if opposing battler has used Haze effect or AI effect + if (!RandomPercentage(RNG_AI_BOOST_INTO_HAZE, BOOST_INTO_HAZE_CHANCE) + && HasBattlerSideUsedMoveWithEffect(battlerDef, EFFECT_HAZE)) + return FALSE; + + if (CountPositiveStatStages(battlerAtk) > 0 + && HasBattlerSideMoveWithAIEffect(battlerDef, AI_EFFECT_RESET_STATS)) + return FALSE; + + // Don't increase stats if AI could KO target through Sturdy effect, as otherwise it always 2HKOs + if (CanBattlerKOTargetIgnoringSturdy(battlerAtk, battlerDef)) + return FALSE; + + return TRUE; } -bool32 ShouldSetRain(u32 battlerAtk, u32 atkAbility, enum ItemHoldEffect holdEffect) +bool32 ShouldSetWeather(u32 battler, u32 weather) { - if (IsWeatherActive(B_WEATHER_RAIN | B_WEATHER_PRIMAL_ANY) != WEATHER_INACTIVE) + if (AI_GetWeather() & weather) return FALSE; - if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA - && (atkAbility == ABILITY_SWIFT_SWIM - || atkAbility == ABILITY_FORECAST - || atkAbility == ABILITY_HYDRATION - || atkAbility == ABILITY_RAIN_DISH - || atkAbility == ABILITY_DRY_SKIN - || HasMoveWithFlag(battlerAtk, MoveAlwaysHitsInRain) - || HasMoveWithEffect(battlerAtk, EFFECT_WEATHER_BALL) - || HasMoveWithType(battlerAtk, TYPE_WATER))) - { - return TRUE; - } - return FALSE; + return WeatherChecker(battler, weather, FIELD_EFFECT_POSITIVE); } -bool32 ShouldSetSun(u32 battlerAtk, u32 atkAbility, enum ItemHoldEffect holdEffect) +bool32 ShouldClearWeather(u32 battler, u32 weather) { - if (IsWeatherActive(B_WEATHER_SUN | B_WEATHER_PRIMAL_ANY) != WEATHER_INACTIVE) - return FALSE; + return WeatherChecker(battler, weather, FIELD_EFFECT_NEGATIVE); +} - if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA - && (atkAbility == ABILITY_CHLOROPHYLL - || atkAbility == ABILITY_FLOWER_GIFT - || atkAbility == ABILITY_FORECAST - || atkAbility == ABILITY_LEAF_GUARD - || atkAbility == ABILITY_SOLAR_POWER - || atkAbility == ABILITY_HARVEST - || HasMoveWithEffect(battlerAtk, EFFECT_SOLAR_BEAM) - || HasMoveWithEffect(battlerAtk, EFFECT_MORNING_SUN) - || HasMoveWithEffect(battlerAtk, EFFECT_SYNTHESIS) - || HasMoveWithEffect(battlerAtk, EFFECT_MOONLIGHT) - || HasMoveWithEffect(battlerAtk, EFFECT_WEATHER_BALL) - || HasMoveWithEffect(battlerAtk, EFFECT_GROWTH) - || HasMoveWithType(battlerAtk, TYPE_FIRE))) +bool32 ShouldSetFieldStatus(u32 battler, u32 fieldStatus) +{ + if (gFieldStatuses & fieldStatus) { - return TRUE; + if (!(fieldStatus & STATUS_FIELD_TRICK_ROOM)) + return FALSE; + // DOUBLE_TRICK_ROOM_ON_LAST_TURN_CHANCE + else if (gFieldTimers.trickRoomTimer != 1) + return FALSE; } - return FALSE; + + return FieldStatusChecker(battler, fieldStatus, FIELD_EFFECT_POSITIVE); } -bool32 ShouldSetSnow(u32 battler, u32 ability, enum ItemHoldEffect holdEffect) +bool32 ShouldClearFieldStatus(u32 battler, u32 fieldStatus) { - if (IsWeatherActive(B_WEATHER_SNOW | B_WEATHER_HAIL | B_WEATHER_PRIMAL_ANY) != WEATHER_INACTIVE) - return FALSE; + return FieldStatusChecker(battler, fieldStatus, FIELD_EFFECT_NEGATIVE); +} - if (ability == ABILITY_SNOW_CLOAK - || ability == ABILITY_ICE_BODY - || ability == ABILITY_FORECAST - || ability == ABILITY_SLUSH_RUSH - || IS_BATTLER_OF_TYPE(battler, TYPE_ICE) - || HasMoveWithFlag(battler, MoveAlwaysHitsInHailSnow) - || HasMoveWithEffect(battler, EFFECT_AURORA_VEIL) - || HasMoveWithEffect(battler, EFFECT_WEATHER_BALL)) - { - return TRUE; - } - return FALSE; +bool32 IsBattlerDamagedByStatus(u32 battler) +{ + return gBattleMons[battler].status1 & STATUS1_DAMAGING + || gBattleMons[battler].volatiles.wrapped + || gBattleMons[battler].volatiles.nightmare + || gBattleMons[battler].volatiles.cursed + || gBattleMons[battler].volatiles.saltCure + || gBattleMons[battler].volatiles.leechSeed + || gBattleMons[battler].volatiles.perishSong + || gSideStatuses[GetBattlerSide(battler)] & (SIDE_STATUS_SEA_OF_FIRE | SIDE_STATUS_DAMAGE_NON_TYPES); } -void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, s32 *score) +s32 ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove) { + s32 score = 0; + // TODO more sophisticated logic u32 uses = gDisableStructs[battlerAtk].protectUses; @@ -1899,82 +2132,169 @@ void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, if (uses == 0) { if (predictedMove != MOVE_NONE && predictedMove != 0xFFFF && !IsBattleMoveStatus(predictedMove)) - ADJUST_SCORE_PTR(DECENT_EFFECT); + score += DECENT_EFFECT; else if (Random() % 256 < 100) - ADJUST_SCORE_PTR(WEAK_EFFECT); + score += WEAK_EFFECT; } else { - if (IsDoubleBattle()) - ADJUST_SCORE_PTR(-(2 * min(uses, 3))); + if (!IsBattle1v1()) + score -= (2 * min(uses, 3)); else - ADJUST_SCORE_PTR(-(min(uses, 3))); + score -= (min(uses, 3)); } - if (gBattleMons[battlerAtk].status1 & (STATUS1_PSN_ANY | STATUS1_BURN | STATUS1_FROSTBITE) - || gBattleMons[battlerAtk].status2 & (STATUS2_CURSED | STATUS2_INFATUATION) - || gStatuses3[battlerAtk] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN)) + if (IsBattlerDamagedByStatus(battlerAtk)) { - ADJUST_SCORE_PTR(-1); + score -= 1; } - if (gBattleMons[battlerDef].status1 & STATUS1_TOXIC_POISON - || gBattleMons[battlerDef].status2 & (STATUS2_CURSED | STATUS2_INFATUATION) - || gStatuses3[battlerDef] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED | STATUS3_YAWN)) - ADJUST_SCORE_PTR(DECENT_EFFECT); + if (IsBattlerDamagedByStatus(battlerDef)) + { + score += DECENT_EFFECT; + } + + return score; } // stat stages -bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 stat) +bool32 CanLowerStat(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData, enum Stat stat) { if (gBattleMons[battlerDef].statStages[stat] == MIN_STAT_STAGE) return FALSE; - if (gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET) + if (aiData->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET) + return FALSE; + + u32 move = gAiThinkingStruct->moveConsidered; + enum Ability abilityAtk = aiData->abilities[battlerAtk]; + + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_MIST && abilityAtk != ABILITY_INFILTRATOR) return FALSE; - switch (abilityDef) + if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, abilityAtk, move)) { - case ABILITY_SPEED_BOOST: - if (stat == STAT_SPEED) - return FALSE; - case ABILITY_HYPER_CUTTER: - if (stat == STAT_ATK) + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && AI_IsAbilityOnSide(battlerDef, ABILITY_FLOWER_VEIL)) return FALSE; - case ABILITY_BIG_PECKS: - if (stat == STAT_DEF) + + switch (aiData->abilities[battlerDef]) + { + case ABILITY_SPEED_BOOST: + if (stat == STAT_SPEED) + return FALSE; + case ABILITY_HYPER_CUTTER: + if (stat == STAT_ATK) + return FALSE; + case ABILITY_BIG_PECKS: + if (stat == STAT_DEF) + return FALSE; + case ABILITY_ILLUMINATE: + if (GetConfig(CONFIG_ILLUMINATE_EFFECT) < GEN_9) + break; + case ABILITY_KEEN_EYE: + case ABILITY_MINDS_EYE: + if (stat == STAT_ACC) + return FALSE; + case ABILITY_CONTRARY: + case ABILITY_CLEAR_BODY: + case ABILITY_WHITE_SMOKE: + case ABILITY_FULL_METAL_BODY: return FALSE; - case ABILITY_ILLUMINATE: - if (B_ILLUMINATE_EFFECT < GEN_9) + case ABILITY_SHIELD_DUST: + if (!IsBattleMoveStatus(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) + return FALSE; break; - case ABILITY_KEEN_EYE: - case ABILITY_MINDS_EYE: - if (stat == STAT_ACC) - return FALSE; - case ABILITY_FLOWER_VEIL: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) - return FALSE; - break; - case ABILITY_CONTRARY: - case ABILITY_CLEAR_BODY: - case ABILITY_WHITE_SMOKE: - case ABILITY_FULL_METAL_BODY: - return FALSE; + default: + break; + } } - // This should be a viability check if (stat == STAT_SPEED) { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); // If AI is faster and doesn't have any mons left, lowering speed doesn't give any - return !(AI_IsFaster(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered) + return !(AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY) && CountUsablePartyMons(battlerAtk) == 0 - && !HasMoveWithEffect(battlerAtk, EFFECT_ELECTRO_BALL)); + && !HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_ELECTRO_BALL)); } return TRUE; } -bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat) +u32 IncreaseStatDownScore(u32 battlerAtk, u32 battlerDef, enum Stat stat) +{ + u32 tempScore = NO_INCREASE; + + // Don't increase score if target is already -3 stat stage + if (stat != STAT_SPEED && gBattleMons[battlerDef].statStages[stat] <= DEFAULT_STAT_STAGE - 3) + return NO_INCREASE; + + // Don't decrease stat if target will die to residual damage + if (GetBattlerSecondaryDamage(battlerDef) >= gBattleMons[battlerDef].hp) + return NO_INCREASE; + + if (DoesAbilityRaiseStatsWhenLowered(gAiLogicData->abilities[battlerDef])) + return NO_INCREASE; + + // TODO: Avoid decreasing stat if + // player can kill ai in 2 hits with decreased attack / sp atk stages + // ai can kill target in 2 hits without decreasing defense / sp def stages + + switch (stat) + { + case STAT_ATK: + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) + tempScore += DECENT_EFFECT; + break; + case STAT_DEF: + if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) + || HasMoveWithCategory(BATTLE_PARTNER(battlerAtk), DAMAGE_CATEGORY_PHYSICAL)) + tempScore += DECENT_EFFECT; + break; + case STAT_SPEED: + { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (AI_IsSlower(battlerAtk, battlerDef, MOVE_NONE, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY) + || AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, MOVE_NONE, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY)) + tempScore += DECENT_EFFECT; + break; + } + case STAT_SPATK: + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + tempScore += DECENT_EFFECT; + break; + case STAT_SPDEF: + if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) + || HasMoveWithCategory(BATTLE_PARTNER(battlerAtk), DAMAGE_CATEGORY_SPECIAL)) + tempScore += DECENT_EFFECT; + break; + case STAT_ACC: + tempScore += WEAK_EFFECT; + if (IsBattlerTrapped(battlerAtk, battlerDef)) + tempScore += DECENT_EFFECT; + if (gBattleMons[battlerDef].volatiles.leechSeed) + tempScore += WEAK_EFFECT; + if (gBattleMons[battlerDef].volatiles.cursed) + tempScore += WEAK_EFFECT; + break; + case STAT_EVASION: + if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) + tempScore += WEAK_EFFECT; + if (gBattleMons[battlerDef].volatiles.leechSeed) + tempScore += WEAK_EFFECT; + if (gBattleMons[battlerDef].volatiles.root) + tempScore += WEAK_EFFECT; + if (gBattleMons[battlerDef].volatiles.cursed) + tempScore += WEAK_EFFECT; + break; + default: + break; + } + + return (tempScore > BEST_EFFECT) ? BEST_EFFECT : tempScore; // don't inflate score so only max +4 +} + +bool32 BattlerStatCanRise(u32 battler, enum Ability battlerAbility, enum Stat stat) { if ((gBattleMons[battler].statStages[stat] < MAX_STAT_STAGE && battlerAbility != ABILITY_CONTRARY) || (battlerAbility == ABILITY_CONTRARY && gBattleMons[battler].statStages[stat] > MIN_STAT_STAGE)) @@ -1984,7 +2304,7 @@ bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat) bool32 AreBattlersStatsMaxed(u32 battlerId) { - u32 i; + enum Stat i; for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[battlerId].statStages[i] < MAX_STAT_STAGE) @@ -1995,7 +2315,7 @@ bool32 AreBattlersStatsMaxed(u32 battlerId) bool32 AnyStatIsRaised(u32 battlerId) { - u32 i; + enum Stat i; for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { @@ -2008,7 +2328,7 @@ bool32 AnyStatIsRaised(u32 battlerId) u32 CountPositiveStatStages(u32 battlerId) { u32 count = 0; - u32 i; + enum Stat i; for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[battlerId].statStages[i] > DEFAULT_STAT_STAGE) @@ -2020,7 +2340,7 @@ u32 CountPositiveStatStages(u32 battlerId) u32 CountNegativeStatStages(u32 battlerId) { u32 count = 0; - u32 i; + enum Stat i; for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[battlerId].statStages[i] < DEFAULT_STAT_STAGE) @@ -2029,128 +2349,6 @@ u32 CountNegativeStatStages(u32 battlerId) return count; } -bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility) -{ - if (AI_IsFaster(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered) - && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) - && CanAIFaintTarget(battlerAtk, battlerDef, 0)) - return FALSE; // Don't bother lowering stats if can kill enemy. - - if (gBattleMons[battlerDef].statStages[STAT_ATK] > 4 - && HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) - && defAbility != ABILITY_CONTRARY - && defAbility != ABILITY_CLEAR_BODY - && defAbility != ABILITY_WHITE_SMOKE - && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_HYPER_CUTTER - && gAiLogicData->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) - return TRUE; - return FALSE; -} - -bool32 ShouldLowerDefense(u32 battlerAtk, u32 battlerDef, u32 defAbility) -{ - if (AI_IsFaster(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered) - && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) - && CanAIFaintTarget(battlerAtk, battlerDef, 0)) - return FALSE; // Don't bother lowering stats if can kill enemy. - - if (gBattleMons[battlerDef].statStages[STAT_DEF] > 4 - && HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) - && defAbility != ABILITY_CONTRARY - && defAbility != ABILITY_CLEAR_BODY - && defAbility != ABILITY_WHITE_SMOKE - && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_BIG_PECKS - && gAiLogicData->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) - return TRUE; - return FALSE; -} - -bool32 ShouldLowerSpeed(u32 battlerAtk, u32 battlerDef, u32 defAbility) -{ - if (defAbility == ABILITY_CONTRARY - || defAbility == ABILITY_CLEAR_BODY - || defAbility == ABILITY_FULL_METAL_BODY - || defAbility == ABILITY_WHITE_SMOKE - || gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET) - return FALSE; - - return (AI_IsSlower(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered)); -} - -bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility) -{ - if (AI_IsFaster(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered) - && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) - && CanAIFaintTarget(battlerAtk, battlerDef, 0)) - return FALSE; // Don't bother lowering stats if can kill enemy. - - if (gBattleMons[battlerDef].statStages[STAT_SPATK] > 4 - && HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) - && defAbility != ABILITY_CONTRARY - && defAbility != ABILITY_CLEAR_BODY - && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE - && gAiLogicData->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) - return TRUE; - return FALSE; -} - -bool32 ShouldLowerSpDef(u32 battlerAtk, u32 battlerDef, u32 defAbility) -{ - if (AI_IsFaster(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered) - && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) - && CanAIFaintTarget(battlerAtk, battlerDef, 0)) - return FALSE; // Don't bother lowering stats if can kill enemy. - - if (gBattleMons[battlerDef].statStages[STAT_SPDEF] > 4 - && HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) - && defAbility != ABILITY_CONTRARY - && defAbility != ABILITY_CLEAR_BODY - && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE - && gAiLogicData->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) - return TRUE; - return FALSE; -} - -bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility) -{ - if (AI_IsFaster(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered) - && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) - && CanAIFaintTarget(battlerAtk, battlerDef, 0)) - return FALSE; // Don't bother lowering stats if can kill enemy. - - if (defAbility != ABILITY_CONTRARY - && defAbility != ABILITY_CLEAR_BODY - && defAbility != ABILITY_WHITE_SMOKE - && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_KEEN_EYE - && defAbility != ABILITY_MINDS_EYE - && (B_ILLUMINATE_EFFECT >= GEN_9 && defAbility != ABILITY_ILLUMINATE) - && gAiLogicData->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) - return TRUE; - return FALSE; -} - -bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility) -{ - if (AI_IsFaster(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered) - && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) - && CanAIFaintTarget(battlerAtk, battlerDef, 0)) - return FALSE; // Don't bother lowering stats if can kill enemy. - - if (gBattleMons[battlerDef].statStages[STAT_EVASION] > DEFAULT_STAT_STAGE - && defAbility != ABILITY_CONTRARY - && defAbility != ABILITY_CLEAR_BODY - && defAbility != ABILITY_FULL_METAL_BODY - && defAbility != ABILITY_WHITE_SMOKE - && gAiLogicData->holdEffects[battlerDef] != HOLD_EFFECT_CLEAR_AMULET) - return TRUE; - return FALSE; -} - bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext) { s32 dmg; @@ -2166,18 +2364,6 @@ bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 moveIndex, en return FALSE; } -bool32 CanIndexMoveGuaranteeFaintTarget(u32 battlerAtk, u32 battlerDef, u32 moveIndex) -{ - s32 dmg; - u16 *moves = gBattleMons[battlerAtk].moves; - - dmg = gAiLogicData->simulatedDmg[battlerAtk][battlerDef][moveIndex].minimum; // Explictly care about guaranteed KOs universally - - if (gBattleMons[battlerDef].hp <= dmg && !CanEndureHit(battlerAtk, battlerDef, moves[moveIndex])) - return TRUE; - return FALSE; -} - u16 *GetMovesArray(u32 battler) { if (IsAiBattlerAware(battler) || IsAiBattlerAware(BATTLE_PARTNER(battler))) @@ -2186,7 +2372,19 @@ u16 *GetMovesArray(u32 battler) return gBattleHistory->usedMoves[battler]; } -bool32 HasOnlyMovesWithCategory(u32 battlerId, u32 category, bool32 onlyOffensive) +u32 GetIndexInMoveArray(u32 battler, u32 move) +{ + u16 *moves = GetMovesArray(battler); + u32 i; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] == move) + return i; + } + return MAX_MON_MOVES; +} + +bool32 HasOnlyMovesWithCategory(u32 battlerId, enum DamageCategory category, bool32 onlyOffensive) { u32 i; u16 *moves = GetMovesArray(battlerId); @@ -2202,7 +2400,7 @@ bool32 HasOnlyMovesWithCategory(u32 battlerId, u32 category, bool32 onlyOffensiv return TRUE; } -bool32 HasMoveWithCategory(u32 battler, u32 category) +bool32 HasMoveWithCategory(u32 battler, enum DamageCategory category) { u32 i; u16 *moves = GetMovesArray(battler); @@ -2215,7 +2413,7 @@ bool32 HasMoveWithCategory(u32 battler, u32 category) return FALSE; } -bool32 HasMoveWithType(u32 battler, u32 type) +bool32 HasMoveWithType(u32 battler, enum Type type) { s32 i; u16 *moves = GetMovesArray(battler); @@ -2229,42 +2427,84 @@ bool32 HasMoveWithType(u32 battler, u32 type) return FALSE; } -bool32 HasMoveWithEffect(u32 battlerId, enum BattleMoveEffects effect) +bool32 HasMoveWithEffect(u32 battler, enum BattleMoveEffects effect) { s32 i; - u16 *moves = GetMovesArray(battlerId); + u16 *moves = GetMovesArray(battler); for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE - && GetMoveEffect(moves[i]) == effect) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && GetMoveEffect(moves[i]) == effect) return TRUE; } return FALSE; } +bool32 HasMoveWithAIEffect(u32 battler, u32 aiEffect) +{ + s32 i; + u16 *moves = GetMovesArray(battler); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE) + { + if (GetAIEffectGroupFromMove(battler, moves[i]) & aiEffect) + return TRUE; + } + } + + return FALSE; +} + bool32 HasBattlerSideMoveWithEffect(u32 battler, u32 effect) { if (HasMoveWithEffect(battler, effect)) return TRUE; - if (IsDoubleBattle() && HasMoveWithEffect(BATTLE_OPPOSITE(battler), effect)) + if (HasPartnerIgnoreFlags(battler) && HasMoveWithEffect(BATTLE_PARTNER(battler), effect)) + return TRUE; + return FALSE; +} + +bool32 HasBattlerSideMoveWithAIEffect(u32 battler, u32 aiEffect) +{ + if (HasMoveWithAIEffect(battler, aiEffect)) + return TRUE; + if (HasPartnerIgnoreFlags(battler) && HasMoveWithAIEffect(BATTLE_PARTNER(battler), aiEffect)) return TRUE; return FALSE; } // HasBattlerSideMoveWithEffect checks if the AI knows a side has a move effect, -// while HasBattlerSideUsedMoveWithEffect checks if the side has ever used a move effect. -// The former acts the same way as the latter if AI_FLAG_OMNISCIENT isn't used. +// while HasBattlerSideUsedMoveWithEffect checks if the side has actively USED the move effect. +// It matches both on move effect and on AI move effect; eg, EFFECT_HAZE will also bring up Freezy Frost or Clear Smog, anything with AI_EFFECT_RESET_STATS. bool32 HasBattlerSideUsedMoveWithEffect(u32 battler, u32 effect) { + u32 aiEffect = GetAIEffectGroup(effect); u32 i; for (i = 0; i < MAX_MON_MOVES; i++) { if (GetMoveEffect(gBattleHistory->usedMoves[battler][i]) == effect) return TRUE; - if (IsDoubleBattle() && GetMoveEffect(gBattleHistory->usedMoves[BATTLE_OPPOSITE(battler)][i]) == effect) - return TRUE; + + if (aiEffect != AI_EFFECT_NONE) + { + if (GetAIEffectGroupFromMove(battler, gBattleHistory->usedMoves[battler][i]) & aiEffect) + return TRUE; + } + + if (HasPartnerIgnoreFlags(battler)) + { + if (GetMoveEffect(gBattleHistory->usedMoves[BATTLE_PARTNER(battler)][i]) == effect) + return TRUE; + + if (aiEffect != AI_EFFECT_NONE) + { + if (GetAIEffectGroupFromMove(battler, gBattleHistory->usedMoves[BATTLE_PARTNER(battler)][i]) & aiEffect) + return TRUE; + } + } } return FALSE; } @@ -2318,27 +2558,11 @@ bool32 HasBattlerSideMoveWithAdditionalEffect(u32 battler, u32 moveEffect) { if (HasMoveWithAdditionalEffect(battler, moveEffect)) return TRUE; - if (IsDoubleBattle() && HasMoveWithAdditionalEffect(BATTLE_OPPOSITE(battler), moveEffect)) + if (HasPartnerIgnoreFlags(battler) && HasMoveWithAdditionalEffect(BATTLE_PARTNER(battler), moveEffect)) return TRUE; return FALSE; } -// HasBattlerSideMoveWithAdditionalEffect checks if the AI knows a side has a move effect, -// while HasBattlerSideUsedMoveWithAdditionalEffect checks if the side has ever used a move effect. -// The former acts the same way as the latter if AI_FLAG_OMNISCIENT isn't used. -bool32 HasBattlerSideUsedMoveWithAdditionalEffect(u32 battler, u32 moveEffect) -{ - u32 i; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (MoveHasAdditionalEffect(gBattleHistory->usedMoves[battler][i], moveEffect)) - return TRUE; - if (IsDoubleBattle() && MoveHasAdditionalEffect(gBattleHistory->usedMoves[BATTLE_OPPOSITE(battler)][i], moveEffect)) - return TRUE; - } - return FALSE; -} - bool32 HasMoveWithCriticalHitChance(u32 battlerId) { s32 i; @@ -2420,21 +2644,43 @@ bool32 HasMoveThatLowersOwnStats(u32 battlerId) return FALSE; } -bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect) +bool32 HasMoveThatRaisesOwnStats(u32 battlerId) { - s32 i; - u16 *moves = GetMovesArray(battlerAtk); - u32 moveLimitations = gAiLogicData->moveLimitations[battlerAtk]; - + s32 i, j; + u32 aiMove; + u16 *moves = GetMovesArray(battlerId); for (i = 0; i < MAX_MON_MOVES; i++) { - if (IsMoveUnusable(i, moves[i], moveLimitations)) - continue; - - if (ignoreStatus && IsBattleMoveStatus(moves[i])) - continue; - else if ((!IsBattleMoveStatus(moves[i]) && GetMoveAccuracy(moves[i]) == 0) - || GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) + aiMove = moves[i]; + if (aiMove != MOVE_NONE && aiMove != MOVE_UNAVAILABLE) + { + u32 additionalEffectCount = GetMoveAdditionalEffectCount(aiMove); + for (j = 0; j < additionalEffectCount; j++) + { + const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(aiMove, j); + if (IsSelfStatRaisingEffect(additionalEffect->moveEffect) && additionalEffect->self) + return TRUE; + } + } + } + return FALSE; +} + +bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus) +{ + s32 i; + u16 *moves = GetMovesArray(battlerAtk); + u32 moveLimitations = gAiLogicData->moveLimitations[battlerAtk]; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (IsMoveUnusable(i, moves[i], moveLimitations)) + continue; + + if (ignoreStatus && IsBattleMoveStatus(moves[i])) + continue; + else if ((!IsBattleMoveStatus(moves[i]) && GetMoveAccuracy(moves[i]) == 0) + || GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) continue; if (gAiLogicData->moveAccuracy[battlerAtk][battlerDef][i] <= accCheck) @@ -2552,11 +2798,13 @@ bool32 IsStatRaisingEffect(enum BattleMoveEffects effect) { switch (effect) { + case EFFECT_ATTACK_UP_USER_ALLY: case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_2: case EFFECT_DEFENSE_UP: case EFFECT_DEFENSE_UP_2: case EFFECT_DEFENSE_UP_3: + case EFFECT_AUTOTOMIZE: case EFFECT_SPEED_UP: case EFFECT_SPEED_UP_2: case EFFECT_SPECIAL_ATTACK_UP: @@ -2622,7 +2870,7 @@ bool32 IsStatLoweringEffect(enum BattleMoveEffects effect) } } -bool32 IsSelfStatLoweringEffect(enum BattleMoveEffects effect) +bool32 IsSelfStatLoweringEffect(enum MoveEffect effect) { // Self stat lowering moves like Overheart, Superpower etc. switch (effect) @@ -2650,13 +2898,38 @@ bool32 IsSelfStatLoweringEffect(enum BattleMoveEffects effect) } } +bool32 IsSelfStatRaisingEffect(enum MoveEffect effect) +{ + // Self stat lowering moves like Power Up Punch or Charge Beam + switch (effect) + { + case MOVE_EFFECT_ATK_PLUS_1: + case MOVE_EFFECT_DEF_PLUS_1: + case MOVE_EFFECT_SPD_PLUS_1: + case MOVE_EFFECT_SP_ATK_PLUS_1: + case MOVE_EFFECT_SP_DEF_PLUS_1: + case MOVE_EFFECT_EVS_PLUS_1: + case MOVE_EFFECT_ACC_PLUS_1: + case MOVE_EFFECT_ATK_PLUS_2: + case MOVE_EFFECT_DEF_PLUS_2: + case MOVE_EFFECT_SPD_PLUS_2: + case MOVE_EFFECT_SP_ATK_PLUS_2: + case MOVE_EFFECT_SP_DEF_PLUS_2: + case MOVE_EFFECT_EVS_PLUS_2: + case MOVE_EFFECT_ACC_PLUS_2: + return TRUE; + default: + return FALSE; + } +} + bool32 IsSwitchOutEffect(enum BattleMoveEffects effect) { // Switch out effects like U-Turn, Volt Switch, etc. switch (effect) { case EFFECT_TELEPORT: - if (B_TELEPORT_BEHAVIOR >= GEN_8) + if (GetConfig(CONFIG_TELEPORT_BEHAVIOR) >= GEN_8) return TRUE; case EFFECT_HIT_ESCAPE: case EFFECT_PARTING_SHOT: @@ -2725,35 +2998,45 @@ static inline bool32 IsMoveSleepClauseTrigger(u32 move) case MOVE_EFFECT_EFFECT_SPORE_SIDE: case MOVE_EFFECT_YAWN_FOE: return TRUE; + default: + break; } } return FALSE; } -bool32 HasDamagingMove(u32 battlerId) +bool32 HasDamagingMove(u32 battler) { u32 i; - u16 *moves = GetMovesArray(battlerId); + u16 *moves = GetMovesArray(battler); for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !IsBattleMoveStatus(moves[i])) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && GetMovePower(moves[i]) > 0) return TRUE; } return FALSE; } -bool32 HasDamagingMoveOfType(u32 battlerId, u32 type) +bool32 HasDamagingMoveOfType(u32 battler, enum Type type) { s32 i; - u16 *moves = GetMovesArray(battlerId); + u16 *moves = GetMovesArray(battler); for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE - && GetMoveType(moves[i]) == type && !IsBattleMoveStatus(moves[i])) - return TRUE; + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && GetMovePower(moves[i]) > 0) + { + enum Type moveType = GetDynamicMoveType(GetBattlerMon(battler), moves[i], battler, MON_IN_BATTLE); + + if (moveType != TYPE_NONE && type == moveType) + return TRUE; + if (GetMoveType(moves[i]) == type) + return TRUE; + if (GetMoveEffect(moves[i]) == EFFECT_NATURE_POWER && GetMoveType(GetNaturePowerMove(moves[i])) == type) + return TRUE; + } } return FALSE; @@ -2788,13 +3071,13 @@ bool32 IsTwoTurnNotSemiInvulnerableMove(u32 battlerAtk, u32 move) } } -static u32 GetLeechSeedDamage(u32 battlerId) +static u32 GetLeechSeedDamage(u32 battler) { u32 damage = 0; - if ((gStatuses3[battlerId] & STATUS3_LEECHSEED) - && gBattleMons[gStatuses3[battlerId] & STATUS3_LEECHSEED_BATTLER].hp != 0) + u32 leechSeeder = gBattleMons[battler].volatiles.leechSeed; + if (leechSeeder && gBattleMons[leechSeeder - 1].hp != 0) { - damage = GetNonDynamaxMaxHP(battlerId) / 8; + damage = GetNonDynamaxMaxHP(battler) / 8; if (damage == 0) damage = 1; } @@ -2804,7 +3087,7 @@ static u32 GetLeechSeedDamage(u32 battlerId) static u32 GetNightmareDamage(u32 battlerId) { u32 damage = 0; - if ((gBattleMons[battlerId].status2 & STATUS2_NIGHTMARE) && gBattleMons[battlerId].status1 & STATUS1_SLEEP) + if (gBattleMons[battlerId].volatiles.nightmare && gBattleMons[battlerId].status1 & STATUS1_SLEEP) { damage = GetNonDynamaxMaxHP(battlerId) / 4; if (damage == 0) @@ -2816,7 +3099,7 @@ static u32 GetNightmareDamage(u32 battlerId) static u32 GetCurseDamage(u32 battlerId) { u32 damage = 0; - if (gBattleMons[battlerId].status2 & STATUS2_CURSED) + if (gBattleMons[battlerId].volatiles.cursed) { damage = GetNonDynamaxMaxHP(battlerId) / 4; if (damage == 0) @@ -2825,17 +3108,16 @@ static u32 GetCurseDamage(u32 battlerId) return damage; } -static u32 GetTrapDamage(u32 battlerId) +static u32 GetTrapDamage(u32 battler) { // ai has no knowledge about turns remaining u32 damage = 0; - enum ItemHoldEffect holdEffect = gAiLogicData->holdEffects[gBattleStruct->wrappedBy[battlerId]]; - if (gBattleMons[battlerId].status2 & STATUS2_WRAPPED) + if (gBattleMons[battler].volatiles.wrapped) { - if (holdEffect == HOLD_EFFECT_BINDING_BAND) - damage = GetNonDynamaxMaxHP(battlerId) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8); + if (gAiLogicData->holdEffects[gBattleMons[battler].volatiles.wrappedBy] == HOLD_EFFECT_BINDING_BAND) + damage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8); else - damage = GetNonDynamaxMaxHP(battlerId) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16); + damage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16); if (damage == 0) damage = 1; @@ -2869,7 +3151,7 @@ static u32 GetPoisonDamage(u32 battlerId) return damage; } -static bool32 BattlerAffectedBySandstorm(u32 battlerId, u32 ability) +static bool32 BattlerAffectedBySandstorm(u32 battlerId, enum Ability ability) { if (!IS_BATTLER_ANY_TYPE(battlerId, TYPE_ROCK, TYPE_GROUND, TYPE_STEEL) && ability != ABILITY_SAND_VEIL @@ -2880,7 +3162,7 @@ static bool32 BattlerAffectedBySandstorm(u32 battlerId, u32 ability) return FALSE; } -static bool32 BattlerAffectedByHail(u32 battlerId, u32 ability) +static bool32 BattlerAffectedByHail(u32 battlerId, enum Ability ability) { if (!IS_BATTLER_OF_TYPE(battlerId, TYPE_ICE) && ability != ABILITY_SNOW_CLOAK @@ -2892,8 +3174,8 @@ static bool32 BattlerAffectedByHail(u32 battlerId, u32 ability) static u32 GetWeatherDamage(u32 battlerId) { - u32 ability = gAiLogicData->abilities[battlerId]; - enum ItemHoldEffect holdEffect = gAiLogicData->holdEffects[battlerId]; + enum Ability ability = gAiLogicData->abilities[battlerId]; + enum HoldEffect holdEffect = gAiLogicData->holdEffects[battlerId]; u32 damage = 0; u32 weather = AI_GetWeather(); if (!weather) @@ -2902,7 +3184,8 @@ static u32 GetWeatherDamage(u32 battlerId) if (weather & B_WEATHER_SANDSTORM) { if (BattlerAffectedBySandstorm(battlerId, ability) - && !(gStatuses3[battlerId] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + && gBattleMons[battlerId].volatiles.semiInvulnerable != STATE_UNDERGROUND + && gBattleMons[battlerId].volatiles.semiInvulnerable != STATE_UNDERWATER && holdEffect != HOLD_EFFECT_SAFETY_GOGGLES) { damage = GetNonDynamaxMaxHP(battlerId) / 16; @@ -2913,7 +3196,8 @@ static u32 GetWeatherDamage(u32 battlerId) if ((weather & B_WEATHER_HAIL) && ability != ABILITY_ICE_BODY) { if (BattlerAffectedByHail(battlerId, ability) - && !(gStatuses3[battlerId] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) + && gBattleMons[battlerId].volatiles.semiInvulnerable != STATE_UNDERGROUND + && gBattleMons[battlerId].volatiles.semiInvulnerable != STATE_UNDERWATER && holdEffect != HOLD_EFFECT_SAFETY_GOGGLES) { damage = GetNonDynamaxMaxHP(battlerId) / 16; @@ -2941,7 +3225,7 @@ u32 GetBattlerSecondaryDamage(u32 battlerId) return secondaryDamage; } -bool32 BattlerWillFaintFromWeather(u32 battler, u32 ability) +bool32 BattlerWillFaintFromWeather(u32 battler, enum Ability ability) { if ((BattlerAffectedBySandstorm(battler, ability) || BattlerAffectedByHail(battler, ability)) && gBattleMons[battler].hp <= max(1, gBattleMons[battler].maxHP / 16)) @@ -2950,7 +3234,7 @@ bool32 BattlerWillFaintFromWeather(u32 battler, u32 ability) return FALSE; } -bool32 BattlerWillFaintFromSecondaryDamage(u32 battler, u32 ability) +bool32 BattlerWillFaintFromSecondaryDamage(u32 battler, enum Ability ability) { if (GetBattlerSecondaryDamage(battler) != 0 && gBattleMons[battler].hp <= max(1, gBattleMons[battler].maxHP / 16)) @@ -2960,7 +3244,7 @@ bool32 BattlerWillFaintFromSecondaryDamage(u32 battler, u32 ability) static bool32 AnyUsefulStatIsRaised(u32 battler) { - u32 statId; + enum Stat statId; for (statId = STAT_ATK; statId < NUM_BATTLE_STATS; statId++) { @@ -2978,6 +3262,8 @@ static bool32 AnyUsefulStatIsRaised(u32 battler) break; case STAT_SPEED: return TRUE; + default: + break; } } } @@ -2988,16 +3274,16 @@ static bool32 AnyUsefulStatIsRaised(u32 battler) static bool32 PartyBattlerShouldAvoidHazards(u32 currBattler, u32 switchBattler) { struct Pokemon *mon = &GetBattlerParty(currBattler)[switchBattler]; - u32 ability = GetMonAbility(mon); // we know our own party data - enum ItemHoldEffect holdEffect; + enum Ability ability = GetMonAbility(mon); // we know our own party data + enum HoldEffect holdEffect; u32 species = GetMonData(mon, MON_DATA_SPECIES); - u32 flags = gSideStatuses[GetBattlerSide(currBattler)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STEELSURGE | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES); s32 hazardDamage = 0; - u32 type1 = gSpeciesInfo[species].types[0]; - u32 type2 = gSpeciesInfo[species].types[1]; + enum Type type1 = GetSpeciesType(species, 0); + enum Type type2 = GetSpeciesType(species, 1); u32 maxHp = GetMonData(mon, MON_DATA_MAX_HP); + u32 side = GetBattlerSide(currBattler); - if (flags == 0) + if (!AreAnyHazardsOnSide(side)) return FALSE; if (ability == ABILITY_MAGIC_GUARD) @@ -3009,12 +3295,12 @@ static bool32 PartyBattlerShouldAvoidHazards(u32 currBattler, u32 switchBattler) if (holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS) return FALSE; - if (flags & SIDE_STATUS_STEALTH_ROCK) + if (IsHazardOnSide(side, HAZARDS_STEALTH_ROCK)) hazardDamage += GetStealthHazardDamageByTypesAndHP(TYPE_SIDE_HAZARD_POINTED_STONES, type1, type2, maxHp); - if ((flags & SIDE_STATUS_STEELSURGE)) + if (IsHazardOnSide(side, HAZARDS_STEELSURGE)) hazardDamage += GetStealthHazardDamageByTypesAndHP(TYPE_SIDE_HAZARD_SHARP_STEEL, type1, type2, maxHp); - if (flags & SIDE_STATUS_SPIKES && ((type1 != TYPE_FLYING && type2 != TYPE_FLYING + if (IsHazardOnSide(side, HAZARDS_SPIKES) && ((type1 != TYPE_FLYING && type2 != TYPE_FLYING && ability != ABILITY_LEVITATE && holdEffect != HOLD_EFFECT_AIR_BALLOON) || holdEffect == HOLD_EFFECT_IRON_BALL || gFieldStatuses & STATUS_FIELD_GRAVITY)) { @@ -3029,12 +3315,11 @@ static bool32 PartyBattlerShouldAvoidHazards(u32 currBattler, u32 switchBattler) return FALSE; } -enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex) +enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 move, u32 moveIndex) { bool32 hasStatBoost = AnyUsefulStatIsRaised(battlerAtk) || gBattleMons[battlerDef].statStages[STAT_EVASION] >= 9; //Significant boost in evasion for any class u32 battlerToSwitch; - - battlerToSwitch = gBattleStruct->AI_monToSwitchIntoId[battlerAtk]; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); // Palafin always wants to activate Zero to Hero if (gBattleMons[battlerAtk].species == SPECIES_PALAFIN_ZERO @@ -3042,10 +3327,14 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov && CountUsablePartyMons(battlerAtk) != 0) return SHOULD_PIVOT; + battlerToSwitch = gAiLogicData->mostSuitableMonId[battlerAtk]; + // This shouldn't ever happen, but it's there to make sure we don't accidentally read past the gParty array. + if (battlerToSwitch >= PARTY_SIZE) + battlerToSwitch = 0; if (PartyBattlerShouldAvoidHazards(battlerAtk, battlerToSwitch)) return DONT_PIVOT; - if (!IsDoubleBattle()) + if (IsBattle1v1()) { if (CountUsablePartyMons(battlerAtk) == 0) return CAN_TRY_PIVOT; // can't switch, but attack might still be useful @@ -3053,7 +3342,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov if (IsBattlerPredictedToSwitch(battlerDef)) return SHOULD_PIVOT; // Try pivoting so you can switch to a better matchup to counter your new opponent - if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker goes first { if (!CanAIFaintTarget(battlerAtk, battlerDef, 0)) // Can't KO foe otherwise { @@ -3065,7 +3354,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov if (!IsBattleMoveStatus(move) && ((gAiLogicData->shouldSwitch & (1u << battlerAtk)) || (AI_BattlerAtMaxHp(battlerDef) && (gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH - || (B_STURDY >= GEN_5 && defAbility == ABILITY_STURDY) + || (GetConfig(CONFIG_STURDY) >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD)))) return SHOULD_PIVOT; // pivot to break sash/sturdy/multiscale @@ -3073,7 +3362,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov else if (!hasStatBoost) { if (!IsBattleMoveStatus(move) && (AI_BattlerAtMaxHp(battlerDef) && (gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH - || (B_STURDY >= GEN_5 && defAbility == ABILITY_STURDY) + || (GetConfig(CONFIG_STURDY) >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD))) return SHOULD_PIVOT; // pivot to break sash/sturdy/multiscale @@ -3082,7 +3371,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov return SHOULD_PIVOT; /* TODO - check if switchable mon unafffected by/will remove hazards - if (gSideStatuses[battlerAtk] & SIDE_STATUS_SPIKES && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS) + if (IsHazardOnSide(GetBattlerSide(battlerAtk, HAZARDS_SPIKES) && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS) return SHOULD_PIVOT;*/ /*if (BattlerWillFaintFromSecondaryDamage(battlerAtk, gAiLogicData->abilities[battlerAtk]) && switchScore >= SWITCHING_INCREASE_WALLS_FOE) @@ -3164,7 +3453,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov if (!hasStatBoost) { // TODO - check if switching prevents/removes hazards - //if (gSideStatuses[battlerAtk] & SIDE_STATUS_SPIKES && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS) + //if (IsHazardOnSide(GetBattlerSide(battlerAtk, HAZARDS_SPIKES) && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS) //return SHOULD_PIVOT; // TODO - not always a good idea @@ -3228,7 +3517,7 @@ bool32 CanKnockOffItem(u32 battler, u32 item) } // status checks -bool32 IsBattlerIncapacitated(u32 battler, u32 ability) +bool32 IsBattlerIncapacitated(u32 battler, enum Ability ability) { if ((gBattleMons[battler].status1 & STATUS1_FREEZE) && !HasThawingMove(battler)) return TRUE; // if battler has thawing move we assume they will definitely use it, and thus being frozen should be neglected @@ -3236,13 +3525,13 @@ bool32 IsBattlerIncapacitated(u32 battler, u32 ability) if (gBattleMons[battler].status1 & STATUS1_SLEEP && !HasMoveWithEffect(battler, EFFECT_SLEEP_TALK)) return TRUE; - if (gBattleMons[battler].status2 & STATUS2_RECHARGE || (ability == ABILITY_TRUANT && gDisableStructs[battler].truantCounter != 0)) + if (gDisableStructs[battler].rechargeTimer > 0 || (ability == ABILITY_TRUANT && gDisableStructs[battler].truantCounter != 0)) return TRUE; return FALSE; } -bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove) +bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 move, u32 partnerMove) { if (!CanBeSlept(battlerAtk, battlerDef, defAbility, BLOCKED_BY_SLEEP_CLAUSE) || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) @@ -3251,7 +3540,7 @@ bool32 AI_CanPutToSleep(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move return TRUE; } -static inline bool32 DoesBattlerBenefitFromAllVolatileStatus(u32 battler, u32 ability) +static inline bool32 DoesBattlerBenefitFromAllVolatileStatus(u32 battler, enum Ability ability) { if (ability == ABILITY_MARVEL_SCALE || ability == ABILITY_QUICK_FEET @@ -3265,7 +3554,7 @@ static inline bool32 DoesBattlerBenefitFromAllVolatileStatus(u32 battler, u32 ab bool32 ShouldPoison(u32 battlerAtk, u32 battlerDef) { - u32 abilityDef = gAiLogicData->abilities[battlerDef]; + enum Ability abilityDef = gAiLogicData->abilities[battlerDef]; // Battler can be poisoned and has move/ability that synergizes with being poisoned if (CanBePoisoned(battlerAtk, battlerDef, gAiLogicData->abilities[battlerAtk], abilityDef) && ( DoesBattlerBenefitFromAllVolatileStatus(battlerDef, abilityDef) @@ -3283,7 +3572,7 @@ bool32 ShouldPoison(u32 battlerAtk, u32 battlerDef) return TRUE; } -bool32 ShouldBurn(u32 battlerAtk, u32 battlerDef, u32 abilityDef) +bool32 ShouldBurn(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef) { // Battler can be burned and has move/ability that synergizes with being burned if (CanBeBurned(battlerAtk, battlerDef, abilityDef) && ( @@ -3303,7 +3592,7 @@ bool32 ShouldBurn(u32 battlerAtk, u32 battlerDef, u32 abilityDef) return TRUE; } -bool32 ShouldFreezeOrFrostbite(u32 battlerAtk, u32 battlerDef, u32 abilityDef) +bool32 ShouldFreezeOrFrostbite(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef) { if (!B_USE_FROSTBITE) { @@ -3335,7 +3624,7 @@ bool32 ShouldFreezeOrFrostbite(u32 battlerAtk, u32 battlerDef, u32 abilityDef) } } -bool32 ShouldParalyze(u32 battlerAtk, u32 battlerDef, u32 abilityDef) +bool32 ShouldParalyze(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef) { // Battler can be paralyzed and has move/ability that synergizes with being paralyzed if (CanBeParalyzed(battlerAtk, battlerDef, abilityDef) && ( @@ -3352,7 +3641,7 @@ bool32 ShouldParalyze(u32 battlerAtk, u32 battlerDef, u32 abilityDef) return TRUE; } -bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove) +bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 move, u32 partnerMove) { if (!CanBePoisoned(battlerAtk, battlerDef, gAiLogicData->abilities[battlerAtk], defAbility) || gAiLogicData->effectiveness[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex] == UQ_4_12(0.0) @@ -3363,7 +3652,7 @@ bool32 AI_CanPoison(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u3 return TRUE; } -bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 partnerMove) +bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 move, u32 partnerMove) { if (!CanBeParalyzed(battlerAtk, battlerDef, defAbility) || gAiLogicData->effectiveness[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex] == UQ_4_12(0.0) @@ -3373,18 +3662,18 @@ bool32 AI_CanParalyze(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, return TRUE; } -bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability) +bool32 AI_CanBeConfused(u32 battlerAtk, u32 battlerDef, u32 move, enum Ability abilityDef) { - if ((gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - || (ability == ABILITY_OWN_TEMPO && !DoesBattlerIgnoreAbilityChecks(battlerAtk, gAiLogicData->abilities[battlerAtk], move)) - || IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN) + if (gBattleMons[battlerDef].volatiles.confusionTurns > 0 + || (abilityDef == ABILITY_OWN_TEMPO && !DoesBattlerIgnoreAbilityChecks(battlerAtk, gAiLogicData->abilities[battlerAtk], move)) + || IsBattlerTerrainAffected(battlerDef, abilityDef, gAiLogicData->holdEffects[battlerDef], STATUS_FIELD_MISTY_TERRAIN) || gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_SAFEGUARD || DoesSubstituteBlockMove(battlerAtk, battlerDef, move)) return FALSE; return TRUE; } -bool32 AI_CanConfuse(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) +bool32 AI_CanConfuse(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) { if (GetBattlerMoveTargetType(battlerAtk, move) == MOVE_TARGET_FOES_AND_ALLY && AI_CanBeConfused(battlerAtk, battlerDef, move, defAbility) @@ -3398,7 +3687,7 @@ bool32 AI_CanConfuse(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battler return TRUE; } -bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) +bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) { if (!CanBeBurned(battlerAtk, battlerDef, defAbility) || gAiLogicData->effectiveness[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex] == UQ_4_12(0.0) @@ -3410,7 +3699,7 @@ bool32 AI_CanBurn(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtk return TRUE; } -bool32 AI_CanGiveFrostbite(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) +bool32 AI_CanGiveFrostbite(u32 battlerAtk, u32 battlerDef, enum Ability defAbility, u32 battlerAtkPartner, u32 move, u32 partnerMove) { if (!CanBeFrozen(battlerAtk, battlerDef, defAbility) || gAiLogicData->effectiveness[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex] == UQ_4_12(0.0) @@ -3422,9 +3711,9 @@ bool32 AI_CanGiveFrostbite(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 b return TRUE; } -bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, u32 defAbility) +bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, enum Ability defAbility) { - if ((gBattleMons[battlerDef].status2 & STATUS2_INFATUATION) + if (gBattleMons[battlerDef].volatiles.infatuation || gAiLogicData->effectiveness[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex] == UQ_4_12(0.0) || defAbility == ABILITY_OBLIVIOUS || !AreBattlersOfOppositeGender(battlerAtk, battlerDef) @@ -3433,20 +3722,21 @@ bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, u32 defAbility) return TRUE; } -u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move) +u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, enum Ability atkAbility, enum Ability defAbility, u32 move) { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); if (((!IsMoldBreakerTypeAbility(battlerAtk, gAiLogicData->abilities[battlerAtk]) && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS)) || gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) - || AI_IsSlower(battlerAtk, battlerDef, move))) // Opponent goes first + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY))) // Opponent goes first { return 0; } else if ((atkAbility == ABILITY_SERENE_GRACE || gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS - || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION - || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - || ((AI_IsFaster(battlerAtk, battlerDef, move)) && CanTargetFaintAi(battlerDef, battlerAtk))) + || gBattleMons[battlerDef].volatiles.infatuation + || gBattleMons[battlerDef].volatiles.confusionTurns > 0) + || ((AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) && CanTargetFaintAi(battlerDef, battlerAtk))) { return 2; // good idea to flinch } @@ -3474,18 +3764,58 @@ bool32 ShouldTrap(u32 battlerAtk, u32 battlerDef, u32 move) return FALSE; } -bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move) +bool32 IsFlinchGuaranteed(u32 battlerAtk, u32 battlerDef, u32 move) { - if ((!gDisableStructs[battlerAtk].isFirstTurn && MoveHasAdditionalEffectWithChance(move, MOVE_EFFECT_FLINCH, 100)) - || gAiLogicData->abilities[battlerAtk] == ABILITY_GORILLA_TACTICS - || gAiLogicData->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND - || gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK - || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) - || (!IsMoldBreakerTypeAbility(battlerAtk, gAiLogicData->abilities[battlerAtk]) - && (gAiLogicData->abilities[battlerDef] == ABILITY_SHIELD_DUST || gAiLogicData->abilities[battlerDef] == ABILITY_INNER_FOCUS))) + if (!MoveHasAdditionalEffect(move, MOVE_EFFECT_FLINCH)) return FALSE; - return TRUE; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) + return FALSE; + + u32 i; + u32 additionalEffectCount = GetMoveAdditionalEffectCount(move); + // check move additional effects that are likely to happen + for (i = 0; i < additionalEffectCount; i++) + { + const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); + // Only consider effects with a guaranteed chance to happen + if (!MoveEffectIsGuaranteed(battlerAtk, gAiLogicData->abilities[battlerAtk], additionalEffect)) + continue; + + if (additionalEffect->moveEffect == MOVE_EFFECT_FLINCH) + { + if (gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK + || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) + || (!IsMoldBreakerTypeAbility(battlerAtk, gAiLogicData->abilities[battlerAtk]) + && (gAiLogicData->abilities[battlerDef] == ABILITY_SHIELD_DUST || gAiLogicData->abilities[battlerDef] == ABILITY_INNER_FOCUS))) + return FALSE; + else + return TRUE; + } + } + return FALSE; +} + +bool32 HasChoiceEffect(u32 battler) +{ + enum Ability ability = gAiLogicData->abilities[battler]; + if (ability == ABILITY_GORILLA_TACTICS) + return TRUE; + + if (ability == ABILITY_KLUTZ) + return FALSE; + + enum HoldEffect holdEffect = gAiLogicData->holdEffects[battler]; + switch (holdEffect) + { + case HOLD_EFFECT_CHOICE_BAND: + case HOLD_EFFECT_CHOICE_SCARF: + case HOLD_EFFECT_CHOICE_SPECS: + return TRUE; + default: + return FALSE; + } } static u32 FindMoveUsedXTurnsAgo(u32 battlerId, u32 x) @@ -3512,19 +3842,21 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) { struct Pokemon *party; u32 i, battlerOnField1, battlerOnField2; + bool32 hasStatusToCure = FALSE; party = GetBattlerParty(battlerId); - if (IsDoubleBattle()) + if (HasPartner(battlerId)) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField2 = gBattlerPartyIndexes[GetPartnerBattler(battlerId)]; // Check partner's status - if ((GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + if ((GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 || gAiLogicData->abilities[BATTLE_PARTNER(battlerId)] != ABILITY_SOUNDPROOF || !checkSoundproof) - && GetMonData(&party[battlerOnField2], MON_DATA_STATUS) != STATUS1_NONE) - return TRUE; + && GetMonData(&party[battlerOnField2], MON_DATA_STATUS) != STATUS1_NONE + && ShouldCureStatus(battlerId, BATTLE_PARTNER(battlerId), gAiLogicData)) + hasStatusToCure = TRUE; } else // In singles there's only one battlerId by side. { @@ -3533,18 +3865,19 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) } // Check attacker's status - if ((GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 - || GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 + if ((GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + || GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 || gAiLogicData->abilities[battlerId] != ABILITY_SOUNDPROOF || !checkSoundproof) - && GetMonData(&party[battlerOnField1], MON_DATA_STATUS) != STATUS1_NONE) - return TRUE; + && GetMonData(&party[battlerOnField1], MON_DATA_STATUS) != STATUS1_NONE + && ShouldCureStatus(battlerId, battlerId, gAiLogicData)) + hasStatusToCure = TRUE; // Check inactive party mons' status for (i = 0; i < PARTY_SIZE; i++) { if (i == battlerOnField1 || i == battlerOnField2) continue; - if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) < GEN_5 + if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) < GEN_5 && checkSoundproof && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF) continue; @@ -3552,28 +3885,7 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) return TRUE; } - return FALSE; -} - -u32 GetBattlerSideSpeedAverage(u32 battler) -{ - u32 speed1 = 0; - u32 speed2 = 0; - u32 numBattlersAlive = 0; - - if (IsBattlerAlive(battler)) - { - speed1 = gAiLogicData->speedStats[battler]; - numBattlersAlive++; - } - - if (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battler))) - { - speed2 = gAiLogicData->speedStats[BATTLE_PARTNER(battler)]; - numBattlersAlive++; - } - - return (speed1 + speed2) / numBattlersAlive; + return hasStatusToCure; } bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 moveIndex) @@ -3592,12 +3904,13 @@ bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 mo bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage) { - if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move)) + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) { // using item or user goes first s32 healDmg = (GetMoveAbsorbPercentage(move) * damage) / 100; - if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battlerAtk].volatiles.healBlock) healDmg = 0; if (CanTargetFaintAi(battlerDef, battlerAtk) @@ -3616,21 +3929,31 @@ bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage) return FALSE; } -bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent, enum DamageCalcContext calcContext) +bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent) { - if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move)) + u32 maxHP = gBattleMons[battlerAtk].maxHP; + u32 healAmount = (healPercent * maxHP) / 100; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (healAmount > maxHP) + healAmount = maxHP; + if (gBattleMons[battlerAtk].volatiles.healBlock) + healAmount = 0; + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) { - // using item or user going first - s32 damage = AI_GetDamage(battlerAtk, battlerDef, gAiThinkingStruct->movesetIndex, calcContext, gAiLogicData); - s32 healAmount = (healPercent * damage) / 100; - if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) - healAmount = 0; - if (CanTargetFaintAi(battlerDef, battlerAtk) && !CanTargetFaintAiWithMod(battlerDef, battlerAtk, healAmount, 0)) return TRUE; // target can faint attacker unless they heal - else if (!CanTargetFaintAi(battlerDef, battlerAtk) && gAiLogicData->hpPercents[battlerAtk] < 60 && (Random() % 3)) - return TRUE; // target can't faint attacker at all, attacker health is about half, 2/3rds rate of encouraging healing + else if (!CanTargetFaintAi(battlerDef, battlerAtk) && gAiLogicData->hpPercents[battlerAtk] < ENABLE_RECOVERY_THRESHOLD && RandomPercentage(RNG_AI_SHOULD_RECOVER, SHOULD_RECOVER_CHANCE)) + return TRUE; // target can't faint attacker at all, generally safe + } + else + { + if (!CanTargetFaintAi(battlerDef, battlerAtk) + && GetBestDmgFromBattler(battlerDef, battlerAtk, AI_DEFENDING) < healAmount + && NoOfHitsForTargetToFaintBattler(battlerDef, battlerAtk) < NoOfHitsForTargetToFaintBattlerWithMod(battlerDef, battlerAtk, healAmount)) + return TRUE; // target can't faint attacker and is dealing less damage than we're healing + else if (!CanTargetFaintAi(battlerDef, battlerAtk) && gAiLogicData->hpPercents[battlerAtk] < ENABLE_RECOVERY_THRESHOLD && RandomPercentage(RNG_AI_SHOULD_RECOVER, SHOULD_RECOVER_CHANCE)) + return TRUE; // target can't faint attacker at all, generally safe } return FALSE; } @@ -3640,28 +3963,27 @@ bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects mo u32 atkSide = GetBattlerSide(battlerAtk); // Don't waste a turn if screens will be broken - if (HasMoveWithEffect(battlerDef, EFFECT_BRICK_BREAK) - || HasMoveWithEffect(battlerDef, EFFECT_RAGING_BULL)) + if (HasMoveWithAIEffect(battlerDef, AI_EFFECT_BREAK_SCREENS)) return FALSE; switch (moveEffect) { case EFFECT_AURORA_VEIL: // Use only in Hail and only if AI doesn't already have Reflect, Light Screen or Aurora Veil itself active. - if ((AI_GetWeather() & (B_WEATHER_HAIL | B_WEATHER_SNOW)) + if ((AI_GetWeather() & (B_WEATHER_ICY_ANY)) && !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))) return TRUE; break; case EFFECT_REFLECT: // Use only if the player has a physical move and AI doesn't already have Reflect itself active. if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) - && !(gSideStatuses[atkSide] & SIDE_STATUS_REFLECT)) + && !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_AURORA_VEIL))) return TRUE; break; case EFFECT_LIGHT_SCREEN: // Use only if the player has a special move and AI doesn't already have Light Screen itself active. if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) - && !(gSideStatuses[atkSide] & SIDE_STATUS_LIGHTSCREEN)) + && !(gSideStatuses[atkSide] & (SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))) return TRUE; break; default: @@ -3671,166 +3993,412 @@ bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects mo return FALSE; } -// Partner Logic -bool32 IsValidDoubleBattle(u32 battlerAtk) -{ - if (IsDoubleBattle() - && ((IsBattlerAlive(BATTLE_OPPOSITE(battlerAtk)) && IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerAtk)))) || IsBattlerAlive(BATTLE_PARTNER(battlerAtk)))) - return TRUE; - return FALSE; -} - -u32 GetAllyChosenMove(u32 battlerId) +static bool32 ShouldCureStatusInternal(u32 battlerAtk, u32 battlerDef, bool32 usingItem, struct AiLogicData *aiData) { - u32 partnerBattler = BATTLE_PARTNER(battlerId); + bool32 targetingSelf = (battlerAtk == battlerDef); + bool32 targetingAlly = IsTargetingPartner(battlerAtk, battlerDef); + u32 status = gBattleMons[battlerDef].status1; - if (!IsBattlerAlive(partnerBattler) || !IsAiBattlerAware(partnerBattler)) - return MOVE_NONE; - else if (partnerBattler > battlerId) // Battler with the lower id chooses the move first. - return gLastMoves[partnerBattler]; - else - return gBattleMons[partnerBattler].moves[gBattleStruct->chosenMovePositions[partnerBattler]]; -} + if (status & STATUS1_SLEEP) + { + if (targetingAlly || targetingSelf) + { + if (HasMoveWithEffect(battlerDef, EFFECT_SLEEP_TALK) || HasMoveWithEffect(battlerDef, EFFECT_SNORE)) + return FALSE; + else + return usingItem || targetingAlly; + } + return FALSE; + } -//PARTNER_MOVE_EFFECT_IS_SAME -bool32 DoesPartnerHaveSameMoveEffect(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove) -{ - if (!IsDoubleBattle()) + if (status & STATUS1_FREEZE) + { + if (targetingAlly || targetingSelf) + { + if (HasThawingMove(battlerDef)) + return FALSE; + return usingItem || targetingAlly; + } return FALSE; + } - if (GetMoveEffect(move) == GetMoveEffect(partnerMove) - && partnerMove != MOVE_NONE - && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef) + bool32 isHarmless = FALSE; + + if (DoesBattlerBenefitFromAllVolatileStatus(battlerDef, aiData->abilities[battlerDef])) + isHarmless = TRUE; + + if (status & STATUS1_PSN_ANY) { - return TRUE; + if (aiData->holdEffects[battlerDef] == HOLD_EFFECT_TOXIC_ORB) + return FALSE; + + if (aiData->abilities[battlerDef] == ABILITY_POISON_HEAL) + isHarmless = TRUE; + + if (aiData->abilities[battlerDef] == ABILITY_TOXIC_BOOST && !isHarmless) + { + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) + isHarmless = TRUE; + else if (!(targetingSelf || targetingAlly) && !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + isHarmless = TRUE; + } + } + + if (status & STATUS1_BURN) + { + if (aiData->holdEffects[battlerDef] == HOLD_EFFECT_FLAME_ORB) + return FALSE; + + if (aiData->abilities[battlerDef] == ABILITY_FLARE_BOOST && !isHarmless) + { + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + isHarmless = TRUE; + else if (!(targetingSelf || targetingAlly) && !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) + isHarmless = TRUE; + } + } + +/* + if (status & STATUS1_PARALYSIS) + if (status & STATUS1_FROSTBITE) +*/ + + if (isHarmless) + { + if (targetingSelf || targetingAlly) + return FALSE; + else + return TRUE; + } + else + { + if (targetingSelf || targetingAlly) + return TRUE; + else + return FALSE; } - return FALSE; } -//PARTNER_MOVE_EFFECT_IS_SAME_NO_TARGET -bool32 PartnerHasSameMoveEffectWithoutTarget(u32 battlerAtkPartner, u32 move, u32 partnerMove) +bool32 ShouldCureStatus(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData) { - if (!IsDoubleBattle()) - return FALSE; + return ShouldCureStatusInternal(battlerAtk, battlerDef, FALSE, aiData); +} - if (GetMoveEffect(move) == GetMoveEffect(partnerMove) - && partnerMove != MOVE_NONE) - return TRUE; - return FALSE; +bool32 ShouldCureStatusWithItem(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData) +{ + return ShouldCureStatusInternal(battlerAtk, battlerDef, TRUE, aiData); } -//PARTNER_MOVE_EFFECT_IS_STATUS_SAME_TARGET -bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef, u32 partnerMove) +// Partner Logic +bool32 IsBattle1v1(void) { - if (!IsDoubleBattle()) + if (IsDoubleBattle() + && ((IsBattlerAlive(B_POSITION_PLAYER_LEFT) && IsBattlerAlive(B_POSITION_PLAYER_RIGHT)) + || (IsBattlerAlive(B_POSITION_OPPONENT_LEFT) && IsBattlerAlive(B_POSITION_OPPONENT_RIGHT)))) return FALSE; + return TRUE; +} - enum BattleMoveEffects partnerEffect = GetMoveEffect(partnerMove); - u32 nonVolatileStatus = GetMoveNonVolatileStatus(partnerMove); - if (partnerMove != MOVE_NONE - && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef - && (nonVolatileStatus == MOVE_EFFECT_POISON - || nonVolatileStatus == MOVE_EFFECT_TOXIC - || nonVolatileStatus == MOVE_EFFECT_SLEEP - || nonVolatileStatus == MOVE_EFFECT_PARALYSIS - || nonVolatileStatus == MOVE_EFFECT_BURN - || partnerEffect == EFFECT_YAWN)) +bool32 HasTwoOpponents(u32 battler) +{ + if (IsDoubleBattle() + && IsBattlerAlive(LEFT_FOE(battler)) && IsBattlerAlive(RIGHT_FOE(battler))) return TRUE; return FALSE; } -bool32 IsMoveEffectWeather(u32 move) +bool32 HasPartner(u32 battler) { - enum BattleMoveEffects effect = GetMoveEffect(move); - if (move != MOVE_NONE - && (effect == EFFECT_SUNNY_DAY - || effect == EFFECT_RAIN_DANCE - || effect == EFFECT_SANDSTORM - || effect == EFFECT_HAIL - || effect == EFFECT_SNOWSCAPE - || effect == EFFECT_CHILLY_RECEPTION)) - return TRUE; + if (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battler))) + { + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_ATTACKS_PARTNER) + return FALSE; + else + return TRUE; + } return FALSE; } -//PARTNER_MOVE_EFFECT_IS_TERRAIN -bool32 PartnerMoveEffectIsTerrain(u32 battlerAtkPartner, u32 partnerMove) +bool32 HasPartnerIgnoreFlags(u32 battler) { - if (!IsDoubleBattle()) - return FALSE; - - enum BattleMoveEffects partnerEffect = GetMoveEffect(partnerMove); - if (partnerMove != MOVE_NONE - && (partnerEffect == EFFECT_GRASSY_TERRAIN - || partnerEffect == EFFECT_MISTY_TERRAIN - || partnerEffect == EFFECT_ELECTRIC_TERRAIN - || partnerEffect == EFFECT_PSYCHIC_TERRAIN)) + if (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battler))) + { return TRUE; - + } return FALSE; } -//PARTNER_MOVE_EFFECT_IS -bool32 PartnerMoveEffectIs(u32 battlerAtkPartner, u32 partnerMove, enum BattleMoveEffects effectCheck) +bool32 IsTargetingPartner(u32 battlerAtk, u32 battlerDef) { - if (!IsDoubleBattle()) + if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_ATTACKS_PARTNER) return FALSE; - - if (partnerMove != MOVE_NONE && GetMoveEffect(partnerMove) == effectCheck) - return TRUE; - - return FALSE; + return ((battlerAtk) == (battlerDef ^ BIT_FLANK)); } -//PARTNER_MOVE_IS_TAILWIND_TRICKROOM -bool32 PartnerMoveIs(u32 battlerAtkPartner, u32 partnerMove, u32 moveCheck) +u32 GetAllyChosenMove(u32 battlerId) { - if (!IsDoubleBattle()) - return FALSE; + u32 partnerBattler = BATTLE_PARTNER(battlerId); - if (partnerMove != MOVE_NONE && partnerMove == moveCheck) - return TRUE; - return FALSE; + if (!IsBattlerAlive(partnerBattler) || !IsAiBattlerAware(partnerBattler)) + return MOVE_NONE; + else if (partnerBattler > battlerId) // Battler with the lower id chooses the move first. + return gAiLogicData->lastUsedMove[partnerBattler]; + else + return GetChosenMoveFromPosition(partnerBattler); } -//PARTNER_MOVE_IS_SAME -bool32 PartnerMoveIsSameAsAttacker(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove) +bool32 AreMovesEquivalent(u32 battlerAtk, u32 battlerAtkPartner, u32 move, u32 partnerMove) { - if (!IsDoubleBattle()) + if (!IsBattlerAlive(battlerAtkPartner) || partnerMove == MOVE_NONE) return FALSE; - if (partnerMove != MOVE_NONE && move == partnerMove && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef) - return TRUE; - return FALSE; -} + u32 battlerDef = gBattleStruct->moveTarget[battlerAtk]; -//PARTNER_MOVE_IS_SAME_NO_TARGET -bool32 PartnerMoveIsSameNoTarget(u32 battlerAtkPartner, u32 move, u32 partnerMove) -{ - if (!IsDoubleBattle()) + // We don't care the effect is basically the same; we would use this move anyway. + if (GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move) return FALSE; - if (partnerMove != MOVE_NONE && move == partnerMove) + + u32 atkEffect = GetAIEffectGroupFromMove(battlerAtk, move); + u32 partnerEffect = GetAIEffectGroupFromMove(battlerAtkPartner, partnerMove); + + // shared bits indicate they're meaningfully the same in some way + if (atkEffect & partnerEffect) + { + if (GetMoveTarget(move) == MOVE_TARGET_SELECTED && GetMoveTarget(partnerMove) == MOVE_TARGET_SELECTED) + { + if (battlerDef == gBattleStruct->moveTarget[battlerAtkPartner]) + return TRUE; + else + return FALSE; + } return TRUE; + } return FALSE; } -bool32 PartnerMoveActivatesSleepClause(u32 partnerMove) -{ - if (!IsDoubleBattle() || !IsSleepClauseEnabled()) - return FALSE; - return IsMoveSleepClauseTrigger(partnerMove); -} - -bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) +static u32 GetAIEffectGroup(enum BattleMoveEffects effect) { - u32 i; - s32 firstId, lastId; - struct Pokemon* party; - bool32 hasStatus = AnyPartyMemberStatused(battlerAtk, IsSoundMove(move)); - bool32 needHealing = FALSE; + u32 aiEffect = AI_EFFECT_NONE; - GetAIPartyIndexes(battlerAtk, &firstId, &lastId); - party = GetBattlerParty(battlerAtk); + switch (effect) + { + case EFFECT_SUNNY_DAY: + case EFFECT_RAIN_DANCE: + case EFFECT_SANDSTORM: + case EFFECT_HAIL: + case EFFECT_SNOWSCAPE: + case EFFECT_CHILLY_RECEPTION: + aiEffect |= AI_EFFECT_WEATHER; + break; + case EFFECT_ELECTRIC_TERRAIN: + case EFFECT_GRASSY_TERRAIN: + case EFFECT_MISTY_TERRAIN: + case EFFECT_PSYCHIC_TERRAIN: + case EFFECT_STEEL_ROLLER: + case EFFECT_ICE_SPINNER: + aiEffect |= AI_EFFECT_TERRAIN; + break; + case EFFECT_COURT_CHANGE: + aiEffect |= AI_EFFECT_CLEAR_HAZARDS | AI_EFFECT_AURORA_VEIL | AI_EFFECT_BREAK_SCREENS; + break; + case EFFECT_DEFOG: + aiEffect |= AI_EFFECT_CLEAR_HAZARDS | AI_EFFECT_BREAK_SCREENS; + break; + case EFFECT_RAPID_SPIN: + case EFFECT_TIDY_UP: + aiEffect |= AI_EFFECT_CLEAR_HAZARDS; + break; + case EFFECT_BRICK_BREAK: + case EFFECT_RAGING_BULL: + aiEffect |= AI_EFFECT_BREAK_SCREENS; + break; + case EFFECT_HAZE: + aiEffect |= AI_EFFECT_RESET_STATS; + break; + case EFFECT_HIT_SWITCH_TARGET: + case EFFECT_ROAR: + aiEffect |= AI_EFFECT_FORCE_SWITCH; + break; + case EFFECT_TORMENT: + aiEffect |= AI_EFFECT_TORMENT; + break; + case EFFECT_AURORA_VEIL: + aiEffect |= AI_EFFECT_AURORA_VEIL; + break; + case EFFECT_LIGHT_SCREEN: + aiEffect |= AI_EFFECT_LIGHT_SCREEN; + break; + case EFFECT_REFLECT: + aiEffect |= AI_EFFECT_REFLECT; + break; + case EFFECT_GRAVITY: + aiEffect |= AI_EFFECT_GRAVITY; + break; + case EFFECT_DOODLE: + case EFFECT_ENTRAINMENT: + case EFFECT_GASTRO_ACID: + case EFFECT_ROLE_PLAY: + case EFFECT_SKILL_SWAP: + case EFFECT_OVERWRITE_ABILITY: + aiEffect |= AI_EFFECT_CHANGE_ABILITY; + break; + default: + break; + } + return aiEffect; +} + +static u32 GetAIEffectGroupFromMove(u32 battler, u32 move) +{ + u32 aiEffect = GetAIEffectGroup(GetMoveEffect(move)); + + u32 i; + u32 additionalEffectCount = GetMoveAdditionalEffectCount(move); + for (i = 0; i < additionalEffectCount; i++) + { + switch (GetMoveAdditionalEffectById(move, i)->moveEffect) + { + case MOVE_EFFECT_SUN: + case MOVE_EFFECT_RAIN: + case MOVE_EFFECT_SANDSTORM: + case MOVE_EFFECT_HAIL: + aiEffect |= AI_EFFECT_WEATHER; + break; + case MOVE_EFFECT_ELECTRIC_TERRAIN: + case MOVE_EFFECT_GRASSY_TERRAIN: + case MOVE_EFFECT_MISTY_TERRAIN: + case MOVE_EFFECT_PSYCHIC_TERRAIN: + aiEffect |= AI_EFFECT_TERRAIN; + break; + case MOVE_EFFECT_DEFOG: + aiEffect |= AI_EFFECT_CLEAR_HAZARDS | AI_EFFECT_BREAK_SCREENS; + break; + case MOVE_EFFECT_CLEAR_SMOG: + case MOVE_EFFECT_HAZE: + aiEffect |= AI_EFFECT_RESET_STATS; + break; + case MOVE_EFFECT_TORMENT_SIDE: + aiEffect |= AI_EFFECT_TORMENT; + break; + case MOVE_EFFECT_LIGHT_SCREEN: + aiEffect |= AI_EFFECT_LIGHT_SCREEN; + break; + case MOVE_EFFECT_REFLECT: + aiEffect |= AI_EFFECT_REFLECT; + break; + case MOVE_EFFECT_AURORA_VEIL: + aiEffect |= AI_EFFECT_AURORA_VEIL; + break; + case MOVE_EFFECT_GRAVITY: + aiEffect |= AI_EFFECT_GRAVITY; + break; + default: + break; + } + } + + return aiEffect; +} + +// It matches both on move effect and on AI move effect; eg, EFFECT_HAZE will also bring up Freezy Frost or Clear Smog, anything with AI_EFFECT_RESET_STATS. +bool32 DoesPartnerHaveSameMoveEffect(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove) +{ + if (!HasPartner(battlerAtkPartner)) + return FALSE; + + if (GetMoveEffect(move) == GetMoveEffect(partnerMove) + && partnerMove != MOVE_NONE) + { + if (GetMoveTarget(move) == MOVE_TARGET_SELECTED && GetMoveTarget(partnerMove) == MOVE_TARGET_SELECTED) + { + return gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef; + } + return TRUE; + } + return FALSE; +} + +//PARTNER_MOVE_EFFECT_IS_STATUS_SAME_TARGET +bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef, u32 partnerMove) +{ + if (!HasPartner(battlerAtkPartner)) + return FALSE; + + enum BattleMoveEffects partnerEffect = GetMoveEffect(partnerMove); + u32 nonVolatileStatus = GetMoveNonVolatileStatus(partnerMove); + if (partnerMove != MOVE_NONE + && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef + && (nonVolatileStatus == MOVE_EFFECT_POISON + || nonVolatileStatus == MOVE_EFFECT_TOXIC + || nonVolatileStatus == MOVE_EFFECT_SLEEP + || nonVolatileStatus == MOVE_EFFECT_PARALYSIS + || nonVolatileStatus == MOVE_EFFECT_BURN + || partnerEffect == EFFECT_YAWN)) + return TRUE; + return FALSE; +} + +//PARTNER_MOVE_EFFECT_IS +bool32 PartnerMoveEffectIs(u32 battlerAtkPartner, u32 partnerMove, enum BattleMoveEffects effectCheck) +{ + if (!HasPartner(battlerAtkPartner)) + return FALSE; + + if (partnerMove != MOVE_NONE && GetMoveEffect(partnerMove) == effectCheck) + return TRUE; + + return FALSE; +} + +//PARTNER_MOVE_IS_TAILWIND_TRICKROOM +bool32 PartnerMoveIs(u32 battlerAtkPartner, u32 partnerMove, u32 moveCheck) +{ + if (!HasPartner(battlerAtkPartner)) + return FALSE; + + if (partnerMove != MOVE_NONE && partnerMove == moveCheck) + return TRUE; + return FALSE; +} + +//PARTNER_MOVE_IS_SAME +bool32 PartnerMoveIsSameAsAttacker(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove) +{ + if (!HasPartner(battlerAtkPartner)) + return FALSE; + + if (partnerMove != MOVE_NONE && move == partnerMove && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef) + return TRUE; + return FALSE; +} + +//PARTNER_MOVE_IS_SAME_NO_TARGET +bool32 PartnerMoveIsSameNoTarget(u32 battlerAtkPartner, u32 move, u32 partnerMove) +{ + if (!HasPartner(battlerAtkPartner)) + return FALSE; + if (partnerMove != MOVE_NONE && move == partnerMove) + return TRUE; + return FALSE; +} + +bool32 PartnerMoveActivatesSleepClause(u32 partnerMove) +{ + if (IsBattle1v1() || !IsSleepClauseEnabled()) + return FALSE; + return IsMoveSleepClauseTrigger(partnerMove); +} + +bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) +{ + u32 i; + s32 firstId, lastId; + struct Pokemon* party; + bool32 hasStatus = AnyPartyMemberStatused(battlerAtk, IsSoundMove(move)); + bool32 needHealing = FALSE; + + GetAIPartyIndexes(battlerAtk, &firstId, &lastId); + party = GetBattlerParty(battlerAtk); if (CountUsablePartyMons(battlerAtk) == 0 && (CanTargetFaintAi(battlerDef, battlerAtk) || BattlerWillFaintFromSecondaryDamage(battlerAtk, gAiLogicData->abilities[battlerAtk]))) @@ -3851,7 +4419,7 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) } } - if (!IsDoubleBattle()) + if (IsBattle1v1()) { switch (GetMoveEffect(move)) { @@ -3872,7 +4440,7 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) switch (GetMoveEffect(move)) { case EFFECT_WISH: - return ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING); // Switch recovery isn't good idea in doubles + return ShouldRecover(battlerAtk, battlerDef, move, 50); // Switch recovery isn't good idea in doubles case EFFECT_HEAL_BELL: if (hasStatus) return TRUE; @@ -3900,11 +4468,32 @@ void FreeRestoreBattleMons(struct BattlePokemon *savedBattleMons) Free(savedBattleMons); } +// Set potential field effect from ability for switch in +static void SetBattlerFieldStatusForSwitchin(u32 battler) +{ + switch (gAiLogicData->abilities[battler]) + { + case ABILITY_VESSEL_OF_RUIN: + gBattleMons[battler].volatiles.vesselOfRuin = TRUE; + break; + case ABILITY_SWORD_OF_RUIN: + gBattleMons[battler].volatiles.swordOfRuin = TRUE; + break; + case ABILITY_TABLETS_OF_RUIN: + gBattleMons[battler].volatiles.tabletsOfRuin = TRUE; + break; + case ABILITY_BEADS_OF_RUIN: + gBattleMons[battler].volatiles.beadsOfRuin = TRUE; + break; + default: + break; + } +} + // party logic -s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, enum DamageCalcContext calcContext) +s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, uq4_12_t *effectiveness, enum DamageCalcContext calcContext) { struct SimulatedDamage dmg; - uq4_12_t effectiveness; struct BattlePokemon *savedBattleMons = AllocSaveBattleMons(); if (calcContext == AI_ATTACKING) @@ -3912,6 +4501,7 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl gBattleMons[battlerAtk] = switchinCandidate; gAiThinkingStruct->saved[battlerDef].saved = TRUE; SetBattlerAiData(battlerAtk, gAiLogicData); // set known opposing battler data + SetBattlerFieldStatusForSwitchin(battlerAtk); gAiThinkingStruct->saved[battlerDef].saved = FALSE; } else if (calcContext == AI_DEFENDING) @@ -3919,11 +4509,11 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl gBattleMons[battlerDef] = switchinCandidate; gAiThinkingStruct->saved[battlerAtk].saved = TRUE; SetBattlerAiData(battlerDef, gAiLogicData); // set known opposing battler data + SetBattlerFieldStatusForSwitchin(battlerDef); gAiThinkingStruct->saved[battlerAtk].saved = FALSE; } - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather()); - + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, effectiveness, NO_GIMMICK, NO_GIMMICK, AI_GetSwitchinWeather(switchinCandidate)); // restores original gBattleMon struct FreeRestoreBattleMons(savedBattleMons); @@ -3952,17 +4542,17 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl return dmg.median; } -u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 moveConsidered) +u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 aiMoveConsidered, u32 playerMoveConsidered, enum ConsiderPriority considerPriority) { struct BattlePokemon *savedBattleMons = AllocSaveBattleMons(); gBattleMons[battlerAtk] = switchinCandidate; SetBattlerAiData(battlerAtk, gAiLogicData); - u32 aiMonFaster = AI_IsFaster(battlerAtk, battlerDef, moveConsidered); + u32 aiWhoStrikesFirst = AI_WhoStrikesFirst(battlerAtk, battlerDef, aiMoveConsidered, playerMoveConsidered, considerPriority); FreeRestoreBattleMons(savedBattleMons); SetBattlerAiData(battlerAtk, gAiLogicData); - return aiMonFaster; + return aiWhoStrikesFirst; } s32 CountUsablePartyMons(u32 battlerId) @@ -3983,7 +4573,9 @@ s32 CountUsablePartyMons(u32 battlerId) } ret = 0; - for (i = 0; i < PARTY_SIZE; i++) + s32 firstId, lastId; + GetAIPartyIndexes(battlerId, &firstId, &lastId); + for (i = firstId; i < lastId; i++) { if (i != battlerOnField1 && i != battlerOnField2 && GetMonData(&party[i], MON_DATA_HP) != 0 @@ -4015,7 +4607,7 @@ bool32 IsPartyFullyHealedExceptBattler(u32 battlerId) return TRUE; } -bool32 PartyHasMoveCategory(u32 battlerId, u32 category) +bool32 PartyHasMoveCategory(u32 battlerId, enum DamageCategory category) { struct Pokemon *party = GetBattlerParty(battlerId); u32 i, j; @@ -4042,9 +4634,9 @@ bool32 PartyHasMoveCategory(u32 battlerId, u32 category) return FALSE; } -bool32 SideHasMoveCategory(u32 battlerId, u32 category) +bool32 SideHasMoveCategory(u32 battlerId, enum DamageCategory category) { - if (IsDoubleBattle()) + if (HasPartnerIgnoreFlags(battlerId)) { if (HasMoveWithCategory(battlerId, category) || HasMoveWithCategory(BATTLE_PARTNER(battlerId), category)) return TRUE; @@ -4057,7 +4649,7 @@ bool32 SideHasMoveCategory(u32 battlerId, u32 category) return FALSE; } -bool32 IsAbilityOfRating(u32 ability, s8 rating) +bool32 IsAbilityOfRating(enum Ability ability, s8 rating) { if (gAbilitiesInfo[ability].aiRating >= rating) return TRUE; @@ -4141,19 +4733,117 @@ bool32 IsRecycleEncouragedItem(u32 item) return FALSE; } -static enum AIScore IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, enum StatChange statId, bool32 considerContrary) +static bool32 HasMoveThatChangesKOThreshold(u32 battlerId, u32 noOfHitsToFaint, u32 aiIsFaster) +{ + s32 i, j; + u16 *moves = GetMovesArray(battlerId); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] == MOVE_NONE || moves[i] == MOVE_UNAVAILABLE) + continue; + if (noOfHitsToFaint <= 2) + { + if (GetMovePriority(moves[i]) > 0) + return TRUE; + + u32 additionalEffectCount = GetMoveAdditionalEffectCount(moves[i]); + for (j = 0; j < additionalEffectCount; j++) + { + const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(moves[i], j); + switch (additionalEffect->moveEffect) + { + case MOVE_EFFECT_SPD_MINUS_1: + case MOVE_EFFECT_SPD_MINUS_2: + { + if (aiIsFaster && !additionalEffect->self) + return TRUE; + } + default: + break; + } + } + } + } + + return FALSE; +} + +static enum Stat GetStatBeingChanged(enum StatChange statChange) +{ + switch(statChange) + { + case STAT_CHANGE_ATK: + case STAT_CHANGE_ATK_2: + case STAT_CHANGE_ATK_3: + return STAT_ATK; + case STAT_CHANGE_DEF: + case STAT_CHANGE_DEF_2: + case STAT_CHANGE_DEF_3: + return STAT_DEF; + case STAT_CHANGE_SPEED: + case STAT_CHANGE_SPEED_2: + case STAT_CHANGE_SPEED_3: + return STAT_SPEED; + case STAT_CHANGE_SPATK: + case STAT_CHANGE_SPATK_2: + case STAT_CHANGE_SPATK_3: + return STAT_SPATK; + case STAT_CHANGE_SPDEF: + case STAT_CHANGE_SPDEF_2: + case STAT_CHANGE_SPDEF_3: + return STAT_SPDEF; + case STAT_CHANGE_ACC: + return STAT_ACC; + case STAT_CHANGE_EVASION: + return STAT_EVASION; + } + return 0; // STAT_HP, should never be getting changed +} + +static u32 GetStagesOfStatChange(enum StatChange statChange) +{ + switch(statChange) + { + case STAT_CHANGE_ATK: + case STAT_CHANGE_DEF: + case STAT_CHANGE_SPEED: + case STAT_CHANGE_SPATK: + case STAT_CHANGE_SPDEF: + case STAT_CHANGE_ACC: + case STAT_CHANGE_EVASION: + return 1; + case STAT_CHANGE_ATK_2: + case STAT_CHANGE_DEF_2: + case STAT_CHANGE_SPEED_2: + case STAT_CHANGE_SPATK_2: + case STAT_CHANGE_SPDEF_2: + return 2; + case STAT_CHANGE_ATK_3: + case STAT_CHANGE_DEF_3: + case STAT_CHANGE_SPEED_3: + case STAT_CHANGE_SPATK_3: + case STAT_CHANGE_SPDEF_3: + return 3; + } + return 0; // STAT_HP, should never be getting changed +} + +static enum AIScore IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, enum StatChange statChange, bool32 considerContrary) { enum AIScore tempScore = NO_INCREASE; - u32 noOfHitsToFaint = NoOfHitsForTargetToFaintAI(battlerDef, battlerAtk); - u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, TRUE); + u32 noOfHitsToFaint = NoOfHitsForTargetToFaintBattler(battlerDef, battlerAtk); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, MOVE_NONE, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY); // Don't care about the priority of our setup move, care about outspeeding otherwise u32 shouldSetUp = ((noOfHitsToFaint >= 2 && aiIsFaster) || (noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS); u32 i; + enum Stat statId = GetStatBeingChanged(statChange); + u32 stages = GetStagesOfStatChange(statChange); if (considerContrary && gAiLogicData->abilities[battlerAtk] == ABILITY_CONTRARY) return NO_INCREASE; - // Don't increase stats if opposing battler has Unaware - if (HasBattlerSideAbility(battlerDef, ABILITY_UNAWARE, gAiLogicData)) + if (!ShouldRaiseAnyStat(battlerAtk, battlerDef)) return NO_INCREASE; // Don't increase stat if AI is at +4 @@ -4164,29 +4854,13 @@ static enum AIScore IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, if (gAiLogicData->hpPercents[battlerAtk] < 70 && noOfHitsToFaint == UNKNOWN_NO_OF_HITS) return NO_INCREASE; - // Don't set up if AI is dead to residual damage from weather - if (GetBattlerSecondaryDamage(battlerAtk) >= gBattleMons[battlerAtk].hp) - return NO_INCREASE; - - // Don't increase stats if opposing battler has Opportunist - if (gAiLogicData->abilities[battlerDef] == ABILITY_OPPORTUNIST) - return NO_INCREASE; - - // Don't increase stats if opposing battler has Encore - if (HasBattlerSideMoveWithEffect(battlerDef, EFFECT_ENCORE)) - return NO_INCREASE; - - // Don't increase stats if opposing battler has used Haze effect - if (HasBattlerSideUsedMoveWithEffect(battlerDef, EFFECT_HAZE) - || HasBattlerSideUsedMoveWithAdditionalEffect(battlerDef, MOVE_EFFECT_CLEAR_SMOG) - || HasBattlerSideUsedMoveWithAdditionalEffect(battlerDef, MOVE_EFFECT_HAZE)) + // Don't increase stats if player has a move that can change the KO threshold + if (HasMoveThatChangesKOThreshold(battlerDef, noOfHitsToFaint, aiIsFaster)) return NO_INCREASE; - // Don't increase if AI is at +1 and opponent has Haze effect - if (gBattleMons[battlerAtk].statStages[statId] >= MAX_STAT_STAGE - 5 && (HasBattlerSideMoveWithEffect(battlerDef, EFFECT_HAZE) - || HasBattlerSideMoveWithAdditionalEffect(battlerDef, MOVE_EFFECT_CLEAR_SMOG) - || HasBattlerSideMoveWithAdditionalEffect(battlerDef, MOVE_EFFECT_HAZE))) - return NO_INCREASE; + // Stat stages are effectively doubled under Simple. + if (gAiLogicData->abilities[battlerAtk] == ABILITY_SIMPLE) + stages *= 2; // Predicting switch if (IsBattlerPredictedToSwitch(battlerDef)) @@ -4208,89 +4882,84 @@ static enum AIScore IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, switch (statId) { - case STAT_CHANGE_ATK: + case STAT_ATK: if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) && shouldSetUp) - tempScore += DECENT_EFFECT; + { + if (stages == 1) + tempScore += DECENT_EFFECT; + else + tempScore += GOOD_EFFECT; + } break; - case STAT_CHANGE_DEF: + case STAT_DEF: if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) { if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_STALL) - tempScore += DECENT_EFFECT; - else tempScore += WEAK_EFFECT; + if (stages == 1) + tempScore += WEAK_EFFECT; + else + tempScore += DECENT_EFFECT; } break; - case STAT_CHANGE_SPEED: + case STAT_SPEED: if ((noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS) - tempScore += DECENT_EFFECT; - break; - case STAT_CHANGE_SPATK: - if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && shouldSetUp) - tempScore += DECENT_EFFECT; - break; - case STAT_CHANGE_SPDEF: - if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) { - if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_STALL) + if (stages == 1) tempScore += DECENT_EFFECT; else - tempScore += WEAK_EFFECT; + tempScore += GOOD_EFFECT; } break; - case STAT_CHANGE_ATK_2: - if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) && shouldSetUp) - tempScore += GOOD_EFFECT; - break; - case STAT_CHANGE_DEF_2: - if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + case STAT_SPATK: + if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && shouldSetUp) { - if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_STALL) - tempScore += GOOD_EFFECT; - else + if (stages == 1) tempScore += DECENT_EFFECT; + else + tempScore += GOOD_EFFECT; } break; - case STAT_CHANGE_SPEED_2: - if ((noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS) - tempScore += GOOD_EFFECT; - break; - case STAT_CHANGE_SPATK_2: - if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && shouldSetUp) - tempScore += GOOD_EFFECT; - break; - case STAT_CHANGE_SPDEF_2: + case STAT_SPDEF: if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) { if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_STALL) - tempScore += GOOD_EFFECT; + tempScore += WEAK_EFFECT; + if (stages == 1) + tempScore += WEAK_EFFECT; else tempScore += DECENT_EFFECT; } break; - case STAT_CHANGE_ACC: - if (gBattleMons[battlerAtk].statStages[STAT_ACC] <= 3) // Increase only if necessary + case STAT_ACC: + if (gBattleMons[battlerAtk].statStages[statId] <= 3) // Increase only if necessary tempScore += DECENT_EFFECT; break; - case STAT_CHANGE_EVASION: + case STAT_EVASION: if (noOfHitsToFaint > 3 || noOfHitsToFaint == UNKNOWN_NO_OF_HITS) tempScore += GOOD_EFFECT; else tempScore += DECENT_EFFECT; break; + default: + break; } + // if already inclined to boost, be slightly more likely to if boost levels matter + if (tempScore > 0 && HasMoveWithEffect(battlerAtk, EFFECT_STORED_POWER)) + tempScore += WEAK_EFFECT; + return tempScore; } -u32 IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, enum StatChange statId) +u32 IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, enum StatChange statChange) { - return IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, TRUE); + return IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statChange, TRUE); } -u32 IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, enum StatChange statId) +u32 IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, enum StatChange statChange) { - return IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, FALSE); + return IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statChange, FALSE); } void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) @@ -4326,7 +4995,7 @@ void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) { if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) || (!(gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_OMNISCIENT) // Not Omniscient but expects physical attacker - && gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack + 10)) + && GetSpeciesBaseAttack(gBattleMons[battlerDef].species) >= GetSpeciesBaseSpAttack(gBattleMons[battlerDef].species) + 10)) { if (GetMoveCategory(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)) == DAMAGE_CATEGORY_PHYSICAL) ADJUST_SCORE_PTR(DECENT_EFFECT); @@ -4354,8 +5023,8 @@ void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) if ((defSpeed >= atkSpeed && defSpeed / 2 < atkSpeed) // You'll go first after paralyzing foe || IsPowerBasedOnStatus(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_PARALYSIS) || (HasMoveWithMoveEffectExcept(battlerAtk, MOVE_EFFECT_FLINCH, EFFECT_FIRST_TURN_ONLY)) // filter out Fake Out - || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION - || gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) + || gBattleMons[battlerDef].volatiles.infatuation + || gBattleMons[battlerDef].volatiles.confusionTurns > 0) ADJUST_SCORE_PTR(GOOD_EFFECT); else ADJUST_SCORE_PTR(DECENT_EFFECT); @@ -4393,7 +5062,7 @@ void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score && gAiLogicData->holdEffects[battlerDef] != HOLD_EFFECT_CURE_STATUS) { if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS - || gBattleMons[battlerDef].status2 & STATUS2_INFATUATION + || gBattleMons[battlerDef].volatiles.infatuation || (gAiLogicData->abilities[battlerAtk] == ABILITY_SERENE_GRACE && HasMoveWithMoveEffectExcept(battlerAtk, MOVE_EFFECT_FLINCH, EFFECT_FIRST_TURN_ONLY))) ADJUST_SCORE_PTR(GOOD_EFFECT); else @@ -4410,7 +5079,7 @@ void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score { if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) || (!(gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_OMNISCIENT) // Not Omniscient but expects special attacker - && gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack + 10)) + && GetSpeciesBaseSpAttack(gBattleMons[battlerDef].species) >= GetSpeciesBaseAttack(gBattleMons[battlerDef].species) + 10)) { if (GetMoveCategory(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)) == DAMAGE_CATEGORY_SPECIAL) ADJUST_SCORE_PTR(DECENT_EFFECT); @@ -4424,7 +5093,7 @@ void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score } } -bool32 AI_MoveMakesContact(u32 ability, enum ItemHoldEffect holdEffect, u32 move) +bool32 AI_MoveMakesContact(enum Ability ability, enum HoldEffect holdEffect, u32 move) { if (MoveMakesContact(move) && ability != ABILITY_LONG_REACH @@ -4433,36 +5102,164 @@ bool32 AI_MoveMakesContact(u32 ability, enum ItemHoldEffect holdEffect, u32 move return FALSE; } + +bool32 IsConsideringZMove(u32 battlerAtk, u32 battlerDef, u32 move) +{ + if (GetMovePower(move) == 0 && GetMoveZEffect(move) == Z_EFFECT_NONE) + return FALSE; + + return gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && ShouldUseZMove(battlerAtk, battlerDef, move); +} + //TODO - this could use some more sophisticated logic bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) { + // simple logic. just upgrades chosen move to z move if possible, unless regular move would kill opponent - if ((IsDoubleBattle()) && battlerDef == BATTLE_PARTNER(battlerAtk)) + if ((IsDoubleBattle()) && battlerDef == BATTLE_PARTNER(battlerAtk) && !(GetBattlerMoveTargetType(battlerAtk, chosenMove) & MOVE_TARGET_ALLY)) return FALSE; // don't use z move on partner if (HasTrainerUsedGimmick(battlerAtk, GIMMICK_Z_MOVE)) return FALSE; // can't use z move twice if (IsViableZMove(battlerAtk, chosenMove)) { - uq4_12_t effectiveness; - u32 zMove = GetUsableZMove(battlerAtk, chosenMove); - struct SimulatedDamage dmg; + enum BattleMoveEffects baseEffect = GetMoveEffect(chosenMove); + bool32 isEager = FALSE; // more likely to use a z move than typical - if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE - && !MoveIgnoresTargetAbility(zMove) - && (gBattleMons[battlerDef].species == SPECIES_MIMIKYU_DISGUISED || gBattleMons[battlerDef].species == SPECIES_MIMIKYU_TOTEM_DISGUISED)) - return FALSE; // Don't waste a Z-Move busting disguise + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + bool32 isSlower = AI_IsSlower(battlerAtk, battlerDef, chosenMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY); + + switch (baseEffect) + { + case EFFECT_BELLY_DRUM: + case EFFECT_FILLET_AWAY: + if (isSlower) + return TRUE; + isEager = TRUE; + break; + case EFFECT_PROTECT: + if (HasDamagingMoveOfType(battlerAtk, GetMoveType(gMovesInfo[chosenMove].type))) + return FALSE; + else + isEager = TRUE; + break; + case EFFECT_TELEPORT: + isEager = TRUE; + break; + case EFFECT_TRANSFORM: + if (IsBattlerTrapped(battlerDef, battlerAtk) && !HasDamagingMoveOfType(battlerDef, GetMoveType(gMovesInfo[chosenMove].type))) + return TRUE; + if (isSlower) + isEager = TRUE; + break; + default: + break; + } + + u32 zMove = GetUsableZMove(battlerAtk, chosenMove); + + if (IsBattleMoveStatus(chosenMove)) + { + u8 zEffect = GetMoveZEffect(chosenMove); + enum StatChange statChange = 0; + + if (zEffect == Z_EFFECT_CURSE) + { + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) + zEffect = Z_EFFECT_RECOVER_HP; + else + zEffect = Z_EFFECT_ATK_UP_1; + } + + switch (zEffect) + { + case Z_EFFECT_NONE: + if (GetMovePower(chosenMove) == 0) + return FALSE; + break; + case Z_EFFECT_RESET_STATS: + if (CountNegativeStatStages(battlerAtk) > 1) + return TRUE; + break; + case Z_EFFECT_ALL_STATS_UP_1: + return ShouldRaiseAnyStat(battlerAtk, battlerDef); + case Z_EFFECT_BOOST_CRITS: + return TRUE; + case Z_EFFECT_FOLLOW_ME: + return HasPartnerIgnoreFlags(battlerAtk) && (GetHealthPercentage(battlerAtk) <= Z_EFFECT_FOLLOW_ME_THRESHOLD || GetBestNoOfHitsToKO(battlerDef, battlerAtk, AI_DEFENDING) == 1); + break; + case Z_EFFECT_RECOVER_HP: + if (GetBestNoOfHitsToKO(battlerDef, battlerAtk, AI_DEFENDING) == 1 && GetHealthPercentage(battlerAtk) > Z_EFFECT_RESTORE_HP_HIGHER_THRESHOLD) + return TRUE; + if (isEager) + return GetHealthPercentage(battlerAtk) <= Z_EFFECT_RESTORE_HP_HIGHER_THRESHOLD; + return GetHealthPercentage(battlerAtk) <= Z_EFFECT_RESTORE_HP_LOWER_THRESHOLD; + case Z_EFFECT_RESTORE_REPLACEMENT_HP: + break; + case Z_EFFECT_ACC_UP_1: + case Z_EFFECT_ACC_UP_2: + case Z_EFFECT_ACC_UP_3: + statChange = STAT_CHANGE_ACC; + break; + case Z_EFFECT_EVSN_UP_1: + case Z_EFFECT_EVSN_UP_2: + case Z_EFFECT_EVSN_UP_3: + statChange = STAT_CHANGE_EVASION; + break; + case Z_EFFECT_ATK_UP_1: + case Z_EFFECT_DEF_UP_1: + case Z_EFFECT_SPD_UP_1: + case Z_EFFECT_SPATK_UP_1: + case Z_EFFECT_SPDEF_UP_1: + statChange = STAT_CHANGE_ATK + zEffect - Z_EFFECT_ATK_UP_1; + break; + case Z_EFFECT_ATK_UP_2: + case Z_EFFECT_DEF_UP_2: + case Z_EFFECT_SPD_UP_2: + case Z_EFFECT_SPATK_UP_2: + case Z_EFFECT_SPDEF_UP_2: + statChange = STAT_CHANGE_ATK_2 + zEffect - Z_EFFECT_ATK_UP_2; + break; + case Z_EFFECT_ATK_UP_3: + case Z_EFFECT_DEF_UP_3: + case Z_EFFECT_SPD_UP_3: + case Z_EFFECT_SPATK_UP_3: + case Z_EFFECT_SPDEF_UP_3: + statChange = STAT_CHANGE_ATK_2 + zEffect - Z_EFFECT_ATK_UP_3; + break; + default: + return FALSE; + } + + if (statChange != 0 && (isEager || IncreaseStatUpScore(battlerAtk, battlerDef, statChange) > 0)) + return TRUE; + + } + else if (GetMoveEffect(zMove) == EFFECT_EXTREME_EVOBOOST) + { + return ShouldRaiseAnyStat(battlerAtk, battlerDef); + } + else if (!IsBattleMoveStatus(chosenMove) && IsBattleMoveStatus(zMove)) + { + return FALSE; + } + + if (GetMoveEffect(chosenMove) == EFFECT_LAST_RESORT && !CanUseLastResort(battlerAtk)) + return TRUE; + + uq4_12_t effectiveness; + struct SimulatedDamage dmg; + + if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE + && !MoveIgnoresTargetAbility(zMove) + && IsMimikyuDisguised(battlerDef)) + return FALSE; // Don't waste a Z-Move busting disguise if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && !MoveIgnoresTargetAbility(zMove) && gBattleMons[battlerDef].species == SPECIES_EISCUE_ICE && IsBattleMovePhysical(chosenMove)) return FALSE; // Don't waste a Z-Move busting Ice Face - if (IsBattleMoveStatus(chosenMove) && !IsBattleMoveStatus(zMove)) - return FALSE; - else if (!IsBattleMoveStatus(chosenMove) && IsBattleMoveStatus(zMove)) - return FALSE; - - dmg = AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE); + dmg = AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, NO_GIMMICK, NO_GIMMICK); if (!IsBattleMoveStatus(chosenMove) && dmg.minimum >= gBattleMons[battlerDef].hp) return FALSE; // don't waste damaging z move if can otherwise faint target @@ -4473,6 +5270,269 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) return FALSE; } +void SetAIUsingGimmick(u32 battler, enum AIConsiderGimmick use) +{ + if (use == USE_GIMMICK) + gAiBattleData->aiUsingGimmick |= (1<aiUsingGimmick &= ~(1<aiUsingGimmick & (1<gimmick.usableGimmick[battler] != GIMMICK_TERA) + return; + + if (!(gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_TERA)) + return; + + // TODO: Currently only single battles are considered. + if (!IsBattle1v1()) + return; + + // TODO: A lot of these checks are most effective for an omnicient ai. + // If we don't have enough information about the opponent's moves, consider simpler checks based on type effectivness. + + u32 opposingBattler = GetOppositeBattler(battler); + + // Default calculations automatically assume gimmicks for the attacker, but not the defender. + // Consider calcs for the other possibilities. + struct AltTeraCalcs altCalcs; + + struct SimulatedDamage noDmg = {0}; + + uq4_12_t effectivenessTakenWithTera[MAX_MON_MOVES]; + + u16* aiMoves = GetMovesArray(battler); + u16* oppMoves = GetMovesArray(opposingBattler); + + uq4_12_t effectiveness; + + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (!IsMoveUnusable(i, aiMoves[i], gAiLogicData->moveLimitations[battler]) && !IsBattleMoveStatus(aiMoves[i])) + altCalcs.dealtWithoutTera[i] = AI_CalcDamage(aiMoves[i], battler, opposingBattler, &effectiveness, NO_GIMMICK, NO_GIMMICK, AI_GetWeather()); + else + altCalcs.dealtWithoutTera[i] = noDmg; + + + if (!IsMoveUnusable(i, oppMoves[i], gAiLogicData->moveLimitations[opposingBattler]) && !IsBattleMoveStatus(oppMoves[i])) + { + altCalcs.takenWithTera[i] = AI_CalcDamage(oppMoves[i], opposingBattler, battler, &effectiveness, USE_GIMMICK, USE_GIMMICK, AI_GetWeather()); + effectivenessTakenWithTera[i] = effectiveness; + } + else + { + altCalcs.takenWithTera[i] = noDmg; + effectivenessTakenWithTera[i] = Q_4_12(0.0); + } + } + + + enum AIConsiderGimmick res = ShouldTeraFromCalcs(battler, opposingBattler, &altCalcs); + + + if (res == USE_GIMMICK) + { + // Damage calcs for damage received assumed we wouldn't tera. Adjust that so that further AI decisions are more accurate. + for (int i = 0; i < MAX_MON_MOVES; i++) + { + gAiLogicData->simulatedDmg[opposingBattler][battler][i] = altCalcs.takenWithTera[i]; + gAiLogicData->effectiveness[opposingBattler][battler][i] = effectivenessTakenWithTera[i]; + } + } + else + { + // Damage calcs for damage dealt assumed we would tera. Adjust that so that further AI decisions are more accurate. + for (int i = 0; i < MAX_MON_MOVES; i++) + gAiLogicData->simulatedDmg[battler][opposingBattler][i] = altCalcs.dealtWithoutTera[i]; + } + + SetAIUsingGimmick(battler, res); + return; +} + +// macros are not expanded recursively +#define dealtWithTera gAiLogicData->simulatedDmg[battler][opposingBattler] +#define dealtWithoutTera altCalcs->dealtWithoutTera +#define takenWithTera altCalcs->takenWithTera +#define takenWithoutTera gAiLogicData->simulatedDmg[opposingBattler][battler] + +enum AIConsiderGimmick ShouldTeraFromCalcs(u32 battler, u32 opposingBattler, struct AltTeraCalcs *altCalcs) +{ + struct Pokemon* party = GetBattlerParty(battler); + + // Check how many pokemon we have that could tera + int numPossibleTera = 0; + for (int i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_HP) != 0 + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_TERA_TYPE) > 0) + numPossibleTera++; + } + + u16 aiHp = gBattleMons[battler].hp; + u16 oppHp = gBattleMons[opposingBattler].hp; + + u16* aiMoves = GetMovesArray(battler); + u16* oppMoves = GetMovesArray(opposingBattler); + + // Check whether tera enables a KO + bool32 hasKoWithout = FALSE; + u16 killingMove = MOVE_NONE; + + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (dealtWithTera[i].median >= oppHp) + { + u16 move = aiMoves[i]; + if (killingMove == MOVE_NONE || GetBattleMovePriority(battler, gAiLogicData->abilities[battler], move) > GetBattleMovePriority(battler, gAiLogicData->abilities[battler], killingMove)) + killingMove = move; + } + if (dealtWithoutTera[i].median >= oppHp) + hasKoWithout = TRUE; + } + + bool32 enablesKo = (killingMove != MOVE_NONE) && !hasKoWithout; + + // Check whether tera saves us from a KO + bool32 savedFromKo = FALSE; + bool32 getsKodRegardlessBySingleMove = FALSE; + + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (takenWithoutTera[i].maximum >= aiHp && takenWithTera[i].maximum >= aiHp) + getsKodRegardlessBySingleMove = TRUE; + + if (takenWithoutTera[i].maximum >= aiHp && takenWithTera[i].maximum < aiHp) + savedFromKo = TRUE; + } + + if (getsKodRegardlessBySingleMove) + savedFromKo = FALSE; + + // Check whether opponent can punish tera by ko'ing + u16 hardPunishingMove = MOVE_NONE; + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (takenWithTera[i].maximum >= aiHp) + { + u16 move = oppMoves[i]; + if (hardPunishingMove == MOVE_NONE || GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], move) > GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], hardPunishingMove)) + hardPunishingMove = move; + } + } + + // Check whether there is a move that deals over half hp, and all such moves are reduced to under 1/4 hp by tera + // (e.g. a weakness becomes a resistance, a 4x weakness becomes neutral, etc) + bool32 takesBigHit = FALSE; + bool32 savedFromAllBigHits = TRUE; + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (takenWithoutTera[i].median > aiHp/2) + { + takesBigHit = TRUE; + if (takenWithTera[i].median > aiHp/4) + savedFromAllBigHits = FALSE; + } + } + + // Check for any benefit whatsoever. Only used for the last possible mon that could tera. + bool32 anyOffensiveBenefit = FALSE; + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (dealtWithTera[i].median > dealtWithoutTera[i].median) + anyOffensiveBenefit = TRUE; + } + + bool32 anyDefensiveBenefit = FALSE; + bool32 anyDefensiveDrawback = FALSE; + for (int i = 0; i < MAX_MON_MOVES; i++) + { + if (takenWithTera[i].median < takenWithoutTera[i].median) + anyDefensiveBenefit = TRUE; + + if (takenWithTera[i].median > takenWithoutTera[i].median) + anyDefensiveDrawback = TRUE; + } + + // Make decisions + // This is done after all loops to minimize the possibility of a timing attack in which the player could + // determine whether the AI will tera based on the time taken to select a move. + + if (enablesKo) + { + if (hardPunishingMove == MOVE_NONE) + { + return USE_GIMMICK; + } + else + { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battler, opposingBattler, gAiLogicData); + // will we go first? + if (AI_WhoStrikesFirst(battler, opposingBattler, killingMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY) == AI_IS_FASTER && GetBattleMovePriority(battler, gAiLogicData->abilities[battler], killingMove) >= GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], hardPunishingMove)) + return USE_GIMMICK; + } + } + + // Decide to conserve tera based on number of possible later oppotunities + u16 conserveTeraChance = AI_CONSERVE_TERA_CHANCE_PER_MON * (numPossibleTera-1); + if (RandomPercentage(RNG_AI_CONSERVE_TERA, conserveTeraChance)) + return NO_GIMMICK; + + if (savedFromKo) + { + if (hardPunishingMove == MOVE_NONE) + { + return USE_GIMMICK; + } + else + { + // If tera saves us from a ko from one move, but enables a ko otherwise, randomly predict + // savesFromKo being true ensures opponent doesn't have a ko if we don't tera + if (Random() % 100 < AI_TERA_PREDICT_CHANCE) + return USE_GIMMICK; + } + } + + if (hardPunishingMove != MOVE_NONE) + return NO_GIMMICK; + + if (takesBigHit && savedFromAllBigHits) + return USE_GIMMICK; + + // No strongly compelling reason to tera. Conserve it if possible. + if (numPossibleTera > 1) + return NO_GIMMICK; + + if (anyOffensiveBenefit || (anyDefensiveBenefit && !anyDefensiveDrawback)) + return USE_GIMMICK; + + // TODO: Effects other than direct damage are not yet considered. For example, may want to tera poison to avoid a Toxic. + + + return NO_GIMMICK; +} +#undef dealtWithTera +#undef dealtWithoutTera +#undef takenWithTera +#undef takenWithoutTera + + bool32 AI_IsBattlerAsleepOrComatose(u32 battlerId) { return (gBattleMons[battlerId].status1 & STATUS1_SLEEP) || gAiLogicData->abilities[battlerId] == ABILITY_COMATOSE; @@ -4488,7 +5548,7 @@ s32 AI_TryToClearStats(u32 battlerAtk, u32 battlerDef, bool32 isDoubleBattle) bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef) { - u8 i; + enum Stat i; // Want to copy positive stat changes for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { @@ -4501,13 +5561,15 @@ bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef) case STAT_SPATK: return (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL)); case STAT_ACC: - return (HasLowAccuracyMove(battlerAtk, battlerDef)); + return HasMoveWithLowAccuracy(battlerAtk, battlerDef, LOW_ACCURACY_THRESHOLD, FALSE); case STAT_EVASION: case STAT_SPEED: return TRUE; case STAT_DEF: case STAT_SPDEF: return (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_STALL); + default: + break; } } } @@ -4516,60 +5578,63 @@ bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef) } //TODO - track entire opponent party data to determine hazard effectiveness -bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData) -{ - if (aiData->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE - || CountUsablePartyMons(battlerDef) == 0 - || HasMoveWithEffect(battlerDef, EFFECT_RAPID_SPIN) - || HasMoveWithEffect(battlerDef, EFFECT_TIDY_UP) - || HasMoveWithEffect(battlerDef, EFFECT_DEFOG) - || HasMoveWithAdditionalEffect(battlerDef, MOVE_EFFECT_DEFOG) - || HasMoveWithEffect(battlerDef, EFFECT_MAGIC_COAT)) +bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData) +{ + if (CountUsablePartyMons(battlerDef) == 0 + || HasBattlerSideMoveWithAIEffect(battlerDef, AI_EFFECT_CLEAR_HAZARDS)) return FALSE; + if (IsBattleMoveStatus(move)) + { + if (HasMoveWithEffect(battlerDef, EFFECT_MAGIC_COAT)) + return FALSE; + if (DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) + return TRUE; + if (aiData->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE) + return FALSE; + } + else + { + if (DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) + return TRUE; + if (aiData->abilities[battlerDef] == ABILITY_SHIELD_DUST) + return FALSE; + } return TRUE; } void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) { - if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0) + if (AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0) ADJUST_SCORE_PTR(GOOD_EFFECT); - if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerDef) != 0) + if (AreAnyHazardsOnSide(GetBattlerSide(battlerDef)) && CountUsablePartyMons(battlerDef) != 0) ADJUST_SCORE_PTR(-2); - - if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE && AI_IsFaster(battlerAtk, battlerDef, move)) + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (gBattleMons[battlerAtk].volatiles.substitute && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY)) ADJUST_SCORE_PTR(-10); - if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE) + if (gBattleMons[battlerDef].volatiles.substitute) ADJUST_SCORE_PTR(GOOD_EFFECT); - if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED) + if (gBattleMons[battlerAtk].volatiles.leechSeed) ADJUST_SCORE_PTR(DECENT_EFFECT); - if (gStatuses3[battlerDef] & STATUS3_LEECHSEED) + if (gBattleMons[battlerDef].volatiles.leechSeed) ADJUST_SCORE_PTR(-2); } bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, struct AiLogicData *aiData) { u32 preventsStatLoss; - u32 partnerAbility; - u32 partnerHoldEffect = aiData->holdEffects[battlerAtkPartner]; - - if (DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) - partnerAbility = ABILITY_NONE; - else - partnerAbility = aiData->abilities[battlerAtkPartner]; + enum Ability partnerAbility = aiData->abilities[battlerAtkPartner]; + u32 opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battlerAtk)); + u32 opposingBattler = GetBattlerAtPosition(opposingPosition); if (gBattleMons[battlerAtkPartner].statStages[STAT_ATK] == MAX_STAT_STAGE || partnerAbility == ABILITY_CONTRARY || partnerAbility == ABILITY_GOOD_AS_GOLD - || HasMoveWithEffect(BATTLE_OPPOSITE(battlerAtk), EFFECT_FOUL_PLAY) - || HasMoveWithEffect(BATTLE_OPPOSITE(battlerAtkPartner), EFFECT_FOUL_PLAY)) + || HasBattlerSideMoveWithEffect(LEFT_FOE(battlerAtk), EFFECT_FOUL_PLAY)) return FALSE; - preventsStatLoss = (partnerAbility == ABILITY_CLEAR_BODY - || partnerAbility == ABILITY_FULL_METAL_BODY - || partnerAbility == ABILITY_WHITE_SMOKE - || partnerHoldEffect == HOLD_EFFECT_CLEAR_AMULET); + preventsStatLoss = !CanLowerStat(battlerAtk, battlerAtkPartner, aiData, STAT_DEF); switch (GetMoveEffect(aiData->partnerMove)) { @@ -4583,9 +5648,9 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st default: break; } - + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, opposingBattler, gAiLogicData); return (preventsStatLoss - && AI_IsFaster(battlerAtk, battlerAtkPartner, TRUE) + && AI_IsFaster(battlerAtk, battlerAtkPartner, MOVE_NONE, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)); } @@ -4605,12 +5670,12 @@ u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) scoreIncrease += BEST_EFFECT; } - if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) + if (gBattleMons[battlerDef].volatiles.perishSong) scoreIncrease += GOOD_EFFECT; if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) scoreIncrease += GOOD_EFFECT; - else if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) + else if (gBattleMons[battlerDef].status1 & STATUS1_DAMAGING) scoreIncrease += DECENT_EFFECT; if (IsBattlerPredictedToSwitch(battlerDef)) @@ -4629,50 +5694,32 @@ u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) return scoreIncrease; } -bool32 HasLowAccuracyMove(u32 battlerAtk, u32 battlerDef) -{ - int i; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gAiLogicData->moveAccuracy[battlerAtk][battlerDef][i] <= LOW_ACCURACY_THRESHOLD) - return TRUE; - } - return FALSE; -} - bool32 IsBattlerItemEnabled(u32 battler) { if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_NEGATE_UNAWARE) return TRUE; if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) return FALSE; - if (gStatuses3[battler] & STATUS3_EMBARGO) + if (gBattleMons[battler].volatiles.embargo) return FALSE; - if (gBattleMons[battler].ability == ABILITY_KLUTZ && !(gStatuses3[battler] & STATUS3_GASTRO_ACID)) + if (gBattleMons[battler].ability == ABILITY_KLUTZ && !gBattleMons[battler].volatiles.gastroAcid) return FALSE; return TRUE; } -bool32 HasBattlerSideAbility(u32 battler, u32 ability, struct AiLogicData *aiData) -{ - if (aiData->abilities[battler] == ability) - return TRUE; - if (IsDoubleBattle() && gAiLogicData->abilities[BATTLE_PARTNER(battler)] == ability) - return TRUE; - return FALSE; -} - u32 GetFriendlyFireKOThreshold(u32 battler) { if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_RISKY) return FRIENDLY_FIRE_RISKY_THRESHOLD; if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_CONSERVATIVE) return FRIENDLY_FIRE_CONSERVATIVE_THRESHOLD; + if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_ATTACKS_PARTNER) + return 0; return FRIENDLY_FIRE_NORMAL_THRESHOLD; } -bool32 IsMoxieTypeAbility(u32 ability) +bool32 IsMoxieTypeAbility(enum Ability ability) { switch (ability) { @@ -4688,55 +5735,436 @@ bool32 IsMoxieTypeAbility(u32 ability) } } -// Should the AI use a spread move to deliberately activate its partner's ability? -bool32 ShouldTriggerAbility(u32 battler, u32 ability) +bool32 DoesAbilityRaiseStatsWhenLowered(enum Ability ability) { switch (ability) { + case ABILITY_CONTRARY: + case ABILITY_COMPETITIVE: + case ABILITY_DEFIANT: + return TRUE; + default: + return FALSE; + } +} + +bool32 DoesIntimidateRaiseStats(enum Ability ability) +{ + switch (ability) + { + case ABILITY_COMPETITIVE: + case ABILITY_CONTRARY: + case ABILITY_DEFIANT: + case ABILITY_GUARD_DOG: + case ABILITY_RATTLED: + return TRUE; + default: + return FALSE; + } +} + +// TODO: work out when to attack into the player's contextually 'beneficial' ability +bool32 ShouldTriggerAbility(u32 battlerAtk, u32 battlerDef, enum Ability ability) +{ + if (IsTargetingPartner(battlerAtk, battlerDef)) + { + switch (ability) + { case ABILITY_LIGHTNING_ROD: case ABILITY_STORM_DRAIN: - if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) + if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) < GEN_5) return FALSE; else - return (BattlerStatCanRise(battler, ability, STAT_SPATK) && HasMoveWithCategory(battler, DAMAGE_CATEGORY_SPECIAL)); + return (BattlerStatCanRise(battlerDef, ability, STAT_SPATK) && HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)); case ABILITY_DEFIANT: case ABILITY_JUSTIFIED: case ABILITY_MOXIE: case ABILITY_SAP_SIPPER: case ABILITY_THERMAL_EXCHANGE: - return (BattlerStatCanRise(battler, ability, STAT_ATK) && HasMoveWithCategory(battler, DAMAGE_CATEGORY_PHYSICAL)); + return (BattlerStatCanRise(battlerDef, ability, STAT_ATK) && HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)); case ABILITY_COMPETITIVE: - return (BattlerStatCanRise(battler, ability, STAT_SPATK) && HasMoveWithCategory(battler, DAMAGE_CATEGORY_SPECIAL)); + return (BattlerStatCanRise(battlerDef, ability, STAT_SPATK) && HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)); + // TODO: logic for when to trigger Contrary case ABILITY_CONTRARY: return TRUE; case ABILITY_DRY_SKIN: case ABILITY_VOLT_ABSORB: case ABILITY_WATER_ABSORB: - return (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_HP_AWARE); + return (gAiThinkingStruct->aiFlags[battlerDef] & AI_FLAG_HP_AWARE); case ABILITY_RATTLED: case ABILITY_STEAM_ENGINE: - return BattlerStatCanRise(battler, ability, STAT_SPEED); + return BattlerStatCanRise(battlerDef, ability, STAT_SPEED); case ABILITY_FLASH_FIRE: - return (HasMoveWithType(battler, TYPE_FIRE) && !gDisableStructs[battler].flashFireBoosted); + return (HasMoveWithType(battlerDef, TYPE_FIRE) && !gDisableStructs[battlerDef].flashFireBoosted); case ABILITY_WATER_COMPACTION: case ABILITY_WELL_BAKED_BODY: - return (BattlerStatCanRise(battler, ability, STAT_DEF)); + return (BattlerStatCanRise(battlerDef, ability, STAT_DEF)); default: return FALSE; + } + } + else + { + return FALSE; + } +} + +// Used by CheckBadMove; this is determining purely if the effect CAN change an ability, not if it SHOULD. +// At the moment, the parts about Mummy and Wandering Spirit are not actually used. +bool32 CanEffectChangeAbility(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData) +{ + u32 effect = GetMoveEffect(move); + + // Dynamaxed Pokemon are immune to some ability-changing effects. + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) + { + switch (effect) + { + case EFFECT_ENTRAINMENT: + case EFFECT_SKILL_SWAP: + return FALSE; + default: + break; + } + } + + if (gBattleMons[battlerDef].volatiles.gastroAcid) + return FALSE; + + enum Ability atkAbility = aiData->abilities[battlerAtk]; + enum Ability defAbility = aiData->abilities[battlerDef]; + bool32 hasSameAbility = (atkAbility == defAbility); + + if (defAbility == ABILITY_NONE) + return FALSE; + + if (atkAbility == ABILITY_NONE) + { + switch (effect) + { + case EFFECT_DOODLE: + case EFFECT_ENTRAINMENT: + case EFFECT_ROLE_PLAY: + case EFFECT_SKILL_SWAP: + return FALSE; + + default: + break; + } + } + + // Checking for Ability-specific immunities. + switch (effect) + { + case EFFECT_DOODLE: + if (hasSameAbility || gAbilitiesInfo[atkAbility].cantBeSuppressed || gAbilitiesInfo[defAbility].cantBeCopied) + return FALSE; + + if (HasPartnerIgnoreFlags(battlerAtk)) + { + u32 partnerAbility = aiData->abilities[BATTLE_PARTNER(battlerAtk)]; + if (gAbilitiesInfo[partnerAbility].cantBeSuppressed) + return FALSE; + if (partnerAbility == defAbility) + return FALSE; + } + break; + + case EFFECT_ROLE_PLAY: + if (hasSameAbility || gAbilitiesInfo[atkAbility].cantBeSuppressed || gAbilitiesInfo[defAbility].cantBeCopied) + return FALSE; + break; + + case EFFECT_SKILL_SWAP: + if (hasSameAbility || gAbilitiesInfo[atkAbility].cantBeSwapped || gAbilitiesInfo[defAbility].cantBeSwapped) + return FALSE; + break; + + case EFFECT_GASTRO_ACID: + if (gAbilitiesInfo[defAbility].cantBeSuppressed) + return FALSE; + break; + + case EFFECT_ENTRAINMENT: + if (hasSameAbility || gAbilitiesInfo[defAbility].cantBeOverwritten || gAbilitiesInfo[atkAbility].cantBeCopied) + return FALSE; + break; + + case EFFECT_OVERWRITE_ABILITY: + if (defAbility == GetMoveOverwriteAbility(move) || gAbilitiesInfo[defAbility].cantBeOverwritten) + return FALSE; + break; + + default: + return FALSE; + } + + if (aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD) + { + switch (effect) + { + case EFFECT_ENTRAINMENT: + case EFFECT_GASTRO_ACID: + case EFFECT_ROLE_PLAY: + case EFFECT_SKILL_SWAP: + case EFFECT_OVERWRITE_ABILITY: + return FALSE; + default: + break; + } + } + + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD) + { + switch (effect) + { + case EFFECT_DOODLE: + case EFFECT_ROLE_PLAY: + case EFFECT_SKILL_SWAP: + return FALSE; + default: + break; + } } + + return TRUE; } -u32 GetThinkingBattler(u32 battler) +bool32 DoesEffectReplaceTargetAbility(u32 effect) { - if (gAiLogicData->aiPredictionInProgress) - return gAiLogicData->battlerDoingPrediction; - return battler; + switch (effect) + { + case EFFECT_ENTRAINMENT: + case EFFECT_GASTRO_ACID: + case EFFECT_SKILL_SWAP: + case EFFECT_OVERWRITE_ABILITY: + return TRUE; + default: + return FALSE; + } +} + +void AbilityChangeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score, struct AiLogicData *aiData) +{ + u32 effect = GetMoveEffect(move); + bool32 isTargetingPartner = IsTargetingPartner(battlerAtk, battlerDef); + enum Ability abilityAtk = aiData->abilities[battlerAtk]; + enum Ability abilityDef = aiData->abilities[battlerDef]; + bool32 partnerHasBadAbility = FALSE; + u32 partnerAbility = ABILITY_NONE; + bool32 attackerHasBadAbility = (gAbilitiesInfo[abilityAtk].aiRating < 0); + s32 currentAbilityScore, transferredAbilityScore = 0; + + if (HasPartner(battlerAtk)) + { + partnerAbility = aiData->abilities[BATTLE_PARTNER(battlerAtk)]; + if (!(gAbilitiesInfo[partnerAbility].cantBeSuppressed) && (gAbilitiesInfo[partnerAbility].aiRating < 0)) + partnerHasBadAbility = TRUE; + } + + if (effect == EFFECT_GASTRO_ACID) + abilityAtk = ABILITY_NONE; + else if (effect == EFFECT_OVERWRITE_ABILITY) + abilityAtk = GetMoveOverwriteAbility(move); + + if (effect == EFFECT_DOODLE || effect == EFFECT_ROLE_PLAY || effect == EFFECT_SKILL_SWAP) + { + if (partnerHasBadAbility && effect == EFFECT_DOODLE) + ADJUST_SCORE_PTR(DECENT_EFFECT); + + if (attackerHasBadAbility) + ADJUST_SCORE_PTR(DECENT_EFFECT); + + currentAbilityScore = BattlerBenefitsFromAbilityScore(battlerAtk, abilityAtk, aiData); + transferredAbilityScore = BattlerBenefitsFromAbilityScore(battlerAtk, abilityDef, aiData); + ADJUST_SCORE_PTR(transferredAbilityScore - currentAbilityScore); + } + + if (isTargetingPartner) + { + if (DoesEffectReplaceTargetAbility(effect)) + { + if (partnerHasBadAbility) + ADJUST_SCORE_PTR(BEST_EFFECT); + + currentAbilityScore = BattlerBenefitsFromAbilityScore(battlerDef, abilityDef, aiData); + transferredAbilityScore = BattlerBenefitsFromAbilityScore(battlerDef, abilityAtk, aiData); + ADJUST_SCORE_PTR(transferredAbilityScore - currentAbilityScore); + } + else // This is only Role Play as Doodle can't target the partner + { + ADJUST_SCORE_PTR(-20); + } + + // Trigger Plus or Minus in modern gens. This is not in the overarching function because Skill Swap is rarely beneficial here. + if (B_PLUS_MINUS_INTERACTION >= GEN_5) + { + if (((effect == EFFECT_ENTRAINMENT) && (abilityAtk == ABILITY_PLUS || abilityAtk == ABILITY_MINUS)) || ((effect == EFFECT_ROLE_PLAY) && (abilityDef == ABILITY_PLUS || abilityDef == ABILITY_MINUS))) + ADJUST_SCORE_PTR(DECENT_EFFECT); + } + + } + // Targeting an opponent. + else + { + // We already checked if we want their ability, so now we look to see if we want them to lose their ability. + if (DoesEffectReplaceTargetAbility(effect)) + { + currentAbilityScore = BattlerBenefitsFromAbilityScore(battlerDef, abilityDef, aiData); + transferredAbilityScore = BattlerBenefitsFromAbilityScore(battlerDef, abilityAtk, aiData); + ADJUST_SCORE_PTR(currentAbilityScore - transferredAbilityScore); + } + } +} + +s32 BattlerBenefitsFromAbilityScore(u32 battler, enum Ability ability, struct AiLogicData *aiData) +{ + if (gAbilitiesInfo[ability].aiRating < 0) + return WORST_EFFECT; + + switch (ability) + { + // Transferrable abilities that can be assumed to be always beneficial. + case ABILITY_CLEAR_BODY: + case ABILITY_GOOD_AS_GOLD: + case ABILITY_MAGIC_GUARD: + case ABILITY_MOODY: + case ABILITY_PURIFYING_SALT: + case ABILITY_SPEED_BOOST: + case ABILITY_WHITE_SMOKE: + return GOOD_EFFECT; + // Conditional ability logic goes here. + case ABILITY_COMPOUND_EYES: + if (HasMoveWithLowAccuracy(battler, LEFT_FOE(battler), 90, FALSE) + || HasMoveWithLowAccuracy(battler, RIGHT_FOE(battler), 90, FALSE)) + return GOOD_EFFECT; + break; + case ABILITY_CONTRARY: + if (HasMoveThatLowersOwnStats(battler)) + return BEST_EFFECT; + if (HasMoveThatRaisesOwnStats(battler)) + return AWFUL_EFFECT; + break; + case ABILITY_FRIEND_GUARD: + case ABILITY_POWER_SPOT: + case ABILITY_VICTORY_STAR: + if (HasPartner(battler) && aiData->abilities[BATTLE_PARTNER(battler)] != ability) + return BEST_EFFECT; + break; + case ABILITY_GUTS: + if (HasMoveWithCategory(battler, DAMAGE_CATEGORY_PHYSICAL) && gBattleMons[battler].status1 & (STATUS1_CAN_MOVE)) + return GOOD_EFFECT; + break; + case ABILITY_HUGE_POWER: + case ABILITY_PURE_POWER: + if (HasMoveWithCategory(battler, DAMAGE_CATEGORY_PHYSICAL)) + return BEST_EFFECT; + break; + // Also used to Worry Seed WORRY_SEED + case ABILITY_INSOMNIA: + case ABILITY_VITAL_SPIRIT: + if (HasMoveWithEffect(battler, EFFECT_REST)) + return WORST_EFFECT; + break; + case ABILITY_INTIMIDATE: + { + enum Ability abilityDef = aiData->abilities[LEFT_FOE(battler)]; + if (DoesIntimidateRaiseStats(abilityDef)) + { + return AWFUL_EFFECT; + } + else + { + if (HasTwoOpponents(battler)) + { + abilityDef = aiData->abilities[RIGHT_FOE(battler)]; + if (DoesIntimidateRaiseStats(abilityDef)) + { + return AWFUL_EFFECT; + } + else + { + s32 score1 = IncreaseStatDownScore(battler, LEFT_FOE(battler), STAT_ATK); + s32 score2 = IncreaseStatDownScore(battler, RIGHT_FOE(battler), STAT_ATK); + if (score1 > score2) + return score1; + else + return score2; + } + } + return IncreaseStatDownScore(battler, LEFT_FOE(battler), STAT_ATK); + } + } + case ABILITY_NO_GUARD: + if (HasMoveWithLowAccuracy(battler, LEFT_FOE(battler), LOW_ACCURACY_THRESHOLD, FALSE) + || HasMoveWithLowAccuracy(battler, RIGHT_FOE(battler), LOW_ACCURACY_THRESHOLD, FALSE)) + return GOOD_EFFECT; + break; + // Toxic counter ticks upward while Poison Healed; losing Poison Heal while Toxiced can KO. + case ABILITY_POISON_HEAL: + if (gBattleMons[battler].status1 & (STATUS1_POISON)) + return WEAK_EFFECT; + if (gBattleMons[battler].status1 & (STATUS1_TOXIC_POISON)) + return BEST_EFFECT; + if (gBattleMons[battler].status1 & STATUS1_ANY) + return NO_INCREASE; + break; + // Also used to Simple Beam SIMPLE_BEAM. + case ABILITY_SIMPLE: + // Prioritize moves like Metal Claw, Charge Beam, or Power up Punch + if (HasMoveThatRaisesOwnStats(battler)) + return GOOD_EFFECT; + return NO_INCREASE; + case ABILITY_BEADS_OF_RUIN: + case ABILITY_SWORD_OF_RUIN: + case ABILITY_TABLETS_OF_RUIN: + case ABILITY_VESSEL_OF_RUIN: + if (HasPartner(battler)) + { + if (aiData->abilities[BATTLE_PARTNER(battler)] != ability) + return GOOD_EFFECT; + else + return NO_INCREASE; + } + return GOOD_EFFECT; + case ABILITY_NONE: + return NO_INCREASE; + default: + break; + } + + return WEAK_EFFECT; +} + +bool32 IsNaturalEnemy(u32 speciesAttacker, u32 speciesTarget) +{ + if (B_WILD_NATURAL_ENEMIES != TRUE) + return FALSE; + + switch (speciesAttacker) + { + case SPECIES_ZANGOOSE: + return (speciesTarget == SPECIES_SEVIPER); + case SPECIES_SEVIPER: + return (speciesTarget == SPECIES_ZANGOOSE); + case SPECIES_HEATMOR: + return (speciesTarget == SPECIES_DURANT); + case SPECIES_DURANT: + return (speciesTarget == SPECIES_HEATMOR); + case SPECIES_SABLEYE: + return (speciesTarget == SPECIES_CARBINK); + case SPECIES_MAREANIE: + return (speciesTarget == SPECIES_CORSOLA); + default: + return FALSE; + } + return FALSE; } diff --git a/src/battle_anim.c b/src/battle_anim.c index 3840c9101228..0e178192132e 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -13,6 +13,7 @@ #include "graphics.h" #include "main.h" #include "malloc.h" +#include "menu.h" #include "m4a.h" #include "palette.h" #include "pokemon.h" @@ -195,6 +196,7 @@ static const u8* const sBattleAnims_StatusConditions[NUM_B_ANIMS_STATUS] = [B_ANIM_STATUS_FRZ] = gBattleAnimStatus_Freeze, [B_ANIM_STATUS_CURSED] = gBattleAnimStatus_Curse, [B_ANIM_STATUS_NIGHTMARE] = gBattleAnimStatus_Nightmare, + [B_ANIM_STATUS_FRB] = gBattleAnimStatus_Frostbite, }; static const u8* const sBattleAnims_General[NUM_B_ANIMS_GENERAL] = @@ -253,6 +255,8 @@ static const u8* const sBattleAnims_General[NUM_B_ANIMS_GENERAL] = [B_ANIM_TERA_ACTIVATE] = gBattleAnimGeneral_TeraActivate, [B_ANIM_SIMPLE_HEAL] = gBattleAnimGeneral_SimpleHeal, [B_ANIM_POWER_CONSTRUCT] = gBattleAnimGeneral_PowerConstruct, + [B_ANIM_SWAP_TO_SUBSTITUTE] = gBattleAnimGeneral_SwapToSubstitute, + [B_ANIM_SWAP_FROM_SUBSTITUTE] = gBattleAnimGeneral_SwapFromSubstitute, }; static const u8* const sBattleAnims_Special[NUM_B_ANIMS_SPECIAL] = @@ -1568,20 +1572,17 @@ void LoadMoveBg(u16 bgId) { if (IsContest()) { - void *decompressionBuffer = Alloc(0x800); - const u32 *tilemap = gBattleAnimBackgroundTable[bgId].tilemap; - - LZDecompressWram(tilemap, decompressionBuffer); + void *decompressionBuffer = malloc_and_decompress(gBattleAnimBackgroundTable[bgId].tilemap, NULL); RelocateBattleBgPal(GetBattleBgPaletteNum(), decompressionBuffer, 0x100, FALSE); DmaCopy32(3, decompressionBuffer, (void *)BG_SCREEN_ADDR(26), 0x800); - LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_SCREEN_ADDR(4)); - LoadPalette(gBattleAnimBackgroundTable[bgId].palette, BG_PLTT_ID(GetBattleBgPaletteNum()), PLTT_SIZE_4BPP); Free(decompressionBuffer); + DecompressDataWithHeaderVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_SCREEN_ADDR(4)); + LoadPalette(gBattleAnimBackgroundTable[bgId].palette, BG_PLTT_ID(GetBattleBgPaletteNum()), PLTT_SIZE_4BPP); } else { - LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)BG_SCREEN_ADDR(26)); - LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_CHAR_ADDR(2)); + DecompressDataWithHeaderVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)BG_SCREEN_ADDR(26)); + DecompressDataWithHeaderVram(gBattleAnimBackgroundTable[bgId].image, (void *)BG_CHAR_ADDR(2)); LoadPalette(gBattleAnimBackgroundTable[bgId].palette, BG_PLTT_ID(2), PLTT_SIZE_4BPP); } } @@ -2223,7 +2224,7 @@ static void Cmd_stopsound(void) static void Cmd_jumpifmovetypeequal(void) { - const u8 *type = sBattleAnimScriptPtr + 1; + const enum Type *type = sBattleAnimScriptPtr + 1; sBattleAnimScriptPtr += 2; if (*type != GetBattleMoveType(gCurrentMove)) sBattleAnimScriptPtr += 4; diff --git a/src/battle_anim_dark.c b/src/battle_anim_dark.c index 12a75efa3121..f8f2dcd0d0af 100644 --- a/src/battle_anim_dark.c +++ b/src/battle_anim_dark.c @@ -257,6 +257,21 @@ const struct SpriteTemplate gPunishmentImpactSpriteTemplate = .callback = AnimPunishment, }; +// See AnimShadowBall in battle_anim_ghost.c for more specifics +// arg 0: duration step 1 (attacker -> center) +// arg 1: duration step 2 (spin center) +// arg 2: duration step 3 (center -> target) +const struct SpriteTemplate gDarkPulseSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_RING, + .paletteTag = ANIM_TAG_PURPLE_RING, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_SpinningBone, + .callback = AnimShadowBall, +}; + // arg 0: x pixel offset // arg 1: y pixel offset // arg 2: Something diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index bc3b4a2c4472..4699f2008a7b 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -154,7 +154,6 @@ static void AnimDoubleTeam(struct Sprite *); static void AnimNightSlash(struct Sprite *); static void AnimRockPolishStreak(struct Sprite *); static void AnimRockPolishSparkle(struct Sprite *); -static void AnimPoisonJabProjectile(struct Sprite *); static void AnimNightSlash(struct Sprite *); static void AnimPluck(struct Sprite *); static void AnimAcrobaticsSlashes(struct Sprite *); @@ -5190,7 +5189,7 @@ void AnimNeedleArmSpike(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - if (IsDoubleBattle()) + if (GetMoveTarget(gAnimMoveIndex) == MOVE_TARGET_BOTH) { SetAverageBattlerPositions(gBattleAnimAttacker, TRUE, &a, &b); } @@ -5202,7 +5201,7 @@ void AnimNeedleArmSpike(struct Sprite *sprite) } else { - if (IsDoubleBattle()) + if (GetMoveTarget(gAnimMoveIndex) == MOVE_TARGET_BOTH) { SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &a, &b); } @@ -6832,10 +6831,10 @@ static void TrySwapStickyWebBattlerId(u32 battlerAtk, u32 battlerPartner) static void TrySwapWishBattlerIds(u32 battlerAtk, u32 battlerPartner) { u32 i, temp; - u32 oppSide = GetBattlerSide(BATTLE_OPPOSITE(battlerAtk)); // if used future sight on opposing side, properly track who used it - if (gSideStatuses[oppSide] & SIDE_STATUS_FUTUREATTACK) + if (gWishFutureKnock.futureSightCounter[LEFT_FOE(battlerAtk)] > 0 + || gWishFutureKnock.futureSightCounter[RIGHT_FOE(battlerAtk)] > 0) { for (i = 0; i < gBattlersCount; i++) { @@ -6859,11 +6858,56 @@ static void TrySwapWishBattlerIds(u32 battlerAtk, u32 battlerPartner) } // swap wish party indices - if (gWishFutureKnock.wishCounter[battlerAtk] > gBattleTurnCounter - || gWishFutureKnock.wishCounter[battlerPartner] > gBattleTurnCounter) + if (gWishFutureKnock.wishCounter[battlerAtk] > 0 + || gWishFutureKnock.wishCounter[battlerPartner] > 0) SWAP(gWishFutureKnock.wishPartyId[battlerAtk], gWishFutureKnock.wishPartyId[battlerPartner], temp); } +static void TrySwapAttractBattlerIds(u32 battlerAtk, u32 battlerPartner) +{ + u32 attractedTo; + + // our own infatuation handled with gBattleMons struct data swapping + + // if another battler is infatuated with one of us, change to other battler + for (u32 i = 0; i < gBattlersCount; i++) + { + if (i == battlerAtk || i == battlerPartner || !gBattleMons[i].volatiles.infatuation) + continue; + + attractedTo = INFATUATED_WITH(i); + if (attractedTo == battlerAtk) + { + gBattleMons[i].volatiles.infatuation = INFATUATED_WITH(battlerPartner); + break; + } + else if (attractedTo == battlerPartner) + { + gBattleMons[i].volatiles.infatuation = INFATUATED_WITH(battlerAtk); + break; + } + } +} + +static void SwapBattlerMoveData(u32 battler1, u32 battler2) +{ + u32 temp; + SWAP(gBattleStruct->chosenMovePositions[battler1], gBattleStruct->chosenMovePositions[battler2], temp); + SWAP(gChosenMoveByBattler[battler1], gChosenMoveByBattler[battler2], temp); + SWAP(gBattleStruct->moveTarget[battler1], gBattleStruct->moveTarget[battler2], temp); + SWAP(gMoveSelectionCursor[battler1], gMoveSelectionCursor[battler2], temp); + SWAP(gLockedMoves[battler1], gLockedMoves[battler2], temp); + + // update last moves + SWAP(gLastPrintedMoves[battler1], gLastPrintedMoves[battler2], temp); + SWAP(gLastMoves[battler1], gLastMoves[battler2], temp); + SWAP(gLastLandedMoves[battler1], gLastLandedMoves[battler2], temp); + SWAP(gLastHitByType[battler1], gLastHitByType[battler2], temp); + SWAP(gLastUsedMoveType[battler1], gLastUsedMoveType[battler2], temp); + SWAP(gLastResultingMoves[battler1], gLastResultingMoves[battler2], temp); + SWAP(gLastHitBy[battler1], gLastHitBy[battler2], temp); +} + static void AnimTask_AllySwitchDataSwap(u8 taskId) { s32 i, j; @@ -6888,13 +6932,9 @@ static void AnimTask_AllySwitchDataSwap(u8 taskId) SWAP(gBattleSpritesDataPtr->battlerData[battlerAtk].invisible, gBattleSpritesDataPtr->battlerData[battlerPartner].invisible, temp); SWAP(gTransformedPersonalities[battlerAtk], gTransformedPersonalities[battlerPartner], temp); SWAP(gTransformedShininess[battlerAtk], gTransformedShininess[battlerPartner], temp); - SWAP(gStatuses3[battlerAtk], gStatuses3[battlerPartner], temp); - SWAP(gStatuses4[battlerAtk], gStatuses4[battlerPartner], temp); - SWAP(gBattleStruct->chosenMovePositions[battlerAtk], gBattleStruct->chosenMovePositions[battlerPartner], temp); - SWAP(gChosenMoveByBattler[battlerAtk], gChosenMoveByBattler[battlerPartner], temp); - SWAP(gLockedMoves[battlerAtk], gLockedMoves[battlerPartner], temp); - SWAP(gBattleStruct->moveTarget[battlerAtk], gBattleStruct->moveTarget[battlerPartner], temp); - SWAP(gMoveSelectionCursor[battlerAtk], gMoveSelectionCursor[battlerPartner], temp); + + SwapBattlerMoveData(battlerAtk, battlerPartner); + // Swap turn order, so that all the battlers take action SWAP(gChosenActionByBattler[battlerAtk], gChosenActionByBattler[battlerPartner], temp); for (i = 0; i < gBattlersCount; i++) @@ -6919,11 +6959,12 @@ static void AnimTask_AllySwitchDataSwap(u8 taskId) TrySwapSkyDropTargets(battlerAtk, battlerPartner); TrySwapStickyWebBattlerId(battlerAtk, battlerPartner); TrySwapWishBattlerIds(battlerAtk, battlerPartner); + TrySwapAttractBattlerIds(battlerAtk, battlerPartner); // For Snipe Shot and abilities Stalwart/Propeller Tail - keep the original target. for (i = 0; i < gBattlersCount; i++) { - u16 ability = GetBattlerAbility(i); + enum Ability ability = GetBattlerAbility(i); // if not targeting a slot that got switched, continue if (!IsBattlerAlly(gBattleStruct->moveTarget[i], battlerAtk)) continue; @@ -7450,7 +7491,7 @@ static void AnimRockPolishSparkle(struct Sprite *sprite) // arg 0: initial x pixel offset // arg 1: initial y pixel offset // arg 2: duration -static void AnimPoisonJabProjectile(struct Sprite *sprite) +void AnimPoisonJabProjectile(struct Sprite *sprite) { s16 targetXPos; s16 targetYPos; diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 10080dc84b25..96e78cb0d6ed 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -2581,7 +2581,7 @@ static void AnimPencil_Step(struct Sprite *sprite) sprite->y -= 1; sprite->data[2]++; if (sprite->data[2] % 10 == 0) - PlaySE12WithPanning(SE_M_SKETCH, sprite->data[6]); + PlaySE12WithPanning((gAnimMoveIndex == MOVE_DOODLE) ? SE_M_REVERSAL : SE_M_SKETCH, sprite->data[6]); } sprite->data[4] += sprite->data[3]; if (sprite->data[4] > 31) diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 409244ccacfb..cc6203ce5bdd 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1325,6 +1325,41 @@ const struct SpriteTemplate gTeraCrystalSpreadSpriteTemplate = .callback = AnimTask_TeraCrystalShatter, }; +// See AnimSpriteOnMonPos in battle_anim_mons.c for more specifics +// Reuses the Mega Symbol affine animation seen in Mega Evolution +// gBattleAnimArgs 0-3 used +// 0, 1 used for position +// 2, 3 as some control variables +const struct SpriteTemplate gTeraSymbolSpriteTemplate = +{ + .tileTag = ANIM_TAG_TERA_SYMBOL, + .paletteTag = ANIM_TAG_TERA_SYMBOL, + .oam = &gOamData_AffineDouble_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_MegaSymbol, + .callback = AnimSpriteOnMonPos, +}; + +// Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb +// args[0] - initial x offset +// args[1] - initial y offset +// args[2] - y increment +// args[3] - duration +// args[4] - increments some sin parameter +// args[5] - fixed sin parameter +// args[6] - attacker or target +const struct SpriteTemplate gTeraSmokeSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_6, + .paletteTag = ANIM_TAG_SPARKLE_6, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex, +}; + const struct SpriteTemplate gPinkPetalVortexTemplate = { .tileTag = ANIM_TAG_PINK_PETAL, @@ -2449,11 +2484,10 @@ void AnimTask_HideSwapSprite(u8 taskId) case 0: gTasks[taskId].data[11] = gSprites[spriteId].x; // Save battler position gSprites[spriteId].x = -64; // hide it from screen to avoid the blip/glitch effect when swapping the sprite. - gTasks[taskId].data[10] = gBattleAnimArgs[0]; gTasks[taskId].data[0]++; break; case 1: - HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]); + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, SPECIES_GFX_CHANGE_FORM_CHANGE); GetBgDataForTransform(&animBg, gBattleAnimAttacker); if (IsContest()) @@ -2501,20 +2535,38 @@ void AnimTask_HideSwapSprite(u8 taskId) break; case 2: gSprites[spriteId].x = gTasks[taskId].data[11]; // restores battler position - if (!IsContest()) - { - if (!IsOnPlayerSide(gBattleAnimAttacker)) - { - if (gTasks[taskId].data[10] == 0) - SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies); - } - } DestroyAnimVisualTask(taskId); break; } } +void AnimTask_HideOpponentShadows(u8 taskId) +{ + u32 battlerLeft = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerLeft].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerLeft].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; + if (IsDoubleBattle()) + { + u32 battlerRight = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerRight].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerRight].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_SetOpponentShadowCallbacks(u8 taskId) +{ + u32 battlerLeft = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + SetBattlerShadowSpriteCallback(battlerLeft, gBattleMons[battlerLeft].species); + if (IsDoubleBattle()) + { + u32 battlerRight = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + SetBattlerShadowSpriteCallback(battlerRight, gBattleMons[battlerRight].species); + } + DestroyAnimVisualTask(taskId); +} + void AnimTask_TransformMon(u8 taskId) { int i, j; @@ -2535,7 +2587,6 @@ void AnimTask_TransformMon(u8 taskId) SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1); gTasks[taskId].data[10] = gBattleAnimArgs[0]; - gTasks[taskId].data[11] = gBattleAnimArgs[1]; gTasks[taskId].data[0]++; break; case 1: @@ -2550,7 +2601,7 @@ void AnimTask_TransformMon(u8 taskId) } break; case 2: - HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gTasks[taskId].data[11]); + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]); GetBgDataForTransform(&animBg, gBattleAnimAttacker); if (IsContest()) @@ -2619,7 +2670,7 @@ void AnimTask_TransformMon(u8 taskId) { if (!IsOnPlayerSide(gBattleAnimAttacker)) { - if (gTasks[taskId].data[10] == 0) + if (gTasks[taskId].data[10] == SPECIES_GFX_CHANGE_TRANSFORM) SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies); } } @@ -5724,7 +5775,7 @@ static void AnimRecycle_Step(struct Sprite *sprite) void AnimTask_GetWeather(u8 taskId) { - bool32 utilityUmbrellaAffected = GetBattlerHoldEffect(gBattleAnimAttacker, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA; + bool32 utilityUmbrellaAffected = GetBattlerHoldEffect(gBattleAnimAttacker) == HOLD_EFFECT_UTILITY_UMBRELLA; gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_NONE; if (gWeatherMoveAnim & B_WEATHER_SUN && !utilityUmbrellaAffected) diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index bc8d32145835..269d582f3bd7 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -10,7 +10,7 @@ static void AnimLightning(struct Sprite *); static void AnimLightning_Step(struct Sprite *); static void AnimUnusedSpinningFist(struct Sprite *); static void AnimUnusedSpinningFist_Step(struct Sprite *); -static void AnimUnusedCirclingShock(struct Sprite *); +static void AnimCirclingElectricShock(struct Sprite *); static void AnimZapCannonSpark_Step(struct Sprite *); static void AnimThunderboltOrb(struct Sprite *); static void AnimThunderboltOrb_Step(struct Sprite *); @@ -83,7 +83,9 @@ static const struct SpriteTemplate sUnusedSpinningFistSpriteTemplate = .callback = AnimUnusedSpinningFist, }; -static const union AnimCmd sAnim_UnusedCirclingShock[] = +// Previously an unused function named sAnim_CirclingElectricShock +// Now used for Tera Blast Electric +static const union AnimCmd sAnim_CirclingElectricShock[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(16, 5), @@ -94,21 +96,24 @@ static const union AnimCmd sAnim_UnusedCirclingShock[] = ANIMCMD_JUMP(0), }; -static const union AnimCmd *const sAnims_UnusedCirclingShock[] = +// Previously an unused function named sAnims_UnusedCirclingShock +// Now used for Tera Blast Electric +const union AnimCmd *const sAnims_CirclingElectricShock[] = { - sAnim_UnusedCirclingShock, + sAnim_CirclingElectricShock, }; -// Unused -static const struct SpriteTemplate sUnusedCirclingShockSpriteTemplate = +// Previously named sUnusedCirclingShockSpriteTemplate +// Still unused, but renamed for consistency +static const struct SpriteTemplate sCirclingElectricShockSpriteTemplate = { .tileTag = ANIM_TAG_SHOCK, .paletteTag = ANIM_TAG_SHOCK, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sAnims_UnusedCirclingShock, + .anims = sAnims_CirclingElectricShock, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimUnusedCirclingShock, + .callback = AnimCirclingElectricShock, }; const struct SpriteTemplate gSparkElectricitySpriteTemplate = @@ -343,6 +348,19 @@ static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_2[] = AFFINEANIMCMD_END, }; +static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_3[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 60), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFFC, 0xFFFC, 0, 5), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5), + AFFINEANIMCMD_LOOP(10), + AFFINEANIMCMD_FRAME(-4, -4, 0, 60), + AFFINEANIMCMD_END, +}; + static const union AffineAnimCmd sAffineAnim_GrowingElectricOrb_4[] = { AFFINEANIMCMD_FRAME(5, 5, 0, 0), @@ -368,6 +386,11 @@ const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb2[] = sAffineAnim_GrowingElectricOrb_4, }; +const union AffineAnimCmd *const gAffineAnims_GrowingElectricOrb3[] = +{ + sAffineAnim_GrowingElectricOrb_3, +}; + const struct SpriteTemplate gGrowingChargeOrbSpriteTemplate = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, @@ -391,6 +414,18 @@ const struct SpriteTemplate gGrowingChargeOrb2SpriteTemplate = .callback = AnimGrowingChargeOrb, }; +// For Dynamax Cannon - orb gets smaller at the end +const struct SpriteTemplate gGrowingChargeOrb3SpriteTemplate = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_GrowingElectricOrb3, + .callback = AnimGrowingChargeOrb, +}; + static const union AnimCmd sAnim_ElectricPuff[] = { ANIMCMD_FRAME(0, 3), @@ -492,6 +527,17 @@ const struct SpriteTemplate gFairyLockChainsSpriteTemplate = .callback = AnimVoltTackleBolt, }; +const struct SpriteTemplate gCollisionCourseSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_64x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimVoltTackleBolt, +}; + const struct SpriteTemplate gGrowingShockWaveOrbSpriteTemplate = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, @@ -634,7 +680,7 @@ static void AnimUnusedSpinningFist_Step(struct Sprite *sprite) DestroySpriteAndMatrix(sprite); } -static void AnimUnusedCirclingShock(struct Sprite *sprite) +static void AnimCirclingElectricShock(struct Sprite *sprite) { sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); @@ -1256,19 +1302,25 @@ void AnimTask_VoltTackleBolt(u8 taskId) static bool8 CreateVoltTackleBolt(struct Task *task, u8 taskId) { u32 spriteId; - bool32 isFairyLock = (gAnimMoveIndex == MOVE_FAIRY_LOCK); - - if (isFairyLock) - spriteId = CreateSprite(&gFairyLockChainsSpriteTemplate, task->data[3], task->data[5] + 10, 35); - else - spriteId = CreateSprite(&gVoltTackleBoltSpriteTemplate, task->data[3], task->data[5], 35); + switch(gAnimMoveIndex) + { + case MOVE_FAIRY_LOCK: + spriteId = CreateSprite(&gFairyLockChainsSpriteTemplate, task->data[3], task->data[5] + 10, 35); + break; + case MOVE_COLLISION_COURSE: + spriteId = CreateSprite(&gCollisionCourseSpriteTemplate, task->data[3], task->data[5], 35); + break; + default: + spriteId = CreateSprite(&gVoltTackleBoltSpriteTemplate, task->data[3], task->data[5], 35); + } + bool32 doDestroyOamMatrix = (gAnimMoveIndex == MOVE_FAIRY_LOCK) || (gAnimMoveIndex == MOVE_COLLISION_COURSE); if (spriteId != MAX_SPRITES) { gSprites[spriteId].data[6] = taskId; gSprites[spriteId].data[7] = 7; - gSprites[spriteId].data[1] = isFairyLock ? 25 : 12; // How long the chains / bolts stay on screen. - gSprites[spriteId].data[2] = isFairyLock; // Whether to destroy the Oam Matrix. + gSprites[spriteId].data[1] = (gAnimMoveIndex == MOVE_FAIRY_LOCK) ? 25 : 12; // How long the chains / bolts stay on screen. + gSprites[spriteId].data[2] = doDestroyOamMatrix; // Whether to destroy the Oam Matrix. task->data[7]++; } diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c index 63500ab701eb..49386f0334bc 100644 --- a/src/battle_anim_fight.c +++ b/src/battle_anim_fight.c @@ -525,7 +525,7 @@ void AnimBasicFistOrFoot(struct Sprite *sprite) { StartSpriteAnim(sprite, gBattleAnimArgs[4]); - if (gBattleAnimArgs[3] == 0) + if (gBattleAnimArgs[3] == ANIM_ATTACKER) InitSpritePosToAnimAttacker(sprite, TRUE); else InitSpritePosToAnimTarget(sprite, TRUE); diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index 276b8c8c079c..5d34d4766114 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -1296,6 +1296,12 @@ static void AnimWillOWispFire(struct Sprite *sprite) sprite->data[3] += 0xC0 * 2; sprite->data[4] += 0xA0; + if (IsDoubleBattle() + && !IsContest() + && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimTarget)) + && GetMoveTarget(gAnimMoveIndex) == MOVE_TARGET_BOTH) + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); + sprite->x2 = Sin(sprite->data[1], sprite->data[3] >> 8); sprite->y2 = Cos(sprite->data[1], sprite->data[4] >> 8); diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 2a346bb2ee82..10afc34759a0 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -356,6 +356,17 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate = .callback = AnimSkyAttackBird, }; +const struct SpriteTemplate gGlaiveRushSpriteTemplate = +{ + .tileTag = ANIM_TAG_DRAGON_ASCENT, + .paletteTag = ANIM_TAG_DRAGON_ASCENT, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSkyAttackBird, +}; + // same as AnimEllipticalGust but centered on targets in a double battle static void AnimEllipticalGustCentered(struct Sprite *sprite) { diff --git a/src/battle_anim_ground.c b/src/battle_anim_ground.c index eb96414b55fe..1ba6fc0b62a8 100644 --- a/src/battle_anim_ground.c +++ b/src/battle_anim_ground.c @@ -7,7 +7,6 @@ #include "constants/rgb.h" static void AnimBonemerangProjectile(struct Sprite *); -static void AnimBoneHitProjectile(struct Sprite *); static void AnimDirtPlumeParticle_Step(struct Sprite *); static void AnimDigDirtMound(struct Sprite *); static void AnimBonemerangProjectile_Step(struct Sprite *); @@ -84,7 +83,7 @@ static const union AnimCmd sAnim_MudSlapMud[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_MudSlapMud[] = +const union AnimCmd *const sAnims_MudSlapMud[] = { sAnim_MudSlapMud, }; @@ -199,7 +198,7 @@ static void AnimBonemerangProjectile_End(struct Sprite *sprite) // arg 2: target x pixel offset // arg 3: target y pixel offset // arg 4: duration -static void AnimBoneHitProjectile(struct Sprite *sprite) +void AnimBoneHitProjectile(struct Sprite *sprite) { InitSpritePosToAnimTarget(sprite, TRUE); if (!IsOnPlayerSide(gBattleAnimAttacker)) diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index 8aa4ae256313..5b8c599c84c4 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -28,7 +28,6 @@ struct HailStruct { static void AnimUnusedIceCrystalThrow(struct Sprite *); static void AnimUnusedIceCrystalThrow_Step(struct Sprite *); static void AnimIcePunchSwirlingParticle(struct Sprite *); -static void AnimIceBeamParticle(struct Sprite *); static void AnimFlickerIceEffectParticle(struct Sprite *); static void AnimSwirlingSnowball(struct Sprite *); static void AnimSwirlingSnowball_Step2(struct Sprite *); @@ -703,7 +702,7 @@ static void AnimIcePunchSwirlingParticle(struct Sprite *sprite) // arg 2: target x offset // arg 3: target y offset // arg 4: duration -static void AnimIceBeamParticle(struct Sprite *sprite) +void AnimIceBeamParticle(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index f7c98bef56f9..5b734e392620 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -777,6 +777,24 @@ void InitSpritePosToAnimAttackerPartner(struct Sprite *sprite, bool8 respectMonP sprite->y += gBattleAnimArgs[1]; } +void InitSpritePosToAnimBothTargets(struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + if (!respectMonPicOffsets) + { + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X) + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y) + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y); + } + else + { + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X_2) + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoord2(BATTLE_PARTNER(gBattleAnimTarget), BATTLER_COORD_Y_PIC_OFFSET); + } + sprite->x = sprite->x / 2; + sprite->y = sprite->y / 2; + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->y += gBattleAnimArgs[1]; +} + bool32 InitSpritePosToAnimBattler(u32 animBattlerId, struct Sprite *sprite, bool8 respectMonPicOffsets) { u32 battler = GetAnimBattlerId(animBattlerId); @@ -916,7 +934,7 @@ void ClearBattleAnimBg(u32 bgId) void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset) { CpuFill32(0, gBattleAnimBgTileBuffer, 0x2000); - LZDecompressWram(src, gBattleAnimBgTileBuffer); + DecompressDataWithHeaderWram(src, gBattleAnimBgTileBuffer); LoadBgTiles(bgId, gBattleAnimBgTileBuffer, 0x2000, tilesOffset); } @@ -1445,12 +1463,24 @@ void AnimSpriteOnMonPos(struct Sprite *sprite) else respectMonPicOffsets = FALSE; - if (gBattleAnimArgs[2] == 0) - InitSpritePosToAnimAttacker(sprite, respectMonPicOffsets); - else if (gBattleAnimArgs[2] == 1) - InitSpritePosToAnimTarget(sprite, respectMonPicOffsets); - else if (gBattleAnimArgs[2] == 2) - InitSpritePosToAnimAttackerPartner(sprite, respectMonPicOffsets); + switch(gBattleAnimArgs[2]) + { + case 0: + InitSpritePosToAnimAttacker(sprite, respectMonPicOffsets); + break; + case 1: + InitSpritePosToAnimTarget(sprite, respectMonPicOffsets); + break; + case 2: + InitSpritePosToAnimAttackerPartner(sprite, respectMonPicOffsets); + break; + case 3: + if(IsDoubleBattle()) + InitSpritePosToAnimBothTargets(sprite, respectMonPicOffsets); + else + InitSpritePosToAnimTarget(sprite, respectMonPicOffsets); + break; + } sprite->data[0]++; @@ -2180,6 +2210,37 @@ void SetAverageBattlerPositions(u8 battler, bool8 respectMonPicOffsets, s16 *x, *y = (battlerY + partnerY) / 2; } +void SetToPartnerPositions(u8 battler, bool8 respectMonPicOffsets, s16 *x, s16 *y) +{ + u8 xCoordType, yCoordType; + s16 returnX, returnY; + + if (!respectMonPicOffsets) + { + xCoordType = BATTLER_COORD_X; + yCoordType = BATTLER_COORD_Y; + } + else + { + xCoordType = BATTLER_COORD_X_2; + yCoordType = BATTLER_COORD_Y_PIC_OFFSET; + } + + if (IsDoubleBattle() && !IsContest() && IsBattlerAlive(BATTLE_PARTNER(battler))) + { + returnX = GetBattlerSpriteCoord(BATTLE_PARTNER(battler), xCoordType); + returnY = GetBattlerSpriteCoord(BATTLE_PARTNER(battler), yCoordType); + } + else + { + returnX = GetBattlerSpriteCoord(battler, xCoordType); + returnY = GetBattlerSpriteCoord(battler, yCoordType); + } + + *x = returnX; + *y = returnY; +} + u8 CreateInvisibleSpriteCopy(int battler, u8 spriteId, int species) { u8 newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 40d3602e6c61..fff35b407364 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -4403,6 +4403,17 @@ const struct SpriteTemplate gUTurnBallBackSpriteTemplate = .callback = AnimAbsorptionOrb, }; +// dynamax cannon +const struct SpriteTemplate gSpriteTemplate_DynamaxCannonOrb = { + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_HydroCannonBall, + .callback = AnimShadowBall +}; + // wicked blow static const union AffineAnimCmd sSpriteAffineAnim_DrainPunchFist[] = { AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size @@ -4729,7 +4740,7 @@ static const union AffineAnimCmd* const sSpriteAffineAnimTable_Flutterby[] = { const struct SpriteTemplate gSpriteTemplate_InfernalParadeFlame = { .tileTag = ANIM_TAG_PURPLE_FLAME, .paletteTag = ANIM_TAG_PURPLE_FLAME, - .oam = &gOamData_AffineDouble_ObjBlend_32x16, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, .anims = gAnims_GrudgeFlame, .images = NULL, .affineAnims = sSpriteAffineAnimTable_Flutterby, @@ -5684,7 +5695,7 @@ const struct SpriteTemplate gBlackHoleEclipseBlueRingSpriteTemplate = const struct SpriteTemplate gBlackHoleEclipseBlackRingSpriteTemplate = { .tileTag = ANIM_TAG_THIN_RING, - .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_SHADOW_BALL, .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, @@ -7301,6 +7312,287 @@ const struct SpriteTemplate gOmegaGeyserSpriteTemplate = .callback = SpriteCB_Geyser, }; +// Moves objects (ice crystals) in a wave-like behavior. Seen in Max Flutterby +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: wave amplitude +const struct SpriteTemplate gIceShardSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineDouble_ObjBlend_8x8, + .anims = gAnims_IceCrystalSmall, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_Flutterby, + .callback = SpriteCB_MaxFlutterby +}; + +const struct SpriteTemplate gSpinningVineSpriteTemplate = +{ + .tileTag = ANIM_TAG_PUNISHMENT_BLADES, + .paletteTag = ANIM_TAG_LEAF, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_SpinningBone, + .callback = AnimBoneHitProjectile, +}; + +const struct SpriteTemplate gMaxFlutterbyButterflySpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARKLE_6, + .paletteTag = ANIM_TAG_SPARKLE_6, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_Flutterby, + .callback = SpriteCB_MaxFlutterby +}; + +const struct SpriteTemplate gReallyBigRockBlastRockSpriteTemplate = +{ + .tileTag = ANIM_TAG_REALLY_BIG_ROCK, + .paletteTag = ANIM_TAG_REALLY_BIG_ROCK, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRockBlastRock, +}; + +const struct SpriteTemplate gOrderUpTatsugiriCurlySpriteTemplate = +{ + .tileTag = ANIM_TAG_TATSUGIRI_CURLY, + .paletteTag = ANIM_TAG_TATSUGIRI_CURLY, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_DreepyMissilePlayer, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRockTomb, +}; + +const struct SpriteTemplate gOrderUpTatsugiriDroopySpriteTemplate = +{ + .tileTag = ANIM_TAG_TATSUGIRI_DROOPY, + .paletteTag = ANIM_TAG_TATSUGIRI_DROOPY, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_DreepyMissilePlayer, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRockTomb, +}; + +const struct SpriteTemplate gOrderUpTatsugiriStretchySpriteTemplate = +{ + .tileTag = ANIM_TAG_TATSUGIRI_STRETCHY, + .paletteTag = ANIM_TAG_TATSUGIRI_STRETCHY, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_DreepyMissilePlayer, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRockTomb, +}; + +// Start of Tera Blast sprite templates +const struct SpriteTemplate gFireSpreadBlastSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_BasicFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimIceBeamParticle, +}; + +const struct SpriteTemplate gPurpleFlameSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_FLAME, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &gOamData_AffineOff_ObjBlend_16x32, + .anims = gAnims_GrudgeFlame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate gAirWaveSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_AIR_WAVE_2, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gAffineAnims_AirWaveCrescent, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate gPinkVioletOrbSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_PINKVIO_ORB, + .paletteTag = ANIM_TAG_PINKVIO_ORB, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate gHydroPumpSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate sCirclingShockSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHOCK, + .paletteTag = ANIM_TAG_SHOCK, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_CirclingElectricShock, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate sIceCrystalSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineDouble_ObjBlend_8x16, + .anims = gAnims_IceCrystalLarge, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate sMudSandSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = sAnims_MudSlapMud, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate sPoisonSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = &gAnims_PoisonProjectile[0], + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate sRockSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlyingRock, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate sMetalBallSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_METAL_BALL, + .paletteTag = ANIM_TAG_METAL_BALL, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate sPinkHeartSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_PINK_HEART, + .paletteTag = ANIM_TAG_PINK_HEART, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate gDragonDanceOrbSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_HOLLOW_ORB, + .paletteTag = ANIM_TAG_HOLLOW_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate gYellowStarSpiralOutwardSpriteTemplate = +{ + .tileTag = ANIM_TAG_YELLOW_STAR, + .paletteTag = ANIM_TAG_YELLOW_STAR, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireSpiralOutward, +}; + +const struct SpriteTemplate gTeraBlastFlyingSpriteTemplate = +{ + .tileTag = ANIM_TAG_METAL_SOUND_WAVES, + .paletteTag = ANIM_TAG_METAL_SOUND_WAVES, + .oam = &gOamData_AffineDouble_ObjNormal_32x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_SpinningBone, + .callback = AnimShadowBall, +}; + +const struct SpriteTemplate gTeraBlastWaterSpriteTemplate = +{ + .tileTag = ANIM_TAG_HYDRO_PUMP, + .paletteTag = ANIM_TAG_HYDRO_PUMP, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDracoMeteorRock, +}; + +const struct SpriteTemplate gTeraBlastRockSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_BasicRock, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDracoMeteorRock, +}; + +const struct SpriteTemplate gGhostProjectileSpriteTemplate = +{ + .tileTag = ANIM_TAG_GHOSTLY_SPIRIT, + .paletteTag = ANIM_TAG_GHOSTLY_SPIRIT, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimPoisonJabProjectile, +}; +// End of Tera Blast sprite templates + const union AnimCmd gSproutAnimCmds[] = { ANIMCMD_FRAME(96, 5), @@ -7965,7 +8257,7 @@ void SpriteCB_RandomCentredHits(struct Sprite *sprite) StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]); - if (gBattleAnimArgs[0] == 0) + if (gBattleAnimArgs[0] == ANIM_ATTACKER) { if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, FALSE); @@ -8766,7 +9058,7 @@ void AnimTask_ShellSideArm(u8 taskId) void AnimTask_TerrainPulse(u8 taskId) { - if (IsBattlerTerrainAffected(gBattleAnimAttacker, STATUS_FIELD_TERRAIN_ANY)) + if (IsBattlerTerrainAffected(gBattleAnimAttacker, GetBattlerAbility(gBattleAnimAttacker), GetBattlerHoldEffect(gBattleAnimAttacker), STATUS_FIELD_TERRAIN_ANY)) { if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) gBattleAnimArgs[0] = TYPE_ELECTRIC; @@ -9137,6 +9429,18 @@ static void SpriteCB_DragonEnergyShot(struct Sprite* sprite) //arg 2: wave amplitude static void SpriteCB_MaxFlutterby(struct Sprite* sprite) { + s16 target_x; + s16 target_y; + if (GetMoveTarget(gAnimMoveIndex) == MOVE_TARGET_BOTH) + { + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &target_x, &target_y); + } + else + { + target_x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + target_y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } + InitSpritePosToAnimAttacker(sprite, FALSE); sprite->data[0] = 0x10; //Speed delay @@ -9152,7 +9456,8 @@ static void SpriteCB_MaxFlutterbyStep1(struct Sprite* sprite) { if (!FuncIsActiveTask(AnimTask_DynamaxGrowthStep)) { - if (gAnimMoveIndex != MOVE_INFERNAL_PARADE) + if (gAnimMoveIndex != MOVE_INFERNAL_PARADE + && gAnimMoveIndex != MOVE_ASTRAL_BARRAGE) PlaySE(SE_M_SAND_ATTACK); StartSpriteAffineAnim(sprite, 1); @@ -9327,7 +9632,7 @@ void AnimTask_RandomBool(u8 taskId) // Credit to Skeli #define PRIMAL_PULSE_SCALE_SIZE 16 #define PRIMAL_PULSE_FRAME_COUNT 4 -static const union AffineAnimCmd sSpriteAffineAnim_PrimalSymbol[] = +static const union AffineAnimCmd sSpriteAffineAnim_PrimalSymbol[] = { AFFINEANIMCMD_FRAME(16, 16, 0, 0), AFFINEANIMCMD_FRAME(32, 32, 0, 15), @@ -9370,3 +9675,25 @@ const union AffineAnimCmd* const gSpriteAffineAnimTable_MegaSymbol[] = { sSpriteAffineAnim_MegaSymbol, }; + +// Used for determining which animation to use for Order Up +void AnimTask_GetCommanderType(u8 taskId) +{ + switch (gBattleStruct->battlerState[gEffectBattler].commanderSpecies) + { + case SPECIES_TATSUGIRI_CURLY: + gBattleAnimArgs[ARG_RET_ID] = ANIM_ORDER_UP_CURLY; + break; + case SPECIES_TATSUGIRI_DROOPY: + gBattleAnimArgs[ARG_RET_ID] = ANIM_ORDER_UP_DROOPY; + break; + case SPECIES_TATSUGIRI_STRETCHY: + gBattleAnimArgs[ARG_RET_ID] = ANIM_ORDER_UP_STRETCHY; + break; + default: + gBattleAnimArgs[ARG_RET_ID] = ANIM_ORDER_UP_NONE; + break; + } + + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c index 39f30708c41e..e47f0321694d 100644 --- a/src/battle_anim_poison.c +++ b/src/battle_anim_poison.c @@ -520,12 +520,44 @@ static void AnimSludgeProjectile(struct Sprite *sprite) { if (!gBattleAnimArgs[3]) StartSpriteAnim(sprite, 2); + if (gBattleAnimArgs[4] && IsDoubleBattle()) + { + u32 targetPartner; + if (IsOnPlayerSide(gBattleAnimTarget)) + { + if (gBattleAnimTarget == 0) + targetPartner = 2; + else + targetPartner = 0; + } + else + { + if (gBattleAnimTarget == 1) + targetPartner = 3; + else + targetPartner = 1; + } + + if (IsBattlerAlive(gBattleAnimTarget) && !IsBattlerAlive(targetPartner)) + { + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } + else + { + sprite->data[2] = GetBattlerSpriteCoord(targetPartner, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(targetPartner, BATTLER_COORD_Y_PIC_OFFSET); + } + } + else + { + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->data[5] = -30; InitAnimArcTranslation(sprite); @@ -600,7 +632,12 @@ static void AnimSludgeBombHitParticle_Step(struct Sprite *sprite) static void AnimAcidPoisonDroplet(struct Sprite *sprite) { if (gBattleAnimArgs[5]) - SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); + { + if (gBattleAnimArgs[5] == 1) + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); + if (gBattleAnimArgs[5] == 2) + SetToPartnerPositions(gBattleAnimTarget, TRUE, &sprite->x, &sprite->y); + } if (!IsOnPlayerSide(gBattleAnimAttacker)) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index 4ac83e444696..23b244957c68 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -11,7 +11,6 @@ static void AnimTask_Rollout_Step(u8 taskId); static void AnimRolloutParticle(struct Sprite *); -static void AnimRockTomb(struct Sprite *); static void AnimRockTomb_Step(struct Sprite *sprite); static void AnimRockScatter(struct Sprite *); static void AnimRockScatter_Step(struct Sprite *sprite); @@ -174,7 +173,7 @@ static const union AnimCmd sAnim_Rock_Smallest[] = ANIMCMD_END, }; -static const union AnimCmd *const sAnims_BasicRock[] = +const union AnimCmd *const sAnims_BasicRock[] = { sAnim_Rock_Biggest, sAnim_Rock_Bigger, @@ -935,7 +934,7 @@ static u8 GetRolloutCounter(void) return retVal; } -static void AnimRockTomb(struct Sprite *sprite) +void AnimRockTomb(struct Sprite *sprite) { StartSpriteAnim(sprite, gBattleAnimArgs[4]); @@ -1078,3 +1077,14 @@ const struct SpriteTemplate gSaltCureSwirlSpriteTemplate = .affineAnims = gAffineAnims_Whirlpool, .callback = AnimParticleInVortex, }; + +const struct SpriteTemplate gRockPlumeSpriteTemplate = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_FlyingRock, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDirtPlumeParticle, +}; diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index 1bd7008aa448..6645e6273bf8 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -311,6 +311,13 @@ void SoundTask_PlayCryWithEcho(u8 taskId) DestroyAnimVisualTask(taskId); } +void SoundTask_PlayDynamaxCry(u8 taskId) +{ + u16 species = (GetIllusionMonSpecies(gBattleAnimAttacker) != SPECIES_NONE) ? GetIllusionMonSpecies(gBattleAnimAttacker) : gAnimBattlerSpecies[gBattleAnimAttacker]; + PlayCry_ByMode(species, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER), CRY_MODE_DYNAMAX); + gTasks[taskId].func = SoundTask_WaitForCry; +} + static void SoundTask_PlayCryWithEcho_Step(u8 taskId) { u16 species = gTasks[taskId].tSpecies; diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index b70f481d6cb4..f27d7da0ea20 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -530,7 +530,7 @@ static void AnimTask_FrozenIceCube_Step4(u8 taskId) void AnimTask_StatsChange(u8 taskId) { bool16 goesDown = FALSE; - s16 animStatId = 0; + enum StatAnimPal animStatId = 0; bool16 sharply = FALSE; switch (gBattleSpritesDataPtr->animationData->animArg) diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 54f16003befe..d276c80ddb29 100644 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -14,6 +14,7 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "test_runner.h" #include "trig.h" #include "util.h" #include "data.h" @@ -2312,7 +2313,7 @@ void AnimTask_SwapMonSpriteToFromSubstitute(u8 taskId) { u8 spriteId; u32 x; - u32 done = FALSE; + bool32 done = FALSE; spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; switch (gTasks[taskId].data[10]) @@ -2435,7 +2436,7 @@ void TryShinyAnimation(u8 battler, struct Pokemon *mon) if (illusionMon != NULL) mon = illusionMon; - if (IsBattlerSpriteVisible(battler) && IsValidForBattle(mon)) + if (IsBattlerSpriteVisible(battler) && IsValidForBattle(mon) && !gTestRunnerHeadless) { if (isShiny) { @@ -2768,4 +2769,3 @@ static void CB_CriticalCaptureThrownBallMovement(struct Sprite *sprite) sprite->callback = SpriteCB_Ball_Bounce_Step; } } - diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 54b9f949ba85..54aa3e14aa5b 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -480,7 +480,7 @@ static void StatsChangeAnimation_Step2(u8 taskId) AnimLoadCompressedBgTilemapHandleContest(&animBgData, gStatAnim_Decrease_Tilemap, FALSE); AnimLoadCompressedBgGfx(animBgData.bgId, gStatAnim_Gfx, animBgData.tilesOffset); - switch (sAnimStatsChangeData->aAnimStatId) + switch ((enum StatAnimPal)sAnimStatsChangeData->aAnimStatId) { case STAT_ANIM_PAL_ATK: LoadPalette(gStatAnim_Attack_Pal, BG_PLTT_ID(animBgData.paletteId), PLTT_SIZE_4BPP); diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 490136d116db..5674cd5cc7d8 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -45,6 +45,7 @@ static void AnimTask_RunSinAnimTimer(u8); static void AnimTask_CreateSurfWave_Step1(u8); static void AnimTask_CreateSurfWave_Step2(u8); static void AnimTask_SurfWaveScanlineEffect(u8); +static void AnimTask_BrineRain_Step(u8); static void AnimTask_WaterSpoutLaunch_Step(u8); static void AnimTask_WaterSpoutRain_Step(u8); static u8 GetWaterSpoutPowerForAnim(void); @@ -1442,24 +1443,97 @@ static void AnimSmallWaterOrb(struct Sprite *sprite) } } +#define tRainState data[0] +#define tWaterSpoutPower data[1] +#define tDropTaskDelay data[2] +#define tDropInitialXPos data[4] +#define tDropXRange data[5] +#define tDropEndYPos data[6] +#define tDropXPos data[7] +#define tSineTableIndex data[8] +#define tCurrentDropSprites data[9] +#define tDropHasHit data[10] +#define tCreatedDropSprites data[11] +#define tMaxDropSprites data[12] +#define tShakeTasksCreated data[13] +#define tDropInitialYPos data[14] + +void AnimTask_BrineRain(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (IsOnPlayerSide(gBattleAnimAttacker)) + { + task->tDropEndYPos = 40; + task->tDropInitialYPos = 0; + } + else + { + task->tDropEndYPos = 90; + task->tDropInitialYPos = 40; + } + task->tDropInitialXPos = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->tDropXRange = 40; + task->tDropXPos = task->tDropInitialXPos; + task->tMaxDropSprites = 10; + task->func = AnimTask_BrineRain_Step; +} + +static void AnimTask_BrineRain_Step(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 taskId2; + + switch (task->tRainState) + { + case 0: + if (++task->tDropTaskDelay > 2) + { + task->tDropTaskDelay = 0; + CreateWaterSpoutRainDroplet(task, taskId); + } + if (task->tDropHasHit != FALSE && task->tShakeTasksCreated == FALSE) + { + gBattleAnimArgs[0] = ANIM_TARGET; + gBattleAnimArgs[1] = 0; + gBattleAnimArgs[2] = 12; + taskId2 = CreateTask(AnimTask_HorizontalShake, 80); + if (taskId2 != TASK_NONE) + { + gTasks[taskId2].func(taskId2); + gAnimVisualTaskCount++; + } + task->tShakeTasksCreated = TRUE; + } + if (task->tCreatedDropSprites >= task->tMaxDropSprites) + task->tRainState++; + break; + case 1: + if (task->tCurrentDropSprites == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + void AnimTask_WaterSpoutRain(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[1] = GetWaterSpoutPowerForAnim(); + task->tWaterSpoutPower = GetWaterSpoutPowerForAnim(); if (IsOnPlayerSide(gBattleAnimAttacker)) { - task->data[4] = 136; - task->data[6] = 40; + task->tDropInitialXPos = 136; + task->tDropEndYPos = 40; } else { - task->data[4] = 16; - task->data[6] = 80; + task->tDropInitialXPos = 16; + task->tDropEndYPos = 80; } - task->data[5] = 98; - task->data[7] = task->data[4] + 49; - task->data[12] = task->data[1] * 5 + 5; + task->tDropXRange = 98; + task->tDropXPos = task->tDropInitialXPos + 49; + task->tMaxDropSprites = task->tWaterSpoutPower * 5 + 5; + task->tDropInitialYPos = 0; task->func = AnimTask_WaterSpoutRain_Step; } @@ -1468,15 +1542,15 @@ static void AnimTask_WaterSpoutRain_Step(u8 taskId) struct Task *task = &gTasks[taskId]; u8 taskId2; - switch (task->data[0]) + switch (task->tRainState) { case 0: - if (++task->data[2] > 2) + if (++task->tDropTaskDelay > 2) { - task->data[2] = 0; + task->tDropTaskDelay = 0; CreateWaterSpoutRainDroplet(task, taskId); } - if (task->data[10] != 0 && task->data[13] == 0) + if (task->tDropHasHit != FALSE && task->tShakeTasksCreated == FALSE) { gBattleAnimArgs[0] = ANIM_TARGET; gBattleAnimArgs[1] = 0; @@ -1494,13 +1568,13 @@ static void AnimTask_WaterSpoutRain_Step(u8 taskId) gTasks[taskId2].func(taskId2); gAnimVisualTaskCount++; } - task->data[13] = 1; + task->tShakeTasksCreated = TRUE; } - if (task->data[11] >= task->data[12]) - task->data[0]++; + if (task->tCreatedDropSprites >= task->tMaxDropSprites) + task->tRainState++; break; case 1: - if (task->data[9] == 0) + if (task->tCurrentDropSprites == 0) DestroyAnimVisualTask(taskId); break; } @@ -1508,8 +1582,8 @@ static void AnimTask_WaterSpoutRain_Step(u8 taskId) static void CreateWaterSpoutRainDroplet(struct Task *task, u8 taskId) { - u16 yPosArg = ((gSineTable[task->data[8]] + 3) >> 4) + task->data[6]; - u8 spriteId = CreateSprite(&gSmallWaterOrbSpriteTemplate, task->data[7], 0, 0); + u16 yPosArg = ((gSineTable[task->tSineTableIndex] + 3) >> 4) + task->tDropEndYPos; + u8 spriteId = CreateSprite(&gSmallWaterOrbSpriteTemplate, task->tDropXPos, task->tDropInitialYPos, 0); if (spriteId != MAX_SPRITES) { @@ -1517,11 +1591,11 @@ static void CreateWaterSpoutRainDroplet(struct Task *task, u8 taskId) gSprites[spriteId].data[5] = yPosArg; gSprites[spriteId].data[6] = taskId; gSprites[spriteId].data[7] = 9; - task->data[9]++; + task->tCurrentDropSprites++; } - task->data[11]++; - task->data[8] = (task->data[8] + 39) & 0xFF; - task->data[7] = (ISO_RANDOMIZE2(task->data[7]) % task->data[5]) + task->data[4]; + task->tCreatedDropSprites++; + task->tSineTableIndex = (task->tSineTableIndex + 39) & 0xFF; + task->tDropXPos = (ISO_RANDOMIZE2(task->tDropXPos) % task->tDropXRange) + task->tDropInitialXPos; } static void AnimWaterSpoutRain(struct Sprite *sprite) @@ -1531,7 +1605,7 @@ static void AnimWaterSpoutRain(struct Sprite *sprite) sprite->y += 8; if (sprite->y >= sprite->data[5]) { - gTasks[sprite->data[6]].data[10] = 1; + gTasks[sprite->data[6]].tDropHasHit = TRUE; sprite->data[1] = CreateSprite(&gWaterHitSplatSpriteTemplate, sprite->x, sprite->y, 1); if (sprite->data[1] != MAX_SPRITES) { @@ -1560,6 +1634,21 @@ static void AnimWaterSpoutRainHit(struct Sprite *sprite) } } +#undef tRainState +#undef tWaterSpoutPower +#undef tDropTaskDelay +#undef tDropInitialXPos +#undef tDropXRange +#undef tDropEndYPos +#undef tDropXPos +#undef tSineTableIndex +#undef tCurrentDropSprites +#undef tDropHasHit +#undef tCreatedDropSprites +#undef tMaxDropSprites +#undef tShakeTasksCreated +#undef tDropInitialYPos + void AnimTask_WaterSport(u8 taskId) { struct Task *task = &gTasks[taskId]; diff --git a/src/battle_arena.c b/src/battle_arena.c index 8474595b0d7f..3708fec02480 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -427,14 +427,11 @@ void BattleArena_DeductSkillPoints(u8 battler, enum StringID stringId) case STRINGID_PKMNSXBLOCKSY2: case STRINGID_PKMNSXPREVENTSYLOSS: case STRINGID_PKMNSXMADEYINEFFECTIVE: - case STRINGID_PKMNSXPREVENTSBURNS: case STRINGID_PKMNSXBLOCKSY: case STRINGID_PKMNPROTECTEDBY: case STRINGID_PKMNPREVENTSUSAGE: case STRINGID_PKMNRESTOREDHPUSING: - case STRINGID_PKMNPREVENTSPARALYSISWITH: case STRINGID_PKMNPREVENTSROMANCEWITH: - case STRINGID_PKMNPREVENTSPOISONINGWITH: case STRINGID_PKMNPREVENTSCONFUSIONWITH: case STRINGID_PKMNRAISEDFIREPOWERWITH: case STRINGID_PKMNANCHORSITSELFWITH: diff --git a/src/battle_bg.c b/src/battle_bg.c index a0df9017c799..14244c4e9520 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -5,6 +5,7 @@ #include "battle_main.h" #include "battle_message.h" #include "battle_setup.h" +#include "battle_environment.h" #include "bg.h" #include "data.h" #include "decompress.h" @@ -18,15 +19,16 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "test_runner.h" #include "text_window.h" #include "trig.h" #include "window.h" -#include "constants/map_types.h" #include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainers.h" #include "constants/battle_anim.h" #include "constants/battle_partner.h" +#include "data/battle_environment.h" // .rodata @@ -610,98 +612,81 @@ const struct WindowTemplate *const gBattleWindowTemplates[] = [B_WIN_TYPE_ARENA] = sBattleArenaWindowTemplates, }; -const struct BattleBackground sBattleEnvironmentTable[] = +// If current map scene equals any of the values in sMapBattleSceneMapping, +// use its battle terrain value. Otherwise, use the default. +static u8 GetBattleEnvironmentByMapScene(u8 mapBattleScene) { - [BATTLE_ENVIRONMENT_GRASS] = + int i; + for (i = 0; i < NELEMS(sMapBattleSceneMapping); i++) { - .tileset = gBattleEnvironmentTiles_TallGrass, - .tilemap = gBattleEnvironmentTilemap_TallGrass, - .entryTileset = gBattleEnvironmentAnimTiles_TallGrass, - .entryTilemap = gBattleEnvironmentAnimTilemap_TallGrass, - .palette = gBattleEnvironmentPalette_TallGrass, - }, - - [BATTLE_ENVIRONMENT_LONG_GRASS] = - { - .tileset = gBattleEnvironmentTiles_LongGrass, - .tilemap = gBattleEnvironmentTilemap_LongGrass, - .entryTileset = gBattleEnvironmentAnimTiles_LongGrass, - .entryTilemap = gBattleEnvironmentAnimTilemap_LongGrass, - .palette = gBattleEnvironmentPalette_LongGrass, - }, + if (mapBattleScene == sMapBattleSceneMapping[i].mapScene) + return sMapBattleSceneMapping[i].battleEnvironment; + } + return BATTLE_ENVIRONMENT_PLAIN; +} - [BATTLE_ENVIRONMENT_SAND] = - { - .tileset = gBattleEnvironmentTiles_Sand, - .tilemap = gBattleEnvironmentTilemap_Sand, - .entryTileset = gBattleEnvironmentAnimTiles_Sand, - .entryTilemap = gBattleEnvironmentAnimTilemap_Sand, - .palette = gBattleEnvironmentPalette_Sand, - }, +// Loads the initial battle terrain. +static void LoadBattleEnvironmentGfx(u16 terrain) +{ + if (terrain >= NELEMS(gBattleEnvironmentInfo)) + terrain = BATTLE_ENVIRONMENT_PLAIN; // If higher than the number of entries in gBattleEnvironmentInfo, use the default. + // Copy to bg3 + DecompressDataWithHeaderVram(gBattleEnvironmentInfo[terrain].background.tileset, (void *)(BG_CHAR_ADDR(2))); + DecompressDataWithHeaderVram(gBattleEnvironmentInfo[terrain].background.tilemap, (void *)(BG_SCREEN_ADDR(26))); + LoadPalette(gBattleEnvironmentInfo[terrain].background.palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); +} - [BATTLE_ENVIRONMENT_UNDERWATER] = - { - .tileset = gBattleEnvironmentTiles_Underwater, - .tilemap = gBattleEnvironmentTilemap_Underwater, - .entryTileset = gBattleEnvironmentAnimTiles_Underwater, - .entryTilemap = gBattleEnvironmentAnimTilemap_Underwater, - .palette = gBattleEnvironmentPalette_Underwater, - }, +// Loads the entry associated with the battle terrain. +// This can be the grass moving on the screen at the start of a wild encounter in tall grass. +static void LoadBattleEnvironmentEntryGfx(u16 terrain) +{ + if (terrain >= NELEMS(gBattleEnvironmentInfo)) + terrain = BATTLE_ENVIRONMENT_PLAIN; + // Copy to bg1 + DecompressDataWithHeaderVram(gBattleEnvironmentInfo[terrain].background.entryTileset, (void *)BG_CHAR_ADDR(1)); + DecompressDataWithHeaderVram(gBattleEnvironmentInfo[terrain].background.entryTilemap, (void *)BG_SCREEN_ADDR(28)); +} - [BATTLE_ENVIRONMENT_WATER] = - { - .tileset = gBattleEnvironmentTiles_Water, - .tilemap = gBattleEnvironmentTilemap_Water, - .entryTileset = gBattleEnvironmentAnimTiles_Water, - .entryTilemap = gBattleEnvironmentAnimTilemap_Water, - .palette = gBattleEnvironmentPalette_Water, - }, +static u8 GetBattleEnvironmentOverride(void) +{ + u8 battleScene = GetCurrentMapBattleScene(); - [BATTLE_ENVIRONMENT_POND] = + if (TestRunner_Battle_GetForcedEnvironment() + && gBattleEnvironmentInfo[gBattleEnvironment].background.tilemap + && gBattleEnvironmentInfo[gBattleEnvironment].background.tileset) { - .tileset = gBattleEnvironmentTiles_PondWater, - .tilemap = gBattleEnvironmentTilemap_PondWater, - .entryTileset = gBattleEnvironmentAnimTiles_PondWater, - .entryTilemap = gBattleEnvironmentAnimTilemap_PondWater, - .palette = gBattleEnvironmentPalette_PondWater, - }, - - [BATTLE_ENVIRONMENT_MOUNTAIN] = + return gBattleEnvironment; + } + else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) + return BATTLE_ENVIRONMENT_FRONTIER; + else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) { - .tileset = gBattleEnvironmentTiles_Rock, - .tilemap = gBattleEnvironmentTilemap_Rock, - .entryTileset = gBattleEnvironmentAnimTiles_Rock, - .entryTilemap = gBattleEnvironmentAnimTilemap_Rock, - .palette = gBattleEnvironmentPalette_Rock, - }, - - [BATTLE_ENVIRONMENT_CAVE] = + switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL)) + { + case SPECIES_GROUDON: + return BATTLE_ENVIRONMENT_GROUDON; + case SPECIES_KYOGRE: + return BATTLE_ENVIRONMENT_KYOGRE; + case SPECIES_RAYQUAZA: + return BATTLE_ENVIRONMENT_RAYQUAZA; + default: + return gBattleEnvironment; + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - .tileset = gBattleEnvironmentTiles_Cave, - .tilemap = gBattleEnvironmentTilemap_Cave, - .entryTileset = gBattleEnvironmentAnimTiles_Cave, - .entryTilemap = gBattleEnvironmentAnimTilemap_Cave, - .palette = gBattleEnvironmentPalette_Cave, - }, + u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); + if (trainerClass == TRAINER_CLASS_LEADER) + return BATTLE_ENVIRONMENT_LEADER; + else if (trainerClass == TRAINER_CLASS_CHAMPION) + return BATTLE_ENVIRONMENT_CHAMPION; + } - [BATTLE_ENVIRONMENT_BUILDING] = - { - .tileset = gBattleEnvironmentTiles_Building, - .tilemap = gBattleEnvironmentTilemap_Building, - .entryTileset = gBattleEnvironmentAnimTiles_Building, - .entryTilemap = gBattleEnvironmentAnimTilemap_Building, - .palette = gBattleEnvironmentPalette_Building, - }, + if (battleScene == MAP_BATTLE_SCENE_NORMAL) + return gBattleEnvironment; - [BATTLE_ENVIRONMENT_PLAIN] = - { - .tileset = gBattleEnvironmentTiles_Building, - .tilemap = gBattleEnvironmentTilemap_Building, - .entryTileset = gBattleEnvironmentAnimTiles_Building, - .entryTilemap = gBattleEnvironmentAnimTilemap_Building, - .palette = gBattleEnvironmentPalette_Plain, - }, -}; + return GetBattleEnvironmentByMapScene(battleScene); +} void BattleInitBgsAndWindows(void) { @@ -752,114 +737,12 @@ void LoadBattleMenuWindowGfx(void) void DrawMainBattleBackground(void) { - if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK)) - { - LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - } - else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) - { - switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL)) - { - case SPECIES_GROUDON: - LZDecompressVram(gBattleEnvironmentTiles_Cave, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Cave, (void*)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case SPECIES_KYOGRE: - LZDecompressVram(gBattleEnvironmentTiles_Water, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Water, (void*)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case SPECIES_RAYQUAZA: - LZDecompressVram(gBattleEnvironmentTiles_Rayquaza, (void*)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_Rayquaza, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - default: - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - } - } - else - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); - if (trainerClass == TRAINER_CLASS_LEADER) - { - LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - return; - } - else if (trainerClass == TRAINER_CLASS_CHAMPION) - { - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - return; - } - } - - switch (GetCurrentMapBattleScene()) - { - default: - case MAP_BATTLE_SCENE_NORMAL: - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_GYM: - LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_MAGMA: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_AQUA: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_SIDNEY: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_PHOEBE: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_GLACIA: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_DRAKE: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_FRONTIER: - LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2))); - LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - LoadPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - } - } + LoadBattleEnvironmentGfx(GetBattleEnvironmentOverride()); } void LoadBattleTextboxAndBackground(void) { - LZDecompressVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0))); + DecompressDataWithHeaderVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0))); CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); CopyBgTilemapBufferToVram(0); LoadPalette(gBattleTextboxPalette, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); @@ -1028,7 +911,7 @@ void InitLinkBattleVsScreen(u8 taskId) case 0: if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - for (i = 0; i < MAX_BATTLERS_COUNT; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { name = gLinkPlayers[i].name; linkPlayer = &gLinkPlayers[i]; @@ -1129,8 +1012,8 @@ void DrawBattleEntryBackground(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - LZDecompressVram(gBattleVSFrame_Gfx, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(gVsLettersGfx, (void *)OBJ_VRAM0); + DecompressDataWithHeaderVram(gBattleVSFrame_Gfx, (void *)(BG_CHAR_ADDR(1))); + DecompressDataWithHeaderVram(gVsLettersGfx, (void *)OBJ_VRAM0); LoadPalette(gBattleVSFrame_Pal, BG_PLTT_ID(6), PLTT_SIZE_4BPP); SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1); SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04); @@ -1146,10 +1029,15 @@ void DrawBattleEntryBackground(void) } else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) { - if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) + if (TestRunner_Battle_GetForcedEnvironment() + && gBattleEnvironmentInfo[gBattleEnvironment].background.tilemap + && gBattleEnvironmentInfo[gBattleEnvironment].background.tileset) + { + LoadBattleEnvironmentEntryGfx(gBattleEnvironment); + } + else if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) { - LZDecompressVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28))); + LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_BUILDING); } else { @@ -1168,20 +1056,17 @@ void DrawBattleEntryBackground(void) switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL)) { case SPECIES_GROUDON: - LZDecompressVram(gBattleEnvironmentAnimTiles_Cave, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleEnvironmentAnimTilemap_Cave, (void*)(BG_SCREEN_ADDR(28))); + LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_CAVE); break; case SPECIES_KYOGRE: - LZDecompressVram(gBattleEnvironmentAnimTiles_Underwater, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleEnvironmentAnimTilemap_Underwater, (void*)(BG_SCREEN_ADDR(28))); + LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_UNDERWATER); break; case SPECIES_RAYQUAZA: - LZDecompressVram(gBattleEnvironmentAnimTiles_Rayquaza, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleEnvironmentAnimTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(28))); + LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_RAYQUAZA); break; default: - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].entryTileset, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].entryTilemap, (void *)(BG_SCREEN_ADDR(28))); + DecompressDataWithHeaderVram(gBattleEnvironmentInfo[gBattleEnvironment].background.entryTileset, (void *)(BG_CHAR_ADDR(1))); + DecompressDataWithHeaderVram(gBattleEnvironmentInfo[gBattleEnvironment].background.entryTilemap, (void *)(BG_SCREEN_ADDR(28))); break; } } @@ -1189,30 +1074,26 @@ void DrawBattleEntryBackground(void) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); + enum TrainerClassID trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (trainerClass == TRAINER_CLASS_LEADER) { - LZDecompressVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28))); + LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_BUILDING); return; } else if (trainerClass == TRAINER_CLASS_CHAMPION) { - LZDecompressVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28))); + LoadBattleEnvironmentEntryGfx(BATTLE_ENVIRONMENT_BUILDING); return; } } if (GetCurrentMapBattleScene() == MAP_BATTLE_SCENE_NORMAL) { - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].entryTileset, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].entryTilemap, (void *)(BG_SCREEN_ADDR(28))); + LoadBattleEnvironmentEntryGfx(gBattleEnvironment); } else { - LZDecompressVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1))); - LZDecompressVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28))); + LoadBattleEnvironmentEntryGfx(gBattleEnvironment); } } } @@ -1224,7 +1105,7 @@ bool8 LoadChosenBattleElement(u8 caseId) switch (caseId) { case 0: - LZDecompressVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0))); + DecompressDataWithHeaderVram(gBattleTextboxTiles, (void *)(BG_CHAR_ADDR(0))); break; case 1: CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); @@ -1234,195 +1115,13 @@ bool8 LoadChosenBattleElement(u8 caseId) LoadPalette(gBattleTextboxPalette, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); break; case 3: - if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) - { - LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2))); - } - else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) - { - switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL)) - { - case SPECIES_GROUDON: - LZDecompressVram(gBattleEnvironmentTiles_Cave, (void*)(BG_CHAR_ADDR(2))); - break; - case SPECIES_KYOGRE: - LZDecompressVram(gBattleEnvironmentTilemap_Water, (void*)(BG_SCREEN_ADDR(2))); - break; - } - } - else - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); - if (trainerClass == TRAINER_CLASS_LEADER) - { - LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2))); - break; - } - else if (trainerClass == TRAINER_CLASS_CHAMPION) - { - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - break; - } - } - - switch (GetCurrentMapBattleScene()) - { - default: - case MAP_BATTLE_SCENE_NORMAL: - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2))); - break; - case MAP_BATTLE_SCENE_GYM: - LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2))); - break; - case MAP_BATTLE_SCENE_MAGMA: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - break; - case MAP_BATTLE_SCENE_AQUA: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - break; - case MAP_BATTLE_SCENE_SIDNEY: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - break; - case MAP_BATTLE_SCENE_PHOEBE: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - break; - case MAP_BATTLE_SCENE_GLACIA: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - break; - case MAP_BATTLE_SCENE_DRAKE: - LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2))); - break; - case MAP_BATTLE_SCENE_FRONTIER: - LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2))); - break; - } - } + DecompressDataWithHeaderVram(gBattleEnvironmentInfo[GetBattleEnvironmentOverride()].background.tileset, (void *)(BG_CHAR_ADDR(2))); break; case 4: - if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) - { - LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - } - else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) - { - if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_GROUDON) - LZDecompressVram(gBattleEnvironmentTilemap_Cave, (void*)(BG_SCREEN_ADDR(26))); - else - LZDecompressVram(gBattleEnvironmentTilemap_Water, (void *)(BG_SCREEN_ADDR(26))); - } - else - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); - if (trainerClass == TRAINER_CLASS_LEADER) - { - LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - break; - } - else if (trainerClass == TRAINER_CLASS_CHAMPION) - { - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - break; - } - } - - switch (GetCurrentMapBattleScene()) - { - default: - case MAP_BATTLE_SCENE_NORMAL: - LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26))); - break; - case MAP_BATTLE_SCENE_GYM: - LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - break; - case MAP_BATTLE_SCENE_MAGMA: - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - break; - case MAP_BATTLE_SCENE_AQUA: - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - break; - case MAP_BATTLE_SCENE_SIDNEY: - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - break; - case MAP_BATTLE_SCENE_PHOEBE: - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - break; - case MAP_BATTLE_SCENE_GLACIA: - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - break; - case MAP_BATTLE_SCENE_DRAKE: - LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26))); - break; - case MAP_BATTLE_SCENE_FRONTIER: - LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26))); - break; - } - } + DecompressDataWithHeaderVram(gBattleEnvironmentInfo[GetBattleEnvironmentOverride()].background.tilemap, (void *)(BG_SCREEN_ADDR(26))); break; case 5: - if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER)) - { - LoadPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - } - else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) - { - if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_GROUDON) - LoadPalette(gBattleEnvironmentPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - else - LoadPalette(gBattleEnvironmentPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - } - else - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); - if (trainerClass == TRAINER_CLASS_LEADER) - { - LoadPalette(gBattleEnvironmentPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - } - else if (trainerClass == TRAINER_CLASS_CHAMPION) - { - LoadPalette(gBattleEnvironmentPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - } - } - - switch (GetCurrentMapBattleScene()) - { - default: - case MAP_BATTLE_SCENE_NORMAL: - LoadPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_GYM: - LoadPalette(gBattleEnvironmentPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_MAGMA: - LoadPalette(gBattleEnvironmentPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_AQUA: - LoadPalette(gBattleEnvironmentPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_SIDNEY: - LoadPalette(gBattleEnvironmentPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_PHOEBE: - LoadPalette(gBattleEnvironmentPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_GLACIA: - LoadPalette(gBattleEnvironmentPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_DRAKE: - LoadPalette(gBattleEnvironmentPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - case MAP_BATTLE_SCENE_FRONTIER: - LoadPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); - break; - } - } + LoadPalette(gBattleEnvironmentInfo[GetBattleEnvironmentOverride()].background.palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP); break; case 6: LoadBattleMenuWindowGfx(); diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index a039a5b52219..341829353017 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -30,23 +30,15 @@ #include "recorded_battle.h" #include "random.h" -static void LinkOpponentHandleLoadMonSprite(u32 battler); -static void LinkOpponentHandleSwitchInAnim(u32 battler); static void LinkOpponentHandleDrawTrainerPic(u32 battler); static void LinkOpponentHandleTrainerSlide(u32 battler); static void LinkOpponentHandleTrainerSlideBack(u32 battler); -static void LinkOpponentHandleMoveAnimation(u32 battler); -static void LinkOpponentHandlePrintString(u32 battler); -static void LinkOpponentHandleHealthBarUpdate(u32 battler); static void LinkOpponentHandleIntroTrainerBallThrow(u32 battler); static void LinkOpponentHandleDrawPartyStatusSummary(u32 battler); -static void LinkOpponentHandleBattleAnimation(u32 battler); static void LinkOpponentHandleLinkStandbyMsg(u32 battler); static void LinkOpponentHandleEndLinkBattle(u32 battler); static void LinkOpponentBufferRunCommand(u32 battler); -static void LinkOpponentBufferExecCompleted(u32 battler); -static void SwitchIn_HandleSoundAndEnd(u32 battler); static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { @@ -54,8 +46,8 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 batt [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, - [CONTROLLER_LOADMONSPRITE] = LinkOpponentHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = LinkOpponentHandleSwitchInAnim, + [CONTROLLER_LOADMONSPRITE] = BtlController_HandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = BtlController_HandleSwitchInAnim, [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = LinkOpponentHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = LinkOpponentHandleTrainerSlide, @@ -65,8 +57,8 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 batt [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, [CONTROLLER_PAUSE] = BtlController_Empty, - [CONTROLLER_MOVEANIMATION] = LinkOpponentHandleMoveAnimation, - [CONTROLLER_PRINTSTRING] = LinkOpponentHandlePrintString, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = BtlController_Empty, [CONTROLLER_YESNOBOX] = BtlController_Empty, @@ -74,7 +66,7 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 batt [CONTROLLER_OPENBAG] = BtlController_Empty, [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, [CONTROLLER_23] = BtlController_Empty, - [CONTROLLER_HEALTHBARUPDATE] = LinkOpponentHandleHealthBarUpdate, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = BtlController_Empty, [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, @@ -98,7 +90,7 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 batt [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, [CONTROLLER_ENDBOUNCE] = BtlController_Empty, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, - [CONTROLLER_BATTLEANIMATION] = LinkOpponentHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = LinkOpponentHandleEndLinkBattle, @@ -119,16 +111,7 @@ static void LinkOpponentBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands)) sLinkOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - LinkOpponentBufferExecCompleted(battler); - } -} - -static void Intro_DelayAndEnd(u32 battler) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; - LinkOpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -167,8 +150,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } else { @@ -180,13 +162,12 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) { - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } } gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; - gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; + gBattlerControllerFuncs[battler] = BtlController_Intro_DelayAndEnd; } } @@ -267,7 +248,7 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) DestroySprite(&gSprites[gBattleControllerData[battler]]); - SetBattlerShadowSpriteCallback(battler, GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES)); + SetBattlerShadowSpriteCallback(battler, GetBattlerVisualSpecies(battler)); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; @@ -278,37 +259,7 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) } } -static void TryShinyAnimAfterMonAnim(u32 battler) -{ - if (TryShinyAnimAfterMonAnimUtil(battler)) - LinkOpponentBufferExecCompleted(battler); -} - -static void SwitchIn_ShowSubstitute(u32 battler) -{ - if (SwitchIn_ShowSubstituteUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_HandleSoundAndEnd; -} - -static void SwitchIn_HandleSoundAndEnd(u32 battler) -{ - if (SwitchIn_HandleSoundAndEndUtil(battler)) - LinkOpponentBufferExecCompleted(battler); -} - -static void SwitchIn_ShowHealthbox(u32 battler) -{ - if (SwitchIn_ShowHealthboxUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; -} - -static void SwitchIn_TryShinyAnim(u32 battler) -{ - if (SwitchIn_TryShinyAnimUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; -} - -static void LinkOpponentBufferExecCompleted(u32 battler) +void LinkOpponentBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = LinkOpponentBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -324,16 +275,6 @@ static void LinkOpponentBufferExecCompleted(u32 battler) } } -static void LinkOpponentHandleLoadMonSprite(u32 battler) -{ - BtlController_HandleLoadMonSprite(battler, TryShinyAnimAfterMonAnim); -} - -static void LinkOpponentHandleSwitchInAnim(u32 battler) -{ - BtlController_HandleSwitchInAnim(battler, FALSE, SwitchIn_TryShinyAnim); -} - static void LinkOpponentHandleDrawTrainerPic(u32 battler) { s16 xPos; @@ -419,7 +360,7 @@ static void LinkOpponentHandleTrainerSlide(u32 battler) trainerPicId = GetFrontierTrainerFrontSpriteId(TRAINER_BATTLE_PARAM.opponentB); BtlController_HandleTrainerSlide(battler, trainerPicId); - LinkOpponentBufferExecCompleted(battler); // Possibly a bug, because execution should be completed after the slide in finishes. See Controller_WaitForTrainerPic. + BtlController_Complete(battler); // Possibly a bug, because execution should be completed after the slide in finishes. See Controller_WaitForTrainerPic. } static void LinkOpponentHandleTrainerSlideBack(u32 battler) @@ -427,21 +368,6 @@ static void LinkOpponentHandleTrainerSlideBack(u32 battler) BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void LinkOpponentHandleMoveAnimation(u32 battler) -{ - BtlController_HandleMoveAnimation(battler, TRUE); -} - -static void LinkOpponentHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, TRUE, FALSE); -} - -static void LinkOpponentHandleHealthBarUpdate(u32 battler) -{ - BtlController_HandleHealthBarUpdate(battler, FALSE); -} - static void LinkOpponentHandleIntroTrainerBallThrow(u32 battler) { BtlController_HandleIntroTrainerBallThrow(battler, 0, NULL, 0, Intro_TryShinyAnimShowHealthbox); @@ -452,15 +378,10 @@ static void LinkOpponentHandleDrawPartyStatusSummary(u32 battler) BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_OPPONENT, TRUE); } -static void LinkOpponentHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, FALSE, TRUE); -} - static void LinkOpponentHandleLinkStandbyMsg(u32 battler) { RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][2]); - LinkOpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } static void LinkOpponentHandleEndLinkBattle(u32 battler) @@ -475,6 +396,6 @@ static void LinkOpponentHandleEndLinkBattle(u32 battler) gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[battler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - LinkOpponentBufferExecCompleted(battler); + BtlController_Complete(battler); gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 9b27309bf6f2..408cc629e1b2 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -30,22 +30,14 @@ #include "recorded_battle.h" #include "random.h" -static void LinkPartnerHandleLoadMonSprite(u32 battler); -static void LinkPartnerHandleSwitchInAnim(u32 battler); static void LinkPartnerHandleDrawTrainerPic(u32 battler); static void LinkPartnerHandleTrainerSlideBack(u32 battler); -static void LinkPartnerHandleMoveAnimation(u32 battler); -static void LinkPartnerHandlePrintString(u32 battler); -static void LinkPartnerHandleHealthBarUpdate(u32 battler); static void LinkPartnerHandleIntroTrainerBallThrow(u32 battler); static void LinkPartnerHandleDrawPartyStatusSummary(u32 battler); -static void LinkPartnerHandleBattleAnimation(u32 battler); static void LinkPartnerHandleLinkStandbyMsg(u32 battler); static void LinkPartnerHandleEndLinkBattle(u32 battler); static void LinkPartnerBufferRunCommand(u32 battler); -static void LinkPartnerBufferExecCompleted(u32 battler); -static void SwitchIn_WaitAndEnd(u32 battler); static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { @@ -53,8 +45,8 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battl [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, - [CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim, + [CONTROLLER_LOADMONSPRITE] = BtlController_HandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = BtlController_HandleSwitchInAnim, [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, @@ -64,8 +56,8 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battl [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, [CONTROLLER_PAUSE] = BtlController_Empty, - [CONTROLLER_MOVEANIMATION] = LinkPartnerHandleMoveAnimation, - [CONTROLLER_PRINTSTRING] = LinkPartnerHandlePrintString, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = BtlController_Empty, [CONTROLLER_YESNOBOX] = BtlController_Empty, @@ -73,7 +65,7 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battl [CONTROLLER_OPENBAG] = BtlController_Empty, [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, [CONTROLLER_23] = BtlController_Empty, - [CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = BtlController_Empty, [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, @@ -97,7 +89,7 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battl [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, [CONTROLLER_ENDBOUNCE] = BtlController_Empty, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, - [CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle, @@ -118,41 +110,11 @@ static void LinkPartnerBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands)) sLinkPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - LinkPartnerBufferExecCompleted(battler); + BtlController_Complete(battler); } } -static void WaitForMonAnimAfterLoad(u32 battler) -{ - if (gSprites[gBattlerSpriteIds[battler]].animEnded && gSprites[gBattlerSpriteIds[battler]].x2 == 0) - LinkPartnerBufferExecCompleted(battler); -} - -static void SwitchIn_ShowSubstitute(u32 battler) -{ - if (SwitchIn_ShowSubstituteUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_WaitAndEnd; -} - -static void SwitchIn_WaitAndEnd(u32 battler) -{ - if (SwitchIn_WaitAndEndUtil(battler)) - LinkPartnerBufferExecCompleted(battler); -} - -static void SwitchIn_ShowHealthbox(u32 battler) -{ - if (SwitchIn_ShowHealthboxUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; -} - -static void SwitchIn_TryShinyAnim(u32 battler) -{ - if (SwitchIn_TryShinyAnimUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; -} - -static void LinkPartnerBufferExecCompleted(u32 battler) +void LinkPartnerBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = LinkPartnerBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -168,16 +130,6 @@ static void LinkPartnerBufferExecCompleted(u32 battler) } } -static void LinkPartnerHandleLoadMonSprite(u32 battler) -{ - BtlController_HandleLoadMonSprite(battler, WaitForMonAnimAfterLoad); -} - -static void LinkPartnerHandleSwitchInAnim(u32 battler) -{ - BtlController_HandleSwitchInAnim(battler, TRUE, SwitchIn_TryShinyAnim); -} - static void LinkPartnerHandleDrawTrainerPic(u32 battler) { s16 xPos; @@ -206,21 +158,6 @@ static void LinkPartnerHandleTrainerSlideBack(u32 battler) BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void LinkPartnerHandleMoveAnimation(u32 battler) -{ - BtlController_HandleMoveAnimation(battler, TRUE); -} - -static void LinkPartnerHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, TRUE, FALSE); -} - -static void LinkPartnerHandleHealthBarUpdate(u32 battler) -{ - BtlController_HandleHealthBarUpdate(battler, FALSE); -} - static void LinkPartnerHandleIntroTrainerBallThrow(u32 battler) { u32 trainerPicId = LinkPlayerGetTrainerPicId(GetBattlerMultiplayerId(battler)); @@ -234,15 +171,10 @@ static void LinkPartnerHandleDrawPartyStatusSummary(u32 battler) BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, TRUE); } -static void LinkPartnerHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, FALSE, TRUE); -} - static void LinkPartnerHandleLinkStandbyMsg(u32 battler) { RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][2]); - LinkPartnerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void LinkPartnerHandleEndLinkBattle(u32 battler) @@ -252,6 +184,6 @@ static void LinkPartnerHandleEndLinkBattle(u32 battler) gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[battler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - LinkPartnerBufferExecCompleted(battler); + BtlController_Complete(battler); gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index f6fae5ae576c..a2d40bc5e1a0 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -39,27 +39,19 @@ #include "constants/trainers.h" #include "trainer_hill.h" #include "test_runner.h" +#include "test/battle.h" +#include "test/test_runner_battle.h" -static void OpponentHandleLoadMonSprite(u32 battler); -static void OpponentHandleSwitchInAnim(u32 battler); static void OpponentHandleDrawTrainerPic(u32 battler); static void OpponentHandleTrainerSlideBack(u32 battler); -static void OpponentHandleMoveAnimation(u32 battler); -static void OpponentHandlePrintString(u32 battler); static void OpponentHandleChooseAction(u32 battler); static void OpponentHandleChooseMove(u32 battler); static void OpponentHandleChooseItem(u32 battler); static void OpponentHandleChoosePokemon(u32 battler); -static void OpponentHandleHealthBarUpdate(u32 battler); static void OpponentHandleIntroTrainerBallThrow(u32 battler); static void OpponentHandleDrawPartyStatusSummary(u32 battler); -static void OpponentHandleBattleAnimation(u32 battler); static void OpponentHandleEndLinkBattle(u32 battler); -static u8 CountAIAliveNonEggMonsExcept(u8 slotToIgnore); - static void OpponentBufferRunCommand(u32 battler); -static void OpponentBufferExecCompleted(u32 battler); -static void SwitchIn_HandleSoundAndEnd(u32 battler); static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { @@ -67,8 +59,8 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) [CONTROLLER_GETRAWMONDATA] = BtlController_HandleGetRawMonData, [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, - [CONTROLLER_LOADMONSPRITE] = OpponentHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = OpponentHandleSwitchInAnim, + [CONTROLLER_LOADMONSPRITE] = BtlController_HandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = BtlController_HandleSwitchInAnim, [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = OpponentHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = OpponentHandleTrainerSlide, @@ -78,8 +70,8 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, [CONTROLLER_PAUSE] = BtlController_Empty, - [CONTROLLER_MOVEANIMATION] = OpponentHandleMoveAnimation, - [CONTROLLER_PRINTSTRING] = OpponentHandlePrintString, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = OpponentHandleChooseAction, [CONTROLLER_YESNOBOX] = BtlController_Empty, @@ -87,7 +79,7 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) [CONTROLLER_OPENBAG] = OpponentHandleChooseItem, [CONTROLLER_CHOOSEPOKEMON] = OpponentHandleChoosePokemon, [CONTROLLER_23] = BtlController_Empty, - [CONTROLLER_HEALTHBARUPDATE] = OpponentHandleHealthBarUpdate, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = BtlController_Empty, [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, @@ -111,7 +103,7 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, [CONTROLLER_ENDBOUNCE] = BtlController_Empty, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, - [CONTROLLER_BATTLEANIMATION] = OpponentHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = OpponentHandleEndLinkBattle, @@ -132,16 +124,7 @@ static void OpponentBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sOpponentBufferCommands)) sOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - OpponentBufferExecCompleted(battler); - } -} - -static void Intro_DelayAndEnd(u32 battler) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; - OpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -176,8 +159,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } else { @@ -191,8 +173,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) { - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } else { @@ -208,7 +189,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) } gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; - gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; + gBattlerControllerFuncs[battler] = BtlController_Intro_DelayAndEnd; } } @@ -310,49 +291,7 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) } } -static void TryShinyAnimAfterMonAnim(u32 battler) -{ - if (gSprites[gBattlerSpriteIds[battler]].x2 == 0 - && !gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim - && !gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) - TryShinyAnimation(battler, GetBattlerMon(battler)); - - if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy - && gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) - { - gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - OpponentBufferExecCompleted(battler); - } -} - -static void SwitchIn_ShowSubstitute(u32 battler) -{ - if (SwitchIn_ShowSubstituteUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_HandleSoundAndEnd; -} - -static void SwitchIn_HandleSoundAndEnd(u32 battler) -{ - if (SwitchIn_HandleSoundAndEndUtil(battler)) - OpponentBufferExecCompleted(battler); -} - -static void SwitchIn_ShowHealthbox(u32 battler) -{ - if (SwitchIn_ShowHealthboxUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; -} - -static void SwitchIn_TryShinyAnim(u32 battler) -{ - if (SwitchIn_TryShinyAnimUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; -} - -static void OpponentBufferExecCompleted(u32 battler) +void OpponentBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = OpponentBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -368,17 +307,6 @@ static void OpponentBufferExecCompleted(u32 battler) } } -static void OpponentHandleLoadMonSprite(u32 battler) -{ - BtlController_HandleLoadMonSprite(battler, TryShinyAnimAfterMonAnim); -} - -static void OpponentHandleSwitchInAnim(u32 battler) -{ - gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; - BtlController_HandleSwitchInAnim(battler, FALSE, SwitchIn_TryShinyAnim); -} - static u32 OpponentGetTrainerPicId(u32 battlerId) { u32 trainerPicId; @@ -441,18 +369,40 @@ static u32 OpponentGetTrainerPicId(u32 battlerId) static void OpponentHandleDrawTrainerPic(u32 battler) { s16 xPos; - u32 trainerPicId = OpponentGetTrainerPicId(battler); - - if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) + u32 trainerPicId; + + // Sets Multibattle test opponent sprites to not be Hiker + if (IsMultibattleTest()) { - if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon + if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT) + { + trainerPicId = TRAINER_PIC_LEAF; + if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + xPos = 176; + else + xPos = 200; + } + else + { + trainerPicId = TRAINER_PIC_RED; xPos = 152; - else // first mon - xPos = 200; + } } else { - xPos = 176; + trainerPicId = OpponentGetTrainerPicId(battler); + + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) + { + if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon + xPos = 152; + else // first mon + xPos = 200; + } + else + { + xPos = 176; + } } BtlController_HandleDrawTrainerPic(battler, trainerPicId, TRUE, xPos, 40, -1); @@ -469,20 +419,10 @@ static void OpponentHandleTrainerSlideBack(u32 battler) BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void OpponentHandleMoveAnimation(u32 battler) -{ - BtlController_HandleMoveAnimation(battler, FALSE); -} - -static void OpponentHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, FALSE, TRUE); -} - static void OpponentHandleChooseAction(u32 battler) { AI_TrySwitchOrUseItem(battler); - OpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } static void OpponentHandleChooseMove(u32 battler) @@ -495,7 +435,7 @@ static void OpponentHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, ChooseMoveAndTargetInBattlePalace(battler)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, ChooseMoveAndTargetInBattlePalace(battler)); } else if (gAiBattleData->actionFlee) { @@ -522,18 +462,19 @@ static void OpponentHandleChooseMove(u32 battler) gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); } // If opponent can and should use a gimmick (considering trainer data), do it - if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE - && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE - && !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveIndex]))) + enum Gimmick usableGimmick = gBattleStruct->gimmick.usableGimmick[battler]; + if (usableGimmick != GIMMICK_NONE && IsAIUsingGimmick(battler) && !HasTrainerUsedGimmick(battler, usableGimmick)) { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (RET_GIMMICK) | (gBattlerTarget << 8)); + gBattleStruct->gimmick.toActivate |= 1u << battler; + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (RET_GIMMICK) | (gBattlerTarget << 8)); } else { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (gBattlerTarget << 8)); + SetAIUsingGimmick(battler, NO_GIMMICK); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (gBattlerTarget << 8)); } } - OpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } else // Wild pokemon - use random move { @@ -547,7 +488,7 @@ static void OpponentHandleChooseMove(u32 battler) if (GetBattlerMoveTargetType(battler, move) & MOVE_TARGET_USER) { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (battler << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (battler << 8)); } else if (IsDoubleBattle()) { @@ -555,85 +496,61 @@ static void OpponentHandleChooseMove(u32 battler) target = GetBattlerAtPosition(Random() & 2); } while (!CanTargetBattler(battler, target, move)); - // Don't bother to loop through table if the move can't attack ally + // Don't bother to check if they're enemies if the move can't attack ally if (B_WILD_NATURAL_ENEMIES == TRUE && !(GetBattlerMoveTargetType(battler, move) & MOVE_TARGET_BOTH)) { - u16 i, speciesAttacker, speciesTarget, isPartnerEnemy = FALSE; - static const u16 naturalEnemies[][2] = - { - // Attacker Target - {SPECIES_ZANGOOSE, SPECIES_SEVIPER}, - {SPECIES_SEVIPER, SPECIES_ZANGOOSE}, - {SPECIES_HEATMOR, SPECIES_DURANT}, - {SPECIES_DURANT, SPECIES_HEATMOR}, - {SPECIES_SABLEYE, SPECIES_CARBINK}, - {SPECIES_MAREANIE, SPECIES_CORSOLA}, - }; + u32 speciesAttacker, speciesTarget; speciesAttacker = gBattleMons[battler].species; speciesTarget = gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(battler))].species; - for (i = 0; i < ARRAY_COUNT(naturalEnemies); i++) - { - if (speciesAttacker == naturalEnemies[i][0] && speciesTarget == naturalEnemies[i][1]) - { - isPartnerEnemy = TRUE; - break; - } - } + bool32 isPartnerEnemy = IsNaturalEnemy(speciesAttacker, speciesTarget); + if (isPartnerEnemy && CanTargetBattler(battler, target, move)) - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (GetBattlerAtPosition(BATTLE_PARTNER(battler)) << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (GetBattlerAtPosition(BATTLE_PARTNER(battler)) << 8)); else - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (target << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (target << 8)); } else { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (target << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (target << 8)); } } else - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) << 8)); - OpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } } static void OpponentHandleChooseItem(u32 battler) { BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->chosenItem[battler]); - OpponentBufferExecCompleted(battler); -} - -static inline bool32 IsAcePokemon(u32 chosenMonId, u32 pokemonInBattle, u32 battler) -{ - return gAiThinkingStruct->aiFlags[battler] & AI_FLAG_ACE_POKEMON - && (chosenMonId == CalculateEnemyPartyCountInSide(battler) - 1) - && CountAIAliveNonEggMonsExcept(PARTY_SIZE) != pokemonInBattle; -} - -static inline bool32 IsDoubleAcePokemon(u32 chosenMonId, u32 pokemonInBattle, u32 battler) -{ - return gAiThinkingStruct->aiFlags[battler] & AI_FLAG_DOUBLE_ACE_POKEMON - && (chosenMonId == CalculateEnemyPartyCountInSide(battler) - 1) - && (chosenMonId == CalculateEnemyPartyCountInSide(battler) - 2) - && CountAIAliveNonEggMonsExcept(PARTY_SIZE) != pokemonInBattle - && CountAIAliveNonEggMonsExcept(PARTY_SIZE-1) != pokemonInBattle; + BtlController_Complete(battler); } static void OpponentHandleChoosePokemon(u32 battler) { s32 chosenMonId; - s32 pokemonInBattle = 1; + enum SwitchType switchType = SWITCH_AFTER_KO; // Choosing Revival Blessing target - if ((gBattleResources->bufferA[battler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) + if (gBattleResources->bufferA[battler][1] == PARTY_ACTION_CHOOSE_FAINTED_MON) { chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(battler); } // Switching out else if (gBattleStruct->AI_monToSwitchIntoId[battler] == PARTY_SIZE) { - chosenMonId = GetMostSuitableMonToSwitchInto(battler, SWITCH_AFTER_KO); - if (chosenMonId == PARTY_SIZE) + if (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || gAiLogicData->ejectButtonSwitch || gAiLogicData->ejectPackSwitch) + switchType = SWITCH_MID_BATTLE_FORCED; + + // reset the AI data to consider the correct on-field state at time of switch + SetBattlerAiData(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), gAiLogicData); + if (IsDoubleBattle()) + SetBattlerAiData(GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT), gAiLogicData); + + chosenMonId = GetMostSuitableMonToSwitchInto(battler, switchType); + if (chosenMonId == PARTY_SIZE) // Advanced logic failed so we pick the next available battler { s32 battler1, battler2, firstId, lastId; @@ -645,19 +562,14 @@ static void OpponentHandleChoosePokemon(u32 battler) { battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); battler2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - pokemonInBattle = 2; } GetAIPartyIndexes(battler, &firstId, &lastId); - for (chosenMonId = (lastId-1); chosenMonId >= firstId; chosenMonId--) + for (chosenMonId = firstId; chosenMonId < lastId; chosenMonId++) { - if (!IsValidForBattle(&gEnemyParty[chosenMonId]) - || chosenMonId == gBattlerPartyIndexes[battler1] - || chosenMonId == gBattlerPartyIndexes[battler2]) - continue; - - if (!IsAcePokemon(chosenMonId, pokemonInBattle, battler) - && !IsDoubleAcePokemon(chosenMonId, pokemonInBattle, battler)) + if (IsValidForBattle(&gEnemyParty[chosenMonId]) + && chosenMonId != gBattlerPartyIndexes[battler1] + && chosenMonId != gBattlerPartyIndexes[battler2]) break; } } @@ -673,28 +585,7 @@ static void OpponentHandleChoosePokemon(u32 battler) TestRunner_Battle_CheckSwitch(battler, chosenMonId); #endif // TESTING BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, chosenMonId, NULL); - OpponentBufferExecCompleted(battler); -} - -static u8 CountAIAliveNonEggMonsExcept(u8 slotToIgnore) -{ - u16 i, count; - - for (i = 0, count = 0; i < PARTY_SIZE; i++) - { - if (i != slotToIgnore - && IsValidForBattle(&gEnemyParty[i])) - { - count++; - } - } - - return count; -} - -static void OpponentHandleHealthBarUpdate(u32 battler) -{ - BtlController_HandleHealthBarUpdate(battler, FALSE); + BtlController_Complete(battler); } static void OpponentHandleIntroTrainerBallThrow(u32 battler) @@ -707,11 +598,6 @@ static void OpponentHandleDrawPartyStatusSummary(u32 battler) BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_OPPONENT, TRUE); } -static void OpponentHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, FALSE, FALSE); -} - static void OpponentHandleEndLinkBattle(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LINK && !(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) @@ -720,5 +606,5 @@ static void OpponentHandleEndLinkBattle(u32 battler) gMain.callback1 = gPreBattleCallback1; SetMainCallback2(gMain.savedCallback); } - OpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index a0b4e73ece98..aba9d7d8375b 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -35,7 +35,6 @@ #include "constants/battle_anim.h" #include "constants/battle_move_effects.h" #include "constants/battle_partner.h" -#include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/party_menu.h" @@ -47,25 +46,21 @@ #include "pokemon_summary_screen.h" #include "type_icons.h" #include "pokedex.h" +#include "test/battle.h" +#include "test/test_runner_battle.h" -static void PlayerBufferExecCompleted(u32 battler); static void PlayerHandleLoadMonSprite(u32 battler); -static void PlayerHandleSwitchInAnim(u32 battler); static void PlayerHandleDrawTrainerPic(u32 battler); static void PlayerHandleTrainerSlide(u32 battler); static void PlayerHandleTrainerSlideBack(u32 battler); static void PlayerHandlePaletteFade(u32 battler); static void PlayerHandleSuccessBallThrowAnim(u32 battler); static void PlayerHandlePause(u32 battler); -static void PlayerHandleMoveAnimation(u32 battler); -static void PlayerHandlePrintString(u32 battler); -static void PlayerHandlePrintSelectionString(u32 battler); static void PlayerHandleChooseAction(u32 battler); static void PlayerHandleYesNoBox(u32 battler); static void PlayerHandleChooseItem(u32 battler); static void PlayerHandleChoosePokemon(u32 battler); static void PlayerHandleCmd23(u32 battler); -static void PlayerHandleHealthBarUpdate(u32 battler); static void PlayerHandleStatusXor(u32 battler); static void PlayerHandleDMA3Transfer(u32 battler); static void PlayerHandlePlayBGM(u32 battler); @@ -76,7 +71,6 @@ static void PlayerHandleOneReturnValue_Duplicate(u32 battler); static void PlayerHandleIntroTrainerBallThrow(u32 battler); static void PlayerHandleDrawPartyStatusSummary(u32 battler); static void PlayerHandleEndBounceEffect(u32 battler); -static void PlayerHandleBattleAnimation(u32 battler); static void PlayerHandleLinkStandbyMsg(u32 battler); static void PlayerHandleResetActionMoveSelection(u32 battler); static void PlayerHandleEndLinkBattle(u32 battler); @@ -89,7 +83,6 @@ static void MoveSelectionDisplayMoveType(u32 battler); static void MoveSelectionDisplayMoveNames(u32 battler); static void TryMoveSelectionDisplayMoveDescription(u32 battler); static void MoveSelectionDisplayMoveDescription(u32 battler); -static void SwitchIn_HandleSoundAndEnd(u32 battler); static void WaitForMonSelection(u32 battler); static void CompleteWhenChoseItem(u32 battler); static void Task_LaunchLvlUpAnim(u8); @@ -100,7 +93,7 @@ static void Task_UpdateLvlInHealthbox(u8); static void PrintLinkStandbyMsg(void); static void ReloadMoveNames(u32 battler); -static u32 CheckTypeEffectiveness(u32 targetId, u32 battler); +static u32 CheckTypeEffectiveness(u32 battlerAtk, u32 battlerDef); static u32 CheckTargetTypeEffectiveness(u32 battler); static void MoveSelectionDisplayMoveEffectiveness(u32 foeEffectiveness, u32 battler); @@ -111,7 +104,7 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, [CONTROLLER_LOADMONSPRITE] = PlayerHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = PlayerHandleSwitchInAnim, + [CONTROLLER_SWITCHINANIM] = BtlController_HandleSwitchInAnim, [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = PlayerHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = PlayerHandleTrainerSlide, @@ -121,16 +114,16 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_SUCCESSBALLTHROWANIM] = PlayerHandleSuccessBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = PlayerHandleBallThrowAnim, [CONTROLLER_PAUSE] = PlayerHandlePause, - [CONTROLLER_MOVEANIMATION] = PlayerHandleMoveAnimation, - [CONTROLLER_PRINTSTRING] = PlayerHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = PlayerHandlePrintSelectionString, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_HandlePrintStringPlayerOnly, [CONTROLLER_CHOOSEACTION] = PlayerHandleChooseAction, [CONTROLLER_YESNOBOX] = PlayerHandleYesNoBox, [CONTROLLER_CHOOSEMOVE] = PlayerHandleChooseMove, [CONTROLLER_OPENBAG] = PlayerHandleChooseItem, [CONTROLLER_CHOOSEPOKEMON] = PlayerHandleChoosePokemon, [CONTROLLER_23] = PlayerHandleCmd23, - [CONTROLLER_HEALTHBARUPDATE] = PlayerHandleHealthBarUpdate, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, @@ -154,7 +147,7 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, [CONTROLLER_ENDBOUNCE] = PlayerHandleEndBounceEffect, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, - [CONTROLLER_BATTLEANIMATION] = PlayerHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = PlayerHandleLinkStandbyMsg, [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerHandleResetActionMoveSelection, [CONTROLLER_ENDLINKBATTLE] = PlayerHandleEndLinkBattle, @@ -170,7 +163,7 @@ void SetControllerToPlayer(u32 battler) gPlayerDpadHoldFrames = 0; } -static void PlayerBufferExecCompleted(u32 battler) +void PlayerBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = PlayerBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -193,58 +186,48 @@ static void PlayerBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerBufferCommands)) sPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } static void CompleteOnBattlerSpritePosX_0(u32 battler) { if (gSprites[gBattlerSpriteIds[battler]].x2 == 0) - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static u16 GetPrevBall(u16 ballId) { - u16 ballPrev; - s32 i, j; - CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); - for (i = 0; i < gBagPockets[BALLS_POCKET].capacity; i++) + s32 i; + s32 index = ItemIdToBallId(ballId); + u32 newBall = 0; + for (i = 0; i < POKEBALL_COUNT; i++) { - if (ballId == gBagPockets[BALLS_POCKET].itemSlots[i].itemId) - { - if (i <= 0) - { - for (j = gBagPockets[BALLS_POCKET].capacity - 1; j >= 0; j--) - { - ballPrev = gBagPockets[BALLS_POCKET].itemSlots[j].itemId; - if (ballPrev != ITEM_NONE) - return ballPrev; - } - } - i--; - break; - } + index--; + if (index == -1) + index = POKEBALL_COUNT - 1; + newBall = gBallItemIds[index]; + if (CheckBagHasItem(newBall, 1)) + return newBall; } - return gBagPockets[BALLS_POCKET].itemSlots[i].itemId; + return ballId; } static u32 GetNextBall(u32 ballId) { - u32 ballNext = ITEM_NONE; s32 i; - CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); - for (i = 1; i < gBagPockets[BALLS_POCKET].capacity; i++) + s32 index = ItemIdToBallId(ballId); + u32 newBall = 0; + for (i = 0; i < POKEBALL_COUNT; i++) { - if (ballId == gBagPockets[BALLS_POCKET].itemSlots[i-1].itemId) - { - ballNext = gBagPockets[BALLS_POCKET].itemSlots[i].itemId; - break; - } + index++; + if (index == POKEBALL_COUNT) + index = 0; + newBall = gBallItemIds[index]; + if (CheckBagHasItem(newBall, 1)) + return newBall; } - if (ballNext == ITEM_NONE) - return gBagPockets[BALLS_POCKET].itemSlots[0].itemId; // Zeroth slot - else - return ballNext; + return ballId; } static void HandleInputChooseAction(u32 battler) @@ -311,7 +294,7 @@ static void HandleInputChooseAction(u32 battler) ArrowsChangeColorLastBallCycle(FALSE); TryHideLastUsedBall(); BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_THROW_BALL, 0); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } return; } @@ -337,7 +320,7 @@ static void HandleInputChooseAction(u32 battler) BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_RUN, 0); break; } - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } else if (JOY_NEW(DPAD_LEFT)) { @@ -393,7 +376,7 @@ static void HandleInputChooseAction(u32 battler) } PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_CANCEL_PARTNER, 0); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } else if (B_QUICK_MOVE_CURSOR_TO_RUN) { @@ -413,7 +396,7 @@ static void HandleInputChooseAction(u32 battler) else if (DEBUG_BATTLE_MENU == TRUE && JOY_NEW(SELECT_BUTTON)) { BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_DEBUG, 0); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } else if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == FALSE && JOY_NEW(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall()) @@ -421,7 +404,7 @@ static void HandleInputChooseAction(u32 battler) PlaySE(SE_SELECT); TryHideLastUsedBall(); BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_THROW_BALL, 0); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -449,19 +432,26 @@ void HandleInputChooseTarget(u32 battler) PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; if (gBattleStruct->gimmick.playerSelect) - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); else - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); TryHideLastUsedBall(); HideGimmickTriggerSprite(); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { PlaySE(SE_SELECT); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget; gBattlerControllerFuncs[battler] = HandleInputChooseMove; + if (gBattleStruct->gimmick.playerSelect == 1 && gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE) + { + gBattleStruct->gimmick.playerSelect = 0; + gBattleStruct->zmove.viewing = TRUE; + ReloadMoveNames(battler); + } + TryToAddMoveInfoWindow(); DoBounceEffect(battler, BOUNCE_HEALTHBOX, 7, 1); DoBounceEffect(battler, BOUNCE_MON, 7, 1); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); @@ -507,7 +497,7 @@ void HandleInputChooseTarget(u32 battler) break; } if (B_SHOW_EFFECTIVENESS) - MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler); + MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(battler, GetBattlerPosition(gMultiUsePlayerCursor)), battler); if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move) @@ -558,7 +548,7 @@ void HandleInputChooseTarget(u32 battler) break; } if (B_SHOW_EFFECTIVENESS) - MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler); + MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(battler, GetBattlerPosition(gMultiUsePlayerCursor)), battler); if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move) @@ -609,11 +599,11 @@ void HandleInputShowEntireFieldTargets(u32 battler) PlaySE(SE_SELECT); HideAllTargets(); if (gBattleStruct->gimmick.playerSelect) - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); else - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); HideGimmickTriggerSprite(); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { @@ -637,12 +627,12 @@ void HandleInputShowTargets(u32 battler) PlaySE(SE_SELECT); HideShownTargets(battler); if (gBattleStruct->gimmick.playerSelect) - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); else - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); HideGimmickTriggerSprite(); TryHideLastUsedBall(); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { @@ -741,12 +731,12 @@ void HandleInputChooseMove(u32 battler) case 0: default: if (gBattleStruct->gimmick.playerSelect) - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8)); else - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8)); HideGimmickTriggerSprite(); TryHideLastUsedBall(); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); break; case 1: gBattlerControllerFuncs[battler] = HandleInputChooseTarget; @@ -758,7 +748,7 @@ void HandleInputChooseMove(u32 battler) else gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); if (B_SHOW_EFFECTIVENESS) - MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(GetBattlerPosition(gMultiUsePlayerCursor), battler), battler); + MoveSelectionDisplayMoveEffectiveness(CheckTypeEffectiveness(battler, GetBattlerPosition(gMultiUsePlayerCursor)), battler); gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_ShowAsMoveTarget; break; @@ -781,9 +771,9 @@ void HandleInputChooseMove(u32 battler) } else { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, 0xFFFF); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, 0xFFFF); HideGimmickTriggerSprite(); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); TryToHideMoveInfoWindow(); } } @@ -897,7 +887,10 @@ void HandleInputChooseMove(u32 battler) } else if (JOY_NEW(START_BUTTON)) { - if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE && !HasTrainerUsedGimmick(battler, gBattleStruct->gimmick.usableGimmick[battler])) + if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE + && !HasTrainerUsedGimmick(battler, gBattleStruct->gimmick.usableGimmick[battler]) + && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE + && GetUsableZMove(battler, moveInfo->moves[gMoveSelectionCursor[battler]]) == MOVE_NONE)) { gBattleStruct->gimmick.playerSelect ^= 1; ReloadMoveNames(battler); @@ -1033,7 +1026,7 @@ void HandleMoveSwitching(u32 battler) gBattleMons[battler].pp[i] = moveInfo->currentPp[i]; } - if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + if (!(gBattleMons[battler].volatiles.transformed)) { for (i = 0; i < MAX_MON_MOVES; i++) { @@ -1226,15 +1219,6 @@ void SetBattleEndCallbacks(u32 battler) } } -static void Intro_DelayAndEnd(u32 battler) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; - PlayerBufferExecCompleted(battler); - } -} - static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) { bool8 healthboxAnimDone = FALSE; @@ -1261,8 +1245,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); HandleLowHpMusicChange(GetBattlerMon(battler), battler); @@ -1270,7 +1253,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) HandleLowHpMusicChange(GetBattlerMon(BATTLE_PARTNER(battler)), BATTLE_PARTNER(battler)); gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; - gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; + gBattlerControllerFuncs[battler] = BtlController_Intro_DelayAndEnd; } } @@ -1360,48 +1343,6 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) } } -static void SwitchIn_CleanShinyAnimShowSubstitute(u32 battler) -{ - if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy - && gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) - { - CopyBattleSpriteInvisibility(battler); - - // Reset shiny anim (even if it didn't occur) - gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); - - // Check if Substitute should be shown - if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) - InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); - - gBattlerControllerFuncs[battler] = SwitchIn_HandleSoundAndEnd; - } -} - -static void SwitchIn_HandleSoundAndEnd(u32 battler) -{ - if (SwitchIn_HandleSoundAndEndUtil(battler)) - { - HandleLowHpMusicChange(GetBattlerMon(battler), battler); - PlayerBufferExecCompleted(battler); - } -} - -static void SwitchIn_TryShinyAnimShowHealthbox(u32 battler) -{ - if (SwitchIn_TryShinyAnimUtil(battler)) - { - UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], GetBattlerMon(battler), HEALTHBOX_ALL); - StartHealthboxSlideIn(battler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); - gBattlerControllerFuncs[battler] = SwitchIn_CleanShinyAnimShowSubstitute; - } -} - void Task_PlayerController_RestoreBgmAfterCry(u8 taskId) { if (!IsCryPlayingOrClearCrySongs()) @@ -1616,10 +1557,10 @@ static void WaitForMonSelection(u32 battler) else BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, PARTY_SIZE, NULL); - if ((gBattleResources->bufferA[battler][1] & 0xF) == 1) + if (gBattleResources->bufferA[battler][1] == PARTY_ACTION_SEND_OUT) PrintLinkStandbyMsg(); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -1639,7 +1580,7 @@ static void CompleteWhenChoseItem(u32 battler) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gSpecialVar_ItemId); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -1665,17 +1606,17 @@ static void PlayerHandleYesNoInput(u32 battler) PlaySE(SE_SELECT); if (gMultiUsePlayerCursor != 0) - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 0xE, 0); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_UNK_14, 0); else - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 0xD, 0); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_NOTHING_FAINTED, 0); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } if (JOY_NEW(B_BUTTON)) { HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); PlaySE(SE_SELECT); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -1729,7 +1670,7 @@ static void MoveSelectionDisplayMoveType(u32 battler) struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); u32 move = moveInfo->moves[gMoveSelectionCursor[battler]]; - u32 type = GetMoveType(move); + enum Type type = GetMoveType(move); enum BattleMoveEffects effect = GetMoveEffect(move); if (effect == EFFECT_TERA_BLAST) @@ -1742,7 +1683,7 @@ static void MoveSelectionDisplayMoveType(u32 battler) if (speciesId == SPECIES_OGERPON_WELLSPRING || speciesId == SPECIES_OGERPON_WELLSPRING_TERA || speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA || speciesId == SPECIES_OGERPON_CORNERSTONE || speciesId == SPECIES_OGERPON_CORNERSTONE_TERA) - type = gSpeciesInfo[speciesId].types[1]; + type = GetSpeciesType(speciesId, 1); } else if (GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS && (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))) @@ -1781,6 +1722,14 @@ static void MoveSelectionDisplayMoveDescription(u32 battler) u16 move = moveInfo->moves[gMoveSelectionCursor[battler]]; u16 pwr = GetMovePower(move); u16 acc = GetMoveAccuracy(move); + enum DamageCategory cat = GetBattleMoveCategory(move); + + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX)) + { + pwr = GetMaxMovePower(move); + move = GetMaxMove(battler, move); + acc = 0; + } u8 pwr_num[3], acc_num[3]; u8 cat_desc[7] = _("CAT: "); @@ -1814,7 +1763,7 @@ static void MoveSelectionDisplayMoveDescription(u32 battler) if (gCategoryIconSpriteId == 0xFF) gCategoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 38, 64, 1); - StartSpriteAnim(&gSprites[gCategoryIconSpriteId], GetBattleMoveCategory(move)); + StartSpriteAnim(&gSprites[gCategoryIconSpriteId], cat); CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_FULL); } @@ -1886,13 +1835,6 @@ static void PlayerHandleLoadMonSprite(u32 battler) gBattlerControllerFuncs[battler] = CompleteOnBattlerSpritePosX_0; } -static void PlayerHandleSwitchInAnim(u32 battler) -{ - gActionSelectionCursor[battler] = 0; - gMoveSelectionCursor[battler] = 0; - BtlController_HandleSwitchInAnim(battler, TRUE, SwitchIn_TryShinyAnimShowHealthbox); -} - u32 LinkPlayerGetTrainerPicId(u32 multiplayerId) { u32 trainerPicId; @@ -1930,30 +1872,40 @@ static void PlayerHandleDrawTrainerPic(u32 battler) bool32 isFrontPic; s16 xPos, yPos; u32 trainerPicId; - - trainerPicId = PlayerGetTrainerBackPicId(); - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + if (IsMultibattleTest()) { - if ((GetBattlerPosition(battler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right. - xPos = 90; - else // First mon, on the left. + trainerPicId = TRAINER_BACK_PIC_BRENDAN; + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) xPos = 32; - - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId < TRAINER_PARTNER(PARTNER_NONE)) + else + xPos = 80; + yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + } + else + { + trainerPicId = PlayerGetTrainerBackPicId(); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - xPos = 90; - yPos = 80; + if ((GetBattlerPosition(battler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right. + xPos = 90; + else // First mon, on the left. + xPos = 32; + + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId < TRAINER_PARTNER(PARTNER_NONE)) + { + xPos = 90; + yPos = 80; + } + else + { + yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + } } else { + xPos = 80; yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; } - - } - else - { - xPos = 80; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; } // Use front pic table for any tag battles unless your partner is Steven or a custom partner. @@ -1984,7 +1936,7 @@ static void PlayerHandleTrainerSlideBack(u32 battler) static void PlayerHandlePaletteFade(u32 battler) { BeginNormalPaletteFade(PALETTES_ALL, 2, 0, 16, RGB_BLACK); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandleSuccessBallThrowAnim(u32 battler) @@ -2004,25 +1956,7 @@ static void PlayerHandlePause(u32 battler) while (timer != 0) timer--; - PlayerBufferExecCompleted(battler); -} - -static void PlayerHandleMoveAnimation(u32 battler) -{ - BtlController_HandleMoveAnimation(battler, TRUE); -} - -static void PlayerHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, TRUE, TRUE); -} - -static void PlayerHandlePrintSelectionString(u32 battler) -{ - if (IsOnPlayerSide(battler)) - PlayerHandlePrintString(battler); - else - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void HandleChooseActionAfterDma3(u32 battler) @@ -2071,7 +2005,7 @@ static void PlayerHandleChooseAction(u32 battler) if (B_SHOW_PARTNER_TARGET && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && IsBattlerAlive(B_POSITION_PLAYER_RIGHT)) { StringCopy(gStringVar1, COMPOUND_STRING("Partner will use:\n")); - u32 move = gBattleMons[B_POSITION_PLAYER_RIGHT].moves[gBattleStruct->chosenMovePositions[B_POSITION_PLAYER_RIGHT]]; + u32 move = GetChosenMoveFromPosition(B_POSITION_PLAYER_RIGHT); StringAppend(gStringVar1, GetMoveName(move)); u32 moveTarget = GetBattlerMoveTargetType(B_POSITION_PLAYER_RIGHT, move); if (moveTarget == MOVE_TARGET_SELECTED) @@ -2083,7 +2017,7 @@ static void PlayerHandleChooseAction(u32 battler) else if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_LEFT) StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-")); else if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_RIGHT) - StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-")); + StringAppend(gStringVar1, COMPOUND_STRING(" -{DOWN_ARROW}")); } else if (moveTarget == MOVE_TARGET_BOTH) { @@ -2117,7 +2051,7 @@ static void PlayerHandleYesNoBox(u32 battler) } else { - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -2138,8 +2072,8 @@ static void PlayerChooseMoveInBattlePalace(u32 battler) if (--gBattleStruct->arenaMindPoints[battler] == 0) { gBattlePalaceMoveSelectionRngValue = gRngValue; - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, ChooseMoveAndTargetInBattlePalace(battler)); - PlayerBufferExecCompleted(battler); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, ChooseMoveAndTargetInBattlePalace(battler)); + BtlController_Complete(battler); } } @@ -2163,6 +2097,8 @@ void PlayerHandleChooseMove(u32 battler) if (!IsGimmickTriggerSpriteActive()) gBattleStruct->gimmick.triggerSpriteId = 0xFF; + else if (!IsGimmickTriggerSpriteMatchingBattler(battler)) + DestroyGimmickTriggerSprite(); if (!(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE && !gBattleStruct->zmove.viable)) CreateGimmickTriggerSprite(battler); @@ -2203,18 +2139,18 @@ static void PlayerHandleChoosePokemon(u32 battler) for (i = 0; i < ARRAY_COUNT(gBattlePartyCurrentOrder); i++) gBattlePartyCurrentOrder[i] = gBattleResources->bufferA[battler][4 + i]; - if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH - && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_CHOOSE_FAINTED_MON - && (gBattleResources->bufferA[battler][1] & 0xF) != PARTY_ACTION_SEND_MON_TO_BOX) + if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleResources->bufferA[battler][1] != PARTY_ACTION_CANT_SWITCH + && gBattleResources->bufferA[battler][1] != PARTY_ACTION_CHOOSE_FAINTED_MON + && gBattleResources->bufferA[battler][1] != PARTY_ACTION_SEND_MON_TO_BOX) { BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, gBattlerPartyIndexes[battler] + 1, gBattlePartyCurrentOrder); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } else { gBattleControllerData[battler] = CreateTask(TaskDummy, 0xFF); - gTasks[gBattleControllerData[battler]].data[0] = gBattleResources->bufferA[battler][1] & 0xF; - *(&gBattleStruct->battlerPreventingSwitchout) = gBattleResources->bufferA[battler][1] >> 4; + gTasks[gBattleControllerData[battler]].data[0] = gBattleResources->bufferA[battler][1]; + *(&gBattleStruct->battlerPreventingSwitchout) = gBattleResources->bufferA[battler][8]; *(&gBattleStruct->prevSelectedPartySlot) = gBattleResources->bufferA[battler][2]; *(&gBattleStruct->abilityPreventingSwitchout) = (gBattleResources->bufferA[battler][3] & 0xFF) | (gBattleResources->bufferA[battler][7] << 8); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); @@ -2227,12 +2163,7 @@ static void PlayerHandleCmd23(u32 battler) { BattleStopLowHpSound(); BeginNormalPaletteFade(PALETTES_ALL, 2, 0, 16, RGB_BLACK); - PlayerBufferExecCompleted(battler); -} - -static void PlayerHandleHealthBarUpdate(u32 battler) -{ - BtlController_HandleHealthBarUpdate(battler, TRUE); + BtlController_Complete(battler); } void PlayerHandleExpUpdate(u32 battler) @@ -2242,7 +2173,7 @@ void PlayerHandleExpUpdate(u32 battler) if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL) { - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } else { @@ -2268,7 +2199,7 @@ static void PlayerHandleStatusXor(u32 battler) u32 val = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS) ^ gBattleResources->bufferA[battler][1]; SetMonData(GetBattlerMon(battler), MON_DATA_STATUS, &val); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandleDMA3Transfer(u32 battler) @@ -2295,37 +2226,37 @@ static void PlayerHandleDMA3Transfer(u32 battler) dst += 0x1000; size -= 0x1000; } - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandlePlayBGM(u32 battler) { PlayBGM(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandleTwoReturnValues(u32 battler) { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 0, 0); - PlayerBufferExecCompleted(battler); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_MOVE, 0); + BtlController_Complete(battler); } static void PlayerHandleChosenMonReturnValue(u32 battler) { BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, 0, NULL); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandleOneReturnValue(u32 battler) { BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, 0); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandleOneReturnValue_Duplicate(u32 battler) { BtlController_EmitOneReturnValue_Duplicate(battler, B_COMM_TO_ENGINE, 0); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandleIntroTrainerBallThrow(u32 battler) @@ -2344,12 +2275,7 @@ static void PlayerHandleEndBounceEffect(u32 battler) { EndBounceEffect(battler, BOUNCE_HEALTHBOX); EndBounceEffect(battler, BOUNCE_MON); - PlayerBufferExecCompleted(battler); -} - -static void PlayerHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, FALSE, TRUE); + BtlController_Complete(battler); } static void PlayerHandleLinkStandbyMsg(u32 battler) @@ -2368,7 +2294,7 @@ static void PlayerHandleLinkStandbyMsg(u32 battler) PrintLinkStandbyMsg(); break; } - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandleResetActionMoveSelection(u32 battler) @@ -2386,7 +2312,7 @@ static void PlayerHandleResetActionMoveSelection(u32 battler) gMoveSelectionCursor[battler] = 0; break; } - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerHandleEndLinkBattle(u32 battler) @@ -2396,7 +2322,7 @@ static void PlayerHandleEndLinkBattle(u32 battler) gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[battler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } @@ -2404,7 +2330,7 @@ static void Controller_WaitForDebug(u32 battler) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { - PlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -2436,15 +2362,23 @@ static bool32 ShouldShowTypeEffectiveness(u32 targetId) return TRUE; } -static u32 CheckTypeEffectiveness(u32 targetId, u32 battler) +static u32 CheckTypeEffectiveness(u32 battlerAtk, u32 battlerDef) { - struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); - struct Pokemon *mon = GetBattlerMon(battler); - u32 move = moveInfo->moves[gMoveSelectionCursor[battler]]; - u32 moveType = CheckDynamicMoveType(mon, move, battler, MON_IN_BATTLE); - uq4_12_t modifier = CalcTypeEffectivenessMultiplier(move, moveType, battler, targetId, GetBattlerAbility(targetId), FALSE); + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battlerAtk][4]); + struct DamageContext ctx = {0}; + ctx.battlerAtk = battlerAtk; + ctx.battlerDef = battlerDef; + ctx.move = moveInfo->moves[gMoveSelectionCursor[battlerAtk]]; + ctx.moveType = CheckDynamicMoveType(GetBattlerMon(battlerAtk), ctx.move, battlerAtk, MON_IN_BATTLE); + ctx.updateFlags = FALSE; + ctx.abilityAtk = GetBattlerAbility(battlerAtk); + ctx.abilityDef = GetBattlerAbility(battlerDef); + ctx.holdEffectAtk = GetBattlerHoldEffect(battlerAtk); + ctx.holdEffectDef = GetBattlerHoldEffect(battlerDef); + + uq4_12_t modifier = CalcTypeEffectivenessMultiplier(&ctx); - if (!ShouldShowTypeEffectiveness(targetId)) + if (!ShouldShowTypeEffectiveness(battlerDef)) return EFFECTIVENESS_CANNOT_VIEW; if (modifier == UQ_4_12(0.0)) @@ -2459,12 +2393,12 @@ static u32 CheckTypeEffectiveness(u32 targetId, u32 battler) static u32 CheckTargetTypeEffectiveness(u32 battler) { u32 battlerFoe = BATTLE_OPPOSITE(GetBattlerPosition(battler)); - u32 foeEffectiveness = CheckTypeEffectiveness(battlerFoe, battler); + u32 foeEffectiveness = CheckTypeEffectiveness(battler, battlerFoe); if (IsDoubleBattle()) { u32 partnerFoe = BATTLE_PARTNER(battlerFoe); - u32 partnerFoeEffectiveness = CheckTypeEffectiveness(partnerFoe, battler); + u32 partnerFoeEffectiveness = CheckTypeEffectiveness(battler, partnerFoe); if (!IsBattlerAlive(battlerFoe)) return partnerFoeEffectiveness; if (IsBattlerAlive(battlerFoe) && IsBattlerAlive(partnerFoe) diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 9929f421ccb3..37af6497df2e 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -31,25 +31,19 @@ #include "constants/songs.h" #include "constants/party_menu.h" #include "constants/trainers.h" +#include "test/battle.h" +#include "test/test_runner_battle.h" -static void PlayerPartnerHandleLoadMonSprite(u32 battler); -static void PlayerPartnerHandleSwitchInAnim(u32 battler); static void PlayerPartnerHandleDrawTrainerPic(u32 battler); static void PlayerPartnerHandleTrainerSlideBack(u32 battler); -static void PlayerPartnerHandleMoveAnimation(u32 battler); -static void PlayerPartnerHandlePrintString(u32 battler); static void PlayerPartnerHandleChooseAction(u32 battler); static void PlayerPartnerHandleChooseMove(u32 battler); static void PlayerPartnerHandleChoosePokemon(u32 battler); -static void PlayerPartnerHandleHealthBarUpdate(u32 battler); static void PlayerPartnerHandleIntroTrainerBallThrow(u32 battler); static void PlayerPartnerHandleDrawPartyStatusSummary(u32 battler); -static void PlayerPartnerHandleBattleAnimation(u32 battler); static void PlayerPartnerHandleEndLinkBattle(u32 battler); static void PlayerPartnerBufferRunCommand(u32 battler); -static void PlayerPartnerBufferExecCompleted(u32 battler); -static void SwitchIn_WaitAndEnd(u32 battler); static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { @@ -57,8 +51,8 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 bat [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, - [CONTROLLER_LOADMONSPRITE] = PlayerPartnerHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = PlayerPartnerHandleSwitchInAnim, + [CONTROLLER_LOADMONSPRITE] = BtlController_HandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = BtlController_HandleSwitchInAnim, [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = PlayerPartnerHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, @@ -68,8 +62,8 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 bat [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, [CONTROLLER_PAUSE] = BtlController_Empty, - [CONTROLLER_MOVEANIMATION] = PlayerPartnerHandleMoveAnimation, - [CONTROLLER_PRINTSTRING] = PlayerPartnerHandlePrintString, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = PlayerPartnerHandleChooseAction, [CONTROLLER_YESNOBOX] = BtlController_Empty, @@ -77,7 +71,7 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 bat [CONTROLLER_OPENBAG] = BtlController_Empty, [CONTROLLER_CHOOSEPOKEMON] = PlayerPartnerHandleChoosePokemon, [CONTROLLER_23] = BtlController_Empty, - [CONTROLLER_HEALTHBARUPDATE] = PlayerPartnerHandleHealthBarUpdate, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, // Partner's player gets experience the same way as the player. [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, @@ -101,7 +95,7 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 bat [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, [CONTROLLER_ENDBOUNCE] = BtlController_Empty, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, - [CONTROLLER_BATTLEANIMATION] = PlayerPartnerHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = PlayerPartnerHandleEndLinkBattle, @@ -122,16 +116,7 @@ static void PlayerPartnerBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands)) sPlayerPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - PlayerPartnerBufferExecCompleted(battler); - } -} - -static void Intro_DelayAndEnd(u32 battler) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; - BattleControllerComplete(battler); + BtlController_Complete(battler); } } @@ -159,7 +144,7 @@ static void Intro_WaitForHealthbox(u32 battler) if (finished) { gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; - gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; + gBattlerControllerFuncs[battler] = BtlController_Intro_DelayAndEnd; } } @@ -194,37 +179,7 @@ void Controller_PlayerPartnerShowIntroHealthbox(u32 battler) } } -static void WaitForMonAnimAfterLoad(u32 battler) -{ - if (gSprites[gBattlerSpriteIds[battler]].animEnded && gSprites[gBattlerSpriteIds[battler]].x2 == 0) - PlayerPartnerBufferExecCompleted(battler); -} - -static void SwitchIn_ShowSubstitute(u32 battler) -{ - if (SwitchIn_ShowSubstituteUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_WaitAndEnd; -} - -static void SwitchIn_WaitAndEnd(u32 battler) -{ - if (SwitchIn_WaitAndEndUtil(battler)) - PlayerPartnerBufferExecCompleted(battler); -} - -static void SwitchIn_ShowHealthbox(u32 battler) -{ - if (SwitchIn_ShowHealthboxUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; -} - -static void SwitchIn_TryShinyAnim(u32 battler) -{ - if (SwitchIn_TryShinyAnimUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; -} - -static void PlayerPartnerBufferExecCompleted(u32 battler) +void PlayerPartnerBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = PlayerPartnerBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -240,16 +195,6 @@ static void PlayerPartnerBufferExecCompleted(u32 battler) } } -static void PlayerPartnerHandleLoadMonSprite(u32 battler) -{ - BtlController_HandleLoadMonSprite(battler, WaitForMonAnimAfterLoad); -} - -static void PlayerPartnerHandleSwitchInAnim(u32 battler) -{ - BtlController_HandleSwitchInAnim(battler, TRUE, SwitchIn_TryShinyAnim); -} - // some explanation here // in emerald it's possible to have a tag battle in the battle frontier facilities with AI // which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) that use the back pic as well as animate it @@ -261,9 +206,15 @@ static void PlayerPartnerHandleDrawTrainerPic(u32 battler) enum DifficultyLevel difficulty = GetBattlePartnerDifficultyLevel(gPartnerTrainerId); - if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) + if (IsMultibattleTest()) { - trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic; + trainerPicId = TRAINER_BACK_PIC_STEVEN; + xPos = 90; + yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + } + else if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) + { + trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic; xPos = 90; yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; } @@ -294,20 +245,10 @@ static void PlayerPartnerHandleTrainerSlideBack(u32 battler) BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void PlayerPartnerHandleMoveAnimation(u32 battler) -{ - BtlController_HandleMoveAnimation(battler, FALSE); -} - -static void PlayerPartnerHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, FALSE, FALSE); -} - static void PlayerPartnerHandleChooseAction(u32 battler) { AI_TrySwitchOrUseItem(battler); - PlayerPartnerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerPartnerHandleChooseMove(u32 battler) @@ -328,25 +269,26 @@ static void PlayerPartnerHandleChooseMove(u32 battler) gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } // If partner can and should use a gimmick (considering trainer data), do it - if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE - && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE - && !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveIndex]))) + enum Gimmick usableGimmick = gBattleStruct->gimmick.usableGimmick[battler]; + if (usableGimmick != GIMMICK_NONE && IsAIUsingGimmick(battler) && !HasTrainerUsedGimmick(battler, usableGimmick)) { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (RET_GIMMICK) | (gBattlerTarget << 8)); + gBattleStruct->gimmick.toActivate |= 1u << battler; + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (RET_GIMMICK) | (gBattlerTarget << 8)); } else { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, (chosenMoveIndex) | (gBattlerTarget << 8)); + SetAIUsingGimmick(battler, NO_GIMMICK); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, (chosenMoveIndex) | (gBattlerTarget << 8)); } - PlayerPartnerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void PlayerPartnerHandleChoosePokemon(u32 battler) { s32 chosenMonId; // Choosing Revival Blessing target - if ((gBattleResources->bufferA[battler][1] & 0xF) == PARTY_ACTION_CHOOSE_FAINTED_MON) + if (gBattleResources->bufferA[battler][1] == PARTY_ACTION_CHOOSE_FAINTED_MON) { chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(battler); } @@ -354,7 +296,6 @@ static void PlayerPartnerHandleChoosePokemon(u32 battler) else if (gBattleStruct->monToSwitchIntoId[battler] >= PARTY_SIZE || !IsValidForBattle(&gPlayerParty[gBattleStruct->monToSwitchIntoId[battler]])) { chosenMonId = GetMostSuitableMonToSwitchInto(battler, SWITCH_AFTER_KO); - if (chosenMonId == PARTY_SIZE || !IsValidForBattle(&gPlayerParty[chosenMonId])) // just switch to the next mon { s32 firstId = (IsAiVsAiBattle()) ? 0 : (PARTY_SIZE / 2); @@ -379,13 +320,10 @@ static void PlayerPartnerHandleChoosePokemon(u32 battler) gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; gBattleStruct->monToSwitchIntoId[battler] = chosenMonId; } + if (TESTING) + TestRunner_Battle_CheckSwitch(battler, chosenMonId); BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, chosenMonId, NULL); - PlayerPartnerBufferExecCompleted(battler); -} - -static void PlayerPartnerHandleHealthBarUpdate(u32 battler) -{ - BtlController_HandleHealthBarUpdate(battler, FALSE); + BtlController_Complete(battler); } static void PlayerPartnerHandleIntroTrainerBallThrow(u32 battler) @@ -394,9 +332,9 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(u32 battler) enum DifficultyLevel difficulty = GetBattlePartnerDifficultyLevel(gPartnerTrainerId); if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) - trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic].palette.data; + trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic].palette.data; else if (IsAiVsAiBattle()) - trainerPal = gTrainerSprites[GetTrainerPicFromId(gPartnerTrainerId)].palette.data; + trainerPal = gTrainerSprites[GetTrainerBackPicFromId(gPartnerTrainerId)].palette.data; else trainerPal = gTrainerSprites[GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)].palette.data; // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal. @@ -408,16 +346,11 @@ static void PlayerPartnerHandleDrawPartyStatusSummary(u32 battler) BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, TRUE); } -static void PlayerPartnerHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, FALSE, FALSE); -} - static void PlayerPartnerHandleEndLinkBattle(u32 battler) { gBattleOutcome = gBattleResources->bufferA[battler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - PlayerPartnerBufferExecCompleted(battler); + BtlController_Complete(battler); gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 944cf6e0724c..954fdc4bc30c 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -31,28 +31,22 @@ #include "constants/battle_anim.h" #include "constants/songs.h" #include "constants/trainers.h" +#include "test/battle.h" +#include "test/test_runner_battle.h" -static void RecordedOpponentHandleLoadMonSprite(u32 battler); -static void RecordedOpponentHandleSwitchInAnim(u32 battler); static void RecordedOpponentHandleDrawTrainerPic(u32 battler); static void RecordedOpponentHandleTrainerSlideBack(u32 battler); -static void RecordedOpponentHandleMoveAnimation(u32 battler); -static void RecordedOpponentHandlePrintString(u32 battler); static void RecordedOpponentHandleChooseAction(u32 battler); static void RecordedOpponentHandleChooseMove(u32 battler); static void RecordedOpponentHandleChooseItem(u32 battler); static void RecordedOpponentHandleChoosePokemon(u32 battler); -static void RecordedOpponentHandleHealthBarUpdate(u32 battler); static void RecordedOpponentHandleStatusIconUpdate(u32 battler); static void RecordedOpponentHandleStatusAnimation(u32 battler); static void RecordedOpponentHandleIntroTrainerBallThrow(u32 battler); static void RecordedOpponentHandleDrawPartyStatusSummary(u32 battler); -static void RecordedOpponentHandleBattleAnimation(u32 battler); static void RecordedOpponentHandleEndLinkBattle(u32 battler); static void RecordedOpponentBufferRunCommand(u32 battler); -static void RecordedOpponentBufferExecCompleted(u32 battler); -static void SwitchIn_HandleSoundAndEnd(u32 battler); static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { @@ -60,8 +54,8 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, - [CONTROLLER_LOADMONSPRITE] = RecordedOpponentHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = RecordedOpponentHandleSwitchInAnim, + [CONTROLLER_LOADMONSPRITE] = BtlController_HandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = BtlController_HandleSwitchInAnim, [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = RecordedOpponentHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = OpponentHandleTrainerSlide, @@ -71,8 +65,8 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, [CONTROLLER_PAUSE] = BtlController_Empty, - [CONTROLLER_MOVEANIMATION] = RecordedOpponentHandleMoveAnimation, - [CONTROLLER_PRINTSTRING] = RecordedOpponentHandlePrintString, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = RecordedOpponentHandleChooseAction, [CONTROLLER_YESNOBOX] = BtlController_Empty, @@ -80,7 +74,7 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 [CONTROLLER_OPENBAG] = RecordedOpponentHandleChooseItem, [CONTROLLER_CHOOSEPOKEMON] = RecordedOpponentHandleChoosePokemon, [CONTROLLER_23] = BtlController_Empty, - [CONTROLLER_HEALTHBARUPDATE] = RecordedOpponentHandleHealthBarUpdate, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = BtlController_Empty, [CONTROLLER_STATUSICONUPDATE] = RecordedOpponentHandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = RecordedOpponentHandleStatusAnimation, @@ -104,7 +98,7 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(u32 [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, [CONTROLLER_ENDBOUNCE] = BtlController_Empty, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, - [CONTROLLER_BATTLEANIMATION] = RecordedOpponentHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = RecordedOpponentHandleEndLinkBattle, @@ -125,11 +119,11 @@ static void RecordedOpponentBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands)) sRecordedOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - RecordedOpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } } -static void RecordedOpponentBufferExecCompleted(u32 battler) +void RecordedOpponentBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = RecordedOpponentBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -145,15 +139,6 @@ static void RecordedOpponentBufferExecCompleted(u32 battler) } } -static void Intro_DelayAndEnd(u32 battler) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; - RecordedOpponentBufferExecCompleted(battler); - } -} - static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) { bool8 healthboxAnimDone = FALSE; @@ -187,12 +172,11 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; - gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; + gBattlerControllerFuncs[battler] = BtlController_Intro_DelayAndEnd; } } @@ -286,52 +270,29 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) } } -static void TryShinyAnimAfterMonAnim(u32 battler) -{ - if (TryShinyAnimAfterMonAnimUtil(battler)) - RecordedOpponentBufferExecCompleted(battler); -} - -static void SwitchIn_ShowSubstitute(u32 battler) -{ - if (SwitchIn_ShowSubstituteUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_HandleSoundAndEnd; -} - -static void SwitchIn_HandleSoundAndEnd(u32 battler) -{ - if (SwitchIn_HandleSoundAndEndUtil(battler)) - RecordedOpponentBufferExecCompleted(battler); -} - -static void SwitchIn_ShowHealthbox(u32 battler) -{ - if (SwitchIn_ShowHealthboxUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; -} - -static void SwitchIn_TryShinyAnim(u32 battler) -{ - if (SwitchIn_TryShinyAnimUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; -} - -static void RecordedOpponentHandleLoadMonSprite(u32 battler) -{ - BtlController_HandleLoadMonSprite(battler, TryShinyAnimAfterMonAnim); -} - -static void RecordedOpponentHandleSwitchInAnim(u32 battler) -{ - BtlController_HandleSwitchInAnim(battler, FALSE, SwitchIn_TryShinyAnim); -} - static void RecordedOpponentHandleDrawTrainerPic(u32 battler) { s16 xPos; u32 trainerPicId; - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + // Sets Multibattle test opponent sprites to not be Hiker + if (IsMultibattleTest()) + { + if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT) + { + trainerPicId = TRAINER_PIC_LEAF; + if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + xPos = 176; + else + xPos = 200; + } + else + { + trainerPicId = TRAINER_PIC_RED; + xPos = 152; + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon xPos = 152; @@ -371,36 +332,26 @@ static void RecordedOpponentHandleTrainerSlideBack(u32 battler) BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void RecordedOpponentHandleMoveAnimation(u32 battler) -{ - BtlController_HandleMoveAnimation(battler, FALSE); -} - -static void RecordedOpponentHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, FALSE, FALSE); -} - static void RecordedOpponentHandleChooseAction(u32 battler) { BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0); - RecordedOpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } static void RecordedOpponentHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, ChooseMoveAndTargetInBattlePalace(battler)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, ChooseMoveAndTargetInBattlePalace(battler)); } else { u8 moveId = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, battler); u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, battler); - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, moveId | (target << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, moveId | (target << 8)); } - RecordedOpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } static void RecordedOpponentHandleChooseItem(u32 battler) @@ -411,7 +362,7 @@ static void RecordedOpponentHandleChooseItem(u32 battler) gBattleStruct->itemPartyIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, battler); gBattleStruct->itemMoveIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, battler); BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->chosenItem[battler]); - RecordedOpponentBufferExecCompleted(battler); + BtlController_Complete(battler); } static void RecordedOpponentHandleChoosePokemon(u32 battler) @@ -419,12 +370,7 @@ static void RecordedOpponentHandleChoosePokemon(u32 battler) gBattleStruct->monToSwitchIntoId[battler] = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, battler); gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[battler]; // Revival Blessing BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->monToSwitchIntoId[battler], NULL); - RecordedOpponentBufferExecCompleted(battler); -} - -static void RecordedOpponentHandleHealthBarUpdate(u32 battler) -{ - BtlController_HandleHealthBarUpdate(battler, FALSE); + BtlController_Complete(battler); } static void RecordedOpponentHandleStatusIconUpdate(u32 battler) @@ -452,11 +398,6 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(u32 battler) BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_OPPONENT, TRUE); } -static void RecordedOpponentHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, FALSE, FALSE); -} - static void RecordedOpponentHandleEndLinkBattle(u32 battler) { if (gBattleResources->bufferA[battler][1] == B_OUTCOME_DREW) @@ -466,6 +407,6 @@ static void RecordedOpponentHandleEndLinkBattle(u32 battler) FadeOutMapMusic(5); BeginFastPaletteFade(3); - RecordedOpponentBufferExecCompleted(battler); + BtlController_Complete(battler); gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_recorded_partner.c b/src/battle_controller_recorded_partner.c new file mode 100644 index 000000000000..d1353296354c --- /dev/null +++ b/src/battle_controller_recorded_partner.c @@ -0,0 +1,269 @@ +#include "global.h" +#include "battle.h" +#include "battle_ai_main.h" +#include "battle_ai_util.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_message.h" +#include "battle_interface.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "battle_z_move.h" +#include "bg.h" +#include "data.h" +#include "item_use.h" +#include "link.h" +#include "main.h" +#include "m4a.h" +#include "palette.h" +#include "party_menu.h" +#include "pokeball.h" +#include "pokemon.h" +#include "recorded_battle.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" +#include "task.h" +#include "test_runner.h" +#include "text.h" +#include "util.h" +#include "window.h" +#include "constants/battle_anim.h" +#include "constants/battle_partner.h" +#include "constants/songs.h" +#include "constants/party_menu.h" +#include "constants/trainers.h" + +static void RecordedPartnerHandleDrawTrainerPic(u32 battler); +static void RecordedPartnerHandleTrainerSlideBack(u32 battler); +static void RecordedPartnerHandleChooseAction(u32 battler); +static void RecordedPartnerHandleChooseMove(u32 battler); +static void RecordedPartnerHandleChoosePokemon(u32 battler); +static void RecordedPartnerHandleIntroTrainerBallThrow(u32 battler); +static void RecordedPartnerHandleDrawPartyStatusSummary(u32 battler); +static void RecordedPartnerHandleEndLinkBattle(u32 battler); +static void RecordedPartnerBufferRunCommand(u32 battler); + +static void (*const sRecordedPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = +{ + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = BtlController_HandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = BtlController_HandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = RecordedPartnerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, + [CONTROLLER_TRAINERSLIDEBACK] = RecordedPartnerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, + [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_PAUSE] = BtlController_Empty, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, + [CONTROLLER_CHOOSEACTION] = RecordedPartnerHandleChooseAction, + [CONTROLLER_YESNOBOX] = BtlController_Empty, + [CONTROLLER_CHOOSEMOVE] = RecordedPartnerHandleChooseMove, + [CONTROLLER_OPENBAG] = BtlController_Empty, + [CONTROLLER_CHOOSEPOKEMON] = RecordedPartnerHandleChoosePokemon, + [CONTROLLER_23] = BtlController_Empty, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, // Partner's player gets experience the same way as the player. + [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = RecordedPartnerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = RecordedPartnerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, + [CONTROLLER_ENDLINKBATTLE] = RecordedPartnerHandleEndLinkBattle, + [CONTROLLER_DEBUGMENU] = BtlController_Empty, + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop +}; + +void SetControllerToRecordedPartner(u32 battler) +{ + gBattlerControllerEndFuncs[battler] = RecordedPartnerBufferExecCompleted; + gBattlerControllerFuncs[battler] = RecordedPartnerBufferRunCommand; +} + +static void RecordedPartnerBufferRunCommand(u32 battler) +{ + if (IsBattleControllerActiveOnLocal(battler)) + { + if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedPartnerBufferCommands)) + sRecordedPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); + else + BtlController_Complete(battler); + } +} + +static void Intro_WaitForHealthbox(u32 battler) +{ + bool32 finished = FALSE; + + if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI))) + { + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) + finished = TRUE; + } + else + { + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gHealthboxSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + { + finished = TRUE; + } + } + + if (IsCryPlayingOrClearCrySongs()) + finished = FALSE; + + if (finished) + { + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; + gBattlerControllerFuncs[battler] = BtlController_Intro_DelayAndEnd; + } +} + +void Controller_RecordedPartnerShowIntroHealthbox(u32 battler) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive + && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].ballAnimActive + && gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && ++gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay != 1) + { + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; + TryShinyAnimation(battler, GetBattlerMon(battler)); + + if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[BATTLE_PARTNER(battler)], GetBattlerMon(BATTLE_PARTNER(battler)), HEALTHBOX_ALL); + StartHealthboxSlideIn(BATTLE_PARTNER(battler)); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[BATTLE_PARTNER(battler)]); + } + + DestroySprite(&gSprites[gBattleControllerData[battler]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], GetBattlerMon(battler), HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); + + gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; + + gBattlerControllerFuncs[battler] = Intro_WaitForHealthbox; + } +} + +void RecordedPartnerBufferExecCompleted(u32 battler) +{ + gBattlerControllerFuncs[battler] = RecordedPartnerBufferRunCommand; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 playerId = GetMultiplayerId(); + + PrepareBufferDataTransferLink(battler, B_COMM_CONTROLLER_IS_DONE, 4, &playerId); + gBattleResources->bufferA[battler][0] = CONTROLLER_TERMINATOR_NOP; + } + else + { + MarkBattleControllerIdleOnLocal(battler); + } +} + +// some explanation here +// in emerald it's possible to have a tag battle in the battle frontier facilities with AI +// which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) that use the back pic as well as animate it +static void RecordedPartnerHandleDrawTrainerPic(u32 battler) +{ + bool32 isFrontPic; + s16 xPos, yPos; + u32 trainerPicId; + + trainerPicId = TRAINER_BACK_PIC_STEVEN; + xPos = 90; + yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + + isFrontPic = FALSE; + + BtlController_HandleDrawTrainerPic(battler, trainerPicId, isFrontPic, xPos, yPos, -1); +} + +static void RecordedPartnerHandleTrainerSlideBack(u32 battler) +{ + BtlController_HandleTrainerSlideBack(battler, 35, FALSE); +} + +static void RecordedPartnerHandleChooseAction(u32 battler) +{ + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0); + BtlController_Complete(battler); +} + +static void RecordedPartnerHandleChooseMove(u32 battler) +{ + u8 moveIndex = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, battler); + u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, battler); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, moveIndex | (target << 8)); + + BtlController_Complete(battler); +} + +static void RecordedPartnerHandleChoosePokemon(u32 battler) +{ + gBattleStruct->monToSwitchIntoId[battler] = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, battler); + gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[battler]; // Revival Blessing + BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->monToSwitchIntoId[battler], NULL); + BtlController_Complete(battler); +} + +static void RecordedPartnerHandleIntroTrainerBallThrow(u32 battler) +{ + const u16 *trainerPal; + enum DifficultyLevel difficulty = GetBattlePartnerDifficultyLevel(gPartnerTrainerId); + + if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) + trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic].palette.data; + else if (IsAiVsAiBattle()) + trainerPal = gTrainerSprites[GetTrainerPicFromId(gPartnerTrainerId)].palette.data; + else + trainerPal = gTrainerSprites[GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)].palette.data; // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal. + + BtlController_HandleIntroTrainerBallThrow(battler, 0xD6F9, trainerPal, 24, Controller_RecordedPartnerShowIntroHealthbox); +} + +static void RecordedPartnerHandleDrawPartyStatusSummary(u32 battler) +{ + BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, TRUE); +} + +static void RecordedPartnerHandleEndLinkBattle(u32 battler) +{ + gBattleOutcome = gBattleResources->bufferA[battler][1]; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + BtlController_Complete(battler); + gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; +} diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index a3032db1a8e4..51bfa5327b56 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -28,28 +28,21 @@ #include "constants/battle_anim.h" #include "constants/songs.h" #include "constants/trainers.h" +#include "test/battle.h" +#include "test/test_runner_battle.h" -static void RecordedPlayerHandleLoadMonSprite(u32 battler); -static void RecordedPlayerHandleSwitchInAnim(u32 battler); static void RecordedPlayerHandleDrawTrainerPic(u32 battler); static void RecordedPlayerHandleTrainerSlideBack(u32 battler); -static void RecordedPlayerHandleMoveAnimation(u32 battler); -static void RecordedPlayerHandlePrintString(u32 battler); static void RecordedPlayerHandleChooseAction(u32 battler); static void RecordedPlayerHandleChooseMove(u32 battler); static void RecordedPlayerHandleChooseItem(u32 battler); static void RecordedPlayerHandleChoosePokemon(u32 battler); -static void RecordedPlayerHandleHealthBarUpdate(u32 battler); static void RecordedPlayerHandleStatusIconUpdate(u32 battler); static void RecordedPlayerHandleStatusAnimation(u32 battler); static void RecordedPlayerHandleIntroTrainerBallThrow(u32 battler); static void RecordedPlayerHandleDrawPartyStatusSummary(u32 battler); -static void RecordedPlayerHandleBattleAnimation(u32 battler); static void RecordedPlayerHandleEndLinkBattle(u32 battler); - static void RecordedPlayerBufferRunCommand(u32 battler); -static void RecordedPlayerBufferExecCompleted(u32 battler); -static void SwitchIn_WaitAndEnd(u32 battler); static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { @@ -57,8 +50,8 @@ static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 ba [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, - [CONTROLLER_LOADMONSPRITE] = RecordedPlayerHandleLoadMonSprite, - [CONTROLLER_SWITCHINANIM] = RecordedPlayerHandleSwitchInAnim, + [CONTROLLER_LOADMONSPRITE] = BtlController_HandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = BtlController_HandleSwitchInAnim, [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, [CONTROLLER_DRAWTRAINERPIC] = RecordedPlayerHandleDrawTrainerPic, [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, @@ -68,8 +61,8 @@ static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 ba [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, [CONTROLLER_BALLTHROWANIM] = PlayerHandleBallThrowAnim, [CONTROLLER_PAUSE] = BtlController_Empty, - [CONTROLLER_MOVEANIMATION] = RecordedPlayerHandleMoveAnimation, - [CONTROLLER_PRINTSTRING] = RecordedPlayerHandlePrintString, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, [CONTROLLER_CHOOSEACTION] = RecordedPlayerHandleChooseAction, [CONTROLLER_YESNOBOX] = BtlController_Empty, @@ -77,7 +70,7 @@ static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 ba [CONTROLLER_OPENBAG] = RecordedPlayerHandleChooseItem, [CONTROLLER_CHOOSEPOKEMON] = RecordedPlayerHandleChoosePokemon, [CONTROLLER_23] = BtlController_Empty, - [CONTROLLER_HEALTHBARUPDATE] = RecordedPlayerHandleHealthBarUpdate, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, [CONTROLLER_STATUSICONUPDATE] = RecordedPlayerHandleStatusIconUpdate, [CONTROLLER_STATUSANIMATION] = RecordedPlayerHandleStatusAnimation, @@ -101,7 +94,7 @@ static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 ba [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, [CONTROLLER_ENDBOUNCE] = BtlController_Empty, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, - [CONTROLLER_BATTLEANIMATION] = RecordedPlayerHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = RecordedPlayerHandleEndLinkBattle, @@ -122,16 +115,7 @@ static void RecordedPlayerBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands)) sRecordedPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - RecordedPlayerBufferExecCompleted(battler); - } -} - -static void Intro_DelayAndEnd(u32 battler) -{ - if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) - { - gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; - RecordedPlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -164,15 +148,14 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); HandleLowHpMusicChange(GetBattlerMon(battler), battler); if (IsDoubleBattle()) HandleLowHpMusicChange(GetBattlerMon(BATTLE_PARTNER(battler)), BATTLE_PARTNER(battler)); gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; - gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; + gBattlerControllerFuncs[battler] = BtlController_Intro_DelayAndEnd; } } else @@ -197,7 +180,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) if (healthboxAnimDone) { gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; - gBattlerControllerFuncs[battler] = Intro_DelayAndEnd; + gBattlerControllerFuncs[battler] = BtlController_Intro_DelayAndEnd; } } } @@ -271,37 +254,7 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) } } -static void WaitForMonAnimAfterLoad(u32 battler) -{ - if (gSprites[gBattlerSpriteIds[battler]].animEnded && gSprites[gBattlerSpriteIds[battler]].x2 == 0) - RecordedPlayerBufferExecCompleted(battler); -} - -static void SwitchIn_ShowSubstitute(u32 battler) -{ - if (SwitchIn_ShowSubstituteUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_WaitAndEnd; -} - -static void SwitchIn_WaitAndEnd(u32 battler) -{ - if (SwitchIn_WaitAndEndUtil(battler)) - RecordedPlayerBufferExecCompleted(battler); -} - -static void SwitchIn_ShowHealthbox(u32 battler) -{ - if (SwitchIn_ShowHealthboxUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; -} - -static void SwitchIn_TryShinyAnim(u32 battler) -{ - if (SwitchIn_TryShinyAnimUtil(battler)) - gBattlerControllerFuncs[battler] = SwitchIn_ShowHealthbox; -} - -static void RecordedPlayerBufferExecCompleted(u32 battler) +void RecordedPlayerBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = RecordedPlayerBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -317,59 +270,60 @@ static void RecordedPlayerBufferExecCompleted(u32 battler) } } -static void RecordedPlayerHandleLoadMonSprite(u32 battler) -{ - BtlController_HandleLoadMonSprite(battler, WaitForMonAnimAfterLoad); -} - -static void RecordedPlayerHandleSwitchInAnim(u32 battler) -{ - BtlController_HandleSwitchInAnim(battler, TRUE, SwitchIn_TryShinyAnim); -} - static void RecordedPlayerHandleDrawTrainerPic(u32 battler) { bool32 isFrontPic; s16 xPos, yPos; u32 trainerPicId; - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) + // Sets Multibattle test player sprites to not be Hiker + if (IsMultibattleTest()) { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - trainerPicId = GetBattlerLinkPlayerGender(battler); + trainerPicId = TRAINER_BACK_PIC_BRENDAN; + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + xPos = 32; else - trainerPicId = gLinkPlayers[gRecordedBattleMultiplayerId].gender; - } - else - { - trainerPicId = gLinkPlayers[0].gender; + xPos = 80; + yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; } - - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + else { - if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon - xPos = 90; - else // first mon - xPos = 32; + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + trainerPicId = GetBattlerLinkPlayerGender(battler); + else + trainerPicId = gLinkPlayers[gRecordedBattleMultiplayerId].gender; + } + else + trainerPicId = gLinkPlayers[0].gender; - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - xPos = 90; - yPos = 80; + if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon + xPos = 90; + else // first mon + xPos = 32; + + // !TESTING added as otherwise first test battle sprite is positioned incorrectly + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && !TESTING) + { + xPos = 90; + yPos = 80; + } + else + { + yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; + } } else { + xPos = 80; yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; } - - } - else - { - xPos = 80; - yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; } - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && !TESTING) isFrontPic = TRUE; else isFrontPic = FALSE; @@ -382,22 +336,12 @@ static void RecordedPlayerHandleTrainerSlideBack(u32 battler) BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } -static void RecordedPlayerHandleMoveAnimation(u32 battler) -{ - BtlController_HandleMoveAnimation(battler, FALSE); -} - -static void RecordedPlayerHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, FALSE, FALSE); -} - static void ChooseActionInBattlePalace(u32 battler) { if (gBattleCommunication[4] >= gBattlersCount / 2) { BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RecordedBattle_GetBattlerAction(RECORDED_BATTLE_PALACE_ACTION, battler), 0); - RecordedPlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -410,7 +354,7 @@ static void RecordedPlayerHandleChooseAction(u32 battler) else { BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, RecordedBattle_GetBattlerAction(RECORDED_ACTION_TYPE, battler), 0); - RecordedPlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -418,16 +362,16 @@ static void RecordedPlayerHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, ChooseMoveAndTargetInBattlePalace(battler)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, ChooseMoveAndTargetInBattlePalace(battler)); } else { u8 moveIndex = RecordedBattle_GetBattlerAction(RECORDED_MOVE_SLOT, battler); u8 target = RecordedBattle_GetBattlerAction(RECORDED_MOVE_TARGET, battler); - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, moveIndex | (target << 8)); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, moveIndex | (target << 8)); } - RecordedPlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void RecordedPlayerHandleChooseItem(u32 battler) @@ -438,7 +382,7 @@ static void RecordedPlayerHandleChooseItem(u32 battler) gBattleStruct->itemPartyIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_TARGET, battler); gBattleStruct->itemMoveIndex[battler] = RecordedBattle_GetBattlerAction(RECORDED_ITEM_MOVE, battler); BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->chosenItem[battler]); - RecordedPlayerBufferExecCompleted(battler); + BtlController_Complete(battler); } static void RecordedPlayerHandleChoosePokemon(u32 battler) @@ -446,12 +390,7 @@ static void RecordedPlayerHandleChoosePokemon(u32 battler) gBattleStruct->monToSwitchIntoId[battler] = RecordedBattle_GetBattlerAction(RECORDED_PARTY_INDEX, battler); gSelectedMonPartyId = gBattleStruct->monToSwitchIntoId[battler]; // Revival Blessing BtlController_EmitChosenMonReturnValue(battler, B_COMM_TO_ENGINE, gBattleStruct->monToSwitchIntoId[battler], NULL); - RecordedPlayerBufferExecCompleted(battler); -} - -static void RecordedPlayerHandleHealthBarUpdate(u32 battler) -{ - BtlController_HandleHealthBarUpdate(battler, TRUE); + BtlController_Complete(battler); } static void RecordedPlayerHandleStatusIconUpdate(u32 battler) @@ -488,16 +427,11 @@ static void RecordedPlayerHandleDrawPartyStatusSummary(u32 battler) BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, TRUE); } -static void RecordedPlayerHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, FALSE, FALSE); -} - static void RecordedPlayerHandleEndLinkBattle(u32 battler) { gBattleOutcome = gBattleResources->bufferA[battler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - RecordedPlayerBufferExecCompleted(battler); + BtlController_Complete(battler); gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 9311c2f7a1fa..c8f5cf193975 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -31,19 +31,15 @@ static void SafariHandleDrawTrainerPic(u32 battler); static void SafariHandleSuccessBallThrowAnim(u32 battler); static void SafariHandleBallThrowAnim(u32 battler); -static void SafariHandlePrintString(u32 battler); -static void SafariHandlePrintSelectionString(u32 battler); static void SafariHandleChooseAction(u32 battler); static void SafariHandleChooseItem(u32 battler); static void SafariHandleChoosePokemon(u32 battler); static void SafariHandleStatusIconUpdate(u32 battler); static void SafariHandleFaintingCry(u32 battler); static void SafariHandleIntroTrainerBallThrow(u32 battler); -static void SafariHandleBattleAnimation(u32 battler); static void SafariHandleEndLinkBattle(u32 battler); static void SafariBufferRunCommand(u32 battler); -static void SafariBufferExecCompleted(u32 battler); static void CompleteWhenChosePokeblock(u32 battler); static void WaitForMonSelection(u32 battler); @@ -65,8 +61,8 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_BALLTHROWANIM] = SafariHandleBallThrowAnim, [CONTROLLER_PAUSE] = BtlController_Empty, [CONTROLLER_MOVEANIMATION] = BtlController_Empty, - [CONTROLLER_PRINTSTRING] = SafariHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = SafariHandlePrintSelectionString, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_HandlePrintStringPlayerOnly, [CONTROLLER_CHOOSEACTION] = SafariHandleChooseAction, [CONTROLLER_YESNOBOX] = BtlController_Empty, [CONTROLLER_CHOOSEMOVE] = BtlController_Empty, @@ -97,7 +93,7 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_Empty, [CONTROLLER_ENDBOUNCE] = BtlController_Empty, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_Empty, - [CONTROLLER_BATTLEANIMATION] = SafariHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = SafariHandleEndLinkBattle, @@ -118,7 +114,7 @@ static void SafariBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sSafariBufferCommands)) sSafariBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - SafariBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -143,7 +139,7 @@ static void HandleInputChooseAction(u32 battler) BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_SAFARI_RUN, 0); break; } - SafariBufferExecCompleted(battler); + BtlController_Complete(battler); } else if (JOY_NEW(DPAD_LEFT)) { @@ -197,7 +193,7 @@ static void HandleInputChooseAction(u32 battler) static void Controller_WaitForHealthbox(u32 battler) { if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) - SafariBufferExecCompleted(battler); + BtlController_Complete(battler); } static void SafariSetBattleEndCallbacks(u32 battler) @@ -225,7 +221,7 @@ static void CompleteWhenChosePokeblock(u32 battler) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gSpecialVar_ItemId); - SafariBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -264,7 +260,7 @@ static void WaitForMonSelection(u32 battler) } } -static void SafariBufferExecCompleted(u32 battler) +void SafariBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = SafariBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -299,19 +295,6 @@ static void SafariHandleBallThrowAnim(u32 battler) BtlController_HandleBallThrowAnim(battler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER, FALSE); } -static void SafariHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, FALSE, FALSE); -} - -static void SafariHandlePrintSelectionString(u32 battler) -{ - if (IsOnPlayerSide(battler)) - SafariHandlePrintString(battler); - else - SafariBufferExecCompleted(battler); -} - static void HandleChooseActionAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) @@ -372,7 +355,7 @@ static void SafariHandleChoosePokemon(u32 battler) static void SafariHandleStatusIconUpdate(u32 battler) { UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], GetBattlerMon(battler), HEALTHBOX_SAFARI_BALLS_TEXT); - SafariBufferExecCompleted(battler); + BtlController_Complete(battler); } // All of the other controllers(except Wally's) use CRY_MODE_FAINT. @@ -382,8 +365,8 @@ static void SafariHandleFaintingCry(u32 battler) u16 species = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES); PlayCry_Normal(species, 25); - SafariBufferExecCompleted(battler); - SafariBufferExecCompleted(battler); + BtlController_Complete(battler); + BtlController_Complete(battler); } static void SafariHandleIntroTrainerBallThrow(u32 battler) @@ -394,17 +377,12 @@ static void SafariHandleIntroTrainerBallThrow(u32 battler) gBattlerControllerFuncs[battler] = Controller_WaitForHealthbox; } -static void SafariHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, TRUE, FALSE); -} - static void SafariHandleEndLinkBattle(u32 battler) { gBattleOutcome = gBattleResources->bufferA[battler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - SafariBufferExecCompleted(battler); + BtlController_Complete(battler); if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) gBattlerControllerFuncs[battler] = SafariSetBattleEndCallbacks; } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 6cba0fc3e75d..11955787d957 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -36,22 +36,15 @@ static void WallyHandleDrawTrainerPic(u32 battler); static void WallyHandleTrainerSlide(u32 battler); static void WallyHandleSuccessBallThrowAnim(u32 battler); static void WallyHandleBallThrowAnim(u32 battler); -static void WallyHandleMoveAnimation(u32 battler); -static void WallyHandlePrintString(u32 battler); -static void WallyHandlePrintSelectionString(u32 battler); static void WallyHandleChooseAction(u32 battler); static void WallyHandleChooseMove(u32 battler); static void WallyHandleChooseItem(u32 battler); -static void WallyHandleHealthBarUpdate(u32 battler); -static void WallyHandlePlaySE(u32 battler); static void WallyHandleFaintingCry(u32 battler); static void WallyHandleIntroTrainerBallThrow(u32 battler); static void WallyHandleDrawPartyStatusSummary(u32 battler); -static void WallyHandleBattleAnimation(u32 battler); static void WallyHandleEndLinkBattle(u32 battler); static void WallyBufferRunCommand(u32 battler); -static void WallyBufferExecCompleted(u32 battler); static void CompleteOnChosenItem(u32 battler); static void Intro_WaitForShinyAnimAndHealthbox(u32 battler); @@ -72,16 +65,16 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_SUCCESSBALLTHROWANIM] = WallyHandleSuccessBallThrowAnim, [CONTROLLER_BALLTHROWANIM] = WallyHandleBallThrowAnim, [CONTROLLER_PAUSE] = BtlController_Empty, - [CONTROLLER_MOVEANIMATION] = WallyHandleMoveAnimation, - [CONTROLLER_PRINTSTRING] = WallyHandlePrintString, - [CONTROLLER_PRINTSTRINGPLAYERONLY] = WallyHandlePrintSelectionString, + [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_HandlePrintStringPlayerOnly, [CONTROLLER_CHOOSEACTION] = WallyHandleChooseAction, [CONTROLLER_YESNOBOX] = BtlController_Empty, [CONTROLLER_CHOOSEMOVE] = WallyHandleChooseMove, [CONTROLLER_OPENBAG] = WallyHandleChooseItem, [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, [CONTROLLER_23] = BtlController_Empty, - [CONTROLLER_HEALTHBARUPDATE] = WallyHandleHealthBarUpdate, + [CONTROLLER_HEALTHBARUPDATE] = BtlController_HandleHealthBarUpdate, [CONTROLLER_EXPUPDATE] = BtlController_Empty, [CONTROLLER_STATUSICONUPDATE] = BtlController_Empty, [CONTROLLER_STATUSANIMATION] = BtlController_Empty, @@ -96,7 +89,7 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, [CONTROLLER_CANTSWITCH] = BtlController_Empty, - [CONTROLLER_PLAYSE] = WallyHandlePlaySE, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, [CONTROLLER_FAINTINGCRY] = WallyHandleFaintingCry, [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, @@ -105,7 +98,7 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_Empty, [CONTROLLER_ENDBOUNCE] = BtlController_Empty, [CONTROLLER_SPRITEINVISIBILITY] = BtlController_Empty, - [CONTROLLER_BATTLEANIMATION] = WallyHandleBattleAnimation, + [CONTROLLER_BATTLEANIMATION] = BtlController_HandleBattleAnimation, [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, [CONTROLLER_ENDLINKBATTLE] = WallyHandleEndLinkBattle, @@ -130,7 +123,7 @@ static void WallyBufferRunCommand(u32 battler) if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sWallyBufferCommands)) sWallyBufferCommands[gBattleResources->bufferA[battler][0]](battler); else - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -146,7 +139,7 @@ static void WallyHandleActions(u32 battler) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_MOVE, 0); - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; gBattleStruct->wallyWaitFrames = B_WAIT_TIME_LONG; @@ -157,7 +150,7 @@ static void WallyHandleActions(u32 battler) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_MOVE, 0); - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; gBattleStruct->wallyWaitFrames = B_WAIT_TIME_LONG; @@ -167,7 +160,7 @@ static void WallyHandleActions(u32 battler) if (--gBattleStruct->wallyWaitFrames == 0) { BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_WALLY_THROW, 0); - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); gBattleStruct->wallyBattleState++; gBattleStruct->wallyMovesState = 0; gBattleStruct->wallyWaitFrames = B_WAIT_TIME_LONG; @@ -188,7 +181,7 @@ static void WallyHandleActions(u32 battler) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_USE_ITEM, 0); - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); } break; } @@ -210,7 +203,7 @@ static void CompleteOnChosenItem(u32 battler) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { BtlController_EmitOneReturnValue(battler, B_COMM_TO_ENGINE, gSpecialVar_ItemId); - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); } } @@ -262,17 +255,16 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); HandleLowHpMusicChange(GetBattlerMon(battler), battler); - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); } } -static void WallyBufferExecCompleted(u32 battler) +void WallyBufferExecCompleted(u32 battler) { gBattlerControllerFuncs[battler] = WallyBufferRunCommand; if (gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -314,24 +306,6 @@ static void WallyHandleBallThrowAnim(u32 battler) BtlController_HandleBallThrowAnim(battler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW_WITH_TRAINER, FALSE); } -static void WallyHandleMoveAnimation(u32 battler) -{ - BtlController_HandleMoveAnimation(battler, FALSE); -} - -static void WallyHandlePrintString(u32 battler) -{ - BtlController_HandlePrintString(battler, FALSE, FALSE); -} - -static void WallyHandlePrintSelectionString(u32 battler) -{ - if (IsOnPlayerSide(battler)) - WallyHandlePrintString(battler); - else - WallyBufferExecCompleted(battler); -} - static void HandleChooseActionAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) @@ -378,8 +352,8 @@ static void WallyHandleChooseMove(u32 battler) if (--gBattleStruct->wallyMoveFrames == 0) { PlaySE(SE_SELECT); - BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, 10, 0x100); - WallyBufferExecCompleted(battler); + BtlController_EmitTwoReturnValues(battler, B_COMM_TO_ENGINE, B_ACTION_EXEC_SCRIPT, 0x100); + BtlController_Complete(battler); } break; } @@ -392,18 +366,6 @@ static void WallyHandleChooseItem(u32 battler) gBattlerInMenuId = battler; } -static void WallyHandleHealthBarUpdate(u32 battler) -{ - BtlController_HandleHealthBarUpdate(battler, TRUE); -} - -// For some reason Wally's SE don't take side into account and pan is always the same. Possibly a bug -static void WallyHandlePlaySE(u32 battler) -{ - PlaySE(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); - WallyBufferExecCompleted(battler); -} - // All of the other controllers use CRY_MODE_FAINT. // Wally's PokΓ©mon during the tutorial is never intended to faint, so that's probably why it's different here. static void WallyHandleFaintingCry(u32 battler) @@ -411,7 +373,7 @@ static void WallyHandleFaintingCry(u32 battler) u16 species = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES); PlayCry_Normal(species, 25); - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); } static void WallyHandleIntroTrainerBallThrow(u32 battler) @@ -425,17 +387,12 @@ static void WallyHandleDrawPartyStatusSummary(u32 battler) BtlController_HandleDrawPartyStatusSummary(battler, B_SIDE_PLAYER, FALSE); } -static void WallyHandleBattleAnimation(u32 battler) -{ - BtlController_HandleBattleAnimation(battler, TRUE, FALSE); -} - static void WallyHandleEndLinkBattle(u32 battler) { gBattleOutcome = gBattleResources->bufferA[battler][1]; FadeOutMapMusic(5); BeginFastPaletteFade(3); - WallyBufferExecCompleted(battler); + BtlController_Complete(battler); if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) && gBattleTypeFlags & BATTLE_TYPE_LINK) gBattlerControllerFuncs[battler] = SetBattleEndCallbacks; diff --git a/src/battle_controllers.c b/src/battle_controllers.c index ec3dfa742602..06ed79c89287 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -12,9 +12,11 @@ #include "battle_tv.h" #include "cable_club.h" #include "event_object_movement.h" +#include "item.h" #include "link.h" #include "link_rfu.h" #include "m4a.h" +#include "overworld.h" #include "palette.h" #include "party_menu.h" #include "recorded_battle.h" @@ -25,7 +27,11 @@ #include "util.h" #include "text.h" #include "constants/abilities.h" +#include "constants/item_effects.h" #include "constants/songs.h" +#include "test/battle.h" +#include "test/test.h" +#include "test/test_runner_battle.h" #include "pokemon_animation.h" static EWRAM_DATA u8 sLinkSendTaskId = 0; @@ -36,8 +42,7 @@ COMMON_DATA u8 gBattleControllerData[MAX_BATTLERS_COUNT] = {0}; // Used by the b COMMON_DATA void (*gBattlerControllerEndFuncs[MAX_BATTLERS_COUNT])(u32 battler) = {0}; // Controller's buffer complete function for each battler static void CreateTasksForSendRecvLinkBuffers(void); -static void InitLinkBtlControllers(void); -static void InitSinglePlayerBtlControllers(void); +static void InitBtlControllersInternal(void); static void SetBattlePartyIds(void); static void Task_HandleSendLinkBuffersData(u8 taskId); static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId); @@ -102,10 +107,7 @@ void InitBattleControllers(void) if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) RecordedBattle_SaveParties(); - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - InitLinkBtlControllers(); - else - InitSinglePlayerBtlControllers(); + InitBtlControllersInternal(); SetBattlePartyIds(); @@ -122,492 +124,200 @@ void InitBattleControllers(void) *((u8 *)(&gBattleStruct->tv) + i) = 0; } -static void InitSinglePlayerBtlControllers(void) +static void InitBtlControllersInternal(void) { s32 i; - - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - { + bool32 isLink = (gBattleTypeFlags & BATTLE_TYPE_LINK); + bool32 isDouble = IsDoubleBattle(); + bool32 isMaster = (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER); + bool32 isRecorded = (gBattleTypeFlags & BATTLE_TYPE_RECORDED); + bool32 isRecordedMaster = (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER); + bool32 isRecordedLink = (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK); + bool32 isMulti = (gBattleTypeFlags & BATTLE_TYPE_MULTI); + bool32 isInGamePartner = (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER); + bool32 isAIvsAI = IsAiVsAiBattle(); + + if (!isLink || isMaster) gBattleMainFunc = BeginBattleIntro; - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - { - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner; - gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; - } - else - { - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner; - gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; - } - + if (!isDouble) + gBattlersCount = 2; + else gBattlersCount = MAX_BATTLERS_COUNT; - BufferBattlePartyCurrentOrderBySide(0, 0); - BufferBattlePartyCurrentOrderBySide(1, 0); - BufferBattlePartyCurrentOrderBySide(2, 1); - BufferBattlePartyCurrentOrderBySide(3, 1); - - gBattlerPartyIndexes[0] = 0; - gBattlerPartyIndexes[1] = 0; - if (BATTLE_TWO_VS_ONE_OPPONENT || WILD_DOUBLE_BATTLE) - { - gBattlerPartyIndexes[2] = 3; - gBattlerPartyIndexes[3] = 1; - } + if ((gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + || !isMulti + || (IsMultibattleTest()) + || (!isLink && !isRecorded) + || (isLink && !isDouble)) + { + bool32 isPlayerPrimary; + if (isLink) + isPlayerPrimary = (isMaster || (isDouble && isMulti)); + else if (!isRecorded) + isPlayerPrimary = TRUE; + else if (isDouble) + isPlayerPrimary = (isInGamePartner || isMulti || isMaster); else + isPlayerPrimary = (!isRecordedLink || isRecordedMaster); + + gBattlerPositions[B_BATTLER_0] = isPlayerPrimary ? B_POSITION_PLAYER_LEFT : B_POSITION_OPPONENT_LEFT; + gBattlerPositions[B_BATTLER_1] = isPlayerPrimary ? B_POSITION_OPPONENT_LEFT : B_POSITION_PLAYER_LEFT; + if (isDouble) { - gBattlerPartyIndexes[2] = 3; - gBattlerPartyIndexes[3] = 3; + gBattlerPositions[B_BATTLER_2] = isPlayerPrimary ? B_POSITION_PLAYER_RIGHT : B_POSITION_OPPONENT_RIGHT; + gBattlerPositions[B_BATTLER_3] = isPlayerPrimary ? B_POSITION_OPPONENT_RIGHT : B_POSITION_PLAYER_RIGHT; } - } - else if (!IsDoubleBattle()) - { - gBattleMainFunc = BeginBattleIntro; - - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToSafari; - else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToWally; - else if (IsAiVsAiBattle()) - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayerPartner; - else - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer; - - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlersCount = 2; - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + if (isLink) { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) - { - gBattleMainFunc = BeginBattleIntro; - - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlersCount = 2; - } - else // see how the banks are switched - { - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedOpponent; - gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT; + if (isDouble && isMulti && !isMaster) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_0)] = SetControllerToLinkPartner; + else + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_0)] = SetControllerToPlayer; - gBattlersCount = 2; - } + if (!isDouble || !isMulti || !isMaster) + { + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_1)] = SetControllerToLinkOpponent; + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_2)] = SetControllerToPlayer; + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_3)] = SetControllerToLinkOpponent; } else { - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_1)] = SetControllerToOpponent; + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_2)] = SetControllerToLinkPartner; + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_3)] = SetControllerToOpponent; } } - } - else - { - gBattleMainFunc = BeginBattleIntro; - - if (IsAiVsAiBattle()) - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayerPartner; else - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - if (IsAiVsAiBattle()) - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner; - else - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; - - gBattlersCount = MAX_BATTLERS_COUNT; - - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - { - gBattleMainFunc = BeginBattleIntro; - - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; + // Player 1 + if (isRecorded) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_0)] = SetControllerToRecordedPlayer; + else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_0)] = SetControllerToSafari; + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_0)] = SetControllerToWally; + else if (isAIvsAI) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_0)] = SetControllerToPlayerPartner; + else + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_0)] = SetControllerToPlayer; - gBattlersCount = MAX_BATTLERS_COUNT; + // Opponent 1 + bool32 isOpponent1Recorded; + if (isDouble) + isOpponent1Recorded = ((!isInGamePartner && isRecorded && !isMulti && isRecordedLink) || (IsMultibattleTest() && isRecordedLink)); + else + isOpponent1Recorded = isRecorded && isRecordedLink; - BufferBattlePartyCurrentOrderBySide(0, 0); - BufferBattlePartyCurrentOrderBySide(1, 0); - BufferBattlePartyCurrentOrderBySide(2, 1); - BufferBattlePartyCurrentOrderBySide(3, 1); + if (isOpponent1Recorded) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_1)] = SetControllerToRecordedOpponent; + else + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_1)] = SetControllerToOpponent; - gBattlerPartyIndexes[0] = 0; - gBattlerPartyIndexes[1] = 0; - gBattlerPartyIndexes[2] = 3; - gBattlerPartyIndexes[3] = 3; + // Player 2 + if (IsMultibattleTest() && isRecordedLink) + { + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_2)] = SetControllerToRecordedPartner; + } + else if (IsMultibattleTest() && isRecorded && !isRecordedLink) + { // Sets to PlayerPartner if EXPECT_XXXX used in test for partner trainer, else sets to RecordedPartner. + if (gBattleTestRunnerState->data.expectedAiActions[B_BATTLER_2][0].actionSet == TRUE) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_2)] = SetControllerToPlayerPartner; + else + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_2)] = SetControllerToRecordedPartner; } - else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + else if ((isInGamePartner && !isRecorded) + || isAIvsAI) { - u8 multiplayerId; - - for (multiplayerId = gRecordedBattleMultiplayerId, i = 0; i < MAX_BATTLERS_COUNT; i++) - { - switch (gLinkPlayers[i].id) - { - case 0: - case 3: - BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0); - break; - case 1: - case 2: - BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1); - break; - } - - if (i == multiplayerId) - { - gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedPlayer; - switch (gLinkPlayers[i].id) - { - case 0: - case 3: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; - break; - case 1: - case 2: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; - break; - } - } - else if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1)) - || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1))) - { - gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedPlayer; - switch (gLinkPlayers[i].id) - { - case 0: - case 3: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; - break; - case 1: - case 2: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; - break; - } - } - else - { - gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedOpponent; - switch (gLinkPlayers[i].id) - { - case 0: - case 3: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_LEFT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; - break; - case 1: - case 2: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; - break; - } - } - } + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_2)] = SetControllerToPlayerPartner; } - else if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) + else if (isRecorded) { - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT; - - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToRecordedOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; - } - else - { - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; - } + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_2)] = SetControllerToRecordedPlayer; } else { - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToRecordedPlayer; - gBattlerPositions[B_BATTLER_3] = B_POSITION_PLAYER_RIGHT; - - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - { - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedOpponent; - gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedOpponent; - gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT; - } - else - { - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT; - } + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_2)] = SetControllerToPlayer; } - } - } -} - -static void InitLinkBtlControllers(void) -{ - s32 i; - u8 multiplayerId; - - if (!IsDoubleBattle()) - { - if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) - { - gBattleMainFunc = BeginBattleIntro; - - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - gBattlersCount = 2; + // Opponent 2 + if (IsMultibattleTest() && isRecordedLink) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_3)] = SetControllerToRecordedOpponent; + else if (isInGamePartner || !isRecorded || isMulti || !isRecordedLink) + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_3)] = SetControllerToOpponent; + else + gBattlerControllerFuncs[GetBattlerPosition(B_BATTLER_3)] = SetControllerToRecordedOpponent; } - else - { - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT; - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkOpponent; - gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT; - - gBattlersCount = 2; - } - } - else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && IsDoubleBattle()) - { - if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) - { - gBattleMainFunc = BeginBattleIntro; + bool32 bufferPartyOrders; - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToLinkOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; - - gBattlersCount = MAX_BATTLERS_COUNT; - } + if (!isLink) + bufferPartyOrders = (isInGamePartner || (isRecorded && isMulti)); else - { - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkOpponent; - gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_3] = B_POSITION_PLAYER_RIGHT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToLinkOpponent; - gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT; - - gBattlersCount = MAX_BATTLERS_COUNT; - } - } - else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - { - if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) - { - gBattleMainFunc = BeginBattleIntro; - - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToLinkPartner; - gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT; + bufferPartyOrders = (isDouble && isMulti); - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; - - gBattlersCount = MAX_BATTLERS_COUNT; - } - else + if (bufferPartyOrders) { - gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkPartner; - gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT; - - gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent; - gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT; - - gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer; - gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT; + BufferBattlePartyCurrentOrderBySide(0, 0); + BufferBattlePartyCurrentOrderBySide(1, 0); + BufferBattlePartyCurrentOrderBySide(2, 1); + BufferBattlePartyCurrentOrderBySide(3, 1); - gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToLinkOpponent; - gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT; - - gBattlersCount = MAX_BATTLERS_COUNT; + gBattlerPartyIndexes[0] = 0; + gBattlerPartyIndexes[1] = 0; + gBattlerPartyIndexes[2] = 3; + if (!isLink && isInGamePartner && (BATTLE_TWO_VS_ONE_OPPONENT || WILD_DOUBLE_BATTLE)) + gBattlerPartyIndexes[3] = 1; + else + gBattlerPartyIndexes[3] = 3; } - - BufferBattlePartyCurrentOrderBySide(0, 0); - BufferBattlePartyCurrentOrderBySide(1, 0); - BufferBattlePartyCurrentOrderBySide(2, 1); - BufferBattlePartyCurrentOrderBySide(3, 1); - gBattlerPartyIndexes[0] = 0; - gBattlerPartyIndexes[1] = 0; - gBattlerPartyIndexes[2] = 3; - gBattlerPartyIndexes[3] = 3; } else { - multiplayerId = GetMultiplayerId(); - - if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) - gBattleMainFunc = BeginBattleIntro; + u8 multiplayerId = isLink ? GetMultiplayerId() : gRecordedBattleMultiplayerId; - for (i = 0; i < MAX_BATTLERS_COUNT; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { + u32 linkPositionLeft, linkPositionRight; + BattleControllerFunc linkBtlControllerFunc; + + if (i == multiplayerId) + { + linkPositionLeft = B_POSITION_PLAYER_LEFT; + linkPositionRight = B_POSITION_PLAYER_RIGHT; + linkBtlControllerFunc = isLink ? SetControllerToPlayer : SetControllerToRecordedPlayer; + } + else if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1)) + || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1))) + { + linkPositionLeft = B_POSITION_PLAYER_LEFT; + linkPositionRight = B_POSITION_PLAYER_RIGHT; + linkBtlControllerFunc = isLink ? SetControllerToLinkPartner : SetControllerToRecordedPlayer; + } + else + { + linkPositionLeft = B_POSITION_OPPONENT_LEFT; + linkPositionRight = B_POSITION_OPPONENT_RIGHT; + linkBtlControllerFunc = isLink ? SetControllerToLinkOpponent : SetControllerToRecordedOpponent; + } + gBattlerControllerFuncs[gLinkPlayers[i].id] = linkBtlControllerFunc; switch (gLinkPlayers[i].id) { case 0: case 3: BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0); + gBattlerPositions[gLinkPlayers[i].id] = linkPositionLeft; + gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; break; case 1: case 2: BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1); + gBattlerPositions[gLinkPlayers[i].id] = linkPositionRight; + gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; break; } - - if (i == multiplayerId) - { - gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToPlayer; - switch (gLinkPlayers[i].id) - { - case 0: - case 3: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; - break; - case 1: - case 2: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; - break; - } - } - else - { - if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1)) - || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1))) - { - gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkPartner; - switch (gLinkPlayers[i].id) - { - case 0: - case 3: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; - break; - case 1: - case 2: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; - break; - } - } - else - { - gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkOpponent; - switch (gLinkPlayers[i].id) - { - case 0: - case 3: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_LEFT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 0; - break; - case 1: - case 2: - gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT; - gBattlerPartyIndexes[gLinkPlayers[i].id] = 3; - break; - } - } - } } - - gBattlersCount = MAX_BATTLERS_COUNT; } } @@ -620,6 +330,66 @@ bool32 IsValidForBattle(struct Pokemon *mon) && GetMonData(mon, MON_DATA_IS_EGG) == FALSE); } +bool32 IsValidForBattleButDead(struct Pokemon *mon) +{ + u32 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); + return (species != SPECIES_NONE + && species != SPECIES_EGG + && GetMonData(mon, MON_DATA_IS_EGG) == FALSE); +} + +static inline bool32 IsControllerPlayer(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == PlayerBufferExecCompleted); +} + +static inline bool32 IsControllerRecordedPlayer(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == RecordedPlayerBufferExecCompleted); +} + +static inline bool32 IsControllerRecordedPartner(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == RecordedPartnerBufferExecCompleted); +} + +static inline bool32 IsControllerOpponent(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == OpponentBufferExecCompleted); +} + +static inline bool32 IsControllerPlayerPartner(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == PlayerPartnerBufferExecCompleted); +} + +static inline bool32 IsControllerWally(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == WallyBufferExecCompleted); +} + +static inline bool32 IsControllerRecordedOpponent(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == RecordedOpponentBufferExecCompleted); +} + +static inline bool32 IsControllerLinkOpponent(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == LinkOpponentBufferExecCompleted); +} + +static inline bool32 IsControllerLinkPartner(u32 battler) +{ + return (gBattlerControllerEndFuncs[battler] == LinkPartnerBufferExecCompleted); +} + +bool32 ShouldUpdateTvData(u32 battler) +{ + return (IsControllerPlayer(battler) + || IsControllerLinkPartner(battler) + || IsControllerLinkOpponent(battler)); +} + static void SetBattlePartyIds(void) { s32 i, j; @@ -653,21 +423,41 @@ static void SetBattlePartyIds(void) { if (IsOnPlayerSide(i)) { - if (IsValidForBattle(&gPlayerParty[j]) && gBattlerPartyIndexes[i - 2] != j) + if (gBattlerPartyIndexes[i - 2] == j) + { + // Exclude already assigned pokemon; + } + else if (IsValidForBattle(&gPlayerParty[j])) { gBattlerPartyIndexes[i] = j; break; } + else if (IsValidForBattleButDead(&gPlayerParty[j]) && gBattlerPartyIndexes[i] < PARTY_SIZE) + { + // Put an "option" on a dead mon that can be revived; + gBattlerPartyIndexes[i] = j + PARTY_SIZE; + } } else { - if (IsValidForBattle(&gEnemyParty[j]) && gBattlerPartyIndexes[i - 2] != j) + if (gBattlerPartyIndexes[i - 2] == j) + { + // Exclude already assigned pokemon; + } + else if (IsValidForBattle(&gEnemyParty[j])) { gBattlerPartyIndexes[i] = j; break; } + else if (IsValidForBattleButDead(&gEnemyParty[j]) && gBattlerPartyIndexes[i] < PARTY_SIZE) + { + // Put an "option" on a dead mon that can be revived; + gBattlerPartyIndexes[i] = j + PARTY_SIZE; + } } + if (gBattlerPartyIndexes[i] >= PARTY_SIZE) + continue; // No valid mons were found. Add the empty slot. if (gBattlerPartyIndexes[i - 2] == 0) gBattlerPartyIndexes[i] = 1; @@ -675,6 +465,8 @@ static void SetBattlePartyIds(void) gBattlerPartyIndexes[i] = 0; } } + if (gBattlerPartyIndexes[i] >= PARTY_SIZE) + gBattlerPartyIndexes[i] -= PARTY_SIZE; } if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) @@ -1266,7 +1058,7 @@ void BtlController_EmitChooseItem(u32 battler, u32 bufferId, u8 *battlePartyOrde PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 4); } -void BtlController_EmitChoosePokemon(u32 battler, u32 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 *data) +void BtlController_EmitChoosePokemon(u32 battler, u32 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 battlerPreventingSwitchout, u8 *data) { s32 i; @@ -1275,9 +1067,10 @@ void BtlController_EmitChoosePokemon(u32 battler, u32 bufferId, u8 caseId, u8 sl gBattleResources->transferBuffer[2] = slotId; gBattleResources->transferBuffer[3] = abilityId & 0xFF; gBattleResources->transferBuffer[7] = (abilityId >> 8) & 0xFF; + gBattleResources->transferBuffer[8] = battlerPreventingSwitchout; for (i = 0; i < 3; i++) gBattleResources->transferBuffer[4 + i] = data[i]; - PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 8); // Only 7 bytes were written. + PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 9); // Only 7 bytes were written. } static void UNUSED BtlController_EmitCmd23(u32 battler, u32 bufferId) @@ -1310,24 +1103,20 @@ void BtlController_EmitExpUpdate(u32 battler, u32 bufferId, u8 partyId, s32 expP PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 6); } -void BtlController_EmitStatusIconUpdate(u32 battler, u32 bufferId, u32 status1, u32 status2) +void BtlController_EmitStatusIconUpdate(u32 battler, u32 bufferId, u32 status) { gBattleResources->transferBuffer[0] = CONTROLLER_STATUSICONUPDATE; - gBattleResources->transferBuffer[1] = status1; - gBattleResources->transferBuffer[2] = (status1 & 0x0000FF00) >> 8; - gBattleResources->transferBuffer[3] = (status1 & 0x00FF0000) >> 16; - gBattleResources->transferBuffer[4] = (status1 & 0xFF000000) >> 24; - gBattleResources->transferBuffer[5] = status2; - gBattleResources->transferBuffer[6] = (status2 & 0x0000FF00) >> 8; - gBattleResources->transferBuffer[7] = (status2 & 0x00FF0000) >> 16; - gBattleResources->transferBuffer[8] = (status2 & 0xFF000000) >> 24; - PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 9); + gBattleResources->transferBuffer[1] = status; + gBattleResources->transferBuffer[2] = (status & 0x0000FF00) >> 8; + gBattleResources->transferBuffer[3] = (status & 0x00FF0000) >> 16; + gBattleResources->transferBuffer[4] = (status & 0xFF000000) >> 24; + PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 5); } -void BtlController_EmitStatusAnimation(u32 battler, u32 bufferId, bool8 status2, u32 status) +void BtlController_EmitStatusAnimation(u32 battler, u32 bufferId, bool8 isVolatile, u32 status) { gBattleResources->transferBuffer[0] = CONTROLLER_STATUSANIMATION; - gBattleResources->transferBuffer[1] = status2; + gBattleResources->transferBuffer[1] = isVolatile; gBattleResources->transferBuffer[2] = status; gBattleResources->transferBuffer[3] = (status & 0x0000FF00) >> 8; gBattleResources->transferBuffer[4] = (status & 0x00FF0000) >> 16; @@ -1592,7 +1381,7 @@ void BtlController_EmitDebugMenu(u32 battler, u32 bufferId) // Standardized Controller functions // Can be used for all the controllers. -void BattleControllerComplete(u32 battler) +void BtlController_Complete(u32 battler) { gBattlerControllerEndFuncs[battler](battler); } @@ -1652,7 +1441,7 @@ static u32 GetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId, u8 * u32 side = GetBattlerSide(battler); u32 partyIndex = gBattlerPartyIndexes[battler]; if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex); + gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); } #endif break; @@ -2172,9 +1961,7 @@ void StartSendOutAnim(u32 battler, bool32 dontClearTransform, bool32 dontClearSu ClearTemporarySpeciesSpriteData(battler, dontClearTransform, dontClearSubstituteBit); gBattlerPartyIndexes[battler] = gBattleResources->bufferA[battler][1]; - species = GetIllusionMonSpecies(battler); - if (species == SPECIES_NONE) - species = GetMonData(mon, MON_DATA_SPECIES); + species = GetBattlerVisualSpecies(battler); gBattleControllerData[battler] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); // Load sprite for opponent only, player sprite is expected to be already loaded. if (!IsOnPlayerSide(battler)) @@ -2212,7 +1999,7 @@ static void Controller_ReturnMonToBall2(u32 battler) if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) { FreeMonSprite(battler); - BattleControllerComplete(battler); + BtlController_Complete(battler); } } @@ -2246,7 +2033,7 @@ static void Controller_FaintPlayerMon(u32 battler) FreeOamMatrix(gSprites[spriteId].oam.matrixNum); DestroySprite(&gSprites[spriteId]); SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]); - BattleControllerComplete(battler); + BtlController_Complete(battler); } } @@ -2255,7 +2042,7 @@ static void Controller_FaintOpponentMon(u32 battler) if (!gSprites[gBattlerSpriteIds[battler]].inUse) { SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]); - BattleControllerComplete(battler); + BtlController_Complete(battler); } } @@ -2303,7 +2090,7 @@ static void Controller_DoMoveAnimation(u32 battler) CopyAllBattleSpritesInvisibilities(); TrySetBehindSubstituteSpriteBit(battler, gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0; - BattleControllerComplete(battler); + BtlController_Complete(battler); } break; } @@ -2317,7 +2104,7 @@ static void Controller_HandleTrainerSlideBack(u32 battler) FreeTrainerFrontPicPalette(gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.affineParam); FreeSpriteOamMatrix(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]]); DestroySprite(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]]); - BattleControllerComplete(battler); + BtlController_Complete(battler); } } @@ -2334,38 +2121,38 @@ void Controller_WaitForHealthBar(u32 battler) { if (IsOnPlayerSide(battler)) HandleLowHpMusicChange(GetBattlerMon(battler), battler); - BattleControllerComplete(battler); + BtlController_Complete(battler); } } static void Controller_WaitForBallThrow(u32 battler) { if (!gDoingBattleAnim || !gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) - BattleControllerComplete(battler); + BtlController_Complete(battler); } static void Controller_WaitForBattleAnimation(u32 battler) { if (!gBattleSpritesDataPtr->healthBoxesData[battler].animFromTableActive) - BattleControllerComplete(battler); + BtlController_Complete(battler); } static void Controller_WaitForStatusAnimation(u32 battler) { if (!gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive) - BattleControllerComplete(battler); + BtlController_Complete(battler); } static void Controller_WaitForTrainerPic(u32 battler) { if (gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].callback == SpriteCallbackDummy) - BattleControllerComplete(battler); + BtlController_Complete(battler); } void Controller_WaitForString(u32 battler) { if (!IsTextPrinterActive(B_WIN_MSG)) - BattleControllerComplete(battler); + BtlController_Complete(battler); } static void Controller_WaitForPartyStatusSummary(u32 battler) @@ -2373,7 +2160,7 @@ static void Controller_WaitForPartyStatusSummary(u32 battler) if (gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusDelayTimer++ > 92) { gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusDelayTimer = 0; - BattleControllerComplete(battler); + BtlController_Complete(battler); } } @@ -2386,7 +2173,7 @@ static void Controller_HitAnimation(u32 battler) gSprites[spriteId].data[1] = 0; gSprites[spriteId].invisible = FALSE; gDoingBattleAnim = FALSE; - BattleControllerComplete(battler); + BtlController_Complete(battler); } else { @@ -2399,7 +2186,7 @@ static void Controller_HitAnimation(u32 battler) // Used for all the commands which do nothing. void BtlController_Empty(u32 battler) { - BattleControllerComplete(battler); + BtlController_Complete(battler); } // Dummy function at the end of the table. @@ -2435,7 +2222,7 @@ void BtlController_HandleGetMonData(u32 battler) } } BtlController_EmitDataTransfer(battler, B_COMM_TO_ENGINE, size, monData); - BattleControllerComplete(battler); + BtlController_Complete(battler); } void BtlController_HandleGetRawMonData(u32 battler) @@ -2451,7 +2238,7 @@ void BtlController_HandleGetRawMonData(u32 battler) dst[i] = src[i]; BtlController_EmitDataTransfer(battler, B_COMM_TO_ENGINE, gBattleResources->bufferA[battler][2], dst); - BattleControllerComplete(battler); + BtlController_Complete(battler); } void BtlController_HandleSetMonData(u32 battler) @@ -2473,7 +2260,7 @@ void BtlController_HandleSetMonData(u32 battler) monToCheck >>= 1; } } - BattleControllerComplete(battler); + BtlController_Complete(battler); } void BtlController_HandleSetRawMonData(u32 battler) @@ -2484,13 +2271,13 @@ void BtlController_HandleSetRawMonData(u32 battler) for (i = 0; i < gBattleResources->bufferA[battler][2]; i++) dst[i] = gBattleResources->bufferA[battler][3 + i]; - BattleControllerComplete(battler); + BtlController_Complete(battler); } -void BtlController_HandleLoadMonSprite(u32 battler, void (*controllerCallback)(u32 battler)) +void BtlController_HandleLoadMonSprite(u32 battler) { struct Pokemon *mon = GetBattlerMon(battler); - u16 species = GetMonData(mon, MON_DATA_SPECIES); + u16 species = GetBattlerVisualSpecies(battler); BattleLoadMonSpriteGfx(mon, battler); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battler)); @@ -2508,18 +2295,37 @@ void BtlController_HandleLoadMonSprite(u32 battler, void (*controllerCallback)(u SetBattlerShadowSpriteCallback(battler, species); - gBattlerControllerFuncs[battler] = controllerCallback; + if (IsControllerOpponent(battler) || IsControllerLinkOpponent(battler) || IsControllerRecordedOpponent(battler)) + gBattlerControllerFuncs[battler] = TryShinyAnimAfterMonAnim; + else + gBattlerControllerFuncs[battler] = WaitForMonAnimAfterLoad; } -void BtlController_HandleSwitchInAnim(u32 battler, bool32 isPlayerSide, void (*controllerCallback)(u32 battler)) +void BtlController_HandleSwitchInAnim(u32 battler) { + bool32 isPlayerSide = (IsControllerPlayer(battler) + || IsControllerPlayerPartner(battler) + || IsControllerRecordedPlayer(battler) + || IsControllerRecordedPartner(battler) + || IsControllerLinkPartner(battler)); + + if (IsControllerPlayer(battler)) + { + gActionSelectionCursor[battler] = 0; + gMoveSelectionCursor[battler] = 0; + } + else if (IsControllerOpponent(battler)) + { + gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; + } + if (isPlayerSide) ClearTemporarySpeciesSpriteData(battler, gBattleResources->bufferA[battler][2], gBattleResources->bufferA[battler][3]); gBattlerPartyIndexes[battler] = gBattleResources->bufferA[battler][1]; if (isPlayerSide) BattleLoadMonSpriteGfx(GetBattlerMon(battler), battler); StartSendOutAnim(battler, gBattleResources->bufferA[battler][2], gBattleResources->bufferA[battler][3], FALSE); - gBattlerControllerFuncs[battler] = controllerCallback; + gBattlerControllerFuncs[battler] = BtlController_HandleSwitchInTryShinyAnim; } void BtlController_HandleReturnMonToBall(u32 battler) @@ -2532,7 +2338,7 @@ void BtlController_HandleReturnMonToBall(u32 battler) else { FreeMonSprite(battler); - BattleControllerComplete(battler); + BtlController_Complete(battler); } } @@ -2591,7 +2397,8 @@ void BtlController_HandleDrawTrainerPic(u32 battler, u32 trainerPicId, bool32 is if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) gBattlerSpriteIds[battler] = gBattleStruct->trainerSlideSpriteIds[battler]; - gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = battler; + // Aiming for palette slots 8 and 9 for Player and PlayerPartner to prevent Trainer Slides causing mons to change colour + gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = (8 + battler/2); } gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = DISPLAY_WIDTH; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = -2; @@ -2616,7 +2423,8 @@ void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId) 30); if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) gBattlerSpriteIds[battler] = gBattleStruct->trainerSlideSpriteIds[battler]; - gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = battler; + // Aiming for palette slots 8 and 9 for Player and PlayerPartner to prevent Trainer Slides causing mons to change colour + gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = (8 + battler/2); gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].x2 = -96; gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].sSpeedX = 2; } @@ -2715,7 +2523,7 @@ void BtlController_HandleBallThrowAnim(u32 battler, u32 target, u32 animId, bool HandleBallThrow(battler, target, animId, allowCriticalCapture); } -void BtlController_HandleMoveAnimation(u32 battler, bool32 updateTvData) +void BtlController_HandleMoveAnimation(u32 battler) { if (!IsBattleSEPlaying(battler)) { @@ -2731,12 +2539,12 @@ void BtlController_HandleMoveAnimation(u32 battler, bool32 updateTvData) gTransformedShininess[battler] = gAnimDisableStructPtr->transformedMonShininess; gBattleSpritesDataPtr->healthBoxesData[battler].animationState = 0; gBattlerControllerFuncs[battler] = Controller_DoMoveAnimation; - if (updateTvData) + if (ShouldUpdateTvData(battler)) BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr); } } -void BtlController_HandlePrintString(u32 battler, bool32 updateTvData, bool32 arenaPtsDeduct) +void BtlController_HandlePrintString(u32 battler) { u16 *stringId; @@ -2750,20 +2558,29 @@ void BtlController_HandlePrintString(u32 battler, bool32 updateTvData, bool32 ar TestRunner_Battle_RecordMessage(gDisplayedStringBattle); if (gTestRunnerHeadless) { - BattleControllerComplete(battler); + BtlController_Complete(battler); return; } } BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MSG); gBattlerControllerFuncs[battler] = Controller_WaitForString; - if (updateTvData) + if (ShouldUpdateTvData(battler)) BattleTv_SetDataBasedOnString(*stringId); - if (arenaPtsDeduct) + if (IsControllerPlayer(battler) + || IsControllerOpponent(battler)) BattleArena_DeductSkillPoints(battler, *stringId); } -void BtlController_HandleHealthBarUpdate(u32 battler, bool32 updateHpText) +void BtlController_HandlePrintStringPlayerOnly(u32 battler) +{ + if (IsOnPlayerSide(battler)) + BtlController_HandlePrintString(battler); + else + BtlController_Complete(battler); +} + +void BtlController_HandleHealthBarUpdate(u32 battler) { s32 maxHP, curHP; s16 hpVal; @@ -2782,7 +2599,10 @@ void BtlController_HandleHealthBarUpdate(u32 battler, bool32 updateHpText) else { SetBattleBarStruct(battler, gHealthboxSpriteIds[battler], maxHP, 0, hpVal); - if (updateHpText) + if (IsControllerPlayer(battler) + || IsControllerRecordedPlayer(battler) + || IsControllerRecordedPartner(battler) + || IsControllerWally(battler)) UpdateHpTextInHealthbox(gHealthboxSpriteIds[battler], HP_CURRENT, 0, maxHP); TestRunner_Battle_RecordHP(battler, curHP, 0); } @@ -2819,9 +2639,9 @@ void BtlController_HandleStatusAnimation(u32 battler) void BtlController_HandleHitAnimation(u32 battler) { - if (gSprites[gBattlerSpriteIds[battler]].invisible == TRUE) + if (gSprites[gBattlerSpriteIds[battler]].invisible == TRUE || (gTestRunnerHeadless && !gBattleTestRunnerState->forceMoveAnim)) { - BattleControllerComplete(battler); + BtlController_Complete(battler); } else { @@ -2834,14 +2654,24 @@ void BtlController_HandleHitAnimation(u32 battler) void BtlController_HandlePlaySE(u32 battler) { + if (gTestRunnerHeadless && !gBattleTestRunnerState->forceMoveAnim) + { + BtlController_Complete(battler); + return; + } s32 pan = IsOnPlayerSide(battler) ? SOUND_PAN_ATTACKER : SOUND_PAN_TARGET; PlaySE12WithPanning(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8), pan); - BattleControllerComplete(battler); + BtlController_Complete(battler); } void BtlController_HandlePlayFanfareOrBGM(u32 battler) { + if (gTestRunnerHeadless && !gBattleTestRunnerState->forceMoveAnim) + { + BtlController_Complete(battler); + return; + } if (gBattleResources->bufferA[battler][3]) { BattleStopLowHpSound(); @@ -2852,7 +2682,7 @@ void BtlController_HandlePlayFanfareOrBGM(u32 battler) PlayFanfare(gBattleResources->bufferA[battler][1] | (gBattleResources->bufferA[battler][2] << 8)); } - BattleControllerComplete(battler); + BtlController_Complete(battler); } void BtlController_HandleFaintingCry(u32 battler) @@ -2872,14 +2702,14 @@ void BtlController_HandleFaintingCry(u32 battler) } PlayCry_ByMode(GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), pan, CRY_MODE_FAINT); - BattleControllerComplete(battler); + BtlController_Complete(battler); } void BtlController_HandleIntroSlide(u32 battler) { HandleIntroSlide(gBattleResources->bufferA[battler][1]); gIntroSlideFlags |= 1; - BattleControllerComplete(battler); + BtlController_Complete(battler); } void BtlController_HandleSpriteInvisibility(u32 battler) @@ -2889,7 +2719,7 @@ void BtlController_HandleSpriteInvisibility(u32 battler) gSprites[gBattlerSpriteIds[battler]].invisible = gBattleResources->bufferA[battler][1]; CopyBattleSpriteInvisibility(battler); } - BattleControllerComplete(battler); + BtlController_Complete(battler); } bool32 TwoPlayerIntroMons(u32 battler) // Double battle with both player pokemon active. @@ -2917,7 +2747,7 @@ bool32 TwoOpponentIntroMons(u32 battler) // Double battle with both opponent pok void BtlController_HandleIntroTrainerBallThrow(u32 battler, u16 tagTrainerPal, const u16 *trainerPal, s16 framesToWait, void (*controllerCallback)(u32 battler)) { u8 paletteNum, taskId; - u32 side = GetBattlerSide(battler); + enum BattleSide side = GetBattlerSide(battler); SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattleStruct->trainerSlideSpriteIds[battler]]); if (side == B_SIDE_PLAYER) @@ -2942,7 +2772,7 @@ void BtlController_HandleIntroTrainerBallThrow(u32 battler, u16 tagTrainerPal, c paletteNum = AllocSpritePalette(tagTrainerPal); LoadPalette(trainerPal, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); - gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = paletteNum; + gSprites[gBattleStruct->trainerSlideSpriteIds[battler]].oam.paletteNum = (8 + battler/2); } else { @@ -3043,11 +2873,11 @@ static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) #undef sBattlerId -void BtlController_HandleDrawPartyStatusSummary(u32 battler, u32 side, bool32 considerDelay) +void BtlController_HandleDrawPartyStatusSummary(u32 battler, enum BattleSide side, bool32 considerDelay) { if (gBattleResources->bufferA[battler][1] != 0 && IsOnPlayerSide(battler)) { - BattleControllerComplete(battler); + BtlController_Complete(battler); } else { @@ -3081,12 +2911,13 @@ void BtlController_HandleHidePartyStatusSummary(u32 battler) { if (gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[battler]].func = Task_HidePartyStatusSummary; - BattleControllerComplete(battler); + BtlController_Complete(battler); } -void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 updateTvData) +void BtlController_HandleBattleAnimation(u32 battler) { - if (ignoreSE || !IsBattleSEPlaying(battler)) + if ((gBattleTypeFlags & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL)) + || !IsBattleSEPlaying(battler)) { u8 animationId = gBattleResources->bufferA[battler][1]; u16 argument = gBattleResources->bufferA[battler][2] | (gBattleResources->bufferA[battler][3] << 8); @@ -3094,15 +2925,24 @@ void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 up gAnimDisableStructPtr = (struct DisableStruct *)&gBattleResources->bufferA[battler][4]; if (TryHandleLaunchBattleTableAnimation(battler, battler, battler, animationId, argument)) - BattleControllerComplete(battler); + BtlController_Complete(battler); else gBattlerControllerFuncs[battler] = Controller_WaitForBattleAnimation; - if (updateTvData) + if (ShouldUpdateTvData(battler)) BattleTv_SetDataBasedOnAnimation(animationId); } } +void AnimateMonAfterPokeBallFail(u32 battler) +{ + if (B_ANIMATE_MON_AFTER_FAILED_POKEBALL == FALSE) + return; + + LaunchKOAnimation(battler, ReturnAnimIdForBattler(TRUE, battler), TRUE); + TryShinyAnimation(gBattlerTarget, GetBattlerMon(gBattlerTarget)); +} + static void AnimateMonAfterKnockout(u32 battler) { if (B_ANIMATE_MON_AFTER_KO == FALSE) @@ -3124,6 +2964,8 @@ static void LaunchKOAnimation(u32 battlerId, u16 animId, bool32 isFront) u32 species = GetBattlerVisualSpecies(battlerId); u32 spriteId = gBattlerSpriteIds[battlerId]; + gBattleStruct->battlerKOAnimsRunning++; + if (isFront) { LaunchAnimationTaskForFrontSprite(&gSprites[spriteId], animId); @@ -3153,110 +2995,199 @@ void TrySetBattlerShadowSpriteCallback(u32 battler) if (gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback == SpriteCallbackDummy && (B_ENEMY_MON_SHADOW_STYLE <= GEN_3 || P_GBA_STYLE_SPECIES_GFX == TRUE || gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback == SpriteCallbackDummy)) - SetBattlerShadowSpriteCallback(battler, GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES)); + SetBattlerShadowSpriteCallback(battler, GetBattlerVisualSpecies(battler)); } -bool32 TryShinyAnimAfterMonAnimUtil(u32 battler) +void TryShinyAnimAfterMonAnim(u32 battler) { - if (gSprites[gBattlerSpriteIds[battler]].callback != SpriteCallbackDummy - || gSprites[gBattlerSpriteIds[battler]].x2 != 0) - return FALSE; - - if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) + if (gSprites[gBattlerSpriteIds[battler]].x2 == 0) { - TryShinyAnimation(battler, GetBattlerMon(battler)); - return FALSE; - } - - if (!gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) - return FALSE; - - gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + if (!gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) + { + TryShinyAnimation(battler, GetBattlerMon(battler)); + } - return TRUE; + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim) + { + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; + FreeShinyStars(); + BtlController_Complete(battler); + } + } } -bool32 SwitchIn_ShowSubstituteUtil(u32 battler) +void WaitForMonAnimAfterLoad(u32 battler) { - if (gSprites[gHealthboxSpriteIds[battler]].callback != SpriteCallbackDummy) - return FALSE; + if (gSprites[gBattlerSpriteIds[battler]].animEnded && gSprites[gBattlerSpriteIds[battler]].x2 == 0) + BtlController_Complete(battler); +} - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - CopyBattleSpriteInvisibility(battler); +void BtlController_HandleSwitchInShowSubstitute(u32 battler) +{ + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) + { + if (IsOnPlayerSide(battler)) + CopyBattleSpriteInvisibility(battler); - if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) - InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); - return TRUE; + if (IsControllerOpponent(battler) + && IsControllerLinkOpponent(battler) + && IsControllerRecordedOpponent(battler)) + gBattlerControllerFuncs[battler] = BtlController_HandleSwitchInSoundAndEnd; + else + gBattlerControllerFuncs[battler] = BtlController_HandleSwitchInWaitAndEnd; + } } -bool32 SwitchIn_WaitAndEndUtil(u32 battler) +void BtlController_HandleSwitchInWaitAndEnd(u32 battler) { - return !gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy; + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + BtlController_Complete(battler); } -bool32 SwitchIn_HandleSoundAndEndUtil(u32 battler) +void BtlController_Intro_DelayAndEnd(u32 battler) { - if (gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive || IsCryPlayingOrClearCrySongs()) - return FALSE; - - if (gSprites[gBattlerSpriteIds[battler]].callback != SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback != SpriteCallbackDummy_2 - && GetBattlerSide(battler) == B_SIDE_OPPONENT) - return FALSE; + if (--gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay == (u8)-1) + { + gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 0; + BtlController_Complete(battler); + } +} - m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); - return TRUE; +void BtlController_HandleSwitchInSoundAndEnd(u32 battler) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) + { + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + || gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy_2 + || IsOnPlayerSide(battler)) + { + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); + if (IsControllerPlayer(battler)) + HandleLowHpMusicChange(GetBattlerMon(battler), battler); + BtlController_Complete(battler); + } + } } -bool32 SwitchIn_ShowHealthboxUtil(u32 battler) +void BtlController_HandleSwitchInShowHealthbox(u32 battler) { - u32 side = GetBattlerSide(battler); + enum BattleSide side = GetBattlerSide(battler); + if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && (side == B_SIDE_PLAYER || gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy)) + { + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; + FreeShinyStars(); - if (!gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim - || (side == B_SIDE_OPPONENT && gSprites[gBattlerSpriteIds[battler]].callback != SpriteCallbackDummy)) - return FALSE; + if (side == B_SIDE_PLAYER) + { + CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); + HandleLowHpMusicChange(GetBattlerMon(battler), battler); + } - gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], GetBattlerMon(battler), HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); - if (side == B_SIDE_PLAYER) - { - CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); - HandleLowHpMusicChange(GetBattlerMon(battler), battler); + if (side == B_SIDE_OPPONENT) + CopyBattleSpriteInvisibility(battler); + gBattlerControllerFuncs[battler] = BtlController_HandleSwitchInShowSubstitute; } +} - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 0); - UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], GetBattlerMon(battler), HEALTHBOX_ALL); - StartHealthboxSlideIn(battler); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); - - if (side == B_SIDE_OPPONENT) +static void SwitchIn_CleanShinyAnimShowSubstitute(u32 battler) +{ + if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy + && gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + { CopyBattleSpriteInvisibility(battler); - return TRUE; + // Reset shiny anim (even if it didn't occur) + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; + FreeShinyStars(); + + // Check if Substitute should be shown + if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) + InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); + + gBattlerControllerFuncs[battler] = BtlController_HandleSwitchInSoundAndEnd; + } } -bool32 SwitchIn_TryShinyAnimUtil(u32 battler) +void BtlController_HandleSwitchInTryShinyAnim(u32 battler) { if (!gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) TryShinyAnimation(battler, GetBattlerMon(battler)); - if (gSprites[gBattleControllerData[battler]].callback != SpriteCallbackDummy - || gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) - return FALSE; + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy + && !gBattleSpritesDataPtr->healthBoxesData[battler].ballAnimActive) + { + DestroySprite(&gSprites[gBattleControllerData[battler]]); - DestroySprite(&gSprites[gBattleControllerData[battler]]); + if (GetBattlerSide(battler) == B_SIDE_OPPONENT) + SetBattlerShadowSpriteCallback(battler, GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES)); - if (GetBattlerSide(battler) == B_SIDE_OPPONENT) - SetBattlerShadowSpriteCallback(battler, GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES)); + if (IsControllerPlayer(battler)) + { + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], GetBattlerMon(battler), HEALTHBOX_ALL); + StartHealthboxSlideIn(battler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); + gBattlerControllerFuncs[battler] = SwitchIn_CleanShinyAnimShowSubstitute; + } + else + { + gBattlerControllerFuncs[battler] = BtlController_HandleSwitchInShowHealthbox; + } + } +} - return TRUE; +void UpdateFriendshipFromXItem(u32 battler) +{ + struct Pokemon *party = GetBattlerParty(battler); + + u8 friendship; + gBattleResources->bufferA[battler][1] = REQUEST_FRIENDSHIP_BATTLE; + GetBattlerMonData(battler, party, gBattlerPartyIndexes[battler], &friendship); + + u16 heldItem; + gBattleResources->bufferA[battler][1] = REQUEST_HELDITEM_BATTLE; + GetBattlerMonData(battler, party, gBattlerPartyIndexes[battler], (u8*)&heldItem); + + if (friendship < X_ITEM_MAX_FRIENDSHIP) + { + friendship += CalculateFriendshipBonuses(GetBattlerMon(battler), X_ITEM_FRIENDSHIP_INCREASE, GetItemHoldEffect(heldItem)); + + if (friendship > MAX_FRIENDSHIP) + friendship = MAX_FRIENDSHIP; + + gBattleMons[battler].friendship = friendship; + gBattleResources->bufferA[battler][3] = friendship; + gBattleResources->bufferA[battler][1] = REQUEST_FRIENDSHIP_BATTLE; + SetBattlerMonData(battler, GetBattlerParty(battler), gBattlerPartyIndexes[battler]); + } +} + +bool32 ShouldBattleRestrictionsApply(u32 battler) +{ + return IsControllerPlayer(battler); +} + +void FreeShinyStars(void) +{ + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + if (gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) + return; + } + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); } diff --git a/src/battle_debug.c b/src/battle_debug.c index ffe1b76cea97..836329d66007 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -35,7 +35,6 @@ #include "constants/moves.h" #include "constants/items.h" #include "constants/rgb.h" -#include "constants/hold_effects.h" #define MAX_MODIFY_DIGITS 4 @@ -104,15 +103,15 @@ enum LIST_ITEM_STATS, LIST_ITEM_STAT_STAGES, LIST_ITEM_STATUS1, - LIST_ITEM_STATUS2, - LIST_ITEM_STATUS3, - LIST_ITEM_STATUS4, + LIST_ITEM_VOLATILE, + LIST_ITEM_HAZARDS, LIST_ITEM_SIDE_STATUS, LIST_ITEM_AI, LIST_ITEM_AI_MOVES_PTS, LIST_ITEM_AI_INFO, LIST_ITEM_AI_PARTY, LIST_ITEM_VARIOUS, + LIST_ITEM_INSTANT_WIN, LIST_ITEM_COUNT }; @@ -141,72 +140,22 @@ enum enum { - LIST_STATUS2_CONFUSION, - LIST_STATUS2_FLINCHED, - LIST_STATUS2_TORMENT, - LIST_STATUS2_POWDER, - LIST_STATUS2_DEFENSE_CURL, - LIST_STATUS2_RECHARGE, - LIST_STATUS2_RAGE, - LIST_STATUS2_DESTINY_BOND, - LIST_STATUS2_ESCAPE_PREVENTION, - LIST_STATUS2_CURSED, - LIST_STATUS2_FORESIGHT, - LIST_STATUS2_DRAGON_CHEER, - LIST_STATUS2_FOCUS_ENERGY -}; - -enum -{ - LIST_STATUS3_LEECH_SEED_HEALER, - LIST_STATUS3_LEECH_SEEDED, - LIST_STATUS3_ALWAYS_HITS, - LIST_STATUS3_PERISH_SONG, - LIST_STATUS3_ON_AIR, - LIST_STATUS3_UNDERGROUND, - LIST_STATUS3_MINIMIZED, - LIST_STATUS3_CHARGED_UP, - LIST_STATUS3_ROOTED, - LIST_STATUS3_YAWN, - LIST_STATUS3_IMPRISONED_OTHERS, - LIST_STATUS3_GRUDGE, - LIST_STATUS3_GASTRO_ACID, - LIST_STATUS3_EMBARGO, - LIST_STATUS3_UNDERWATER, - LIST_STATUS3_SMACKED_DOWN, - LIST_STATUS3_TELEKINESIS, - LIST_STATUS3_MIRACLE_EYED, - LIST_STATUS3_MAGNET_RISE, - LIST_STATUS3_HEAL_BLOCK, - LIST_STATUS3_AQUA_RING, - LIST_STATUS3_LASER_FOCUS, - LIST_STATUS3_POWER_TRICK, -}; - -enum -{ - LIST_STATUS4_ELECTRIFIED, - LIST_STATUS4_MUD_SPORT, - LIST_STATUS4_WATER_SPORT, - LIST_STATUS4_SALT_CURE, - LIST_STATUS4_SYRUP_BOMB, - LIST_STATUS4_GLAIVE_RUSH, + LIST_SIDE_STICKY_WEB, + LIST_SIDE_SPIKES, + LIST_SIDE_TOXIC_SPIKES, + LIST_SIDE_STEALTH_ROCK, + LIST_SIDE_STEELSURGE, }; enum { LIST_SIDE_REFLECT, LIST_SIDE_LIGHTSCREEN, - LIST_SIDE_STICKY_WEB, - LIST_SIDE_SPIKES, LIST_SIDE_SAFEGUARD, LIST_SIDE_MIST, LIST_SIDE_TAILWIND, LIST_SIDE_AURORA_VEIL, LIST_SIDE_LUCKY_CHANT, - LIST_SIDE_TOXIC_SPIKES, - LIST_SIDE_STEALTH_ROCK, - LIST_SIDE_STEELSURGE, LIST_SIDE_DAMAGE_NON_TYPES, LIST_SIDE_RAINBOW, LIST_SIDE_SEA_OF_FIRE, @@ -268,6 +217,8 @@ enum VAL_BITFIELD_8, VAL_BITFIELD_16, VAL_BITFIELD_32, + VAL_VOLATILE, + VAL_HAZARDS, VAR_SIDE_STATUS, VAR_SHOW_HP, VAR_SUBSTITUTE, @@ -278,150 +229,13 @@ enum }; // Static Declarations -static const u8 *GetHoldEffectName(enum ItemHoldEffect holdEffect); +static const u8 *GetHoldEffectName(enum HoldEffect holdEffect); // const rom data -static const u8 sText_Moves[] = _("Moves"); static const u8 sText_Ability[] = _("Ability"); static const u8 sText_HeldItem[] = _("Held Item"); static const u8 sText_HoldEffect[] = _("Hold Effect"); -static const u8 sText_PP[] = _("PP"); -static const u8 sText_Types[] = _("Types"); -static const u8 sText_Stats[] = _("Stats"); -static const u8 sText_StatStages[] = _("Stat Stages"); -static const u8 sText_Status1[] = _("Status1"); -static const u8 sText_Status2[] = _("Status2"); -static const u8 sText_Status3[] = _("Status3"); -static const u8 sText_Status4[] = _("Status4"); -static const u8 sText_SideStatus[] = _("Side Status"); -static const u8 sText_AI[] = _("AI"); -static const u8 sText_AIMovePts[] = _("AI Pts/Dmg"); -static const u8 sText_AiKnowledge[] = _("AI Info"); -static const u8 sText_AiParty[] = _("AI Party"); -static const u8 sText_Various[] = _("Various"); -static const u8 sText_CurrHp[] = _("HP Current"); -static const u8 sText_MaxHp[] = _("HP Max"); -static const u8 sText_Attack[] = _("Attack"); -static const u8 sText_Defense[] = _("Defense"); -static const u8 sText_Speed[] = _("Speed"); -static const u8 sText_SpAtk[] = _("Sp. Atk"); -static const u8 sText_SpDef[] = _("Sp. Def"); -static const u8 sText_Sleep[] = _("Sleep"); -static const u8 sText_Poison[] = _("Poison"); -static const u8 sText_Burn[] = _("Burn"); -static const u8 sText_Freeze[] = _("Freeze"); -static const u8 sText_Paralysis[] = _("Paralysis"); -static const u8 sText_ToxicPoison[] = _("Toxic Poison"); -static const u8 sText_ToxicCounter[] = _("Toxic Counter"); -static const u8 sText_Frostbite[] = _("Frostbite"); -static const u8 sText_Confusion[] = _("Confusion"); -static const u8 sText_Flinched[] = _("Flinched"); -static const u8 sText_Uproar[] = _("Uproar"); -static const u8 sText_Torment[] = _("Torment"); -static const u8 sText_Bide[] = _("Bide"); -static const u8 sText_LockConfuse[] = _("Lock Confuse"); -static const u8 sText_MultipleTurns[] = _("Multiple Turns"); -static const u8 sText_Wrapped[] = _("Wrapped"); -static const u8 sText_Powder[] = _("Powder"); -static const u8 sText_Infatuation[] = _("Infatuation"); -static const u8 sText_DefenseCurl[] = _("Defense Curl"); -static const u8 sText_Transformed[] = _("Transformed"); -static const u8 sText_Recharge[] = _("Recharge"); -static const u8 sText_Rage[] = _("Rage"); -static const u8 sText_Substitute[] = _("Substitute"); -static const u8 sText_DestinyBond[] = _("Destiny Bond"); -static const u8 sText_EscapePrevention[] = _("Escape Prevention"); -static const u8 sText_Nightmare[] = _("Nightmare"); -static const u8 sText_Cursed[] = _("Cursed"); -static const u8 sText_Foresight[] = _("Foresight"); -static const u8 sText_DragonCheer[] = _("Dragon Cheer"); -static const u8 sText_FocusEnergy[] = _("Focus Energy"); -static const u8 sText_LeechSeedHealer[] = _("Leech Seed Healer"); -static const u8 sText_LeechSeeded[] = _("Leech Seeded"); -static const u8 sText_AlwaysHits[] = _("Always Hits"); -static const u8 sText_PerishSong[] = _("Perish Song"); -static const u8 sText_OnAir[] = _("On Air"); -static const u8 sText_Underground[] = _("Underground"); -static const u8 sText_Minimized[] = _("Minimized"); -static const u8 sText_ChargedUp[] = _("Charged Up"); -static const u8 sText_Rooted[] = _("Rooted"); -static const u8 sText_Yawn[] = _("Yawn"); -static const u8 sText_ImprisonedOthers[] = _("Imprisoned Others"); -static const u8 sText_Grudge[] = _("Grudge"); -static const u8 sText_GastroAcid[] = _("Gastro Acid"); -static const u8 sText_Embargo[] = _("Embargo"); -static const u8 sText_Underwater[] = _("Underwater"); -static const u8 sText_Trace[] = _("Trace"); -static const u8 sText_SmackedDown[] = _("Smacked Down"); -static const u8 sText_MeFirst[] = _("Me First"); -static const u8 sText_Telekinesis[] = _("Telekinesis"); -static const u8 sText_PhantomForce[] = _("Phantom Force"); -static const u8 sText_MiracleEyed[] = _("Miracle Eyed"); -static const u8 sText_MagnetRise[] = _("Magnet Rise"); -static const u8 sText_HealBlock[] = _("Heal Block"); -static const u8 sText_AquaRing[] = _("Aqua Ring"); -static const u8 sText_LaserFocus[] = _("Laser Focus"); -static const u8 sText_PowerTrick[] = _("Power Trick"); -static const u8 sText_SkyDropped[] = _("Sky Dropped"); -static const u8 sText_Electrified[] = _("Electrified"); -static const u8 sText_MudSport[] = _("Mud Sport"); -static const u8 sText_WaterSport[] = _("Water Sport"); -static const u8 sText_InfiniteConfusion[] = _("Infinite Confusion"); -static const u8 sText_SaltCure[] = _("Salt Cure"); -static const u8 sText_SyrupBomb[] = _("Syrup Bomb"); -static const u8 sText_GlaiveRush[] = _("Glaive Rush"); -static const u8 sText_Reflect[] = _("Reflect"); -static const u8 sText_LightScreen[] = _("Light Screen"); -static const u8 sText_StickyWeb[] = _("Sticky Web"); -static const u8 sText_Spikes[] = _("Spikes"); -static const u8 sText_Safeguard[] = _("Safeguard"); -static const u8 sText_FutureAttack[] = _("Future Attack"); -static const u8 sText_Mist[] = _("Mist"); -static const u8 sText_Tailwind[] = _("Tailwind"); -static const u8 sText_AuroraVeil[] = _("Aurora Veil"); -static const u8 sText_LuckyChant[] = _("Lucky Chant"); -static const u8 sText_ToxicSpikes[] = _("Toxic Spikes"); -static const u8 sText_StealthRock[] = _("Stealth Rock"); -static const u8 sText_Steelsurge[] = _("Steelsurge"); -static const u8 sText_DamageNonTypes[] = _("Damage Non-Types"); -static const u8 sText_Rainbow[] = _("Rainbow"); -static const u8 sText_SeaOfFire[] = _("Sea of Fire"); -static const u8 sText_Swamp[] = _("Swamp"); -static const u8 sText_CheckBadMove[] = _("Check Bad Move"); -static const u8 sText_TryToFaint[] = _("Try to Faint"); -static const u8 sText_CheckViability[] = _("Check Viability"); -static const u8 sText_ForceSetupFirstTurn[] = _("Force Setup First Turn"); -static const u8 sText_Risky[] = _("Risky"); -static const u8 sText_TryTo2HKO[] = _("Try to 2HKO"); -static const u8 sText_PreferBatonPass[] = _("Prefer Baton Pass"); -static const u8 sText_DoubleBattle[] = _("Double Battle"); -static const u8 sText_HpAware[] = _("HP Aware"); -static const u8 sText_PowerfulStatus[] = _("Powerful Status"); -static const u8 sText_NegateUnaware[] = _("Negate Unaware"); -static const u8 sText_WillSuicide[] = _("Will Suicide"); -static const u8 sText_PreferStatusMoves[] = _("Prefer Status Moves"); -static const u8 sText_Stall[] = _("Stall"); -static const u8 sText_SmartSwitching[] = _("Smart Switching"); -static const u8 sText_AcePokemon[] = _("Ace PokΓ©mon"); -static const u8 sText_Omniscient[] = _("Omniscient"); -static const u8 sText_SmartMonChoices[] = _("Smart Mon Choices"); -static const u8 sText_Conservative[] = _("Conservative"); -static const u8 sText_SequenceSwitching[] = _("Sequence Switching"); -static const u8 sText_DoubleAcePokemon[] = _("Double Ace PokΓ©mon"); -static const u8 sText_WeighAbilityPrediction[] = _("Weigh Ability Prediction"); -static const u8 sText_PreferHighestDamageMove[] = _("Prefer Highest Damage Move"); -static const u8 sText_PredictSwitch[] = _("Predict Switch"); -static const u8 sText_PredictIncomingMon[] = _("Predict Incoming Mon"); -static const u8 sText_DynamicFunc[] = _("Dynamic Func"); -static const u8 sText_Roaming[] = _("Roaming"); -static const u8 sText_Safari[] = _("Safari"); -static const u8 sText_FirstBattle[] = _("First Battle"); -static const u8 sText_ShowHP[] = _("Show HP"); -static const u8 sText_SubstituteHp[] = _("Substitute HP"); -static const u8 sText_InLove[] = _("In Love"); -static const u8 sText_Unknown[] = _("Unknown"); static const u8 sText_EmptyString[] = _(""); -static const u8 sText_IsSwitching[] = _("Switching to "); static const struct BitfieldInfo sStatus1Bitfield[] = { @@ -435,23 +249,6 @@ static const struct BitfieldInfo sStatus1Bitfield[] = {/*Frostbite*/ 1, 12}, }; -static const struct BitfieldInfo sStatus2Bitfield[] = -{ - {/*Confusion*/ 3, 0}, - {/*Flinched*/ 1, 3}, - {/*Torment*/ 1, 7}, - {/*Powder*/ 1, 14}, - {/*Defense Curl*/ 1, 20}, - {/*Recharge*/ 1, 22}, - {/*Rage*/ 1, 23}, - {/*Destiny Bond*/ 1, 25}, - {/*Escape Prevention*/ 1, 26}, - {/*Cursed*/ 1, 28}, - {/*Foresight*/ 1, 29}, - {/*Dragon Cheer*/ 1, 30}, - {/*Focus Energy*/ 1, 31}, -}; - static const struct BitfieldInfo sStatus3Bitfield[] = { {/*Leech Seed Battler*/ 2, 0}, @@ -479,16 +276,6 @@ static const struct BitfieldInfo sStatus3Bitfield[] = {/*Power Trick*/ 1, 30}, }; -static const struct BitfieldInfo sStatus4Bitfield[] = -{ - {/*Electrified*/ 1, 0}, - {/*Mud Sport*/ 1, 1}, - {/*Water Sport*/ 1, 2}, - {/*Salt Cure*/ 1, 4}, - {/*Syrup Bomb*/ 1, 5}, - {/*Glaive Rush*/ 1, 6}, -}; - static const struct BitfieldInfo sAIBitfield[] = { {/*Check Bad Move*/ 1, 0}, @@ -524,160 +311,152 @@ static const struct BitfieldInfo sAIBitfield[] = static const struct ListMenuItem sMainListItems[] = { - {sText_Moves, LIST_ITEM_MOVES}, - {sText_Ability, LIST_ITEM_ABILITY}, - {sText_HeldItem, LIST_ITEM_HELD_ITEM}, - {sText_PP, LIST_ITEM_PP}, - {sText_Types, LIST_ITEM_TYPES}, - {sText_Stats, LIST_ITEM_STATS}, - {sText_StatStages, LIST_ITEM_STAT_STAGES}, - {sText_Status1, LIST_ITEM_STATUS1}, - {sText_Status2, LIST_ITEM_STATUS2}, - {sText_Status3, LIST_ITEM_STATUS3}, - {sText_Status4, LIST_ITEM_STATUS4}, - {sText_SideStatus, LIST_ITEM_SIDE_STATUS}, - {sText_AI, LIST_ITEM_AI}, - {sText_AIMovePts, LIST_ITEM_AI_MOVES_PTS}, - {sText_AiKnowledge, LIST_ITEM_AI_INFO}, - {sText_AiParty, LIST_ITEM_AI_PARTY}, - {sText_Various, LIST_ITEM_VARIOUS}, + {COMPOUND_STRING("Moves"), LIST_ITEM_MOVES}, + {sText_Ability, LIST_ITEM_ABILITY}, + {sText_HeldItem, LIST_ITEM_HELD_ITEM}, + {COMPOUND_STRING("PP"), LIST_ITEM_PP}, + {COMPOUND_STRING("Types"), LIST_ITEM_TYPES}, + {COMPOUND_STRING("Stats"), LIST_ITEM_STATS}, + {COMPOUND_STRING("Stat Stages"), LIST_ITEM_STAT_STAGES}, + {COMPOUND_STRING("Status1"), LIST_ITEM_STATUS1}, + {COMPOUND_STRING("Volatiles"), LIST_ITEM_VOLATILE}, + {COMPOUND_STRING("Hazards"), LIST_ITEM_HAZARDS}, + {COMPOUND_STRING("Side Status"), LIST_ITEM_SIDE_STATUS}, + {COMPOUND_STRING("AI"), LIST_ITEM_AI}, + {COMPOUND_STRING("AI Pts/Dmg"), LIST_ITEM_AI_MOVES_PTS}, + {COMPOUND_STRING("AI Info"), LIST_ITEM_AI_INFO}, + {COMPOUND_STRING("AI Party"), LIST_ITEM_AI_PARTY}, + {COMPOUND_STRING("Various"), LIST_ITEM_VARIOUS}, + {COMPOUND_STRING("Instant Win"), LIST_ITEM_INSTANT_WIN}, }; static const struct ListMenuItem sStatsListItems[] = { - {sText_CurrHp, LIST_STAT_HP_CURRENT}, - {sText_MaxHp, LIST_STAT_HP_MAX}, - {sText_Attack, LIST_STAT_ATTACK}, - {sText_Defense, LIST_STAT_DEFENSE}, - {sText_Speed, LIST_STAT_SPEED}, - {sText_SpAtk, LIST_STAT_SP_ATK}, - {sText_SpDef, LIST_STAT_SP_DEF}, + {COMPOUND_STRING("HP Current"), LIST_STAT_HP_CURRENT}, + {COMPOUND_STRING("HP Max"), LIST_STAT_HP_MAX}, + {COMPOUND_STRING("Attack"), LIST_STAT_ATTACK}, + {COMPOUND_STRING("Defense"), LIST_STAT_DEFENSE}, + {COMPOUND_STRING("Speed"), LIST_STAT_SPEED}, + {COMPOUND_STRING("Sp. Atk"), LIST_STAT_SP_ATK}, + {COMPOUND_STRING("Sp. Def"), LIST_STAT_SP_DEF}, }; static const struct ListMenuItem sStatus1ListItems[] = { - {sText_Sleep, LIST_STATUS1_SLEEP}, - {sText_Poison, LIST_STATUS1_POISON}, - {sText_Burn, LIST_STATUS1_BURN}, - {sText_Freeze, LIST_STATUS1_FREEZE}, - {sText_Paralysis, LIST_STATUS1_PARALYSIS}, - {sText_ToxicPoison, LIST_STATUS1_TOXIC_POISON}, - {sText_ToxicCounter, LIST_STATUS1_TOXIC_COUNTER}, - {sText_Frostbite, LIST_STATUS1_FROSTBITE}, + {COMPOUND_STRING("Sleep"), LIST_STATUS1_SLEEP}, + {COMPOUND_STRING("Poison"), LIST_STATUS1_POISON}, + {COMPOUND_STRING("Burn"), LIST_STATUS1_BURN}, + {COMPOUND_STRING("Freeze"), LIST_STATUS1_FREEZE}, + {COMPOUND_STRING("Paralysis"), LIST_STATUS1_PARALYSIS}, + {COMPOUND_STRING("Toxic Poison"), LIST_STATUS1_TOXIC_POISON}, + {COMPOUND_STRING("Toxic Counter"), LIST_STATUS1_TOXIC_COUNTER}, + {COMPOUND_STRING("Frostbite"), LIST_STATUS1_FROSTBITE}, }; -static const struct ListMenuItem sStatus2ListItems[] = -{ - {sText_Confusion, LIST_STATUS2_CONFUSION}, - {sText_Flinched, LIST_STATUS2_FLINCHED}, - {sText_Torment, LIST_STATUS2_TORMENT}, - {sText_Powder, LIST_STATUS2_POWDER}, - {sText_DefenseCurl, LIST_STATUS2_DEFENSE_CURL}, - {sText_Recharge, LIST_STATUS2_RECHARGE}, - {sText_Rage, LIST_STATUS2_RAGE}, - {sText_DestinyBond, LIST_STATUS2_DESTINY_BOND}, - {sText_EscapePrevention, LIST_STATUS2_ESCAPE_PREVENTION}, - {sText_Cursed, LIST_STATUS2_CURSED}, - {sText_Foresight, LIST_STATUS2_FORESIGHT}, - {sText_DragonCheer, LIST_STATUS2_DRAGON_CHEER}, - {sText_FocusEnergy, LIST_STATUS2_FOCUS_ENERGY}, +static const struct ListMenuItem sVolatileStatusListItems[] = +{ + {COMPOUND_STRING("Confusion"), VOLATILE_CONFUSION}, + {COMPOUND_STRING("Flinched"), VOLATILE_FLINCHED}, + {COMPOUND_STRING("Torment"), VOLATILE_TORMENT}, + {COMPOUND_STRING("Powder"), VOLATILE_POWDER}, + {COMPOUND_STRING("DefenseCurl"), VOLATILE_DEFENSE_CURL}, + {COMPOUND_STRING("Rage"), VOLATILE_RAGE}, + {COMPOUND_STRING("DestinyBond"), VOLATILE_DESTINY_BOND}, + {COMPOUND_STRING("EscapePrevention"), VOLATILE_ESCAPE_PREVENTION}, + {COMPOUND_STRING("Cursed"), VOLATILE_CURSED}, + {COMPOUND_STRING("Foresight"), VOLATILE_FORESIGHT}, + {COMPOUND_STRING("DragonCheer"), VOLATILE_DRAGON_CHEER}, + {COMPOUND_STRING("FocusEnergy"), VOLATILE_FOCUS_ENERGY}, + {COMPOUND_STRING("Electrified"), VOLATILE_ELECTRIFIED}, + {COMPOUND_STRING("MudSport"), VOLATILE_MUD_SPORT}, + {COMPOUND_STRING("WaterSport"), VOLATILE_WATER_SPORT}, + {COMPOUND_STRING("Infinite Confusion"), VOLATILE_INFINITE_CONFUSION}, + {COMPOUND_STRING("Salt Cure"), VOLATILE_SALT_CURE}, + {COMPOUND_STRING("Syrup Bomb"), VOLATILE_SYRUP_BOMB}, + {COMPOUND_STRING("Glaive Rush"), VOLATILE_GLAIVE_RUSH}, + {COMPOUND_STRING("Leech Seed"), VOLATILE_LEECH_SEED}, + {COMPOUND_STRING("Lock On"), VOLATILE_LOCK_ON}, + {COMPOUND_STRING("Perish Song"), VOLATILE_PERISH_SONG}, + {COMPOUND_STRING("Minimize"), VOLATILE_MINIMIZE}, + {COMPOUND_STRING("Charge"), VOLATILE_CHARGE_TIMER}, + {COMPOUND_STRING("Root"), VOLATILE_ROOT}, + {COMPOUND_STRING("Yawn"), VOLATILE_YAWN}, + {COMPOUND_STRING("Imprison"), VOLATILE_IMPRISON}, + {COMPOUND_STRING("Grudge"), VOLATILE_GRUDGE}, + {COMPOUND_STRING("Gastro Acid"), VOLATILE_GASTRO_ACID}, + {COMPOUND_STRING("Embargo"), VOLATILE_EMBARGO}, + {COMPOUND_STRING("Smack Down"), VOLATILE_SMACK_DOWN}, + {COMPOUND_STRING("Telekinesis"), VOLATILE_TELEKINESIS}, + {COMPOUND_STRING("Miracle Eye"), VOLATILE_MIRACLE_EYE}, + {COMPOUND_STRING("Magnet Rise"), VOLATILE_MAGNET_RISE}, + {COMPOUND_STRING("Heal Block"), VOLATILE_HEAL_BLOCK}, + {COMPOUND_STRING("Aqua Ring"), VOLATILE_AQUA_RING}, + {COMPOUND_STRING("Laser Focus"), VOLATILE_LASER_FOCUS}, + {COMPOUND_STRING("Power Trick"), VOLATILE_POWER_TRICK}, }; -static const struct ListMenuItem sStatus3ListItems[] = -{ - {sText_LeechSeedHealer, LIST_STATUS3_LEECH_SEED_HEALER}, - {sText_LeechSeeded, LIST_STATUS3_LEECH_SEEDED}, - {sText_AlwaysHits, LIST_STATUS3_ALWAYS_HITS}, - {sText_PerishSong, LIST_STATUS3_PERISH_SONG}, - {sText_OnAir, LIST_STATUS3_ON_AIR}, - {sText_Underground, LIST_STATUS3_UNDERGROUND}, - {sText_Minimized, LIST_STATUS3_MINIMIZED}, - {sText_ChargedUp, LIST_STATUS3_CHARGED_UP}, - {sText_Rooted, LIST_STATUS3_ROOTED}, - {sText_Yawn, LIST_STATUS3_YAWN}, - {sText_ImprisonedOthers, LIST_STATUS3_IMPRISONED_OTHERS}, - {sText_Grudge, LIST_STATUS3_GRUDGE}, - {sText_GastroAcid, LIST_STATUS3_GASTRO_ACID}, - {sText_Embargo, LIST_STATUS3_EMBARGO}, - {sText_Underwater, LIST_STATUS3_UNDERWATER}, - {sText_SmackedDown, LIST_STATUS3_SMACKED_DOWN}, - {sText_Telekinesis, LIST_STATUS3_TELEKINESIS}, - {sText_MiracleEyed, LIST_STATUS3_MIRACLE_EYED}, - {sText_MagnetRise, LIST_STATUS3_MAGNET_RISE}, - {sText_HealBlock, LIST_STATUS3_HEAL_BLOCK}, - {sText_AquaRing, LIST_STATUS3_AQUA_RING}, - {sText_LaserFocus, LIST_STATUS3_LASER_FOCUS}, - {sText_PowerTrick, LIST_STATUS3_POWER_TRICK}, -}; - -static const struct ListMenuItem sStatus4ListItems[] = +static const struct ListMenuItem sHazardsListItems[] = { - {sText_Electrified, LIST_STATUS4_ELECTRIFIED}, - {sText_MudSport, LIST_STATUS4_MUD_SPORT}, - {sText_WaterSport, LIST_STATUS4_WATER_SPORT}, - {sText_SaltCure, LIST_STATUS4_SALT_CURE}, - {sText_SyrupBomb, LIST_STATUS4_SYRUP_BOMB}, - {sText_GlaiveRush, LIST_STATUS4_GLAIVE_RUSH}, + {COMPOUND_STRING("Spikes"), LIST_SIDE_SPIKES}, + {COMPOUND_STRING("Sticky Web"), LIST_SIDE_STICKY_WEB}, + {COMPOUND_STRING("Toxic Spikes"), LIST_SIDE_TOXIC_SPIKES}, + {COMPOUND_STRING("Stealth Rock"), LIST_SIDE_STEALTH_ROCK}, + {COMPOUND_STRING("Steelsurge"), LIST_SIDE_STEELSURGE}, }; static const struct ListMenuItem sSideStatusListItems[] = { - {sText_Reflect, LIST_SIDE_REFLECT}, - {sText_LightScreen, LIST_SIDE_LIGHTSCREEN}, - {sText_StickyWeb, LIST_SIDE_STICKY_WEB}, - {sText_Spikes, LIST_SIDE_SPIKES}, - {sText_Safeguard, LIST_SIDE_SAFEGUARD}, - {sText_Mist, LIST_SIDE_MIST}, - {sText_Tailwind, LIST_SIDE_TAILWIND}, - {sText_AuroraVeil, LIST_SIDE_AURORA_VEIL}, - {sText_LuckyChant, LIST_SIDE_LUCKY_CHANT}, - {sText_ToxicSpikes, LIST_SIDE_TOXIC_SPIKES}, - {sText_StealthRock, LIST_SIDE_STEALTH_ROCK}, - {sText_Steelsurge, LIST_SIDE_STEELSURGE}, - {sText_DamageNonTypes, LIST_SIDE_DAMAGE_NON_TYPES}, - {sText_Rainbow, LIST_SIDE_RAINBOW}, - {sText_SeaOfFire, LIST_SIDE_SEA_OF_FIRE}, - {sText_Swamp, LIST_SIDE_SWAMP}, + {COMPOUND_STRING("Reflect"), LIST_SIDE_REFLECT}, + {COMPOUND_STRING("Light Screen"), LIST_SIDE_LIGHTSCREEN}, + {COMPOUND_STRING("Safeguard"), LIST_SIDE_SAFEGUARD}, + {COMPOUND_STRING("Mist"), LIST_SIDE_MIST}, + {COMPOUND_STRING("Tailwind"), LIST_SIDE_TAILWIND}, + {COMPOUND_STRING("Aurora Veil"), LIST_SIDE_AURORA_VEIL}, + {COMPOUND_STRING("Lucky Chant"), LIST_SIDE_LUCKY_CHANT}, + {COMPOUND_STRING("Damage Non-Types"), LIST_SIDE_DAMAGE_NON_TYPES}, + {COMPOUND_STRING("Rainbow"), LIST_SIDE_RAINBOW}, + {COMPOUND_STRING("Sea of Fire"), LIST_SIDE_SEA_OF_FIRE}, + {COMPOUND_STRING("Swamp"), LIST_SIDE_SWAMP}, }; static const struct ListMenuItem sAIListItems[] = { - {sText_CheckBadMove, LIST_AI_CHECK_BAD_MOVE}, - {sText_TryToFaint, LIST_AI_TRY_TO_FAINT}, - {sText_CheckViability, LIST_AI_CHECK_VIABILITY}, - {sText_ForceSetupFirstTurn, LIST_AI_FORCE_SETUP_FIRST_TURN}, - {sText_Risky, LIST_AI_RISKY}, - {sText_TryTo2HKO, LIST_AI_TRY_TO_2HKO}, - {sText_PreferBatonPass, LIST_AI_PREFER_BATON_PASS}, - {sText_DoubleBattle, LIST_AI_DOUBLE_BATTLE}, - {sText_HpAware, LIST_AI_HP_AWARE}, - {sText_PowerfulStatus, LIST_AI_POWERFUL_STATUS}, - {sText_NegateUnaware, LIST_AI_NEGATE_UNAWARE}, - {sText_WillSuicide, LIST_AI_WILL_SUICIDE}, - {sText_PreferStatusMoves, LIST_AI_PREFER_STATUS_MOVES}, - {sText_Stall, LIST_AI_STALL}, - {sText_SmartSwitching, LIST_AI_SMART_SWITCHING}, - {sText_AcePokemon, LIST_AI_ACE_POKEMON}, - {sText_Omniscient, LIST_AI_OMNISCIENT}, - {sText_SmartMonChoices, LIST_AI_SMART_MON_CHOICES}, - {sText_Conservative, LIST_AI_CONSERVATIVE}, - {sText_SequenceSwitching, LIST_AI_SEQUENCE_SWITCHING}, - {sText_DoubleAcePokemon, LIST_AI_DOUBLE_ACE_POKEMON}, - {sText_WeighAbilityPrediction, LIST_AI_WEIGH_ABILITY_PREDICTION}, - {sText_PreferHighestDamageMove, LIST_AI_PREFER_HIGHEST_DAMAGE_MOVE}, - {sText_PredictSwitch, LIST_AI_PREDICT_SWITCH}, - {sText_PredictIncomingMon, LIST_AI_PREDICT_INCOMING_MON}, - {sText_DynamicFunc, LIST_AI_DYNAMIC_FUNC}, - {sText_Roaming, LIST_AI_ROAMING}, - {sText_Safari, LIST_AI_SAFARI}, - {sText_FirstBattle, LIST_AI_FIRST_BATTLE}, + {COMPOUND_STRING("Check Bad Move"), LIST_AI_CHECK_BAD_MOVE}, + {COMPOUND_STRING("Try to Faint"), LIST_AI_TRY_TO_FAINT}, + {COMPOUND_STRING("Check Viability"), LIST_AI_CHECK_VIABILITY}, + {COMPOUND_STRING("Force Setup First Turn"), LIST_AI_FORCE_SETUP_FIRST_TURN}, + {COMPOUND_STRING("Risky"), LIST_AI_RISKY}, + {COMPOUND_STRING("Try to 2HKO"), LIST_AI_TRY_TO_2HKO}, + {COMPOUND_STRING("Prefer Baton Pass"), LIST_AI_PREFER_BATON_PASS}, + {COMPOUND_STRING("Double Battle"), LIST_AI_DOUBLE_BATTLE}, + {COMPOUND_STRING("HP Aware"), LIST_AI_HP_AWARE}, + {COMPOUND_STRING("Powerful Status"), LIST_AI_POWERFUL_STATUS}, + {COMPOUND_STRING("Negate Unaware"), LIST_AI_NEGATE_UNAWARE}, + {COMPOUND_STRING("Will Suicide"), LIST_AI_WILL_SUICIDE}, + {COMPOUND_STRING("Prefer Status Moves"), LIST_AI_PREFER_STATUS_MOVES}, + {COMPOUND_STRING("Stall"), LIST_AI_STALL}, + {COMPOUND_STRING("Smart Switching"), LIST_AI_SMART_SWITCHING}, + {COMPOUND_STRING("Ace PokΓ©mon"), LIST_AI_ACE_POKEMON}, + {COMPOUND_STRING("Omniscient"), LIST_AI_OMNISCIENT}, + {COMPOUND_STRING("Smart Mon Choices"), LIST_AI_SMART_MON_CHOICES}, + {COMPOUND_STRING("Conservative"), LIST_AI_CONSERVATIVE}, + {COMPOUND_STRING("Sequence Switching"), LIST_AI_SEQUENCE_SWITCHING}, + {COMPOUND_STRING("Double Ace PokΓ©mon"), LIST_AI_DOUBLE_ACE_POKEMON}, + {COMPOUND_STRING("Weigh Ability Prediction"), LIST_AI_WEIGH_ABILITY_PREDICTION}, + {COMPOUND_STRING("Prefer Highest Damage Move"), LIST_AI_PREFER_HIGHEST_DAMAGE_MOVE}, + {COMPOUND_STRING("Predict Switch"), LIST_AI_PREDICT_SWITCH}, + {COMPOUND_STRING("Predict Incoming Mon"), LIST_AI_PREDICT_INCOMING_MON}, + {COMPOUND_STRING("Dynamic Func"), LIST_AI_DYNAMIC_FUNC}, + {COMPOUND_STRING("Roaming"), LIST_AI_ROAMING}, + {COMPOUND_STRING("Safari"), LIST_AI_SAFARI}, + {COMPOUND_STRING("First Battle"), LIST_AI_FIRST_BATTLE}, }; static const struct ListMenuItem sVariousListItems[] = { - {sText_ShowHP, VARIOUS_SHOW_HP}, - {sText_SubstituteHp, VARIOUS_SUBSTITUTE_HP}, - {sText_InLove, VARIOUS_IN_LOVE}, + {COMPOUND_STRING("Show HP"), VARIOUS_SHOW_HP}, + {COMPOUND_STRING("Substitute HP"), VARIOUS_SUBSTITUTE_HP}, + {COMPOUND_STRING("In Love"), VARIOUS_IN_LOVE}, }; static const struct ListMenuItem sSecondaryListItems[] = @@ -805,19 +584,6 @@ static const struct BgTemplate sBgTemplates[] = } }; -static const u8 sBitsToMaxDigit[] = -{ - [0] = 0, - [1] = 1, // max 1 - [2] = 1, // max 3 - [3] = 1, // max 7 - [4] = 2, // max 15 - [5] = 2, // max 31 - [6] = 2, // max 63 - [7] = 3, // max 127 - [8] = 3, // max 255 -}; - static const bool8 sHasChangeableEntries[LIST_ITEM_COUNT] = { [LIST_ITEM_MOVES] = TRUE, @@ -844,6 +610,8 @@ static void PrintDigitChars(struct BattleDebugMenu *data); static void SetUpModifyArrows(struct BattleDebugMenu *data); static void UpdateBattlerValue(struct BattleDebugMenu *data); static void UpdateMonData(struct BattleDebugMenu *data); +static void ChangeHazardsValue(struct BattleDebugMenu *data); +static u32 GetHazardsValue(struct BattleDebugMenu *data); static u16 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue); static bool32 TryMoveDigit(struct BattleDebugModifyArrows *modArrows, bool32 moveUp); static void SwitchToDebugView(u8 taskId); @@ -950,17 +718,27 @@ void CB2_BattleDebugMenu(void) } } +enum { + COLORID_RED, +}; + +static const u8 sTextColorTable[][3] = +{ + [COLORID_RED] = {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}, +}; + static void PutMovesPointsText(struct BattleDebugMenu *data) { - u32 i, j, count, battlerDef; + u32 i, j, count, battlerDef, chosenMoveIndex = gAiBattleData->chosenMoveIndex[data->aiBattlerId]; u8 *text = Alloc(0x50); FillWindowPixelBuffer(data->aiMovesWindowId, 0x11); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, COMPOUND_STRING("Score/Dmg"), 3, 0, 0, NULL); for (i = 0; i < MAX_MON_MOVES; i++) { text[0] = CHAR_SPACE; StringCopy(text + 1, GetMoveName(gBattleMons[data->aiBattlerId].moves[i])); - AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 0, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 0, (i * 15) + 15, 0, NULL); for (count = 0, j = 0; j < MAX_BATTLERS_COUNT; j++) { if (data->spriteIds.aiIconSpriteIds[j] == 0xFF) @@ -969,12 +747,24 @@ static void PutMovesPointsText(struct BattleDebugMenu *data) ConvertIntToDecimalStringN(text, gAiBattleData->finalScore[data->aiBattlerId][battlerDef][i], STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 83 + count * 54, i * 15, 0, NULL); + // If chosen move and chosen target + if ((chosenMoveIndex == i) && (gAiBattleData->chosenTarget[data->aiBattlerId] == j) && !(gAiLogicData->shouldSwitch & (1u << data->aiBattlerId))) + AddTextPrinterParameterized3(data->aiMovesWindowId, FONT_NORMAL, 84 + count * 54, (i * 15) + 15, sTextColorTable[COLORID_RED], 0, text); + else + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 84 + count * 54, (i * 15) + 15, 0, NULL); + + if ((chosenMoveIndex == i) && (gAiBattleData->chosenTarget[data->aiBattlerId] == j) && !(gAiLogicData->shouldSwitch & (1u << data->aiBattlerId))) + AddTextPrinterParameterized3(data->aiMovesWindowId, FONT_NORMAL, 103 + count * 54, (i * 15) + 15, sTextColorTable[COLORID_RED], 0, COMPOUND_STRING("/")); + else + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, COMPOUND_STRING("/"), 103 + count * 54, (i * 15) + 15, 0, NULL); ConvertIntToDecimalStringN(text, AI_GetDamage(data->aiBattlerId, battlerDef, i, AI_ATTACKING, gAiLogicData), - STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 110 + count * 54, i * 15, 0, NULL); + STR_CONV_MODE_LEADING_ZEROS, 3); + if ((chosenMoveIndex == i) && (gAiBattleData->chosenTarget[data->aiBattlerId] == j) && !(gAiLogicData->shouldSwitch & (1u << data->aiBattlerId))) + AddTextPrinterParameterized3(data->aiMovesWindowId, FONT_NORMAL, 110 + count * 54, (i * 15) + 15, sTextColorTable[COLORID_RED], 0, text); + else + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 110 + count * 54, (i * 15) + 15, 0, NULL); count++; } @@ -982,10 +772,10 @@ static void PutMovesPointsText(struct BattleDebugMenu *data) if (gAiLogicData->shouldSwitch & (1u << data->aiBattlerId)) { - u32 switchMon = GetMonData(&gEnemyParty[gAiLogicData->mostSuitableMonId[data->aiBattlerId]], MON_DATA_SPECIES); - - AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, sText_IsSwitching, 74, 64, 0, NULL); - AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, gSpeciesInfo[switchMon].speciesName, 74 + 68, 64, 0, NULL); + struct Pokemon *party = GetBattlerParty(data->aiBattlerId); + u32 switchMon = GetMonData(&party[gAiLogicData->mostSuitableMonId[data->aiBattlerId]], MON_DATA_SPECIES); + AddTextPrinterParameterized3(data->aiMovesWindowId, FONT_NORMAL, 74, 79, sTextColorTable[COLORID_RED], 0, COMPOUND_STRING("Switching to ")); + AddTextPrinterParameterized3(data->aiMovesWindowId, FONT_NORMAL, 74 + 68, 79, sTextColorTable[COLORID_RED], 0, gSpeciesInfo[switchMon].speciesName); } CopyWindowToVram(data->aiMovesWindowId, COPYWIN_FULL); @@ -1037,7 +827,7 @@ static void Task_ShowAiPoints(u8 taskId) { data->spriteIds.aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species, SpriteCallbackDummy, - 95 + (count * 60), 17, 0, 0); + 106 + (count * 54), 17, 0, 0); gSprites[data->spriteIds.aiIconSpriteIds[i]].data[0] = i; // battler id count++; } @@ -1052,7 +842,7 @@ static void Task_ShowAiPoints(u8 taskId) GetMonData(mon, MON_DATA_IS_SHINY), gBattleMons[data->aiBattlerId].personality, TRUE, - 39, 130, 15, TAG_NONE); + 39, 135, 15, TAG_NONE); data->aiViewState++; break; // Put text @@ -1128,8 +918,8 @@ static void PutAiInfoText(struct BattleDebugMenu *data) { if (IsOnPlayerSide(i) && IsBattlerAlive(i)) { - u16 ability = gAiLogicData->abilities[i]; - enum ItemHoldEffect holdEffect = gAiLogicData->holdEffects[i]; + enum Ability ability = gAiLogicData->abilities[i]; + enum HoldEffect holdEffect = gAiLogicData->holdEffects[i]; u16 item = gAiLogicData->items[i]; u8 x = (i == B_POSITION_PLAYER_LEFT) ? 83 + (i) * 75 : 83 + (i-1) * 75; AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, gAbilitiesInfo[ability].name, x, 0, 0, NULL); @@ -1415,6 +1205,13 @@ static void Task_DebugMenuProcessInput(u8 taskId) SwitchToAiPartyView(taskId); return; } + else if (listItemId == LIST_ITEM_INSTANT_WIN && JOY_NEW(A_BUTTON)) + { + BattleDebug_WonBattle(); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_DebugMenuFadeOut; + return; + } data->currentMainListItemId = listItemId; // Create the secondary menu list. @@ -1586,20 +1383,9 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data) itemsCount = ARRAY_COUNT(sStatus1ListItems); data->bitfield = sStatus1Bitfield; break; - case LIST_ITEM_STATUS2: - listTemplate.items = sStatus2ListItems; - itemsCount = ARRAY_COUNT(sStatus2ListItems); - data->bitfield = sStatus2Bitfield; - break; - case LIST_ITEM_STATUS3: - listTemplate.items = sStatus3ListItems; - itemsCount = ARRAY_COUNT(sStatus3ListItems); - data->bitfield = sStatus3Bitfield; - break; - case LIST_ITEM_STATUS4: - listTemplate.items = sStatus4ListItems; - itemsCount = ARRAY_COUNT(sStatus4ListItems); - data->bitfield = sStatus4Bitfield; + case LIST_ITEM_VOLATILE: + listTemplate.items = sVolatileStatusListItems; + itemsCount = ARRAY_COUNT(sVolatileStatusListItems); break; case LIST_ITEM_AI: listTemplate.items = sAIListItems; @@ -1610,10 +1396,15 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data) listTemplate.items = sVariousListItems; itemsCount = ARRAY_COUNT(sVariousListItems); break; + case LIST_ITEM_HAZARDS: + listTemplate.items = sHazardsListItems; + itemsCount = ARRAY_COUNT(sHazardsListItems); + break; case LIST_ITEM_SIDE_STATUS: listTemplate.items = sSideStatusListItems; itemsCount = ARRAY_COUNT(sSideStatusListItems); break; + case LIST_ITEM_INSTANT_WIN: case LIST_ITEM_AI_MOVES_PTS: case LIST_ITEM_AI_INFO: return; @@ -1703,7 +1494,7 @@ static void PrintSecondaryEntries(struct BattleDebugMenu *data) case LIST_ITEM_TYPES: for (i = 0; i < 3; i++) { - u8 *types = &gBattleMons[data->battlerId].types[0]; + enum Type *types = &gBattleMons[data->battlerId].types[0]; PadString(gTypesInfo[types[i]].name, text); printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y; @@ -1808,6 +1599,12 @@ static void UpdateBattlerValue(struct BattleDebugMenu *data) *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~(GetBitfieldToAndValue(data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount)); *(u32 *)(data->modifyArrows.modifiedValPtr) |= (data->modifyArrows.currValue << data->bitfield[data->currentSecondaryListItemId].currBit); break; + case VAL_VOLATILE: + SetMonVolatile(data->battlerId, data->currentSecondaryListItemId, data->modifyArrows.currValue); + break; + case VAL_HAZARDS: + ChangeHazardsValue(data); + break; case VAR_SIDE_STATUS: *GetSideStatusValue(data, TRUE, data->modifyArrows.currValue != 0) = data->modifyArrows.currValue; break; @@ -1818,12 +1615,12 @@ static void UpdateBattlerValue(struct BattleDebugMenu *data) *(u8 *)(data->modifyArrows.modifiedValPtr) = data->modifyArrows.currValue; if (*(u8 *)(data->modifyArrows.modifiedValPtr) == 0) { - gBattleMons[data->battlerId].status2 &= ~STATUS2_SUBSTITUTE; + gBattleMons[data->battlerId].volatiles.substitute = FALSE; gBattleSpritesDataPtr->battlerData[data->battlerId].behindSubstitute = 0; } else { - gBattleMons[data->battlerId].status2 |= STATUS2_SUBSTITUTE; + gBattleMons[data->battlerId].volatiles.substitute = TRUE; gBattleSpritesDataPtr->battlerData[data->battlerId].behindSubstitute = 1; } break; @@ -1831,13 +1628,13 @@ static void UpdateBattlerValue(struct BattleDebugMenu *data) if (data->modifyArrows.currValue) { if (IsBattlerAlive(BATTLE_OPPOSITE(data->battlerId))) - gBattleMons[data->battlerId].status2 |= STATUS2_INFATUATED_WITH(BATTLE_OPPOSITE(data->battlerId)); + gBattleMons[data->battlerId].volatiles.infatuation = INFATUATED_WITH(BATTLE_OPPOSITE(data->battlerId)); else - gBattleMons[data->battlerId].status2 |= STATUS2_INFATUATED_WITH(BATTLE_PARTNER(BATTLE_OPPOSITE(data->battlerId))); + gBattleMons[data->battlerId].volatiles.infatuation = INFATUATED_WITH(BATTLE_PARTNER(BATTLE_OPPOSITE(data->battlerId))); } else { - gBattleMons[data->battlerId].status2 &= ~STATUS2_INFATUATION; + gBattleMons[data->battlerId].volatiles.infatuation = 0; } break; } @@ -1885,6 +1682,83 @@ static void ValueToCharDigits(u8 *charDigits, u32 newValue, u8 maxDigits) charDigits[i] = valueDigits[i] + CHAR_0; } +static void ChangeHazardsValue(struct BattleDebugMenu *data) +{ + u32 side = GetBattlerSide(data->battlerId); + + switch (data->currentSecondaryListItemId) + { + case LIST_SIDE_SPIKES: + if (data->modifyArrows.currValue > 0) + { + if (gSideTimers[side].spikesAmount == 0) + PushHazardTypeToQueue(side, HAZARDS_SPIKES); + gSideTimers[side].spikesAmount = data->modifyArrows.currValue; + } + else if (data->modifyArrows.currValue == 0) + { + gSideTimers[side].spikesAmount = 0; + RemoveHazardFromField(side, HAZARDS_SPIKES); + } + break; + case LIST_SIDE_TOXIC_SPIKES: + if (data->modifyArrows.currValue > 0) + { + if (gSideTimers[side].toxicSpikesAmount == 0) + PushHazardTypeToQueue(side, HAZARDS_TOXIC_SPIKES); + gSideTimers[side].toxicSpikesAmount = data->modifyArrows.currValue; + } + else if (data->modifyArrows.currValue == 0) + { + gSideTimers[side].toxicSpikesAmount = 0; + RemoveHazardFromField(side, HAZARDS_TOXIC_SPIKES); + } + break; + case LIST_SIDE_STICKY_WEB: + if (data->modifyArrows.currValue > 0) + PushHazardTypeToQueue(side, HAZARDS_STICKY_WEB); + else if (data->modifyArrows.currValue == 0) + RemoveHazardFromField(side, HAZARDS_STICKY_WEB); + break; + case LIST_SIDE_STEALTH_ROCK: + if (data->modifyArrows.currValue > 0) + PushHazardTypeToQueue(side, HAZARDS_STEALTH_ROCK); + else if (data->modifyArrows.currValue == 0) + RemoveHazardFromField(side, HAZARDS_STEALTH_ROCK); + break; + case LIST_SIDE_STEELSURGE: + if (data->modifyArrows.currValue > 0) + PushHazardTypeToQueue(side, HAZARDS_STEELSURGE); + else if (data->modifyArrows.currValue == 0) + RemoveHazardFromField(side, HAZARDS_STEELSURGE); + break; + } +} + +static u32 GetHazardsValue(struct BattleDebugMenu *data) +{ + u32 hazardsLayers = 0; + switch (data->currentSecondaryListItemId) + { + case LIST_SIDE_SPIKES: + hazardsLayers = gSideTimers[GetBattlerSide(data->battlerId)].spikesAmount; + break; + case LIST_SIDE_TOXIC_SPIKES: + hazardsLayers = gSideTimers[GetBattlerSide(data->battlerId)].toxicSpikesAmount; + break; + case LIST_SIDE_STICKY_WEB: + hazardsLayers = IsHazardOnSide(GetBattlerSide(data->battlerId), HAZARDS_STICKY_WEB); + break; + case LIST_SIDE_STEALTH_ROCK: + hazardsLayers = IsHazardOnSide(GetBattlerSide(data->battlerId), HAZARDS_STEALTH_ROCK); + break; + case LIST_SIDE_STEELSURGE: + hazardsLayers = IsHazardOnSide(GetBattlerSide(data->battlerId), HAZARDS_STEELSURGE); + break; + } + return hazardsLayers; +} + static u16 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus, bool32 statusTrue) { struct SideTimer *sideTimer = &gSideTimers[GetBattlerSide(data->battlerId)]; @@ -1909,26 +1783,6 @@ static u16 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_LIGHTSCREEN; } return &sideTimer->lightscreenTimer; - case LIST_SIDE_STICKY_WEB: - if (changeStatus) - { - if (statusTrue) - *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STICKY_WEB; - else - *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STICKY_WEB; - sideTimer->stickyWebBattlerId = data->battlerId; - sideTimer->stickyWebBattlerSide = GetBattlerSide(data->battlerId); - } - return &sideTimer->stickyWebAmount; - case LIST_SIDE_SPIKES: - if (changeStatus) - { - if (statusTrue) - *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SPIKES; - else - *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SPIKES; - } - return &sideTimer->spikesAmount; case LIST_SIDE_SAFEGUARD: if (changeStatus) { @@ -1974,33 +1828,6 @@ static u16 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_LUCKY_CHANT; } return &sideTimer->luckyChantTimer; - case LIST_SIDE_TOXIC_SPIKES: - if (changeStatus) - { - if (statusTrue) - *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TOXIC_SPIKES; - else - *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TOXIC_SPIKES; - } - return &sideTimer->toxicSpikesAmount; - case LIST_SIDE_STEALTH_ROCK: - if (changeStatus) - { - if (statusTrue) - *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEALTH_ROCK; - else - *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEALTH_ROCK; - } - return &sideTimer->stealthRockAmount; - case LIST_SIDE_STEELSURGE: - if (changeStatus) - { - if (statusTrue) - *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEELSURGE; - else - *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEELSURGE; - } - return &sideTimer->steelsurgeAmount; case LIST_SIDE_DAMAGE_NON_TYPES: if (changeStatus) { @@ -2167,7 +1994,7 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) data->modifyArrows.maxDigits = 1; data->modifyArrows.modifiedValPtr = NULL; data->modifyArrows.typeOfVal = VAR_IN_LOVE; - data->modifyArrows.currValue = (gBattleMons[data->battlerId].status2 & STATUS2_INFATUATION) != 0; + data->modifyArrows.currValue = gBattleMons[data->battlerId].volatiles.infatuation; } break; case LIST_ITEM_STATUS1: @@ -2175,21 +2002,28 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) data->modifyArrows.currValue = GetBitfieldValue(gBattleMons[data->battlerId].status1, data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); data->modifyArrows.typeOfVal = VAL_BITFIELD_32; goto CASE_ITEM_STATUS; - case LIST_ITEM_STATUS2: - data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].status2; - data->modifyArrows.currValue = GetBitfieldValue(gBattleMons[data->battlerId].status2, data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); - data->modifyArrows.typeOfVal = VAL_BITFIELD_32; - goto CASE_ITEM_STATUS; - case LIST_ITEM_STATUS3: - data->modifyArrows.modifiedValPtr = &gStatuses3[data->battlerId]; - data->modifyArrows.currValue = GetBitfieldValue(gStatuses3[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); - data->modifyArrows.typeOfVal = VAL_BITFIELD_32; - goto CASE_ITEM_STATUS; - case LIST_ITEM_STATUS4: - data->modifyArrows.modifiedValPtr = &gStatuses4[data->battlerId]; - data->modifyArrows.currValue = GetBitfieldValue(gStatuses4[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); - data->modifyArrows.typeOfVal = VAL_BITFIELD_32; - goto CASE_ITEM_STATUS; + case LIST_ITEM_VOLATILE: + data->modifyArrows.currValue = GetBattlerVolatile(data->battlerId, data->currentSecondaryListItemId); + data->modifyArrows.typeOfVal = VAL_VOLATILE; + data->modifyArrows.minValue = 0; +#define UNPACK_VOLATILE_MAX_SIZE(_enum, _fieldName, _typeMaxValue, ...) case _enum: data->modifyArrows.maxValue = min(MAX_u16, GET_VOLATILE_MAXIMUM(_typeMaxValue)); break; + switch (data->currentSecondaryListItemId) + { + VOLATILE_DEFINITIONS(UNPACK_VOLATILE_MAX_SIZE) + /* Expands to the following: + * case VOLATILE_CONFUSION: + data->modifyArrows.maxValue = MAX_BITS(3); // Max value 7 + break; + * case VOLATILE_FLINCHED: + data->modifyArrows.maxValue = MAX_BITS(1); // Max value 1 + break; + * ...etc. + */ + default: + data->modifyArrows.maxValue = 0; + } + data->modifyArrows.maxDigits = MAX_DIGITS(data->modifyArrows.maxValue); + break; case LIST_ITEM_AI: data->modifyArrows.modifiedValPtr = &gAiThinkingStruct->aiFlags[data->battlerId]; data->modifyArrows.currValue = GetBitfieldValue(gAiThinkingStruct->aiFlags[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); @@ -2198,18 +2032,31 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) CASE_ITEM_STATUS: data->modifyArrows.minValue = 0; data->modifyArrows.maxValue = (1 << data->bitfield[data->currentSecondaryListItemId].bitsCount) - 1; - data->modifyArrows.maxDigits = sBitsToMaxDigit[data->bitfield[data->currentSecondaryListItemId].bitsCount]; + data->modifyArrows.maxDigits = MAX_DIGITS(data->modifyArrows.maxValue); break; - case LIST_ITEM_SIDE_STATUS: + case LIST_ITEM_HAZARDS: data->modifyArrows.minValue = 0; - - if (data->currentSecondaryListItemId == LIST_SIDE_SPIKES) + switch (data->currentSecondaryListItemId) + { + case LIST_SIDE_SPIKES: data->modifyArrows.maxValue = 3; - else if (data->currentSecondaryListItemId == LIST_SIDE_STEALTH_ROCK || data->currentSecondaryListItemId == LIST_SIDE_STICKY_WEB) + break; + case LIST_SIDE_TOXIC_SPIKES: + data->modifyArrows.maxValue = 2; + break; + case LIST_SIDE_STICKY_WEB: + case LIST_SIDE_STEALTH_ROCK: + case LIST_SIDE_STEELSURGE: data->modifyArrows.maxValue = 1; - else - data->modifyArrows.maxValue = 9; - + break; + } + data->modifyArrows.maxDigits = 2; + data->modifyArrows.typeOfVal = VAL_HAZARDS; + data->modifyArrows.currValue = GetHazardsValue(data); + break; + case LIST_ITEM_SIDE_STATUS: + data->modifyArrows.minValue = 0; + data->modifyArrows.maxValue = 9; data->modifyArrows.maxDigits = 2; data->modifyArrows.modifiedValPtr = &gSideStatuses[GetBattlerSide(data->battlerId)]; data->modifyArrows.typeOfVal = VAR_SIDE_STATUS; @@ -2308,276 +2155,145 @@ static void UpdateMonData(struct BattleDebugMenu *data) } } -static const u8 sText_HoldEffectNone[] = _("????????"); -static const u8 sText_HoldEffectRestoreHp[] = _("Restore Hp"); -static const u8 sText_HoldEffectCurePar[] = _("Cure Par"); -static const u8 sText_HoldEffectCureSlp[] = _("Cure Slp"); -static const u8 sText_HoldEffectCurePsn[] = _("Cure Psn"); -static const u8 sText_HoldEffectCureBrn[] = _("Cure Brn"); -static const u8 sText_HoldEffectCureFrz[] = _("Cure Frz"); -static const u8 sText_HoldEffectRestorePp[] = _("Restore Pp"); -static const u8 sText_HoldEffectCureConfusion[] = _("Cure Confusion"); -static const u8 sText_HoldEffectCureStatus[] = _("Cure Status"); -static const u8 sText_HoldEffectConfuseSpicy[] = _("Confuse Spicy"); -static const u8 sText_HoldEffectConfuseDry[] = _("Confuse Dry"); -static const u8 sText_HoldEffectConfuseSweet[] = _("Confuse Sweet"); -static const u8 sText_HoldEffectConfuseBitter[] = _("Confuse Bitter"); -static const u8 sText_HoldEffectConfuseSour[] = _("Confuse Sour"); -static const u8 sText_HoldEffectAttackUp[] = _("Attack Up"); -static const u8 sText_HoldEffectDefenseUp[] = _("Defense Up"); -static const u8 sText_HoldEffectSpeedUp[] = _("Speed Up"); -static const u8 sText_HoldEffectSpAttackUp[] = _("Sp Attack Up"); -static const u8 sText_HoldEffectSpDefenseUp[] = _("Sp Defense Up"); -static const u8 sText_HoldEffectCriticalUp[] = _("Critical Up"); -static const u8 sText_HoldEffectRandomStatUp[] = _("Random Stat Up"); -static const u8 sText_HoldEffectEvasionUp[] = _("Evasion Up"); -static const u8 sText_HoldEffectRestoreStats[] = _("Restore Stats"); -static const u8 sText_HoldEffectMachoBrace[] = _("Macho Brace"); -static const u8 sText_HoldEffectExpShare[] = _("Exp Share"); -static const u8 sText_HoldEffectQuickClaw[] = _("Quick Claw"); -static const u8 sText_HoldEffectFriendshipUp[] = _("Friendship Up"); -static const u8 sText_HoldEffectMentalHerb[] = _("Mental Herb"); -static const u8 sText_HoldEffectChoiceBand[] = _("Choice Band"); -static const u8 sText_HoldEffectFlinch[] = _("Flinch"); -static const u8 sText_HoldEffectDoublePrize[] = _("Double Prize"); -static const u8 sText_HoldEffectRepel[] = _("Repel"); -static const u8 sText_HoldEffectSoulDew[] = _("Soul Dew"); -static const u8 sText_HoldEffectDeepSeaTooth[] = _("Deep Sea Tooth"); -static const u8 sText_HoldEffectDeepSeaScale[] = _("Deep Sea Scale"); -static const u8 sText_HoldEffectCanAlwaysRun[] = _("Can Always Run"); -static const u8 sText_HoldEffectPreventEvolve[] = _("Prevent Evolve"); -static const u8 sText_HoldEffectFocusBand[] = _("Focus Band"); -static const u8 sText_HoldEffectLuckyEgg[] = _("Lucky Egg"); -static const u8 sText_HoldEffectScopeLens[] = _("Scope Lens"); -static const u8 sText_HoldEffectLeftovers[] = _("Leftovers"); -static const u8 sText_HoldEffectDragonScale[] = _("Dragon Scale"); -static const u8 sText_HoldEffectLightBall[] = _("Light Ball"); -static const u8 sText_HoldEffectTypePower[] = _("Type Power"); -static const u8 sText_HoldEffectUpgrade[] = _("Upgrade"); -static const u8 sText_HoldEffectShellBell[] = _("Shell Bell"); -static const u8 sText_HoldEffectLuckyPunch[] = _("Lucky Punch"); -static const u8 sText_HoldEffectMetalPowder[] = _("Metal Powder"); -static const u8 sText_HoldEffectThickClub[] = _("Thick Club"); -static const u8 sText_HoldEffectLeek[] = _("Leek"); -static const u8 sText_HoldEffectChoiceScarf[] = _("Choice Scarf"); -static const u8 sText_HoldEffectChoiceSpecs[] = _("Choice Specs"); -static const u8 sText_HoldEffectDampRock[] = _("Damp Rock"); -static const u8 sText_HoldEffectGripClaw[] = _("Grip Claw"); -static const u8 sText_HoldEffectHeatRock[] = _("Heat Rock"); -static const u8 sText_HoldEffectIcyRock[] = _("Icy Rock"); -static const u8 sText_HoldEffectLightClay[] = _("Light Clay"); -static const u8 sText_HoldEffectSmoothRock[] = _("Smooth Rock"); -static const u8 sText_HoldEffectPowerHerb[] = _("Power Herb"); -static const u8 sText_HoldEffectBigRoot[] = _("Big Root"); -static const u8 sText_HoldEffectExpertBelt[] = _("Expert Belt"); -static const u8 sText_HoldEffectLifeOrb[] = _("Life Orb"); -static const u8 sText_HoldEffectMetronome[] = _("Metronome"); -static const u8 sText_HoldEffectMuscleBand[] = _("Muscle Band"); -static const u8 sText_HoldEffectWideLens[] = _("Wide Lens"); -static const u8 sText_HoldEffectWiseGlasses[] = _("Wise Glasses"); -static const u8 sText_HoldEffectZoomLens[] = _("Zoom Lens"); -static const u8 sText_HoldEffectLaggingTail[] = _("Lagging Tail"); -static const u8 sText_HoldEffectFocusSash[] = _("Focus Sash"); -static const u8 sText_HoldEffectFlameOrb[] = _("Flame Orb"); -static const u8 sText_HoldEffectToxicOrb[] = _("Toxic Orb"); -static const u8 sText_HoldEffectStickyBarb[] = _("Sticky Barb"); -static const u8 sText_HoldEffectIronBall[] = _("Iron Ball"); -static const u8 sText_HoldEffectBlackSludge[] = _("Black Sludge"); -static const u8 sText_HoldEffectDestinyKnot[] = _("Destiny Knot"); -static const u8 sText_HoldEffectShedShell[] = _("Shed Shell"); -static const u8 sText_HoldEffectQuickPowder[] = _("Quick Powder"); -static const u8 sText_HoldEffectAdamantOrb[] = _("Adamant Orb"); -static const u8 sText_HoldEffectLustrousOrb[] = _("Lustrous Orb"); -static const u8 sText_HoldEffectGriseousOrb[] = _("Griseous Orb"); -static const u8 sText_HoldEffectEnigmaBerry[] = _("Enigma Berry"); -static const u8 sText_HoldEffectResistBerry[] = _("Resist Berry"); -static const u8 sText_HoldEffectPowerItem[] = _("Power Item"); -static const u8 sText_HoldEffectRestorePctHp[] = _("Restore Pct Hp"); -static const u8 sText_HoldEffectMicleBerry[] = _("Micle Berry"); -static const u8 sText_HoldEffectCustapBerry[] = _("Custap Berry"); -static const u8 sText_HoldEffectJabocaBerry[] = _("Jaboca Berry"); -static const u8 sText_HoldEffectRowapBerry[] = _("Rowap Berry"); -static const u8 sText_HoldEffectKeeBerry[] = _("Kee Berry"); -static const u8 sText_HoldEffectMarangaBerry[] = _("Maranga Berry"); -static const u8 sText_HoldEffectFloatStone[] = _("Float Stone"); -static const u8 sText_HoldEffectEviolite[] = _("Eviolite"); -static const u8 sText_HoldEffectAssaultVest[] = _("Assault Vest"); -static const u8 sText_HoldEffectDrive[] = _("Drive"); -static const u8 sText_HoldEffectGems[] = _("Gems"); -static const u8 sText_HoldEffectRockyHelmet[] = _("Rocky Helmet"); -static const u8 sText_HoldEffectAirBalloon[] = _("Air Balloon"); -static const u8 sText_HoldEffectRedCard[] = _("Red Card"); -static const u8 sText_HoldEffectRingTarget[] = _("Ring Target"); -static const u8 sText_HoldEffectBindingBand[] = _("Binding Band"); -static const u8 sText_HoldEffectEjectButton[] = _("Eject Button"); -static const u8 sText_HoldEffectAbsorbBulb[] = _("Absorb Bulb"); -static const u8 sText_HoldEffectCellBattery[] = _("Cell Battery"); -static const u8 sText_HoldEffectMegaStone[] = _("Mega Stone"); -static const u8 sText_HoldEffectSafetyGoggles[] = _("Safety Goggles"); -static const u8 sText_HoldEffectLuminousMoss[] = _("Luminous Moss"); -static const u8 sText_HoldEffectSnowball[] = _("Snowball"); -static const u8 sText_HoldEffectWeaknessPolicy[] = _("Weakness Policy"); -static const u8 sText_HoldEffectPrimalOrb[] = _("Primal Orb"); -static const u8 sText_HoldEffectProtectivePads[] = _("Protective Pads"); -static const u8 sText_HoldEffectTerrainExtender[] = _("Terrain Extender"); -static const u8 sText_HoldEffectSeeds[] = _("Seeds"); -static const u8 sText_HoldEffectAdrenalineOrb[] = _("Adrenaline Orb"); -static const u8 sText_HoldEffectMemory[] = _("Memory"); -static const u8 sText_HoldEffectZCrystal[] = _("Z-Crystal"); -static const u8 sText_HoldEffectPlate[] = _("Plate"); -static const u8 sText_HoldEffectUtilityUmbrella[] = _("Utility Umbrella"); -static const u8 sText_HoldEffectEjectPack[] = _("Eject Pack"); -static const u8 sText_HoldEffectRoomService[] = _("Room Service"); -static const u8 sText_HoldEffectBlunderPolicy[] = _("Blunder Policy"); -static const u8 sText_HoldEffectHeavyDutyBoots[] = _("Heavy Duty Boots"); -static const u8 sText_HoldEffectThroatSpray[] = _("Throat Spray"); -static const u8 sText_HoldEffectAbilityShield[] = _("Ability Shield"); -static const u8 sText_HoldEffectClearAmulet[] = _("Clear Amulet"); -static const u8 sText_HoldEffectMirrorHerb[] = _("Mirror Herb"); -static const u8 sText_HoldEffectPunchingGlove[] = _("Punching Glove"); -static const u8 sText_HoldEffectCovertCloak[] = _("Covert Cloak"); -static const u8 sText_HoldEffectLoadedDice[] = _("Loaded Dice"); -static const u8 sText_HoldEffectBoosterEnergy[] = _("Booster Energy"); -static const u8 sText_HoldEffectBerserkGene[] = _("Berserk Gene"); -static const u8 sText_HoldEffectOgerponMask[] = _("Ogerpon Mask"); -static const u8 *const sHoldEffectNames[] = -{ - [HOLD_EFFECT_NONE] = sText_HoldEffectNone, - [HOLD_EFFECT_RESTORE_HP] = sText_HoldEffectRestoreHp, - [HOLD_EFFECT_CURE_PAR] = sText_HoldEffectCurePar, - [HOLD_EFFECT_CURE_SLP] = sText_HoldEffectCureSlp, - [HOLD_EFFECT_CURE_PSN] = sText_HoldEffectCurePsn, - [HOLD_EFFECT_CURE_BRN] = sText_HoldEffectCureBrn, - [HOLD_EFFECT_CURE_FRZ] = sText_HoldEffectCureFrz, - [HOLD_EFFECT_RESTORE_PP] = sText_HoldEffectRestorePp, - [HOLD_EFFECT_CURE_CONFUSION] = sText_HoldEffectCureConfusion, - [HOLD_EFFECT_CURE_STATUS] = sText_HoldEffectCureStatus, - [HOLD_EFFECT_CONFUSE_SPICY] = sText_HoldEffectConfuseSpicy, - [HOLD_EFFECT_CONFUSE_DRY] = sText_HoldEffectConfuseDry, - [HOLD_EFFECT_CONFUSE_SWEET] = sText_HoldEffectConfuseSweet, - [HOLD_EFFECT_CONFUSE_BITTER] = sText_HoldEffectConfuseBitter, - [HOLD_EFFECT_CONFUSE_SOUR] = sText_HoldEffectConfuseSour, - [HOLD_EFFECT_ATTACK_UP] = sText_HoldEffectAttackUp, - [HOLD_EFFECT_DEFENSE_UP] = sText_HoldEffectDefenseUp, - [HOLD_EFFECT_SPEED_UP] = sText_HoldEffectSpeedUp, - [HOLD_EFFECT_SP_ATTACK_UP] = sText_HoldEffectSpAttackUp, - [HOLD_EFFECT_SP_DEFENSE_UP] = sText_HoldEffectSpDefenseUp, - [HOLD_EFFECT_CRITICAL_UP] = sText_HoldEffectCriticalUp, - [HOLD_EFFECT_RANDOM_STAT_UP] = sText_HoldEffectRandomStatUp, - [HOLD_EFFECT_EVASION_UP] = sText_HoldEffectEvasionUp, - [HOLD_EFFECT_WHITE_HERB] = sText_HoldEffectRestoreStats, - [HOLD_EFFECT_MACHO_BRACE] = sText_HoldEffectMachoBrace, - [HOLD_EFFECT_EXP_SHARE] = sText_HoldEffectExpShare, - [HOLD_EFFECT_QUICK_CLAW] = sText_HoldEffectQuickClaw, - [HOLD_EFFECT_FRIENDSHIP_UP] = sText_HoldEffectFriendshipUp, - [HOLD_EFFECT_MENTAL_HERB] = sText_HoldEffectMentalHerb, - [HOLD_EFFECT_CHOICE_BAND] = sText_HoldEffectChoiceBand, - [HOLD_EFFECT_FLINCH] = sText_HoldEffectFlinch, - [HOLD_EFFECT_DOUBLE_PRIZE] = sText_HoldEffectDoublePrize, - [HOLD_EFFECT_REPEL] = sText_HoldEffectRepel, - [HOLD_EFFECT_SOUL_DEW] = sText_HoldEffectSoulDew, - [HOLD_EFFECT_DEEP_SEA_TOOTH] = sText_HoldEffectDeepSeaTooth, - [HOLD_EFFECT_DEEP_SEA_SCALE] = sText_HoldEffectDeepSeaScale, - [HOLD_EFFECT_CAN_ALWAYS_RUN] = sText_HoldEffectCanAlwaysRun, - [HOLD_EFFECT_PREVENT_EVOLVE] = sText_HoldEffectPreventEvolve, - [HOLD_EFFECT_FOCUS_BAND] = sText_HoldEffectFocusBand, - [HOLD_EFFECT_LUCKY_EGG] = sText_HoldEffectLuckyEgg, - [HOLD_EFFECT_SCOPE_LENS] = sText_HoldEffectScopeLens, - [HOLD_EFFECT_LEFTOVERS] = sText_HoldEffectLeftovers, - [HOLD_EFFECT_DRAGON_SCALE] = sText_HoldEffectDragonScale, - [HOLD_EFFECT_LIGHT_BALL] = sText_HoldEffectLightBall, - [HOLD_EFFECT_TYPE_POWER] = sText_HoldEffectTypePower, - [HOLD_EFFECT_UPGRADE] = sText_HoldEffectUpgrade, - [HOLD_EFFECT_SHELL_BELL] = sText_HoldEffectShellBell, - [HOLD_EFFECT_LUCKY_PUNCH] = sText_HoldEffectLuckyPunch, - [HOLD_EFFECT_METAL_POWDER] = sText_HoldEffectMetalPowder, - [HOLD_EFFECT_THICK_CLUB] = sText_HoldEffectThickClub, - [HOLD_EFFECT_LEEK] = sText_HoldEffectLeek, - [HOLD_EFFECT_CHOICE_SCARF] = sText_HoldEffectChoiceScarf, - [HOLD_EFFECT_CHOICE_SPECS] = sText_HoldEffectChoiceSpecs, - [HOLD_EFFECT_DAMP_ROCK] = sText_HoldEffectDampRock, - [HOLD_EFFECT_GRIP_CLAW] = sText_HoldEffectGripClaw, - [HOLD_EFFECT_HEAT_ROCK] = sText_HoldEffectHeatRock, - [HOLD_EFFECT_ICY_ROCK] = sText_HoldEffectIcyRock, - [HOLD_EFFECT_LIGHT_CLAY] = sText_HoldEffectLightClay, - [HOLD_EFFECT_SMOOTH_ROCK] = sText_HoldEffectSmoothRock, - [HOLD_EFFECT_POWER_HERB] = sText_HoldEffectPowerHerb, - [HOLD_EFFECT_BIG_ROOT] = sText_HoldEffectBigRoot, - [HOLD_EFFECT_EXPERT_BELT] = sText_HoldEffectExpertBelt, - [HOLD_EFFECT_LIFE_ORB] = sText_HoldEffectLifeOrb, - [HOLD_EFFECT_METRONOME] = sText_HoldEffectMetronome, - [HOLD_EFFECT_MUSCLE_BAND] = sText_HoldEffectMuscleBand, - [HOLD_EFFECT_WIDE_LENS] = sText_HoldEffectWideLens, - [HOLD_EFFECT_WISE_GLASSES] = sText_HoldEffectWiseGlasses, - [HOLD_EFFECT_ZOOM_LENS] = sText_HoldEffectZoomLens, - [HOLD_EFFECT_LAGGING_TAIL] = sText_HoldEffectLaggingTail, - [HOLD_EFFECT_FOCUS_SASH] = sText_HoldEffectFocusSash, - [HOLD_EFFECT_FLAME_ORB] = sText_HoldEffectFlameOrb, - [HOLD_EFFECT_TOXIC_ORB] = sText_HoldEffectToxicOrb, - [HOLD_EFFECT_STICKY_BARB] = sText_HoldEffectStickyBarb, - [HOLD_EFFECT_IRON_BALL] = sText_HoldEffectIronBall, - [HOLD_EFFECT_BLACK_SLUDGE] = sText_HoldEffectBlackSludge, - [HOLD_EFFECT_DESTINY_KNOT] = sText_HoldEffectDestinyKnot, - [HOLD_EFFECT_SHED_SHELL] = sText_HoldEffectShedShell, - [HOLD_EFFECT_QUICK_POWDER] = sText_HoldEffectQuickPowder, - [HOLD_EFFECT_ADAMANT_ORB] = sText_HoldEffectAdamantOrb, - [HOLD_EFFECT_LUSTROUS_ORB] = sText_HoldEffectLustrousOrb, - [HOLD_EFFECT_GRISEOUS_ORB] = sText_HoldEffectGriseousOrb, - [HOLD_EFFECT_ENIGMA_BERRY] = sText_HoldEffectEnigmaBerry, - [HOLD_EFFECT_RESIST_BERRY] = sText_HoldEffectResistBerry, - [HOLD_EFFECT_POWER_ITEM] = sText_HoldEffectPowerItem, - [HOLD_EFFECT_RESTORE_PCT_HP] = sText_HoldEffectRestorePctHp, - [HOLD_EFFECT_MICLE_BERRY] = sText_HoldEffectMicleBerry, - [HOLD_EFFECT_CUSTAP_BERRY] = sText_HoldEffectCustapBerry, - [HOLD_EFFECT_JABOCA_BERRY] = sText_HoldEffectJabocaBerry, - [HOLD_EFFECT_ROWAP_BERRY] = sText_HoldEffectRowapBerry, - [HOLD_EFFECT_KEE_BERRY] = sText_HoldEffectKeeBerry, - [HOLD_EFFECT_MARANGA_BERRY] = sText_HoldEffectMarangaBerry, - [HOLD_EFFECT_PLATE] = sText_HoldEffectPlate, - [HOLD_EFFECT_FLOAT_STONE] = sText_HoldEffectFloatStone, - [HOLD_EFFECT_EVIOLITE] = sText_HoldEffectEviolite, - [HOLD_EFFECT_ASSAULT_VEST] = sText_HoldEffectAssaultVest, - [HOLD_EFFECT_DRIVE] = sText_HoldEffectDrive, - [HOLD_EFFECT_GEMS] = sText_HoldEffectGems, - [HOLD_EFFECT_ROCKY_HELMET] = sText_HoldEffectRockyHelmet, - [HOLD_EFFECT_AIR_BALLOON] = sText_HoldEffectAirBalloon, - [HOLD_EFFECT_RED_CARD] = sText_HoldEffectRedCard, - [HOLD_EFFECT_RING_TARGET] = sText_HoldEffectRingTarget, - [HOLD_EFFECT_BINDING_BAND] = sText_HoldEffectBindingBand, - [HOLD_EFFECT_EJECT_BUTTON] = sText_HoldEffectEjectButton, - [HOLD_EFFECT_ABSORB_BULB] = sText_HoldEffectAbsorbBulb, - [HOLD_EFFECT_CELL_BATTERY] = sText_HoldEffectCellBattery, - [HOLD_EFFECT_MEGA_STONE] = sText_HoldEffectMegaStone, - [HOLD_EFFECT_SAFETY_GOGGLES] = sText_HoldEffectSafetyGoggles, - [HOLD_EFFECT_LUMINOUS_MOSS] = sText_HoldEffectLuminousMoss, - [HOLD_EFFECT_SNOWBALL] = sText_HoldEffectSnowball, - [HOLD_EFFECT_WEAKNESS_POLICY] = sText_HoldEffectWeaknessPolicy, - [HOLD_EFFECT_PRIMAL_ORB] = sText_HoldEffectPrimalOrb, - [HOLD_EFFECT_PROTECTIVE_PADS] = sText_HoldEffectProtectivePads, - [HOLD_EFFECT_TERRAIN_EXTENDER] = sText_HoldEffectTerrainExtender, - [HOLD_EFFECT_SEEDS] = sText_HoldEffectSeeds, - [HOLD_EFFECT_ADRENALINE_ORB] = sText_HoldEffectAdrenalineOrb, - [HOLD_EFFECT_MEMORY] = sText_HoldEffectMemory, - [HOLD_EFFECT_Z_CRYSTAL] = sText_HoldEffectZCrystal, - [HOLD_EFFECT_UTILITY_UMBRELLA] = sText_HoldEffectUtilityUmbrella, - [HOLD_EFFECT_EJECT_PACK] = sText_HoldEffectEjectPack, - [HOLD_EFFECT_ROOM_SERVICE] = sText_HoldEffectRoomService, - [HOLD_EFFECT_BLUNDER_POLICY] = sText_HoldEffectBlunderPolicy, - [HOLD_EFFECT_HEAVY_DUTY_BOOTS] = sText_HoldEffectHeavyDutyBoots, - [HOLD_EFFECT_THROAT_SPRAY] = sText_HoldEffectThroatSpray, - [HOLD_EFFECT_ABILITY_SHIELD] = sText_HoldEffectAbilityShield, - [HOLD_EFFECT_CLEAR_AMULET] = sText_HoldEffectClearAmulet, - [HOLD_EFFECT_MIRROR_HERB] = sText_HoldEffectMirrorHerb, - [HOLD_EFFECT_PUNCHING_GLOVE] = sText_HoldEffectPunchingGlove, - [HOLD_EFFECT_COVERT_CLOAK] = sText_HoldEffectCovertCloak, - [HOLD_EFFECT_LOADED_DICE] = sText_HoldEffectLoadedDice, - [HOLD_EFFECT_BOOSTER_ENERGY] = sText_HoldEffectBoosterEnergy, - [HOLD_EFFECT_OGERPON_MASK] = sText_HoldEffectOgerponMask, - [HOLD_EFFECT_BERSERK_GENE] = sText_HoldEffectBerserkGene, +static const u8 *const sHoldEffectNames[HOLD_EFFECT_COUNT] = +{ + [HOLD_EFFECT_NONE] = COMPOUND_STRING("????????"), + [HOLD_EFFECT_RESTORE_HP] = COMPOUND_STRING("Restore Hp"), + [HOLD_EFFECT_CURE_PAR] = COMPOUND_STRING("Cure Par"), + [HOLD_EFFECT_CURE_SLP] = COMPOUND_STRING("Cure Slp"), + [HOLD_EFFECT_CURE_PSN] = COMPOUND_STRING("Cure Psn"), + [HOLD_EFFECT_CURE_BRN] = COMPOUND_STRING("Cure Brn"), + [HOLD_EFFECT_CURE_FRZ] = COMPOUND_STRING("Cure Frz"), + [HOLD_EFFECT_RESTORE_PP] = COMPOUND_STRING("Restore Pp"), + [HOLD_EFFECT_CURE_CONFUSION] = COMPOUND_STRING("Cure Confusion"), + [HOLD_EFFECT_CURE_STATUS] = COMPOUND_STRING("Cure Status"), + [HOLD_EFFECT_CONFUSE_SPICY] = COMPOUND_STRING("Confuse Spicy"), + [HOLD_EFFECT_CONFUSE_DRY] = COMPOUND_STRING("Confuse Dry"), + [HOLD_EFFECT_CONFUSE_SWEET] = COMPOUND_STRING("Confuse Sweet"), + [HOLD_EFFECT_CONFUSE_BITTER] = COMPOUND_STRING("Confuse Bitter"), + [HOLD_EFFECT_CONFUSE_SOUR] = COMPOUND_STRING("Confuse Sour"), + [HOLD_EFFECT_ATTACK_UP] = COMPOUND_STRING("Attack Up"), + [HOLD_EFFECT_DEFENSE_UP] = COMPOUND_STRING("Defense Up"), + [HOLD_EFFECT_SPEED_UP] = COMPOUND_STRING("Speed Up"), + [HOLD_EFFECT_SP_ATTACK_UP] = COMPOUND_STRING("Sp Attack Up"), + [HOLD_EFFECT_SP_DEFENSE_UP] = COMPOUND_STRING("Sp Defense Up"), + [HOLD_EFFECT_CRITICAL_UP] = COMPOUND_STRING("Critical Up"), + [HOLD_EFFECT_RANDOM_STAT_UP] = COMPOUND_STRING("Random Stat Up"), + [HOLD_EFFECT_EVASION_UP] = COMPOUND_STRING("Evasion Up"), + [HOLD_EFFECT_WHITE_HERB] = COMPOUND_STRING("Restore Stats"), + [HOLD_EFFECT_MACHO_BRACE] = COMPOUND_STRING("Macho Brace"), + [HOLD_EFFECT_EXP_SHARE] = COMPOUND_STRING("Exp Share"), + [HOLD_EFFECT_QUICK_CLAW] = COMPOUND_STRING("Quick Claw"), + [HOLD_EFFECT_FRIENDSHIP_UP] = COMPOUND_STRING("Friendship Up"), + [HOLD_EFFECT_MENTAL_HERB] = COMPOUND_STRING("Mental Herb"), + [HOLD_EFFECT_CHOICE_BAND] = COMPOUND_STRING("Choice Band"), + [HOLD_EFFECT_FLINCH] = COMPOUND_STRING("Flinch"), + [HOLD_EFFECT_DOUBLE_PRIZE] = COMPOUND_STRING("Double Prize"), + [HOLD_EFFECT_REPEL] = COMPOUND_STRING("Repel"), + [HOLD_EFFECT_SOUL_DEW] = COMPOUND_STRING("Soul Dew"), + [HOLD_EFFECT_DEEP_SEA_TOOTH] = COMPOUND_STRING("Deep Sea Tooth"), + [HOLD_EFFECT_DEEP_SEA_SCALE] = COMPOUND_STRING("Deep Sea Scale"), + [HOLD_EFFECT_CAN_ALWAYS_RUN] = COMPOUND_STRING("Can Always Run"), + [HOLD_EFFECT_PREVENT_EVOLVE] = COMPOUND_STRING("Prevent Evolve"), + [HOLD_EFFECT_FOCUS_BAND] = COMPOUND_STRING("Focus Band"), + [HOLD_EFFECT_LUCKY_EGG] = COMPOUND_STRING("Lucky Egg"), + [HOLD_EFFECT_SCOPE_LENS] = COMPOUND_STRING("Scope Lens"), + [HOLD_EFFECT_LEFTOVERS] = COMPOUND_STRING("Leftovers"), + [HOLD_EFFECT_DRAGON_SCALE] = COMPOUND_STRING("Dragon Scale"), + [HOLD_EFFECT_LIGHT_BALL] = COMPOUND_STRING("Light Ball"), + [HOLD_EFFECT_TYPE_POWER] = COMPOUND_STRING("Type Power"), + [HOLD_EFFECT_UPGRADE] = COMPOUND_STRING("Upgrade"), + [HOLD_EFFECT_SHELL_BELL] = COMPOUND_STRING("Shell Bell"), + [HOLD_EFFECT_LUCKY_PUNCH] = COMPOUND_STRING("Lucky Punch"), + [HOLD_EFFECT_METAL_POWDER] = COMPOUND_STRING("Metal Powder"), + [HOLD_EFFECT_THICK_CLUB] = COMPOUND_STRING("Thick Club"), + [HOLD_EFFECT_LEEK] = COMPOUND_STRING("Leek"), + [HOLD_EFFECT_CHOICE_SCARF] = COMPOUND_STRING("Choice Scarf"), + [HOLD_EFFECT_CHOICE_SPECS] = COMPOUND_STRING("Choice Specs"), + [HOLD_EFFECT_DAMP_ROCK] = COMPOUND_STRING("Damp Rock"), + [HOLD_EFFECT_GRIP_CLAW] = COMPOUND_STRING("Grip Claw"), + [HOLD_EFFECT_HEAT_ROCK] = COMPOUND_STRING("Heat Rock"), + [HOLD_EFFECT_ICY_ROCK] = COMPOUND_STRING("Icy Rock"), + [HOLD_EFFECT_LIGHT_CLAY] = COMPOUND_STRING("Light Clay"), + [HOLD_EFFECT_SMOOTH_ROCK] = COMPOUND_STRING("Smooth Rock"), + [HOLD_EFFECT_POWER_HERB] = COMPOUND_STRING("Power Herb"), + [HOLD_EFFECT_BIG_ROOT] = COMPOUND_STRING("Big Root"), + [HOLD_EFFECT_EXPERT_BELT] = COMPOUND_STRING("Expert Belt"), + [HOLD_EFFECT_LIFE_ORB] = COMPOUND_STRING("Life Orb"), + [HOLD_EFFECT_METRONOME] = COMPOUND_STRING("Metronome"), + [HOLD_EFFECT_MUSCLE_BAND] = COMPOUND_STRING("Muscle Band"), + [HOLD_EFFECT_WIDE_LENS] = COMPOUND_STRING("Wide Lens"), + [HOLD_EFFECT_WISE_GLASSES] = COMPOUND_STRING("Wise Glasses"), + [HOLD_EFFECT_ZOOM_LENS] = COMPOUND_STRING("Zoom Lens"), + [HOLD_EFFECT_LAGGING_TAIL] = COMPOUND_STRING("Lagging Tail"), + [HOLD_EFFECT_FOCUS_SASH] = COMPOUND_STRING("Focus Sash"), + [HOLD_EFFECT_FLAME_ORB] = COMPOUND_STRING("Flame Orb"), + [HOLD_EFFECT_TOXIC_ORB] = COMPOUND_STRING("Toxic Orb"), + [HOLD_EFFECT_STICKY_BARB] = COMPOUND_STRING("Sticky Barb"), + [HOLD_EFFECT_IRON_BALL] = COMPOUND_STRING("Iron Ball"), + [HOLD_EFFECT_BLACK_SLUDGE] = COMPOUND_STRING("Black Sludge"), + [HOLD_EFFECT_DESTINY_KNOT] = COMPOUND_STRING("Destiny Knot"), + [HOLD_EFFECT_SHED_SHELL] = COMPOUND_STRING("Shed Shell"), + [HOLD_EFFECT_QUICK_POWDER] = COMPOUND_STRING("Quick Powder"), + [HOLD_EFFECT_ADAMANT_ORB] = COMPOUND_STRING("Adamant Orb"), + [HOLD_EFFECT_LUSTROUS_ORB] = COMPOUND_STRING("Lustrous Orb"), + [HOLD_EFFECT_GRISEOUS_ORB] = COMPOUND_STRING("Griseous Orb"), + [HOLD_EFFECT_ENIGMA_BERRY] = COMPOUND_STRING("Enigma Berry"), + [HOLD_EFFECT_RESIST_BERRY] = COMPOUND_STRING("Resist Berry"), + [HOLD_EFFECT_POWER_ITEM] = COMPOUND_STRING("Power Item"), + [HOLD_EFFECT_RESTORE_PCT_HP] = COMPOUND_STRING("Restore Pct Hp"), + [HOLD_EFFECT_MICLE_BERRY] = COMPOUND_STRING("Micle Berry"), + [HOLD_EFFECT_CUSTAP_BERRY] = COMPOUND_STRING("Custap Berry"), + [HOLD_EFFECT_JABOCA_BERRY] = COMPOUND_STRING("Jaboca Berry"), + [HOLD_EFFECT_ROWAP_BERRY] = COMPOUND_STRING("Rowap Berry"), + [HOLD_EFFECT_KEE_BERRY] = COMPOUND_STRING("Kee Berry"), + [HOLD_EFFECT_MARANGA_BERRY] = COMPOUND_STRING("Maranga Berry"), + [HOLD_EFFECT_PLATE] = COMPOUND_STRING("Plate"), + [HOLD_EFFECT_FLOAT_STONE] = COMPOUND_STRING("Float Stone"), + [HOLD_EFFECT_EVIOLITE] = COMPOUND_STRING("Eviolite"), + [HOLD_EFFECT_ASSAULT_VEST] = COMPOUND_STRING("Assault Vest"), + [HOLD_EFFECT_DRIVE] = COMPOUND_STRING("Drive"), + [HOLD_EFFECT_GEMS] = COMPOUND_STRING("Gems"), + [HOLD_EFFECT_ROCKY_HELMET] = COMPOUND_STRING("Rocky Helmet"), + [HOLD_EFFECT_AIR_BALLOON] = COMPOUND_STRING("Air Balloon"), + [HOLD_EFFECT_RED_CARD] = COMPOUND_STRING("Red Card"), + [HOLD_EFFECT_RING_TARGET] = COMPOUND_STRING("Ring Target"), + [HOLD_EFFECT_BINDING_BAND] = COMPOUND_STRING("Binding Band"), + [HOLD_EFFECT_EJECT_BUTTON] = COMPOUND_STRING("Eject Button"), + [HOLD_EFFECT_ABSORB_BULB] = COMPOUND_STRING("Absorb Bulb"), + [HOLD_EFFECT_CELL_BATTERY] = COMPOUND_STRING("Cell Battery"), + [HOLD_EFFECT_MEGA_STONE] = COMPOUND_STRING("Mega Stone"), + [HOLD_EFFECT_SAFETY_GOGGLES] = COMPOUND_STRING("Safety Goggles"), + [HOLD_EFFECT_LUMINOUS_MOSS] = COMPOUND_STRING("Luminous Moss"), + [HOLD_EFFECT_SNOWBALL] = COMPOUND_STRING("Snowball"), + [HOLD_EFFECT_WEAKNESS_POLICY] = COMPOUND_STRING("Weakness Policy"), + [HOLD_EFFECT_PRIMAL_ORB] = COMPOUND_STRING("Primal Orb"), + [HOLD_EFFECT_PROTECTIVE_PADS] = COMPOUND_STRING("Protective Pads"), + [HOLD_EFFECT_TERRAIN_EXTENDER] = COMPOUND_STRING("Terrain Extender"), + [HOLD_EFFECT_TERRAIN_SEED] = COMPOUND_STRING("Seeds"), + [HOLD_EFFECT_ADRENALINE_ORB] = COMPOUND_STRING("Adrenaline Orb"), + [HOLD_EFFECT_MEMORY] = COMPOUND_STRING("Memory"), + [HOLD_EFFECT_Z_CRYSTAL] = COMPOUND_STRING("Z-Crystal"), + [HOLD_EFFECT_UTILITY_UMBRELLA] = COMPOUND_STRING("Utility Umbrella"), + [HOLD_EFFECT_EJECT_PACK] = COMPOUND_STRING("Eject Pack"), + [HOLD_EFFECT_ROOM_SERVICE] = COMPOUND_STRING("Room Service"), + [HOLD_EFFECT_BLUNDER_POLICY] = COMPOUND_STRING("Blunder Policy"), + [HOLD_EFFECT_HEAVY_DUTY_BOOTS] = COMPOUND_STRING("Heavy Duty Boots"), + [HOLD_EFFECT_THROAT_SPRAY] = COMPOUND_STRING("Throat Spray"), + [HOLD_EFFECT_ABILITY_SHIELD] = COMPOUND_STRING("Ability Shield"), + [HOLD_EFFECT_CLEAR_AMULET] = COMPOUND_STRING("Clear Amulet"), + [HOLD_EFFECT_MIRROR_HERB] = COMPOUND_STRING("Mirror Herb"), + [HOLD_EFFECT_PUNCHING_GLOVE] = COMPOUND_STRING("Punching Glove"), + [HOLD_EFFECT_COVERT_CLOAK] = COMPOUND_STRING("Covert Cloak"), + [HOLD_EFFECT_LOADED_DICE] = COMPOUND_STRING("Loaded Dice"), + [HOLD_EFFECT_BOOSTER_ENERGY] = COMPOUND_STRING("Booster Energy"), + [HOLD_EFFECT_OGERPON_MASK] = COMPOUND_STRING("Ogerpon Mask"), + [HOLD_EFFECT_BERSERK_GENE] = COMPOUND_STRING("Berserk Gene"), }; -static const u8 *GetHoldEffectName(enum ItemHoldEffect holdEffect) + +static const u8 *GetHoldEffectName(enum HoldEffect holdEffect) { - if (holdEffect > ARRAY_COUNT(sHoldEffectNames)) + if (sHoldEffectNames[holdEffect] == NULL) return sHoldEffectNames[0]; return sHoldEffectNames[holdEffect]; } diff --git a/src/battle_dome.c b/src/battle_dome.c index 28de62c07a92..30075fad88b8 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -27,6 +27,7 @@ #include "sound.h" #include "pokemon_icon.h" #include "data.h" +#include "item.h" #include "international_string_util.h" #include "trainer_pokemon_sprites.h" #include "scanline_effect.h" @@ -2030,8 +2031,8 @@ static void InitDomeTrainers(void) rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL); rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL); rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL); - monTypesBits |= 1u << gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[0]; - monTypesBits |= 1u << gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[1]; + monTypesBits |= 1u << GetSpeciesType(GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL), 0); + monTypesBits |= 1u << GetSpeciesType(GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL), 1); } // Count the number of types in the players party, to factor into the ranking @@ -2062,8 +2063,8 @@ static void InitDomeTrainers(void) rankingScores[i] += statValues[STAT_SPDEF]; rankingScores[i] += statValues[STAT_SPEED]; rankingScores[i] += statValues[STAT_HP]; - monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]; - monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]; + monTypesBits |= 1u << GetSpeciesType(gFacilityTrainerMons[DOME_MONS[i][j]].species, 0); + monTypesBits |= 1u << GetSpeciesType(gFacilityTrainerMons[DOME_MONS[i][j]].species, 1); } for (monTypesCount = 0, j = 0; j < 32; j++) @@ -2135,9 +2136,8 @@ static void InitDomeTrainers(void) static void CalcDomeMonStats(const struct TrainerMon *fmon, int level, u8 ivs, int *stats) { int evs[NUM_STATS]; - int i; - for (i = 0; i < NUM_STATS; i++) + for (enum Stat i = 0; i < NUM_STATS; i++) { if (fmon->ev != NULL) evs[i] = fmon->ev[i]; @@ -2151,7 +2151,7 @@ static void CalcDomeMonStats(const struct TrainerMon *fmon, int level, u8 ivs, i } else { - int n = 2 * gSpeciesInfo[fmon->species].baseHP; + int n = 2 * GetSpeciesBaseHP(fmon->species); stats[STAT_HP] = (((n + ivs + evs[STAT_HP] / 4) * level) / 100) + level + 10; } @@ -2392,15 +2392,16 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) { - int defType1, defType2, defAbility, moveType; + enum Type defType1, defType2, moveType; int typePower = TYPE_x1; + enum Ability defAbility; if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || IsBattleMoveStatus(move)) return 0; - defType1 = gSpeciesInfo[targetSpecies].types[0]; - defType2 = gSpeciesInfo[targetSpecies].types[1]; - defAbility = gSpeciesInfo[targetSpecies].abilities[0]; + defType1 = GetSpeciesType(targetSpecies, 0); + defType2 = GetSpeciesType(targetSpecies, 1); + defAbility = GetSpeciesAbility(targetSpecies, 0); moveType = GetMoveType(move); if (defAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND) @@ -3938,6 +3939,7 @@ static bool32 IsDomeRiskyMoveEffect(enum BattleMoveEffects effect) switch(effect) { case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: case EFFECT_SPITE: case EFFECT_DESTINY_BOND: case EFFECT_PERISH_SONG: @@ -3954,7 +3956,8 @@ static bool32 IsDomeLuckyMove(u32 move) switch(GetMoveEffect(move)) { case EFFECT_COUNTER: - case EFFECT_OHKO: // Technically redundant because of the above accuracy check + case EFFECT_OHKO: + case EFFECT_SHEER_COLD: case EFFECT_METRONOME: case EFFECT_MIRROR_MOVE: case EFFECT_SKETCH: @@ -3974,12 +3977,12 @@ static bool32 IsDomeLuckyMove(u32 move) static bool32 IsDomePopularMove(u32 move) { u8 i; - for (i = 0; i < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; i++) + for (i = 0; i < NUM_ALL_MACHINES; i++) { - if (ItemIdToBattleMoveId(ITEM_TM01 + i) == move) + if (GetTMHMMoveId(i + 1) == move) return TRUE; } - if (i == NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES) + if (i == NUM_ALL_MACHINES) return FALSE; // Filter in TMs/HMs if (GetMovePower(move) >= 90) @@ -5125,18 +5128,20 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun moves[i * MAX_MON_MOVES + j] = gFacilityTrainerMons[DOME_MONS[winnerTournamentId][i]].moves[j]; movePower = GetMovePower(moves[i * MAX_MON_MOVES + j]); + enum BattleMoveEffects effect = GetMoveEffect(moves[i * MAX_MON_MOVES + j]); if (IsBattleMoveStatus(moves[i * MAX_MON_MOVES + j])) movePower = 40; else if (movePower == 1) movePower = 60; - else if (GetMoveEffect(moves[i * MAX_MON_MOVES + j]) == EFFECT_EXPLOSION) + else if (B_EXPLOSION_DEFENSE < GEN_5 + && (effect == EFFECT_EXPLOSION || EFFECT_MISTY_EXPLOSION)) movePower /= 2; for (k = 0; k < FRONTIER_PARTY_SIZE; k++) { u32 personality = 0; u32 targetSpecies = 0; - u32 targetAbility = 0; + enum Ability targetAbility = 0; uq4_12_t typeMultiplier = 0; do { @@ -5146,14 +5151,14 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun targetSpecies = gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].species; if (personality & 1) - targetAbility = gSpeciesInfo[targetSpecies].abilities[1]; + targetAbility = GetSpeciesAbility(targetSpecies, 1); else - targetAbility = gSpeciesInfo[targetSpecies].abilities[0]; + targetAbility = GetSpeciesAbility(targetSpecies, 0); typeMultiplier = CalcPartyMonTypeEffectivenessMultiplier(moves[i * 4 + j], targetSpecies, targetAbility); if (typeMultiplier == UQ_4_12(0)) moveScores[i * MAX_MON_MOVES + j] += 0; - else if (typeMultiplier >= UQ_4_12(2)) + else if (typeMultiplier >= UQ_4_12(2.0)) moveScores[i * MAX_MON_MOVES + j] += movePower * 2; else if (typeMultiplier <= UQ_4_12(0.5)) moveScores[i * MAX_MON_MOVES + j] += movePower / 2; @@ -5260,7 +5265,7 @@ static void Task_ShowTourneyTree(u8 taskId) break; case 2: sTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); - LZDecompressWram(gDomeTourneyTree_Tilemap, sTilemapBuffer); + DecompressDataWithHeaderWram(gDomeTourneyTree_Tilemap, sTilemapBuffer); SetBgTilemapBuffer(1, sTilemapBuffer); CopyBgTilemapBufferToVram(1); DecompressAndLoadBgGfxUsingHeap(1, gDomeTourneyTree_Gfx, 0x2000, 0, 0); @@ -5676,7 +5681,7 @@ static void ResetSketchedMoves(void) count = 0; while (count < MAX_MON_MOVES) { - if (GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_MOVE1 + count, NULL) == GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + moveSlot, NULL)) + if (GetMonData(GetSavedPlayerPartyMon(playerMonId), MON_DATA_MOVE1 + count, NULL) == GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + moveSlot, NULL)) break; count++; } @@ -5684,7 +5689,7 @@ static void ResetSketchedMoves(void) SetMonMoveSlot(&gPlayerParty[i], MOVE_SKETCH, moveSlot); } - gSaveBlock1Ptr->playerParty[playerMonId] = gPlayerParty[i]; + SavePlayerPartyMon(playerMonId, &gPlayerParty[i]); } } @@ -5695,7 +5700,7 @@ static void RestoreDomePlayerPartyHeldItems(void) for (i = 0; i < DOME_BATTLE_PARTY_SIZE; i++) { int playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gSelectedOrderFromParty[i] - 1] - 1; - u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_HELD_ITEM, NULL); + u16 item = GetMonData(GetSavedPlayerPartyMon(playerMonId), MON_DATA_HELD_ITEM, NULL); SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); } } @@ -5820,8 +5825,8 @@ static void InitRandomTourneyTreeResults(void) statSums[i] += statValues[STAT_SPDEF]; statSums[i] += statValues[STAT_SPEED]; statSums[i] += statValues[STAT_HP]; - monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]; - monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]; + monTypesBits |= 1u << GetSpeciesType(gFacilityTrainerMons[DOME_MONS[i][j]].species, 0); + monTypesBits |= 1u << GetSpeciesType(gFacilityTrainerMons[DOME_MONS[i][j]].species, 1); } // Because GF hates temporary vars, trainerId acts like monTypesCount here. @@ -5947,12 +5952,7 @@ static void DecideRoundWinners(u8 roundId) } } species = gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].species; - points1 += ( gSpeciesInfo[species].baseHP - + gSpeciesInfo[species].baseAttack - + gSpeciesInfo[species].baseDefense - + gSpeciesInfo[species].baseSpeed - + gSpeciesInfo[species].baseSpAttack - + gSpeciesInfo[species].baseSpDefense) / 10; + points1 += GetTotalBaseStat(species) / 10; } // Random part of the formula. points1 += (Random() & 0x1F); @@ -5970,12 +5970,7 @@ static void DecideRoundWinners(u8 roundId) } } species = gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].species; - points2 += ( gSpeciesInfo[species].baseHP - + gSpeciesInfo[species].baseAttack - + gSpeciesInfo[species].baseDefense - + gSpeciesInfo[species].baseSpeed - + gSpeciesInfo[species].baseSpAttack - + gSpeciesInfo[species].baseSpDefense) / 10; + points2 += GetTotalBaseStat(species) / 10; } // Random part of the formula. points2 += (Random() & 0x1F); diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 93642f4c93c4..d5edbc0e61eb 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -19,7 +19,6 @@ #include "constants/battle_move_effects.h" #include "constants/battle_string_ids.h" #include "constants/flags.h" -#include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" @@ -28,7 +27,7 @@ static u32 GetMaxPowerTier(u32 move); struct GMaxMove { u16 species; - u8 moveType; + enum Type moveType; u16 gmaxMove; }; @@ -66,15 +65,15 @@ static const struct GMaxMove sGMaxMoveTable[] = {SPECIES_ALCREMIE_GMAX, TYPE_FAIRY, MOVE_G_MAX_FINALE}, {SPECIES_COPPERAJAH_GMAX, TYPE_STEEL, MOVE_G_MAX_STEELSURGE}, {SPECIES_DURALUDON_GMAX, TYPE_DRAGON, MOVE_G_MAX_DEPLETION}, - {SPECIES_URSHIFU_SINGLE_STRIKE_GMAX,TYPE_DARK, MOVE_G_MAX_ONE_BLOW}, - {SPECIES_URSHIFU_RAPID_STRIKE_GMAX, TYPE_WATER, MOVE_G_MAX_RAPID_FLOW}, + {SPECIES_URSHIFU_SINGLE_STRIKE_GMAX, TYPE_DARK, MOVE_G_MAX_ONE_BLOW}, + {SPECIES_URSHIFU_RAPID_STRIKE_GMAX, TYPE_WATER, MOVE_G_MAX_RAPID_FLOW}, }; // Returns whether a battler can Dynamax. bool32 CanDynamax(u32 battler) { u16 species = GetBattlerVisualSpecies(battler); - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, FALSE); + enum HoldEffect holdEffect = GetBattlerHoldEffectIgnoreNegation(battler); // Prevents Zigzagoon from dynamaxing in vanilla. if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE && !IsOnPlayerSide(battler)) @@ -178,17 +177,17 @@ void ActivateDynamax(u32 battler) // Set appropriate use flags. SetActiveGimmick(battler, GIMMICK_DYNAMAX); SetGimmickAsActivated(battler, GIMMICK_DYNAMAX); - gBattleStruct->dynamax.dynamaxTurns[battler] = gBattleTurnCounter + DYNAMAX_TURNS_COUNT; + gBattleStruct->dynamax.dynamaxTurns[battler] = DYNAMAX_TURNS_COUNT; // Substitute is removed upon Dynamaxing. - gBattleMons[battler].status2 &= ~STATUS2_SUBSTITUTE; + gBattleMons[battler].volatiles.substitute = FALSE; ClearBehindSubstituteBit(battler); // Choiced Moves are reset upon Dynamaxing. gBattleStruct->choicedMove[battler] = MOVE_NONE; // Try Gigantamax form change. - if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) // Ditto cannot Gigantamax. + if (!gBattleMons[battler].volatiles.transformed) // Ditto cannot Gigantamax. TryBattleFormChange(battler, FORM_CHANGE_BATTLE_GIGANTAMAX); BattleScriptExecute(BattleScript_DynamaxBegins); @@ -234,22 +233,7 @@ bool32 IsMoveBlockedByMaxGuard(u32 move) return FALSE; } -// Weight-based moves (and some other moves in Raids) are blocked by Dynamax. -bool32 IsMoveBlockedByDynamax(u32 move) -{ - // TODO: Certain moves are banned in raids. - switch (GetMoveEffect(move)) - { - case EFFECT_HEAT_CRASH: - case EFFECT_LOW_KICK: - return TRUE; - default: - break; - } - return FALSE; -} - -static u16 GetTypeBasedMaxMove(u32 battler, u32 type) +static u16 GetTypeBasedMaxMove(u32 battler, enum Type type) { // Gigantamax check u32 i; @@ -280,7 +264,7 @@ static u16 GetTypeBasedMaxMove(u32 battler, u32 type) // Returns the appropriate Max Move or G-Max Move for a battler to use. u16 GetMaxMove(u32 battler, u32 baseMove) { - u32 moveType; + enum Type moveType; SetTypeBeforeUsingMove(baseMove, battler); moveType = GetBattleMoveType(baseMove); @@ -333,7 +317,7 @@ u32 GetMaxMovePower(u32 move) } tier = GetMaxPowerTier(move); - u32 moveType = GetMoveType(move); + enum Type moveType = GetMoveType(move); if (moveType == TYPE_FIGHTING || moveType == TYPE_POISON || move == MOVE_MULTI_ATTACK) @@ -387,7 +371,7 @@ static u32 GetMaxPowerTier(u32 move) switch (GetMoveEffect(move)) { case EFFECT_BIDE: - case EFFECT_SUPER_FANG: + case EFFECT_FIXED_PERCENT_DAMAGE: case EFFECT_LEVEL_DAMAGE: case EFFECT_PSYWAVE: case EFFECT_COUNTER: @@ -400,13 +384,14 @@ static u32 GetMaxPowerTier(u32 move) case EFFECT_TERRAIN_PULSE: case EFFECT_PUNISHMENT: case EFFECT_TRUMP_CARD: - case EFFECT_FIXED_DAMAGE_ARG: + case EFFECT_FIXED_HP_DAMAGE: case EFFECT_SPIT_UP: case EFFECT_NATURAL_GIFT: case EFFECT_MIRROR_COAT: case EFFECT_FINAL_GAMBIT: return MAX_POWER_TIER_2; case EFFECT_OHKO: + case EFFECT_SHEER_COLD: case EFFECT_RETURN: case EFFECT_FRUSTRATION: case EFFECT_HEAT_CRASH: @@ -452,7 +437,7 @@ bool32 IsMaxMove(u32 move) } // Assigns the multistring to use for the "Damage Non- Types" G-Max effect. -void ChooseDamageNonTypesString(u8 type) +void ChooseDamageNonTypesString(enum Type type) { switch (type) { @@ -468,6 +453,8 @@ void ChooseDamageNonTypesString(u8 type) case TYPE_ROCK: gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SURROUNDED_BY_ROCKS; break; + default: + break; } } @@ -502,10 +489,9 @@ void BS_UndoDynamax(void) if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) { - BattleScriptPushCursor(); UndoDynamax(battler); gBattleScripting.battler = battler; - gBattlescriptCurrInstr = BattleScript_DynamaxEnds_Ret; + BattleScriptCall(BattleScript_DynamaxEnds_Ret); return; } diff --git a/src/battle_end_turn.c b/src/battle_end_turn.c index 6cf45ded4dd8..ef5539ebbfee 100644 --- a/src/battle_end_turn.c +++ b/src/battle_end_turn.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_hold_effects.h" #include "battle_util.h" #include "battle_controllers.h" #include "battle_ai_util.h" @@ -7,116 +8,10 @@ #include "battle_scripts.h" #include "constants/battle.h" #include "constants/battle_string_ids.h" -#include "constants/hold_effects.h" #include "constants/abilities.h" #include "constants/items.h" #include "constants/moves.h" -// General End Turn Effects based on research from smogon from vanilla games: -// https://www.smogon.com/forums/threads/sword-shield-battle-mechanics-research.3655528/page-64#post-9244179 -enum EndTurnResolutionOrder -{ - ENDTURN_ORDER, - ENDTURN_VARIOUS, - ENDTURN_WEATHER, - ENDTURN_WEATHER_DAMAGE, - ENDTURN_GEN_3_BERRY_ACTIVATION, - ENDTURN_EMERGENCY_EXIT_1, - ENDTURN_AFFECTION, - ENDTURN_FUTURE_SIGHT, - ENDTURN_WISH, - ENDTURN_FIRST_EVENT_BLOCK, - ENDTURN_EMERGENCY_EXIT_2, - ENDTURN_AQUA_RING, - ENDTURN_INGRAIN, - ENDTURN_LEECH_SEED, - ENDTURN_POISON, - ENDTURN_BURN, - ENDTURN_FROSTBITE, - ENDTURN_NIGHTMARE, - ENDTURN_CURSE, - ENDTURN_WRAP, - ENDTURN_SALT_CURE, - ENDTURN_OCTOLOCK, - ENDTURN_SYRUP_BOMB, - ENDTURN_TAUNT, - ENDTURN_TORMENT, - ENDTURN_ENCORE, - ENDTURN_DISABLE, - ENDTURN_MAGNET_RISE, - ENDTURN_TELEKINESIS, - ENDTURN_HEAL_BLOCK, - ENDTURN_EMBARGO, - ENDTURN_YAWN, - ENDTURN_PERISH_SONG, - ENDTURN_ROOST, - ENDTURN_EMERGENCY_EXIT_3, - ENDTURN_SECOND_EVENT_BLOCK, - ENDTURN_TRICK_ROOM, - ENDTURN_GRAVITY, - ENDTURN_WATER_SPORT, - ENDTURN_MUD_SPORT, - ENDTURN_WONDER_ROOM, - ENDTURN_MAGIC_ROOM, - ENDTURN_TERRAIN, - ENDTURN_THIRD_EVENT_BLOCK, - ENDTURN_EMERGENCY_EXIT_4, - ENDTURN_ABILITIES, - ENDTURN_FOURTH_EVENT_BLOCK, - ENDTURN_DYNAMAX, - ENDTURN_COUNT, -}; - -// Block that handles effects for each individual battler on the field (eg residual damage) -enum FirstEventBlock -{ - FIRST_EVENT_BLOCK_GMAX_MOVE_RESIDUAL, // Needs to be split - FIRST_EVENT_BLOCK_SEA_OF_FIRE_DAMAGE, - FIRST_EVENT_BLOCK_THRASH, // Thrash isn't handled here in vanilla but for now it is that best place for it. - FIRST_EVENT_BLOCK_GRASSY_TERRAIN_HEAL, - FIRST_EVENT_BLOCK_ABILITIES, - FIRST_EVENT_BLOCK_HEAL_ITEMS, -}; - -// Block that tries to remove side statuses -enum SecondEventBlock -{ - SECOND_EVENT_BLOCK_REFLECT, - SECOND_EVENT_BLOCK_LIGHT_SCREEN, - SECOND_EVENT_BLOCK_SAFEGUARD, - SECOND_EVENT_BLOCK_MIST, - SECOND_EVENT_BLOCK_TAILWIND, - SECOND_EVENT_BLOCK_LUCKY_CHANT, - SECOND_EVENT_BLOCK_RAINBOW, - SECOND_EVENT_BLOCK_SEA_OF_FIRE, - SECOND_EVENT_BLOCK_SWAMP, - SECOND_EVENT_BLOCK_AURORA_VEIL, -}; - -// Block that handles Uproar, items and non-form changing abilities -enum ThirdEventBlock -{ - THIRD_EVENT_BLOCK_UPROAR, - THIRD_EVENT_BLOCK_ABILITIES, - THIRD_EVENT_BLOCK_ITEMS, -}; - -// Form changing abilities and Eject Pack -enum FourthEventBlock -{ - FOURTH_EVENT_BLOCK_HUNGER_SWITCH, - FOURTH_EVENT_BLOCK_EJECT_PACK, -}; - -static inline bool32 IsBattlerProtectedByMagicGuard(u32 battler, u32 ability) -{ - if (ability != ABILITY_MAGIC_GUARD) - return FALSE; - - RecordAbilityBattle(battler, ability); - return TRUE; -} - static u32 GetBattlerSideForMessage(u32 side) { u32 battler = 0; @@ -135,21 +30,11 @@ static bool32 HandleEndTurnOrder(u32 battler) bool32 effect = FALSE; gBattleTurnCounter++; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; - u32 i, j; - for (i = 0; i < gBattlersCount; i++) - { + for (u32 i = 0; i < gBattlersCount; i++) gBattlerByTurnOrder[i] = i; - } - for (i = 0; i < gBattlersCount - 1; i++) - { - for (j = i + 1; j < gBattlersCount; j++) - { - if (GetWhichBattlerFaster(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE) == -1) - SwapTurnOrder(i, j); - } - } + SortBattlersBySpeed(gBattlerByTurnOrder, FALSE); return effect; } @@ -159,29 +44,43 @@ static bool32 HandleEndTurnVarious(u32 battler) u32 i; bool32 effect = FALSE; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; - if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK && gFieldTimers.fairyLockTimer == gBattleTurnCounter) + if (gFieldTimers.fairyLockTimer > 0 && --gFieldTimers.fairyLockTimer == 0) gFieldStatuses &= ~STATUS_FIELD_FAIRY_LOCK; for (i = 0; i < NUM_BATTLE_SIDES; i++) { - if (gSideStatuses[i] & SIDE_STATUS_DAMAGE_NON_TYPES && gSideTimers[i].damageNonTypesTimer == gBattleTurnCounter) + if (gSideTimers[i].damageNonTypesTimer > 0 && --gSideTimers[i].damageNonTypesTimer == 0) gSideStatuses[i] &= ~SIDE_STATUS_DAMAGE_NON_TYPES; } for (i = 0; i < gBattlersCount; i++) { - if (gStatuses3[i] & STATUS3_ALWAYS_HITS) - gStatuses3[i] -= STATUS3_ALWAYS_HITS_TURN(1); + if (gDisableStructs[i].throatChopTimer > 0) + gDisableStructs[i].throatChopTimer--; + + if (gBattleMons[i].volatiles.lockOn > 0) + gBattleMons[i].volatiles.lockOn--; - if (gDisableStructs[i].chargeTimer && --gDisableStructs[i].chargeTimer == 0) - gStatuses3[i] &= ~STATUS3_CHARGED_UP; + if (B_CHARGE < GEN_9 && gBattleMons[i].volatiles.chargeTimer > 0) + gBattleMons[i].volatiles.chargeTimer--; - if (gStatuses3[i] & STATUS3_LASER_FOCUS && gDisableStructs[i].laserFocusTimer == gBattleTurnCounter) - gStatuses3[i] &= ~STATUS3_LASER_FOCUS; + if (gDisableStructs[i].laserFocusTimer > 0 && --gDisableStructs[i].laserFocusTimer == 0) + gBattleMons[i].volatiles.laserFocus = FALSE; - gBattleStruct->hpBefore[i] = gBattleMons[i].hp; + gBattleStruct->battlerState[i].wasAboveHalfHp = gBattleMons[i].hp > gBattleMons[i].maxHP / 2; + } + + if (gBattleStruct->incrementEchoedVoice) + { + if (gBattleStruct->echoedVoiceCounter < 4) + gBattleStruct->echoedVoiceCounter++; + gBattleStruct->incrementEchoedVoice = FALSE; + } + else + { + gBattleStruct->echoedVoiceCounter = 0; } return effect; @@ -189,7 +88,7 @@ static bool32 HandleEndTurnVarious(u32 battler) static bool32 HandleEndTurnWeather(u32 battler) { - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; return EndOrContinueWeather(); } @@ -197,18 +96,18 @@ static bool32 HandleEndTurnWeatherDamage(u32 battler) { bool32 effect = FALSE; - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); u32 currBattleWeather = GetCurrentBattleWeather(); if (currBattleWeather == 0xFF) { // If there is no weather on the field, no need to check other battlers so go to next state - gBattleStruct->turnEffectsBattlerId = 0; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurnBattler = 0; + gBattleStruct->eventState.endTurn++; return effect; } - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (!IsBattlerAlive(battler) || !HasWeatherEffect()) return effect; @@ -241,14 +140,13 @@ static bool32 HandleEndTurnWeatherDamage(u32 battler) && ability != ABILITY_SAND_FORCE && ability != ABILITY_SAND_RUSH && ability != ABILITY_OVERCOAT - && !IS_BATTLER_ANY_TYPE(gBattlerAttacker, TYPE_ROCK, TYPE_GROUND, TYPE_STEEL) - && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IS_BATTLER_ANY_TYPE(battler, TYPE_ROCK, TYPE_GROUND, TYPE_STEEL) + && gBattleMons[battler].volatiles.semiInvulnerable != STATE_UNDERGROUND + && gBattleMons[battler].volatiles.semiInvulnerable != STATE_UNDERWATER + && GetBattlerHoldEffect(battler) != HOLD_EFFECT_SAFETY_GOGGLES + && !IsAbilityAndRecord(battler, ability, ABILITY_MAGIC_GUARD)) { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 16); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SANDSTORM; BattleScriptExecute(BattleScript_DamagingWeather); effect = TRUE; @@ -266,13 +164,12 @@ static bool32 HandleEndTurnWeatherDamage(u32 battler) if (ability != ABILITY_SNOW_CLOAK && ability != ABILITY_OVERCOAT && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE) - && !(gStatuses3[battler] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && gBattleMons[battler].volatiles.semiInvulnerable != STATE_UNDERGROUND + && gBattleMons[battler].volatiles.semiInvulnerable != STATE_UNDERWATER + && GetBattlerHoldEffect(battler) != HOLD_EFFECT_SAFETY_GOGGLES + && !IsAbilityAndRecord(battler, ability, ABILITY_MAGIC_GUARD)) { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 16); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_HAIL; BattleScriptExecute(BattleScript_DamagingWeather); effect = TRUE; @@ -284,49 +181,24 @@ static bool32 HandleEndTurnWeatherDamage(u32 battler) return effect; } -static bool32 HandleEndTurnGenThreeBerryActivation(u32 battler) -{ - bool32 effect = FALSE; - - if (B_HP_BERRIES >= GEN_4) // Skip handler for > Gen3 - { - gBattleStruct->endTurnEventsCounter++; - return effect; - } - gBattleStruct->turnEffectsBattlerId++; - effect = TryRestoreHPBerries(battler, ITEMEFFECT_NORMAL); - return effect; -} - static bool32 HandleEndTurnEmergencyExit(u32 battler) { bool32 effect = FALSE; - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (ability == ABILITY_EMERGENCY_EXIT || ability == ABILITY_WIMP_OUT) + if (EmergencyExitCanBeTriggered(battler)) { - u32 cutoff = gBattleMons[battler].maxHP / 2; - bool32 HadMoreThanHalfHpNowDoesnt = gBattleStruct->hpBefore[battler] > cutoff && gBattleMons[battler].hp <= cutoff; - - if (HadMoreThanHalfHpNowDoesnt - && IsBattlerAlive(battler) - && (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) - && !(gBattleTypeFlags & BATTLE_TYPE_ARENA) - && CountUsablePartyMons(battler) > 0 - && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) // Not currently held by Sky Drop - { - gBattlerAbility = battler; - gLastUsedAbility = ability; + gBattlerAbility = battler; + gLastUsedAbility = ability; - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || IsOnPlayerSide(battler)) - BattleScriptExecute(BattleScript_EmergencyExitEnd2); - else - BattleScriptExecute(BattleScript_EmergencyExitWildEnd2); + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + BattleScriptExecute(BattleScript_EmergencyExitEnd2); + else + BattleScriptExecute(BattleScript_EmergencyExitWildEnd2); - effect = TRUE; - } + effect = TRUE; } return effect; @@ -336,7 +208,7 @@ static bool32 HandleEndTurnAffection(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (!B_AFFECTION_MECHANICS || !IsBattlerAlive(battler) @@ -359,16 +231,10 @@ static bool32 HandleEndTurnFutureSight(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gWishFutureKnock.futureSightCounter[battler] == gBattleTurnCounter) + if (gWishFutureKnock.futureSightCounter[battler] > 0 && --gWishFutureKnock.futureSightCounter[battler] == 0) { - if (gWishFutureKnock.futureSightCounter[battler] == gBattleTurnCounter - && gWishFutureKnock.futureSightCounter[BATTLE_PARTNER(battler)] <= gBattleTurnCounter) - { - gSideStatuses[GetBattlerSide(battler)] &= ~SIDE_STATUS_FUTUREATTACK; - } - if (!IsBattlerAlive(battler)) return effect; @@ -397,26 +263,27 @@ static bool32 HandleEndTurnWish(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gWishFutureKnock.wishCounter[battler] == gBattleTurnCounter && IsBattlerAlive(battler)) + if (gWishFutureKnock.wishCounter[battler] > 0 && --gWishFutureKnock.wishCounter[battler] == 0 && IsBattlerAlive(battler)) { + s32 wishHeal = 0; gBattlerTarget = battler; PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, battler, gWishFutureKnock.wishPartyId[battler]) - if (B_WISH_HP_SOURCE >= GEN_5) + if (GetConfig(CONFIG_WISH_HP_SOURCE) >= GEN_5) { if (IsOnPlayerSide(battler)) - gBattleStruct->moveDamage[battler] = max(1, GetMonData(&gPlayerParty[gWishFutureKnock.wishPartyId[battler]], MON_DATA_MAX_HP) / 2); + wishHeal = GetMonData(&gPlayerParty[gWishFutureKnock.wishPartyId[battler]], MON_DATA_MAX_HP) / 2; else - gBattleStruct->moveDamage[battler] = max(1, GetMonData(&gEnemyParty[gWishFutureKnock.wishPartyId[battler]], MON_DATA_MAX_HP) / 2); + wishHeal = GetMonData(&gEnemyParty[gWishFutureKnock.wishPartyId[battler]], MON_DATA_MAX_HP) / 2; } else { - gBattleStruct->moveDamage[battler] = max(1, GetNonDynamaxMaxHP(battler) / 2); + wishHeal = GetNonDynamaxMaxHP(battler) / 2; } - gBattleStruct->moveDamage[battler] *= -1; - if (gStatuses3[battler] & STATUS3_HEAL_BLOCK) + SetHealAmount(battler, wishHeal); + if (gBattleMons[battler].volatiles.healBlock) BattleScriptExecute(BattleScript_WishButHealBlocked); else if (gBattleMons[battler].hp == gBattleMons[battler].maxHP) BattleScriptExecute(BattleScript_WishButFullHp); @@ -432,76 +299,82 @@ static bool32 HandleEndTurnWish(u32 battler) static bool32 HandleEndTurnFirstEventBlock(u32 battler) { bool32 effect = FALSE; - u32 side; - switch (gBattleStruct->eventBlockCounter) + if (!IsBattlerAlive(battler)) + { + gBattleStruct->eventState.endTurnBlock = 0; + gBattleStruct->eventState.endTurnBattler++; + return effect; + } + + switch (gBattleStruct->eventState.endTurnBlock) { case FIRST_EVENT_BLOCK_GMAX_MOVE_RESIDUAL: // TODO: Has to be split into 3 statuses and needs a queue side = GetBattlerSide(battler); if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES) { - if (IsBattlerAlive(battler) - && !IS_BATTLER_OF_TYPE(battler, gSideTimers[side].damageNonTypesType) - && !IsBattlerProtectedByMagicGuard(battler, GetBattlerAbility(battler))) + if (!IS_BATTLER_OF_TYPE(battler, gSideTimers[side].damageNonTypesType) + && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { - gBattlerAttacker = battler; - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 6; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 6); ChooseDamageNonTypesString(gSideTimers[side].damageNonTypesType); BattleScriptExecute(BattleScript_DamageNonTypesContinues); effect = TRUE; } } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case FIRST_EVENT_BLOCK_SEA_OF_FIRE_DAMAGE: - if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SEA_OF_FIRE && IsBattlerAlive(battler)) + if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SEA_OF_FIRE) { gBattlerAttacker = battler; - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8); BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, FALSE, STATUS1_BURN); MarkBattlerForControllerExec(battler); BattleScriptExecute(BattleScript_HurtByTheSeaOfFire); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case FIRST_EVENT_BLOCK_THRASH: - if (gBattleMons[battler].status2 & STATUS2_LOCK_CONFUSE && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) + if (gBattleMons[battler].volatiles.lockConfusionTurns && gBattleMons[battler].volatiles.semiInvulnerable != STATE_SKY_DROP) { - gBattleMons[battler].status2 -= STATUS2_LOCK_CONFUSE_TURN(1); + gBattleMons[battler].volatiles.lockConfusionTurns--; if (WasUnableToUseMove(battler)) { CancelMultiTurnMoves(battler, SKY_DROP_IGNORE); } - else if (!(gBattleMons[battler].status2 & STATUS2_LOCK_CONFUSE) && (gBattleMons[battler].status2 & STATUS2_MULTIPLETURNS)) + else if (!gBattleMons[battler].volatiles.lockConfusionTurns && gBattleMons[battler].volatiles.multipleTurns) { - gBattleMons[battler].status2 &= ~STATUS2_MULTIPLETURNS; - if (!(gBattleMons[battler].status2 & STATUS2_CONFUSION)) + gBattleMons[battler].volatiles.multipleTurns = FALSE; + if (!gBattleMons[battler].volatiles.confusionTurns) { - gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER; - SetMoveEffect(TRUE, FALSE); - if (gBattleMons[battler].status2 & STATUS2_CONFUSION) + SetMoveEffect(battler, battler, MOVE_EFFECT_CONFUSION, gBattlescriptCurrInstr, EFFECT_PRIMARY); + if (gBattleMons[battler].volatiles.confusionTurns) BattleScriptExecute(BattleScript_ThrashConfuses); effect = TRUE; } } } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case FIRST_EVENT_BLOCK_GRASSY_TERRAIN_HEAL: - if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerAlive(battler) && !IsBattlerAtMaxHp(battler) && IsBattlerGrounded(battler)) + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN + && !IsBattlerAtMaxHp(battler) + && !gBattleMons[battler].volatiles.healBlock + && !IsSemiInvulnerable(battler, CHECK_ALL) + && IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler))) { - gBattlerAttacker = battler; - gBattleStruct->moveDamage[battler] = -(GetNonDynamaxMaxHP(battler) / 16); + SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / 16); BattleScriptExecute(BattleScript_GrassyTerrainHeals); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case FIRST_EVENT_BLOCK_ABILITIES: { - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); switch (ability) { case ABILITY_HEALER: @@ -510,27 +383,18 @@ static bool32 HandleEndTurnFirstEventBlock(u32 battler) if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, battler, ability, 0, MOVE_NONE)) effect = TRUE; break; - } - gBattleStruct->eventBlockCounter++; - break; - } - case FIRST_EVENT_BLOCK_HEAL_ITEMS: - { - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); - switch (holdEffect) - { - case HOLD_EFFECT_LEFTOVERS: - case HOLD_EFFECT_BLACK_SLUDGE: - if (ItemBattleEffects(ITEMEFFECT_NORMAL, battler, FALSE)) - effect = TRUE; - break; default: break; } - gBattleStruct->eventBlockCounter = 0; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBlock++; break; } + case FIRST_EVENT_BLOCK_HEAL_ITEMS: + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsLeftoversActivation)) + effect = TRUE; + gBattleStruct->eventState.endTurnBlock = 0; + gBattleStruct->eventState.endTurnBattler++; + break; } return effect; @@ -540,14 +404,14 @@ static bool32 HandleEndTurnAquaRing(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses3[battler] & STATUS3_AQUA_RING - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battler].volatiles.aquaRing + && !gBattleMons[battler].volatiles.healBlock && !IsBattlerAtMaxHp(battler) && IsBattlerAlive(battler)) { - gBattleStruct->moveDamage[battler] = GetDrainedBigRootHp(battler, GetNonDynamaxMaxHP(battler) / 16); + SetHealAmount(battler, GetDrainedBigRootHp(battler, GetNonDynamaxMaxHP(battler) / 16)); BattleScriptExecute(BattleScript_AquaRingHeal); effect = TRUE; } @@ -559,14 +423,14 @@ static bool32 HandleEndTurnIngrain(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses3[battler] & STATUS3_ROOTED - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battler].volatiles.root + && !gBattleMons[battler].volatiles.healBlock && !IsBattlerAtMaxHp(battler) && IsBattlerAlive(battler)) { - gBattleStruct->moveDamage[battler] = GetDrainedBigRootHp(battler, GetNonDynamaxMaxHP(battler) / 16); + SetHealAmount(battler, GetDrainedBigRootHp(battler, GetNonDynamaxMaxHP(battler) / 16)); BattleScriptExecute(BattleScript_IngrainTurnHeal); effect = TRUE; } @@ -578,31 +442,33 @@ static bool32 HandleEndTurnLeechSeed(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses3[battler] & STATUS3_LEECHSEED - && IsBattlerAlive(gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER) + if (gBattleMons[battler].volatiles.leechSeed + && IsBattlerAlive(gBattleMons[battler].volatiles.leechSeed - 1) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, GetBattlerAbility(battler))) + && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { - gBattlerTarget = gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver. + gBattlerTarget = gBattleMons[battler].volatiles.leechSeed - 1; // leech seed receiver gBattleScripting.animArg1 = gBattlerTarget; gBattleScripting.animArg2 = gBattlerAttacker; - gBattleStruct->moveDamage[gBattlerAttacker] = max(1, GetNonDynamaxMaxHP(battler) / 8); - gBattleStruct->moveDamage[gBattlerTarget] = GetDrainedBigRootHp(gBattlerTarget, gBattleStruct->moveDamage[gBattlerAttacker]); - gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE; + s32 drainAmount = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; + s32 healAmount = GetDrainedBigRootHp(gBattlerTarget, drainAmount); if (GetBattlerAbility(battler) == ABILITY_LIQUID_OOZE) { - gBattleStruct->moveDamage[gBattlerTarget] = gBattleStruct->moveDamage[gBattlerTarget] * -1; + SetPassiveDamageAmount(gBattlerAttacker, drainAmount); + SetPassiveDamageAmount(gBattlerTarget, healAmount); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_OOZE; BattleScriptExecute(BattleScript_LeechSeedTurnDrainLiquidOoze); } - else if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) + else if (gBattleMons[gBattlerTarget].volatiles.healBlock) { BattleScriptExecute(BattleScript_LeechSeedTurnDrainHealBlock); } else { + SetPassiveDamageAmount(gBattlerAttacker, drainAmount); + SetHealAmount(gBattlerTarget, healAmount); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_DRAIN; BattleScriptExecute(BattleScript_LeechSeedTurnDrainRecovery); } @@ -616,42 +482,35 @@ static bool32 HandleEndTurnPoison(u32 battler) { bool32 effect = FALSE; - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if ((gBattleMons[battler].status1 & STATUS1_POISON || gBattleMons[battler].status1 & STATUS1_TOXIC_POISON) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsAbilityAndRecord(battler, ability, ABILITY_MAGIC_GUARD)) { if (ability == ABILITY_POISON_HEAL) { - if (!IsBattlerAtMaxHp(battler) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + if (!IsBattlerAtMaxHp(battler) && !gBattleMons[battler].volatiles.healBlock) { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; + SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / 8); BattleScriptExecute(BattleScript_PoisonHealActivates); effect = TRUE; } } else if (gBattleMons[battler].status1 & STATUS1_TOXIC_POISON) { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 16); if ((gBattleMons[battler].status1 & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns gBattleMons[battler].status1 += STATUS1_TOXIC_TURN(1); - gBattleStruct->moveDamage[battler] *= (gBattleMons[battler].status1 & STATUS1_TOXIC_COUNTER) >> 8; + gBattleStruct->passiveHpUpdate[battler] *= (gBattleMons[battler].status1 & STATUS1_TOXIC_COUNTER) >> 8; BattleScriptExecute(BattleScript_PoisonTurnDmg); effect = TRUE; } else { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8); BattleScriptExecute(BattleScript_PoisonTurnDmg); effect = TRUE; } @@ -664,23 +523,22 @@ static bool32 HandleEndTurnBurn(u32 battler) { bool32 effect = FALSE; - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (gBattleMons[battler].status1 & STATUS1_BURN && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsAbilityAndRecord(battler, ability, ABILITY_MAGIC_GUARD)) { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); + s32 burnDamage = GetNonDynamaxMaxHP(battler) / (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 ? 16 : 8); if (ability == ABILITY_HEATPROOF) { - if (gBattleStruct->moveDamage[battler] > (gBattleStruct->moveDamage[battler] / 2) + 1) // Record ability if the burn takes less damage than it normally would. + if (burnDamage > (burnDamage / 2) + 1) // Record ability if the burn takes less damage than it normally would. RecordAbilityBattle(battler, ABILITY_HEATPROOF); - gBattleStruct->moveDamage[battler] /= 2; + burnDamage /= 2; } - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, burnDamage); BattleScriptExecute(BattleScript_BurnTurnDmg); effect = TRUE; } @@ -692,15 +550,13 @@ static bool32 HandleEndTurnFrostbite(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (gBattleMons[battler].status1 & STATUS1_FROSTBITE && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, GetBattlerAbility(battler))) + && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 ? 16 : 8)); BattleScriptExecute(BattleScript_FrostbiteTurnDmg); effect = TRUE; } @@ -712,23 +568,21 @@ static bool32 HandleEndTurnNightmare(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gBattleMons[battler].status2 & STATUS2_NIGHTMARE + if (gBattleMons[battler].volatiles.nightmare && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, GetBattlerAbility(battler))) + && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { if (gBattleMons[battler].status1 & STATUS1_SLEEP) { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 4; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 4); BattleScriptExecute(BattleScript_NightmareTurnDmg); effect = TRUE; } else { - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; + gBattleMons[battler].volatiles.nightmare = FALSE; } } @@ -739,15 +593,13 @@ static bool32 HandleEndTurnCurse(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gBattleMons[battler].status2 & STATUS2_CURSED + if (gBattleMons[battler].volatiles.cursed && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, GetBattlerAbility(battler))) + && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 4; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 4); BattleScriptExecute(BattleScript_CurseTurnDmg); effect = TRUE; } @@ -759,31 +611,31 @@ static bool32 HandleEndTurnWrap(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gBattleMons[battler].status2 & STATUS2_WRAPPED && IsBattlerAlive(battler)) + if (gBattleMons[battler].volatiles.wrapped && IsBattlerAlive(battler)) { - if (--gDisableStructs[battler].wrapTurns != 0) + if (gDisableStructs[battler].wrapTurns != 0) { - if (IsBattlerProtectedByMagicGuard(battler, GetBattlerAbility(battler))) + gDisableStructs[battler].wrapTurns--; + if (IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) return effect; - gBattleScripting.animArg1 = gBattleStruct->wrappedMove[battler]; - gBattleScripting.animArg2 = gBattleStruct->wrappedMove[battler] >> 8; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[battler]); + gBattleScripting.animArg1 = gBattleMons[battler].volatiles.wrappedMove; + gBattleScripting.animArg2 = gBattleMons[battler].volatiles.wrappedMove >> 8; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[battler].volatiles.wrappedMove); BattleScriptExecute(BattleScript_WrapTurnDmg); - if (GetBattlerHoldEffect(gBattleStruct->wrappedBy[battler], TRUE) == HOLD_EFFECT_BINDING_BAND) - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8); + s32 bindDamage = 0; + if (GetBattlerHoldEffect(gBattleMons[battler].volatiles.wrappedBy) == HOLD_EFFECT_BINDING_BAND) + bindDamage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 6 : 8); else - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16); - - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + bindDamage = GetNonDynamaxMaxHP(battler) / (B_BINDING_DAMAGE >= GEN_6 ? 8 : 16); + SetPassiveDamageAmount(battler, bindDamage); } else // broke free { - gBattleMons[battler].status2 &= ~STATUS2_WRAPPED; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[battler]); + gBattleMons[battler].volatiles.wrapped = FALSE; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[battler].volatiles.wrappedMove); BattleScriptExecute(BattleScript_WrapEnds); } effect = TRUE; @@ -796,18 +648,18 @@ static bool32 HandleEndTurnSaltCure(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses4[battler] & STATUS4_SALT_CURE + if (gBattleMons[battler].volatiles.saltCure && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, GetBattlerAbility(battler))) + && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { + s32 saltCureDamage = 0; if (IS_BATTLER_ANY_TYPE(battler, TYPE_STEEL, TYPE_WATER)) - gBattleStruct->moveDamage[battler] = gBattleMons[battler].maxHP / 4; + saltCureDamage = GetNonDynamaxMaxHP(battler) / 4; else - gBattleStruct->moveDamage[battler] = gBattleMons[battler].maxHP / 8; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + saltCureDamage = GetNonDynamaxMaxHP(battler) / 8; + SetPassiveDamageAmount(battler, saltCureDamage); PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SALT_CURE); BattleScriptExecute(BattleScript_SaltCureExtraDamage); effect = TRUE; @@ -820,7 +672,7 @@ static bool32 HandleEndTurnOctolock(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (gDisableStructs[battler].octolock) { @@ -837,12 +689,12 @@ static bool32 HandleEndTurnSyrupBomb(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if ((gStatuses4[battler] & STATUS4_SYRUP_BOMB) && (IsBattlerAlive(battler))) + if (gBattleMons[battler].volatiles.syrupBomb && (IsBattlerAlive(battler))) { if (gDisableStructs[battler].syrupBombTimer > 0 && --gDisableStructs[battler].syrupBombTimer == 0) - gStatuses4[battler] &= ~STATUS4_SYRUP_BOMB; + gBattleMons[battler].volatiles.syrupBomb = FALSE; PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SYRUP_BOMB); gBattlescriptCurrInstr = BattleScript_SyrupBombEndTurn; BattleScriptExecute(gBattlescriptCurrInstr); @@ -856,10 +708,11 @@ static bool32 HandleEndTurnTaunt(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (gDisableStructs[battler].tauntTimer && --gDisableStructs[battler].tauntTimer == 0) { + gBattleScripting.battler = battler; BattleScriptExecute(BattleScript_BufferEndTurn); PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); effect = TRUE; @@ -872,11 +725,12 @@ static bool32 HandleEndTurnTorment(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gDisableStructs[battler].tormentTimer == gBattleTurnCounter) + if (gDisableStructs[battler].tormentTimer > 0 && --gDisableStructs[battler].tormentTimer == 0) { - gBattleMons[battler].status2 &= ~STATUS2_TORMENT; + gBattleMons[battler].volatiles.torment = FALSE; + gBattleScripting.battler = battler; BattleScriptExecute(BattleScript_TormentEnds); effect = TRUE; } @@ -888,7 +742,7 @@ static bool32 HandleEndTurnEncore(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (gDisableStructs[battler].encoreTimer != 0) { @@ -902,6 +756,7 @@ static bool32 HandleEndTurnEncore(u32 battler) { gDisableStructs[battler].encoredMove = 0; gDisableStructs[battler].encoreTimer = 0; + gBattleScripting.battler = battler; BattleScriptExecute(BattleScript_EncoredNoMore); effect = TRUE; } @@ -915,7 +770,7 @@ static bool32 HandleEndTurnDisable(u32 battler) bool32 effect = FALSE; u32 moveIndex = 0; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (gDisableStructs[battler].disableTimer != 0) { @@ -932,6 +787,7 @@ static bool32 HandleEndTurnDisable(u32 battler) else if (--gDisableStructs[battler].disableTimer == 0) // disable ends { gDisableStructs[battler].disabledMove = 0; + gBattleScripting.battler = battler; BattleScriptExecute(BattleScript_DisabledNoMore); effect = TRUE; } @@ -944,11 +800,11 @@ static bool32 HandleEndTurnMagnetRise(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses3[battler] & STATUS3_MAGNET_RISE && gDisableStructs[battler].magnetRiseTimer == gBattleTurnCounter) + if (gDisableStructs[battler].magnetRiseTimer > 0 && --gDisableStructs[battler].magnetRiseTimer == 0) { - gStatuses3[battler] &= ~STATUS3_MAGNET_RISE; + gBattleMons[battler].volatiles.magnetRise = FALSE; BattleScriptExecute(BattleScript_BufferEndTurn); PREPARE_STRING_BUFFER(gBattleTextBuff1, STRINGID_ELECTROMAGNETISM); effect = TRUE; @@ -961,11 +817,11 @@ static bool32 HandleEndTurnTelekinesis(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses3[battler] & STATUS3_TELEKINESIS && gDisableStructs[battler].telekinesisTimer == gBattleTurnCounter) + if (gDisableStructs[battler].telekinesisTimer > 0 && --gDisableStructs[battler].telekinesisTimer == 0) { - gStatuses3[battler] &= ~STATUS3_TELEKINESIS; + gBattleMons[battler].volatiles.telekinesis = FALSE; BattleScriptExecute(BattleScript_TelekinesisEndTurn); effect = TRUE; } @@ -977,11 +833,12 @@ static bool32 HandleEndTurnHealBlock(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses3[battler] & STATUS3_HEAL_BLOCK && gDisableStructs[battler].healBlockTimer == gBattleTurnCounter) + if (gDisableStructs[battler].healBlockTimer > 0 && --gDisableStructs[battler].healBlockTimer == 0) { - gStatuses3[battler] &= ~STATUS3_HEAL_BLOCK; + gBattleMons[battler].volatiles.healBlock = FALSE; + gBattleScripting.battler = battler; BattleScriptExecute(BattleScript_BufferEndTurn); PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_HEAL_BLOCK); effect = TRUE; @@ -994,11 +851,11 @@ static bool32 HandleEndTurnEmbargo(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses3[battler] & STATUS3_EMBARGO && gDisableStructs[battler].embargoTimer == gBattleTurnCounter) + if (gDisableStructs[battler].embargoTimer > 0 && --gDisableStructs[battler].embargoTimer == 0) { - gStatuses3[battler] &= ~STATUS3_EMBARGO; + gBattleMons[battler].volatiles.embargo = FALSE; BattleScriptExecute(BattleScript_EmbargoEndTurn); effect = TRUE; } @@ -1010,34 +867,43 @@ static bool32 HandleEndTurnYawn(u32 battler) { bool32 effect = FALSE; - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (gStatuses3[battler] & STATUS3_YAWN) + if (gBattleMons[battler].volatiles.yawn > 0) { - gStatuses3[battler] -= STATUS3_YAWN_TURN(1); - if (!(gStatuses3[battler] & STATUS3_YAWN) && !(gBattleMons[battler].status1 & STATUS1_ANY) + gBattleMons[battler].volatiles.yawn--; + if (!gBattleMons[battler].volatiles.yawn + && !(gBattleMons[battler].status1 & STATUS1_ANY) && ability != ABILITY_VITAL_SPIRIT && ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(battler) && !IsLeafGuardProtected(battler, ability)) { - CancelMultiTurnMoves(battler, SKY_DROP_STATUS_YAWN); gEffectBattler = gBattlerTarget = battler; - if (IsBattlerTerrainAffected(battler, STATUS_FIELD_ELECTRIC_TERRAIN)) + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); + if (IsBattlerTerrainAffected(battler, ability, holdEffect, STATUS_FIELD_ELECTRIC_TERRAIN)) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINPREVENTS_ELECTRIC; BattleScriptExecute(BattleScript_TerrainPreventsEnd2); } - else if (IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) + else if (IsBattlerTerrainAffected(battler, ability, holdEffect, STATUS_FIELD_MISTY_TERRAIN)) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINPREVENTS_MISTY; BattleScriptExecute(BattleScript_TerrainPreventsEnd2); } else if (IsSleepClauseActiveForSide(GetBattlerSide(battler))) { - BattleScriptExecute(BattleScript_SleepClausePreventsEnd); + BattleScriptExecute(BattleScript_SleepClausePreventsEnd2); + } + else if ((gBattleScripting.battler = IsAbilityOnSide(battler, ABILITY_SWEET_VEIL))) + { + gBattleScripting.battler--; + gLastUsedAbility = ABILITY_SWEET_VEIL; + gBattlerAbility = gBattleScripting.battler; + RecordAbilityBattle(gBattleScripting.battler, ABILITY_SWEET_VEIL); + BattleScriptExecute(BattleScript_ImmunityProtectedEnd2); } else { @@ -1046,10 +912,11 @@ static bool32 HandleEndTurnYawn(u32 battler) else gBattleMons[battler].status1 |= ((Random() % 4) + 3); + CancelMultiTurnMoves(battler, SKY_DROP_STATUS_YAWN); TryActivateSleepClause(battler, gBattlerPartyIndexes[battler]); BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); MarkBattlerForControllerExec(battler); - BattleScriptExecute(BattleScript_YawnMakesAsleep); + BattleScriptExecute(BattleScript_YawnMakesAsleepEnd2); } effect = TRUE; } @@ -1062,15 +929,15 @@ static bool32 HandleEndTurnPerishSong(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (IsBattlerAlive(battler) && gStatuses3[battler] & STATUS3_PERISH_SONG) + if (IsBattlerAlive(battler) && gBattleMons[battler].volatiles.perishSong) { PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[battler].perishSongTimer); if (gDisableStructs[battler].perishSongTimer == 0) { - gStatuses3[battler] &= ~STATUS3_PERISH_SONG; - gBattleStruct->moveDamage[battler] = gBattleMons[battler].hp; + gBattleMons[battler].volatiles.perishSong = FALSE; + SetPassiveDamageAmount(battler, gBattleMons[battler].hp); BattleScriptExecute(BattleScript_PerishSongTakesLife); } else @@ -1088,7 +955,7 @@ static bool32 HandleEndTurnRoost(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; if (gDisableStructs[battler].roostActive) gDisableStructs[battler].roostActive = FALSE; @@ -1100,12 +967,12 @@ static bool32 HandleEndTurnSecondEventBlock(u32 battler) { bool32 effect = FALSE; - u32 side = gBattleStruct->turnSideTracker; + u32 side = gBattleStruct->eventState.battlerSide; - switch (gBattleStruct->eventBlockCounter) + switch (gBattleStruct->eventState.endTurnBlock) { case SECOND_EVENT_BLOCK_REFLECT: - if (gSideStatuses[side] & SIDE_STATUS_REFLECT && gSideTimers[side].reflectTimer == gBattleTurnCounter) + if (gSideTimers[side].reflectTimer > 0 && --gSideTimers[side].reflectTimer == 0) { gBattlerAttacker = GetBattlerSideForMessage(side); gSideStatuses[side] &= ~SIDE_STATUS_REFLECT; @@ -1114,10 +981,10 @@ static bool32 HandleEndTurnSecondEventBlock(u32 battler) PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_REFLECT); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_LIGHT_SCREEN: - if (gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN && gSideTimers[side].lightscreenTimer == gBattleTurnCounter) + if (gSideTimers[side].lightscreenTimer > 0 && --gSideTimers[side].lightscreenTimer == 0) { gBattlerAttacker = GetBattlerSideForMessage(side); gSideStatuses[side] &= ~SIDE_STATUS_LIGHTSCREEN; @@ -1126,20 +993,20 @@ static bool32 HandleEndTurnSecondEventBlock(u32 battler) PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_LIGHT_SCREEN); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_SAFEGUARD: - if (gSideStatuses[side] & SIDE_STATUS_SAFEGUARD && gSideTimers[side].safeguardTimer == gBattleTurnCounter) + if (gSideTimers[side].safeguardTimer > 0 && --gSideTimers[side].safeguardTimer == 0) { gBattlerAttacker = GetBattlerSideForMessage(side); gSideStatuses[side] &= ~SIDE_STATUS_SAFEGUARD; BattleScriptExecute(BattleScript_SafeguardEnds); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_MIST: - if (gSideTimers[side].mistTimer != 0 && gSideTimers[side].mistTimer == gBattleTurnCounter) + if (gSideTimers[side].mistTimer > 0 && --gSideTimers[side].mistTimer == 0) { gBattlerAttacker = GetBattlerSideForMessage(side); gSideStatuses[side] &= ~SIDE_STATUS_MIST; @@ -1148,59 +1015,59 @@ static bool32 HandleEndTurnSecondEventBlock(u32 battler) PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_MIST); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_TAILWIND: - if (gSideStatuses[side] & SIDE_STATUS_TAILWIND && gSideTimers[side].tailwindTimer == gBattleTurnCounter) + if (gSideTimers[side].tailwindTimer > 0 && --gSideTimers[side].tailwindTimer == 0) { gBattlerAttacker = GetBattlerSideForMessage(side); gSideStatuses[side] &= ~SIDE_STATUS_TAILWIND; BattleScriptExecute(BattleScript_TailwindEnds); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_LUCKY_CHANT: - if (gSideStatuses[side] & SIDE_STATUS_LUCKY_CHANT && gSideTimers[side].luckyChantTimer == gBattleTurnCounter) + if (gSideTimers[side].luckyChantTimer > 0 && --gSideTimers[side].luckyChantTimer == 0) { gBattlerAttacker = GetBattlerSideForMessage(side); gSideStatuses[side] &= ~SIDE_STATUS_LUCKY_CHANT; BattleScriptExecute(BattleScript_LuckyChantEnds); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_RAINBOW: gBattlerAttacker = GetBattlerSideForMessage(side); - if (gSideStatuses[side] & SIDE_STATUS_RAINBOW && gSideTimers[side].rainbowTimer == gBattleTurnCounter) + if (gSideTimers[side].rainbowTimer > 0 && --gSideTimers[side].rainbowTimer == 0) { gSideStatuses[side] &= ~SIDE_STATUS_RAINBOW; BattleScriptExecute(BattleScript_TheRainbowDisappeared); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_SEA_OF_FIRE: - if (gSideStatuses[side] & SIDE_STATUS_SEA_OF_FIRE && gSideTimers[side].seaOfFireTimer == gBattleTurnCounter) + if (gSideTimers[side].seaOfFireTimer > 0 && --gSideTimers[side].seaOfFireTimer == 0) { gSideStatuses[side] &= ~SIDE_STATUS_SEA_OF_FIRE; BattleScriptExecute(BattleScript_TheSeaOfFireDisappeared); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_SWAMP: gBattlerAttacker = GetBattlerSideForMessage(side); - if (gSideStatuses[side] & SIDE_STATUS_SWAMP && gSideTimers[side].swampTimer == gBattleTurnCounter) + if (gSideTimers[side].swampTimer > 0 && --gSideTimers[side].swampTimer == 0) { gSideStatuses[side] &= ~SIDE_STATUS_SWAMP; BattleScriptExecute(BattleScript_TheSwampDisappeared); effect = TRUE; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case SECOND_EVENT_BLOCK_AURORA_VEIL: - if (gSideStatuses[side] & SIDE_STATUS_AURORA_VEIL && gSideTimers[side].auroraVeilTimer == gBattleTurnCounter) + if (gSideTimers[side].auroraVeilTimer > 0 && --gSideTimers[side].auroraVeilTimer == 0) { gBattlerAttacker = GetBattlerSideForMessage(side); gSideStatuses[side] &= ~SIDE_STATUS_AURORA_VEIL; @@ -1209,8 +1076,8 @@ static bool32 HandleEndTurnSecondEventBlock(u32 battler) PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_AURORA_VEIL); effect = TRUE; } - gBattleStruct->turnSideTracker++; - gBattleStruct->eventBlockCounter = 0; + gBattleStruct->eventState.battlerSide++; + gBattleStruct->eventState.endTurnBlock = 0; break; } @@ -1221,9 +1088,9 @@ static bool32 HandleEndTurnTrickRoom(u32 battler) { bool32 effect = FALSE; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; - if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer == gBattleTurnCounter) + if (gFieldTimers.trickRoomTimer > 0 && --gFieldTimers.trickRoomTimer == 0) { gFieldStatuses &= ~STATUS_FIELD_TRICK_ROOM; BattleScriptExecute(BattleScript_TrickRoomEnds); @@ -1237,9 +1104,9 @@ static bool32 HandleEndTurnGravity(u32 battler) { bool32 effect = FALSE; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; - if (gFieldStatuses & STATUS_FIELD_GRAVITY && gFieldTimers.gravityTimer == gBattleTurnCounter) + if (gFieldTimers.gravityTimer > 0 && --gFieldTimers.gravityTimer == 0) { gFieldStatuses &= ~STATUS_FIELD_GRAVITY; BattleScriptExecute(BattleScript_GravityEnds); @@ -1253,9 +1120,9 @@ static bool32 HandleEndTurnWaterSport(u32 battler) { bool32 effect = FALSE; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; - if (gFieldStatuses & STATUS_FIELD_WATERSPORT && gFieldTimers.waterSportTimer == gBattleTurnCounter) + if (gFieldTimers.waterSportTimer > 0 && --gFieldTimers.waterSportTimer == 0) { gFieldStatuses &= ~STATUS_FIELD_WATERSPORT; BattleScriptExecute(BattleScript_WaterSportEnds); @@ -1269,9 +1136,9 @@ static bool32 HandleEndTurnMudSport(u32 battler) { bool32 effect = FALSE; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; - if (gFieldStatuses & STATUS_FIELD_MUDSPORT && gFieldTimers.mudSportTimer == gBattleTurnCounter) + if (gFieldTimers.mudSportTimer > 0 && --gFieldTimers.mudSportTimer == 0) { gFieldStatuses &= ~STATUS_FIELD_MUDSPORT; BattleScriptExecute(BattleScript_MudSportEnds); @@ -1285,9 +1152,9 @@ static bool32 HandleEndTurnWonderRoom(u32 battler) { bool32 effect = FALSE; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; - if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM && gFieldTimers.wonderRoomTimer == gBattleTurnCounter) + if (gFieldTimers.wonderRoomTimer > 0 && --gFieldTimers.wonderRoomTimer == 0) { gFieldStatuses &= ~STATUS_FIELD_WONDER_ROOM; BattleScriptExecute(BattleScript_WonderRoomEnds); @@ -1301,9 +1168,9 @@ static bool32 HandleEndTurnMagicRoom(u32 battler) { bool32 effect = FALSE; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; - if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM && gFieldTimers.magicRoomTimer == gBattleTurnCounter) + if (gFieldTimers.magicRoomTimer > 0 && --gFieldTimers.magicRoomTimer == 0) { gFieldStatuses &= ~STATUS_FIELD_MAGIC_ROOM; BattleScriptExecute(BattleScript_MagicRoomEnds); @@ -1315,7 +1182,7 @@ static bool32 HandleEndTurnMagicRoom(u32 battler) static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { - if (gFieldStatuses & terrainFlag && gFieldTimers.terrainTimer == gBattleTurnCounter) + if (gFieldTimers.terrainTimer > 0 && --gFieldTimers.terrainTimer == 0) { gFieldStatuses &= ~terrainFlag; TryToRevertMimicryAndFlags(); @@ -1331,7 +1198,7 @@ static bool32 HandleEndTurnTerrain(u32 battler) { bool32 effect = FALSE; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurn++; if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) effect = EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAIN_END_ELECTRIC); @@ -1351,46 +1218,43 @@ static bool32 HandleEndTurnThirdEventBlock(u32 battler) if (!IsBattlerAlive(battler)) { - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; return effect; } - switch (gBattleStruct->eventBlockCounter) + switch (gBattleStruct->eventState.endTurnBlock) { case THIRD_EVENT_BLOCK_UPROAR: - if (gBattleMons[battler].status2 & STATUS2_UPROAR) + if (gBattleMons[battler].volatiles.uproarTurns) { - for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++) + for (gEffectBattler = 0; gEffectBattler < gBattlersCount; gEffectBattler++) { - if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF) + if ((gBattleMons[gEffectBattler].status1 & STATUS1_SLEEP) + && GetBattlerAbility(gEffectBattler) != ABILITY_SOUNDPROOF) { - gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP; - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; + gBattleMons[gEffectBattler].status1 &= ~STATUS1_SLEEP; + gBattleMons[gEffectBattler].volatiles.nightmare = FALSE; gBattleCommunication[MULTISTRING_CHOOSER] = 1; BattleScriptExecute(BattleScript_MonWokeUpInUproar); - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1); - MarkBattlerForControllerExec(gBattlerAttacker); + BtlController_EmitSetMonData(gEffectBattler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1); + MarkBattlerForControllerExec(gEffectBattler); + effect = TRUE; break; } } - if (gBattlerAttacker != gBattlersCount) - { - break; - } - else + if (effect == FALSE) { gBattlerAttacker = battler; - gBattleMons[battler].status2 -= STATUS2_UPROAR_TURN(1); // uproar timer goes down + gBattleMons[battler].volatiles.uproarTurns--; // uproar timer goes down if (WasUnableToUseMove(battler)) { CancelMultiTurnMoves(battler, SKY_DROP_IGNORE); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_ENDS; } - else if (gBattleMons[battler].status2 & STATUS2_UPROAR) + else if (gBattleMons[battler].volatiles.uproarTurns) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_CONTINUES; - gBattleMons[battler].status2 |= STATUS2_MULTIPLETURNS; + gBattleMons[battler].volatiles.multipleTurns = TRUE; } else { @@ -1401,11 +1265,11 @@ static bool32 HandleEndTurnThirdEventBlock(u32 battler) effect = TRUE; } } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; case THIRD_EVENT_BLOCK_ABILITIES: { - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); switch (ability) { case ABILITY_TRUANT: // Not fully accurate but it has to be handled somehow. TODO: Find a better way. @@ -1420,30 +1284,33 @@ static bool32 HandleEndTurnThirdEventBlock(u32 battler) if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, battler, ability, 0, MOVE_NONE)) effect = TRUE; break; + default: + break; } - gBattleStruct->eventBlockCounter++; + gBattleStruct->eventState.endTurnBlock++; break; } case THIRD_EVENT_BLOCK_ITEMS: { - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); + // TODO: simplify + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); switch (holdEffect) { case HOLD_EFFECT_FLAME_ORB: case HOLD_EFFECT_STICKY_BARB: case HOLD_EFFECT_TOXIC_ORB: - if (ItemBattleEffects(ITEMEFFECT_ORBS, battler, FALSE)) + if (ItemBattleEffects(battler, 0, holdEffect, IsOrbsActivation)) effect = TRUE; break; case HOLD_EFFECT_WHITE_HERB: - if (ItemBattleEffects(ITEMEFFECT_NORMAL, battler, FALSE)) + if (ItemBattleEffects(battler, 0, holdEffect, IsWhiteHerbEndTurnActivation)) effect = TRUE; break; default: break; } - gBattleStruct->eventBlockCounter = 0; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBlock = 0; + gBattleStruct->eventState.endTurnBattler++; break; } } @@ -1451,13 +1318,13 @@ static bool32 HandleEndTurnThirdEventBlock(u32 battler) return effect; } -static bool32 HandleEndTurnAbilities(u32 battler) +static bool32 HandleEndTurnFormChangeAbilities(u32 battler) { bool32 effect = FALSE; - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; switch (ability) { @@ -1465,54 +1332,29 @@ static bool32 HandleEndTurnAbilities(u32 battler) case ABILITY_SCHOOLING: case ABILITY_SHIELDS_DOWN: case ABILITY_ZEN_MODE: + case ABILITY_HUNGER_SWITCH: if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, battler, ability, 0, MOVE_NONE)) effect = TRUE; + default: + break; } return effect; } -static bool32 HandleEndTurnFourthEventBlock(u32 battler) +static bool32 HandleEndTurnEjectPack(u32 battler) { - bool32 effect = FALSE; - - switch (gBattleStruct->eventBlockCounter) - { - case FOURTH_EVENT_BLOCK_HUNGER_SWITCH: - { - u32 ability = GetBattlerAbility(battler); - if (ability == ABILITY_HUNGER_SWITCH) - { - if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, battler, ability, 0, MOVE_NONE)) - effect = TRUE; - } - gBattleStruct->eventBlockCounter++; - break; - } - case FOURTH_EVENT_BLOCK_EJECT_PACK: - { - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); - if (holdEffect == HOLD_EFFECT_EJECT_PACK) - { - if (ItemBattleEffects(ITEMEFFECT_NORMAL, battler, FALSE)) - effect = TRUE; - } - gBattleStruct->eventBlockCounter = 0; - gBattleStruct->turnEffectsBattlerId++; - break; - } - } - - return effect; + gBattleStruct->eventState.endTurn++; + return TrySwitchInEjectPack(END_TURN); } static bool32 HandleEndTurnDynamax(u32 battler) { bool32 effect = FALSE; - gBattleStruct->turnEffectsBattlerId++; + gBattleStruct->eventState.endTurnBattler++; - if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && gBattleStruct->dynamax.dynamaxTurns[battler] == gBattleTurnCounter) + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && gBattleStruct->dynamax.dynamaxTurns[battler] > 0 && --gBattleStruct->dynamax.dynamaxTurns[battler] == 0) { gBattleScripting.battler = battler; UndoDynamax(battler); @@ -1523,13 +1365,25 @@ static bool32 HandleEndTurnDynamax(u32 battler) return effect; } +/* + * Various end turn effects that happen after all battlers moved. + * Each Case will apply the effects for each battler. Moving to the next case when all battlers are done. + * If an effect is going to be applied on a better, the bool effect will be set to TRUE and a script set. + * The script is set with `BattleScriptExecute` and should have the ending `end2` + Example: + BattleScriptExecute(BattleScript_X); + + (in battle_scripts_1.s) + BattleScript_X: + some commands + end2 + */ static bool32 (*const sEndTurnEffectHandlers[])(u32 battler) = { [ENDTURN_ORDER] = HandleEndTurnOrder, [ENDTURN_VARIOUS] = HandleEndTurnVarious, [ENDTURN_WEATHER] = HandleEndTurnWeather, [ENDTURN_WEATHER_DAMAGE] = HandleEndTurnWeatherDamage, - [ENDTURN_GEN_3_BERRY_ACTIVATION] = HandleEndTurnGenThreeBerryActivation, [ENDTURN_EMERGENCY_EXIT_1] = HandleEndTurnEmergencyExit, [ENDTURN_AFFECTION] = HandleEndTurnAffection, [ENDTURN_FUTURE_SIGHT] = HandleEndTurnFutureSight, @@ -1570,37 +1424,33 @@ static bool32 (*const sEndTurnEffectHandlers[])(u32 battler) = [ENDTURN_TERRAIN] = HandleEndTurnTerrain, [ENDTURN_THIRD_EVENT_BLOCK] = HandleEndTurnThirdEventBlock, [ENDTURN_EMERGENCY_EXIT_4] = HandleEndTurnEmergencyExit, - [ENDTURN_ABILITIES] = HandleEndTurnAbilities, - [ENDTURN_FOURTH_EVENT_BLOCK] = HandleEndTurnFourthEventBlock, + [ENDTURN_FORM_CHANGE_ABILITIES] = HandleEndTurnFormChangeAbilities, + [ENDTURN_EJECT_PACK] = HandleEndTurnEjectPack, [ENDTURN_DYNAMAX] = HandleEndTurnDynamax, }; u32 DoEndTurnEffects(void) { u32 battler = MAX_BATTLERS_COUNT; - gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_IGNORE_BIDE); for (;;) { // If either turnEffectsBattlerId or turnSideTracker are at max count, reest values and go to the next state - if (gBattleStruct->turnEffectsBattlerId == gBattlersCount || gBattleStruct->turnSideTracker == NUM_BATTLE_SIDES) + if (gBattleStruct->eventState.endTurnBattler == gBattlersCount || gBattleStruct->eventState.battlerSide == NUM_BATTLE_SIDES) { - gBattleStruct->turnEffectsBattlerId = 0; - gBattleStruct->turnSideTracker = 0; - gBattleStruct->eventBlockCounter = 0; - gBattleStruct->endTurnEventsCounter++; + gBattleStruct->eventState.endTurnBattler = 0; + gBattleStruct->eventState.battlerSide = 0; + gBattleStruct->eventState.endTurnBlock = 0; + gBattleStruct->eventState.endTurn++; } // Jump out if possible after endTurnEventsCounter was increased in the above code block - if (gBattleStruct->endTurnEventsCounter == ENDTURN_COUNT) - { - gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_IGNORE_BIDE); + if (gBattleStruct->eventState.endTurn == ENDTURN_COUNT) return FALSE; - } - battler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId]; + battler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->eventState.endTurnBattler]; - if (sEndTurnEffectHandlers[gBattleStruct->endTurnEventsCounter](battler)) + if (sEndTurnEffectHandlers[gBattleStruct->eventState.endTurn](battler)) return TRUE; } } diff --git a/src/battle_factory.c b/src/battle_factory.c index 5a9ab561273a..50434bd09c00 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -560,9 +560,9 @@ static void GetOpponentMostCommonMonType(void) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { u32 species = gFacilityTrainerMons[gFrontierTempParty[i]].species; - typeCounts[gSpeciesInfo[species].types[0]]++; - if (gSpeciesInfo[species].types[0] != gSpeciesInfo[species].types[1]) - typeCounts[gSpeciesInfo[species].types[1]]++; + typeCounts[GetSpeciesType(species, 0)]++; + if (GetSpeciesType(species, 0) != GetSpeciesType(species, 1)) + typeCounts[GetSpeciesType(species, 1)]++; } // Determine which are the two most-common types. diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index d6233c88fb7d..c7fef8002945 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -125,7 +125,7 @@ struct FactorySelectScreen struct SwapScreenAction { u8 id; - void (*func)(u8 taskId); + TaskFunc func; }; struct FactorySwapScreen @@ -253,7 +253,7 @@ static EWRAM_DATA u8 *sSwapMenuTilemapBuffer = NULL; static EWRAM_DATA u8 *sSwapMonPicBgTilemapBuffer = NULL; static struct FactorySelectScreen *sFactorySelectScreen; -static void (*sSwap_CurrentOptionFunc)(u8 taskId); +static TaskFunc sSwap_CurrentOptionFunc; static struct FactorySwapScreen *sFactorySwapScreen; COMMON_DATA u8 (*gFactorySelect_CurrentOptionFunc)(void) = NULL; @@ -886,7 +886,7 @@ static const struct SpriteTemplate sSpriteTemplate_Swap_MonPicBgAnim = .callback = SpriteCallbackDummy }; -void static (*const sSwap_MenuOptionFuncs[])(u8 taskId) = +static const TaskFunc sSwap_MenuOptionFuncs[] = { Swap_OptionSummary, Swap_OptionSwap, diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 3d8d2f48be22..0ae16a69cb9f 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -23,6 +23,7 @@ #include "data.h" #include "palette.h" #include "contest.h" +#include "trainer_pokemon_sprites.h" #include "constants/songs.h" #include "constants/rgb.h" #include "constants/battle_palace.h" @@ -330,6 +331,7 @@ static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move) case MOVE_TARGET_RANDOM: case MOVE_TARGET_BOTH: case MOVE_TARGET_FOES_AND_ALLY: + case MOVE_TARGET_ALL_BATTLERS: if (IsBattleMoveStatus(move)) return PALACE_MOVE_GROUP_SUPPORT; else @@ -337,6 +339,7 @@ static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move) break; case MOVE_TARGET_DEPENDS: case MOVE_TARGET_OPPONENTS_FIELD: + case MOVE_TARGET_ALLY: return PALACE_MOVE_GROUP_SUPPORT; case MOVE_TARGET_USER: return PALACE_MOVE_GROUP_DEFENSE; @@ -458,13 +461,15 @@ static void SpriteCB_TrainerSlideVertical(struct Sprite *sprite) #undef sSpeedX -void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isStatus2, u32 status) +void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isVolatile, u32 status) { gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive = 1; - if (!isStatus2) + if (!isVolatile) { - if (status == STATUS1_FREEZE || status == STATUS1_FROSTBITE) + if (status == STATUS1_FREEZE) LaunchStatusAnimation(battler, B_ANIM_STATUS_FRZ); + else if (status == STATUS1_FROSTBITE) + LaunchStatusAnimation(battler, B_ANIM_STATUS_FRB); else if (status == STATUS1_POISON || status & STATUS1_TOXIC_POISON) LaunchStatusAnimation(battler, B_ANIM_STATUS_PSN); else if (status == STATUS1_BURN) @@ -478,13 +483,13 @@ void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isStatus2, u32 statu } else { - if (status & STATUS2_INFATUATION) + if (status == VOLATILE_INFATUATION) LaunchStatusAnimation(battler, B_ANIM_STATUS_INFATUATION); - else if (status & STATUS2_CONFUSION) + else if (status == VOLATILE_CONFUSION) LaunchStatusAnimation(battler, B_ANIM_STATUS_CONFUSION); - else if (status & STATUS2_CURSED) + else if (status == VOLATILE_CURSED) LaunchStatusAnimation(battler, B_ANIM_STATUS_CURSED); - else if (status & STATUS2_NIGHTMARE) + else if (status == VOLATILE_NIGHTMARE) LaunchStatusAnimation(battler, B_ANIM_STATUS_NIGHTMARE); else // no animation gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive = 0; @@ -541,6 +546,9 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId) { switch (animId) { + case B_ANIM_ILLUSION_OFF: + case B_ANIM_SWAP_TO_SUBSTITUTE: + case B_ANIM_SWAP_FROM_SUBSTITUTE: case B_ANIM_SUBSTITUTE_FADE: case B_ANIM_RAIN_CONTINUES: case B_ANIM_SUN_CONTINUES: @@ -549,6 +557,7 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId) case B_ANIM_SNOW_CONTINUES: case B_ANIM_FOG_CONTINUES: case B_ANIM_SNATCH_MOVE: + case B_ANIM_STATS_CHANGE: return TRUE; default: return FALSE; @@ -630,15 +639,8 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler) if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && GetMonData(mon, MON_DATA_GIGANTAMAX_FACTOR)) gBattleSpritesDataPtr->battlerData[battler].transformSpecies = species = GetGMaxTargetSpecies(species); - if (B_TRANSFORM_SHINY >= GEN_4) - { - personalityValue = gTransformedPersonalities[battler]; - isShiny = gTransformedShininess[battler]; - } - else - { - personalityValue = GetMonData(mon, MON_DATA_PERSONALITY); - } + personalityValue = gTransformedPersonalities[battler]; + isShiny = gTransformedShininess[battler]; } position = GetBattlerPosition(battler); @@ -657,7 +659,7 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler) LoadPalette(paletteData, BG_PLTT_ID(8) + BG_PLTT_ID(battler), PLTT_SIZE_4BPP); // transform's pink color - if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE) + if (gBattleMons[battler].volatiles.transformed) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); @@ -697,10 +699,10 @@ void DecompressTrainerFrontPic(u16 frontPicId, u8 battler) void DecompressTrainerBackPic(u16 backPicId, u8 battler) { u8 position = GetBattlerPosition(battler); - DecompressPicFromTable(&gTrainerBacksprites[backPicId].backPic, - gMonSpritesGfxPtr->spritesGfx[position]); + CopyTrainerBackspriteFramesToDest(backPicId, gMonSpritesGfxPtr->spritesGfx[position]); + // Aiming for palette slots 8 and 9 for Player and PlayerPartner to prevent Trainer Slides causing mons to change colour LoadPalette(gTrainerBacksprites[backPicId].palette.data, - OBJ_PLTT_ID(battler), PLTT_SIZE_4BPP); + OBJ_PLTT_ID(8 + battler/2), PLTT_SIZE_4BPP); } void FreeTrainerFrontPicPalette(u16 frontPicId) @@ -811,7 +813,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) void LoadBattleBarGfx(u8 unused) { - LZDecompressWram(gBattleInterfaceGfx_BattleBar, gMonSpritesGfxPtr->barFontGfx); + DecompressDataWithHeaderWram(gBattleInterfaceGfx_BattleBar, gMonSpritesGfxPtr->barFontGfx); } bool8 BattleInitAllSprites(u8 *state1, u8 *battler) @@ -866,15 +868,8 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battler) } break; case 5: - if (IsOnPlayerSide(*battler)) - { - if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) - UpdateHealthboxAttribute(gHealthboxSpriteIds[*battler], GetBattlerMon(*battler), HEALTHBOX_ALL); - } - else - { + if (!IsOnPlayerSide(*battler) || !(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) UpdateHealthboxAttribute(gHealthboxSpriteIds[*battler], GetBattlerMon(*battler), HEALTHBOX_ALL); - } SetHealthboxSpriteInvisible(gHealthboxSpriteIds[*battler]); (*battler)++; if (*battler == gBattlersCount) @@ -918,7 +913,7 @@ void CopyBattleSpriteInvisibility(u8 battler) gBattleSpritesDataPtr->battlerData[battler].invisible = gSprites[gBattlerSpriteIds[battler]].invisible; } -void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bool8 trackEnemyPersonality) +void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 changeType) { u32 personalityValue, position, paletteOffset, targetSpecies; bool32 isShiny; @@ -943,33 +938,32 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo else { position = GetBattlerPosition(battlerAtk); - if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies == SPECIES_NONE) + if (changeType == SPECIES_GFX_CHANGE_TRANSFORM) { // Get base form if its currently Gigantamax if (IsGigantamaxed(battlerDef)) - targetSpecies = gBattleStruct->changedSpecies[GetBattlerSide(battlerDef)][gBattlerPartyIndexes[battlerDef]]; + targetSpecies = GetBattlerPartyState(battlerDef)->changedSpecies; else if (gBattleStruct->illusion[battlerDef].state == ILLUSION_ON) targetSpecies = GetIllusionMonSpecies(battlerDef); else targetSpecies = GetMonData(monDef, MON_DATA_SPECIES); - personalityValue = GetMonData(monAtk, MON_DATA_PERSONALITY); - isShiny = GetMonData(monAtk, MON_DATA_IS_SHINY); } else { - targetSpecies = gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies; - if (B_TRANSFORM_SHINY >= GEN_4 && trackEnemyPersonality && !megaEvo) - { - personalityValue = GetMonData(monDef, MON_DATA_PERSONALITY); - isShiny = GetMonData(monDef, MON_DATA_IS_SHINY); - } - else - { - personalityValue = GetMonData(monAtk, MON_DATA_PERSONALITY); - isShiny = GetMonData(monAtk, MON_DATA_IS_SHINY); - } + targetSpecies = GetMonData(monAtk, MON_DATA_SPECIES); } + gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies = targetSpecies; + if (changeType == SPECIES_GFX_CHANGE_TRANSFORM) + { + personalityValue = gDisableStructs[battlerAtk].transformedMonPersonality; + isShiny = gDisableStructs[battlerAtk].transformedMonShininess; + } + else + { + personalityValue = GetMonData(monAtk, MON_DATA_PERSONALITY); + isShiny = GetMonData(monAtk, MON_DATA_IS_SHINY); + } HandleLoadSpecialPokePic(!IsOnPlayerSide(battlerAtk), gMonSpritesGfxPtr->spritesGfx[position], targetSpecies, @@ -982,14 +976,10 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo paletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, isShiny, personalityValue); LoadPalette(paletteData, paletteOffset, PLTT_SIZE_4BPP); - if (!megaEvo) + if (changeType == SPECIES_GFX_CHANGE_TRANSFORM) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); CpuCopy32(&gPlttBufferFaded[paletteOffset], &gPlttBufferUnfaded[paletteOffset], PLTT_SIZEOF(16)); - if (!IsContest()) - { - gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies = targetSpecies; - } } // dynamax tint @@ -1004,7 +994,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo } // Terastallization's tint - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) + if (changeType != SPECIES_GFX_CHANGE_ILLUSION_OFF && GetActiveGimmick(battlerAtk) == GIMMICK_TERA) { BlendPalette(paletteOffset, 16, 8, GetTeraTypeRGB(GetBattlerTeraType(battlerAtk))); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); @@ -1026,11 +1016,11 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battler, bool8 loadMonSprite) position = GetBattlerPosition(battler); if (IsContest()) - LZDecompressVram(gBattleAnimSpriteGfx_SubstituteBack, gMonSpritesGfxPtr->spritesGfx[position]); + DecompressDataWithHeaderVram(gBattleAnimSpriteGfx_SubstituteBack, gMonSpritesGfxPtr->spritesGfx[position]); else if (!IsOnPlayerSide(battler)) - LZDecompressVram(gBattleAnimSpriteGfx_Substitute, gMonSpritesGfxPtr->spritesGfx[position]); + DecompressDataWithHeaderVram(gBattleAnimSpriteGfx_Substitute, gMonSpritesGfxPtr->spritesGfx[position]); else - LZDecompressVram(gBattleAnimSpriteGfx_SubstituteBack, gMonSpritesGfxPtr->spritesGfx[position]); + DecompressDataWithHeaderVram(gBattleAnimSpriteGfx_SubstituteBack, gMonSpritesGfxPtr->spritesGfx[position]); for (i = 1; i < 4; i++) { @@ -1168,7 +1158,7 @@ void CreateEnemyShadowSprite(u32 battler) { if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE) { - u16 species = SanitizeSpeciesId(gBattleMons[battler].species); + u16 species = GetBattlerVisualSpecies(battler); u8 size = gSpeciesInfo[species].enemyShadowSize; gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, @@ -1254,6 +1244,12 @@ void LoadAndCreateEnemyShadowSprites(void) void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) { + if (gBattleSpritesDataPtr == NULL) + { + shadowSprite->callback = SpriteCB_SetInvisible; + return; + } + bool8 invisible = FALSE; u8 battler = shadowSprite->tBattlerId; struct Sprite *battlerSprite = &gSprites[gBattlerSpriteIds[battler]]; @@ -1272,8 +1268,8 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) } else if (transformSpecies != SPECIES_NONE) { - xOffset = gSpeciesInfo[transformSpecies].enemyShadowXOffset; - yOffset = gSpeciesInfo[transformSpecies].enemyShadowYOffset; + xOffset = gSpeciesInfo[transformSpecies].enemyShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16); + yOffset = gSpeciesInfo[transformSpecies].enemyShadowYOffset + 16; size = gSpeciesInfo[transformSpecies].enemyShadowSize; invisible = (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE) @@ -1282,7 +1278,7 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) } else if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE) { - u16 species = SanitizeSpeciesId(gBattleMons[battler].species); + u16 species = GetBattlerVisualSpecies(battler); xOffset = gSpeciesInfo[species].enemyShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16); yOffset = gSpeciesInfo[species].enemyShadowYOffset + 16; size = gSpeciesInfo[species].enemyShadowSize; diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index 76ea80a4f682..7a94b185b6d2 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -91,20 +91,15 @@ bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick) // Returns whether a trainer has used a gimmick during a battle. bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) { - // Check whether partner battler has used gimmick or plans to during turn. - if (IsDoubleBattle() - && IsPartnerMonFromSameTrainer(battler) - && (gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] - || ((gBattleStruct->gimmick.toActivate & (1u << BATTLE_PARTNER(battler)) - && gBattleStruct->gimmick.usableGimmick[BATTLE_PARTNER(battler)] == gimmick)))) - { - return TRUE; - } - // Otherwise, return whether current battler has used gimmick. - else + if (IsDoubleBattle() && IsPartnerMonFromSameTrainer(battler)) { - return gBattleStruct->gimmick.activated[battler][gimmick]; + u32 partner = BATTLE_PARTNER(battler); + if (gBattleStruct->gimmick.activated[partner][gimmick] + || ((gBattleStruct->gimmick.toActivate & (1u << partner)) && gBattleStruct->gimmick.usableGimmick[partner] == gimmick)) + return TRUE; } + + return gBattleStruct->gimmick.activated[battler][gimmick]; } // Sets a gimmick as used by a trainer with checks for Multi Battles. @@ -152,7 +147,7 @@ void CreateGimmickTriggerSprite(u32 battler) if (gBattleStruct->gimmick.triggerSpriteId == 0xFF) { - if (IsDoubleBattle()) + if (GetBattlerCoordsIndex(battler) == BATTLE_COORDS_DOUBLES) gBattleStruct->gimmick.triggerSpriteId = CreateSprite(gimmick->triggerTemplate, gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE, gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF, 0); @@ -178,6 +173,13 @@ bool32 IsGimmickTriggerSpriteActive(void) return FALSE; } +bool32 IsGimmickTriggerSpriteMatchingBattler(u32 battler) +{ + if (battler == gSprites[gBattleStruct->gimmick.triggerSpriteId].tBattler) + return TRUE; + return FALSE; +} + void HideGimmickTriggerSprite(void) { if (gBattleStruct->gimmick.triggerSpriteId != 0xFF) @@ -202,7 +204,7 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) s32 yDiff; s32 xHealthbox = gSprites[gHealthboxSpriteIds[sprite->tBattler]].x; - if (IsDoubleBattle()) + if (GetBattlerCoordsIndex(sprite->tBattler) == BATTLE_COORDS_DOUBLES) { xSlide = DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE; xPriority = DOUBLES_GIMMICK_TRIGGER_POS_X_PRIORITY; diff --git a/src/battle_hold_effects.c b/src/battle_hold_effects.c new file mode 100644 index 000000000000..9f363ea12082 --- /dev/null +++ b/src/battle_hold_effects.c @@ -0,0 +1,1275 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_ai_util.h" // maybe move some stuff over to battle.h +#include "battle_controllers.h" +#include "battle_util.h" +#include "battle_hold_effects.h" +#include "battle_scripts.h" +#include "item.h" +#include "string_util.h" +#include "data/hold_effects.h" +#include "constants/berry.h" + +bool32 IsOnSwitchInActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onSwitchIn; } +bool32 IsOnSwitchInFirstTurnActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onSwitchInFirstTurn; } +bool32 IsMirrorHerbActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].mirrorHerb; } +bool32 IsMirrorHerbFirstTurnActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].mirrorHerbFirstTurn; } +bool32 IsWhiteHerbActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].whiteHerb; } +bool32 IsWhiteHerbFirstTurnActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].whiteHerbFirstTurn; } +bool32 IsWhiteHerbEndTurnActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].whiteHerbEndTurn; } +bool32 IsOnStatusChangeActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onStatusChange; } +bool32 IsOnHpThresholdActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onHpThreshold; } +bool32 IsKeeMarangaBerryActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].keeMarangaBerry; } +bool32 IsOnTargetHitActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onTargetAfterHit; } +bool32 IsOnAttackerAfterHitActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onAttackerAfterHit; } +bool32 IsLifeOrbShellBellActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].lifeOrbShellBell; } +bool32 IsLeftoversActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].leftovers; } +bool32 IsOrbsActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].orbs; } +bool32 IsOnEffectActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onEffect; } +bool32 IsOnBerryActivation(enum HoldEffect holdEffect) { return GetItemPocket(gLastUsedItem) == POCKET_BERRIES; } +bool32 IsOnFlingActivation(enum HoldEffect holdEffect) { return gHoldEffectsInfo[holdEffect].onFling; } + +bool32 IsForceTriggerItemActivation(enum HoldEffect holdEffect) +{ + return gHoldEffectsInfo[holdEffect].onSwitchIn + || gHoldEffectsInfo[holdEffect].whiteHerb + || gHoldEffectsInfo[holdEffect].onStatusChange + || gHoldEffectsInfo[holdEffect].onHpThreshold; +} + +static enum ItemEffect TryDoublePrize(u32 battler) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsOnPlayerSide(battler) && !gBattleStruct->moneyMultiplierItem) + { + gBattleStruct->moneyMultiplier *= 2; + gBattleStruct->moneyMultiplierItem = TRUE; + } + + return effect; +} + +enum ItemEffect TryBoosterEnergy(u32 battler, enum Ability ability, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gDisableStructs[battler].boosterEnergyActivated || gBattleMons[battler].volatiles.transformed) + return ITEM_NO_EFFECT; + + if (((ability == ABILITY_PROTOSYNTHESIS) && !((gBattleWeather & B_WEATHER_SUN) && HasWeatherEffect())) + || ((ability == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN))) + { + gDisableStructs[battler].paradoxBoostedStat = GetParadoxHighestStatId(battler); + PREPARE_STAT_BUFFER(gBattleTextBuff1, gDisableStructs[battler].paradoxBoostedStat); + gBattlerAbility = gBattleScripting.battler = battler; + gDisableStructs[battler].boosterEnergyActivated = TRUE; + RecordAbilityBattle(battler, ability); + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BoosterEnergyEnd2); + else + BattleScriptCall(BattleScript_BoosterEnergyRet); + effect = ITEM_EFFECT_OTHER; + } + + return effect; +} + +static enum ItemEffect TryRoomService(u32 battler, ActivationTiming timing) +{ + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && CompareStat(battler, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN, GetBattlerAbility(battler))) + { + gEffectBattler = gBattleScripting.battler = battler; + SET_STATCHANGER(STAT_SPEED, 1, TRUE); + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_SPEED; + gBattleScripting.animArg2 = 0; + + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); + else + BattleScriptCall(BattleScript_ConsumableStatRaiseRet); + + return ITEM_STATS_CHANGE; + } + + return ITEM_NO_EFFECT; +} + +enum ItemEffect TryHandleSeed(u32 battler, u32 terrainFlag, enum Stat statId, ActivationTiming timing) +{ + if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(battler))) + { + gEffectBattler = gBattleScripting.battler = battler; + SET_STATCHANGER(statId, 1, FALSE); + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; + gBattleScripting.animArg2 = 0; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); + else + BattleScriptCall(BattleScript_ConsumableStatRaiseRet); + return ITEM_STATS_CHANGE; + } + return ITEM_NO_EFFECT; +} + +static enum ItemEffect TryTerrainSeeds(u32 battler, u32 item, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + switch (GetItemHoldEffectParam(item)) + { + case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN: + effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, timing); + break; + case HOLD_EFFECT_PARAM_GRASSY_TERRAIN: + effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, timing); + break; + case HOLD_EFFECT_PARAM_MISTY_TERRAIN: + effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, timing); + break; + case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN: + effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, timing); + break; + } + + return effect; +} + +static bool32 CanBeInfinitelyConfused(u32 battler) +{ + enum Ability ability = GetBattlerAbility(battler); + if (ability == ABILITY_OWN_TEMPO + || IsBattlerTerrainAffected(battler, ability, GetBattlerHoldEffect(battler), STATUS_FIELD_MISTY_TERRAIN) + || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) + return FALSE; + return TRUE; +} + +static enum ItemEffect TryBerserkGene(u32 battler, ActivationTiming timing) +{ + if (CanBeInfinitelyConfused(battler)) + gBattleMons[battler].volatiles.infiniteConfusion = TRUE; + + SET_STATCHANGER(STAT_ATK, 2, FALSE); + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_ATK; + gBattleScripting.animArg2 = 0; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerserkGeneRetEnd2); + else + BattleScriptCall(BattleScript_BerserkGeneRet); + + return ITEM_STATS_CHANGE; +} + +static enum ItemEffect RestoreWhiteHerbStats(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + for (u32 i = 0; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battler].statStages[i] < DEFAULT_STAT_STAGE) + { + gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; + effect = ITEM_STATS_CHANGE; + } + } + if (effect != ITEM_NO_EFFECT) + { + if (timing == IsWhiteHerbActivation || timing == IsOnFlingActivation) + BattleScriptCall(BattleScript_WhiteHerbRet); + else + BattleScriptExecute(BattleScript_WhiteHerbEnd2); + } + + return effect; +} + +static enum ItemEffect TryConsumeMirrorHerb(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gProtectStructs[battler].eatMirrorHerb) + { + gProtectStructs[battler].eatMirrorHerb = 0; + ChooseStatBoostAnimation(battler); + if (timing == IsMirrorHerbFirstTurnActivation) + BattleScriptExecute(BattleScript_MirrorHerbCopyStatChangeEnd2); + else + BattleScriptCall(BattleScript_MirrorHerbCopyStatChange); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryKingsRock(u32 battlerAtk, u32 battlerDef, u32 item) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (!IsBattlerAlive(battlerDef) + || !IsBattlerTurnDamaged(battlerDef) + || MoveIgnoresKingsRock(gCurrentMove) + || MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_FLINCH)) + return effect; + + enum Ability ability = GetBattlerAbility(battlerAtk); + u32 holdEffectParam = GetItemHoldEffectParam(item); + + if (B_SERENE_GRACE_BOOST >= GEN_5 && ability == ABILITY_SERENE_GRACE) + holdEffectParam *= 2; + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_RAINBOW && gCurrentMove != MOVE_SECRET_POWER) + holdEffectParam *= 2; + if (ability != ABILITY_STENCH && RandomPercentage(RNG_HOLD_EFFECT_FLINCH, holdEffectParam)) + { + SetMoveEffect(battlerAtk, battlerDef, MOVE_EFFECT_FLINCH, gBattlescriptCurrInstr, NO_FLAGS); + effect = ITEM_EFFECT_OTHER; + } + + return effect; +} + +static enum ItemEffect TryAirBalloon(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (timing == IsOnTargetHitActivation) + { + if (IsBattlerTurnDamaged(battler)) + { + BattleScriptCall(BattleScript_AirBalloonMsgPop); + effect = ITEM_EFFECT_OTHER; + } + } + else if (!gSpecialStatuses[battler].switchInItemDone) + { + gSpecialStatuses[battler].switchInItemDone = TRUE; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptPushCursorAndCallback(BattleScript_AirBalloonMsgIn); + else + BattleScriptCall(BattleScript_AirBalloonMsgInRet); + RecordItemEffectBattle(battler, HOLD_EFFECT_AIR_BALLOON); + effect = ITEM_EFFECT_OTHER; + } + + return effect; +} + +static enum ItemEffect TryRockyHelmet(u32 battlerDef, u32 battlerAtk, u32 item) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + enum Ability ability = GetBattlerAbility(battlerAtk); + + if (IsBattlerTurnDamaged(battlerDef) + && IsBattlerAlive(battlerAtk) + && !CanBattlerAvoidContactEffects(battlerAtk, battlerDef, ability, GetBattlerHoldEffect(battlerAtk), gCurrentMove) + && !IsAbilityAndRecord(battlerAtk, ability, ABILITY_MAGIC_GUARD)) + { + SetPassiveDamageAmount(battlerAtk, GetNonDynamaxMaxHP(battlerAtk) / 6); + PREPARE_ITEM_BUFFER(gBattleTextBuff1, item); + BattleScriptCall(BattleScript_RockyHelmetActivates); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryWeaknessPolicy(u32 battlerDef) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerDef) + && IsBattlerTurnDamaged(battlerDef) + && gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_SUPER_EFFECTIVE) + { + BattleScriptCall(BattleScript_WeaknessPolicy); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TrySnowball(u32 battlerDef) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerDef) + && IsBattlerTurnDamaged(battlerDef) + && GetBattleMoveType(gCurrentMove) == TYPE_ICE) + { + BattleScriptCall(BattleScript_TargetItemStatRaise); + SET_STATCHANGER(STAT_ATK, 1, FALSE); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryLuminousMoss(u32 battlerDef) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerDef) + && IsBattlerTurnDamaged(battlerDef) + && GetBattleMoveType(gCurrentMove) == TYPE_WATER) + { + BattleScriptCall(BattleScript_TargetItemStatRaise); + SET_STATCHANGER(STAT_SPDEF, 1, FALSE); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryCellBattery(u32 battlerDef) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerDef) + && IsBattlerTurnDamaged(battlerDef) + && GetBattleMoveType(gCurrentMove) == TYPE_ELECTRIC) + { + BattleScriptCall(BattleScript_TargetItemStatRaise); + SET_STATCHANGER(STAT_ATK, 1, FALSE); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryAbsorbBulb(u32 battlerDef) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerDef) + && IsBattlerTurnDamaged(battlerDef) + && GetBattleMoveType(gCurrentMove) == TYPE_WATER) + { + effect = ITEM_STATS_CHANGE; + BattleScriptCall(BattleScript_TargetItemStatRaise); + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + } + + return effect; +} + +static enum ItemEffect TryJabocaBerry(u32 battlerDef, u32 battlerAtk, u32 item) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerAtk) + && IsBattlerTurnDamaged(battlerDef) + && !DoesSubstituteBlockMove(battlerAtk, battlerDef, gCurrentMove) + && IsBattleMovePhysical(gCurrentMove) + && !IsAbilityAndRecord(battlerAtk, GetBattlerAbility(battlerAtk), ABILITY_MAGIC_GUARD)) + { + s32 jabocaDamage = GetNonDynamaxMaxHP(battlerAtk) / 8; + if (GetBattlerAbility(battlerDef) == ABILITY_RIPEN) + jabocaDamage *= 2; + SetPassiveDamageAmount(battlerAtk, jabocaDamage); + BattleScriptCall(BattleScript_JabocaRowapBerryActivates); + PREPARE_ITEM_BUFFER(gBattleTextBuff1, item); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryRowapBerry(u32 battlerDef, u32 battlerAtk, u32 item) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerAtk) + && IsBattlerTurnDamaged(battlerDef) + && !DoesSubstituteBlockMove(battlerAtk, battlerDef, gCurrentMove) + && IsBattleMoveSpecial(gCurrentMove) + && !IsAbilityAndRecord(battlerAtk, GetBattlerAbility(battlerAtk), ABILITY_MAGIC_GUARD)) + { + s32 rowapDamage = GetNonDynamaxMaxHP(battlerAtk) / 8; + if (GetBattlerAbility(battlerDef) == ABILITY_RIPEN) + rowapDamage *= 2; + SetPassiveDamageAmount(battlerAtk, rowapDamage); + BattleScriptCall(BattleScript_JabocaRowapBerryActivates); + PREPARE_ITEM_BUFFER(gBattleTextBuff1, item); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TrySetEnigmaBerry(u32 battlerDef, u32 battlerAtk) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerDef) + && !DoesSubstituteBlockMove(battlerAtk, battlerDef, gCurrentMove) + && ((IsBattlerTurnDamaged(battlerDef) && gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_SUPER_EFFECTIVE) || gBattleScripting.overrideBerryRequirements) + && !(gBattleScripting.overrideBerryRequirements && gBattleMons[battlerDef].hp == gBattleMons[battlerDef].maxHP) + && !(B_HEAL_BLOCKING >= GEN_5 && gBattleMons[battlerDef].volatiles.healBlock)) + { + s32 healAmount = gBattleMons[battlerDef].maxHP * 25 / 100; + if (GetBattlerAbility(battlerDef) == ABILITY_RIPEN) + healAmount *= 2; + SetHealAmount(battlerDef, healAmount); + BattleScriptCall(BattleScript_ItemHealHP_RemoveItemRet); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryBlunderPolicy(u32 battlerAtk) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleStruct->blunderPolicy + && IsBattlerAlive(battlerAtk) + && CompareStat(battlerAtk, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(battlerAtk))) + { + gBattleStruct->blunderPolicy = FALSE; + SET_STATCHANGER(STAT_SPEED, 2, FALSE); + BattleScriptCall(BattleScript_AttackerItemStatRaise); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryMentalHerb(u32 battler) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + // Check infatuation + if (gBattleMons[battler].volatiles.infatuation) + { + gBattleMons[battler].volatiles.infatuation = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_INFATUATION; + StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); + effect = ITEM_EFFECT_OTHER; + } + if (B_MENTAL_HERB >= GEN_5) + { + // Check taunt + if (gDisableStructs[battler].tauntTimer != 0) + { + gDisableStructs[battler].tauntTimer = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); + effect = ITEM_EFFECT_OTHER; + } + // Check encore + if (gDisableStructs[battler].encoreTimer != 0) + { + gDisableStructs[battler].encoredMove = 0; + gDisableStructs[battler].encoreTimer = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; + effect = ITEM_EFFECT_OTHER; + } + // Check torment + if (gBattleMons[battler].volatiles.torment == TRUE) + { + gBattleMons[battler].volatiles.torment = FALSE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT; + effect = ITEM_EFFECT_OTHER; + } + // Check heal block + if (gBattleMons[battler].volatiles.healBlock) + { + gBattleMons[battler].volatiles.healBlock = FALSE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; + effect = ITEM_EFFECT_OTHER; + } + // Check disable + if (gDisableStructs[battler].disableTimer != 0) + { + gDisableStructs[battler].disableTimer = 0; + gDisableStructs[battler].disabledMove = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; + effect = ITEM_EFFECT_OTHER; + } + } + + if (effect) + BattleScriptCall(BattleScript_MentalHerbCureRet); + + return effect; +} + +static enum ItemEffect TryThroatSpray(u32 battlerAtk) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsSoundMove(gCurrentMove) + && gMultiHitCounter == 0 + && IsBattlerAlive(battlerAtk) + && IsAnyTargetTurnDamaged(battlerAtk) + && CompareStat(battlerAtk, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(battlerAtk)) + && !NoAliveMonsForEitherParty()) // Don't activate if battle will end + { + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + BattleScriptCall(BattleScript_AttackerItemStatRaise); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect DamagedStatBoostBerryEffect(u32 battlerDef, u32 battlerAtk, enum Stat statId, enum DamageCategory category) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (!IsBattlerAlive(battlerDef) || !CompareStat(battlerDef, statId, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(battlerDef))) + return effect; + + if (gBattleScripting.overrideBerryRequirements + || (!DoesSubstituteBlockMove(battlerAtk, battlerDef, gCurrentMove) + && GetBattleMoveCategory(gCurrentMove) == category + && IsBattlerTurnDamaged(battlerDef))) + { + if (GetBattlerAbility(battlerDef) == ABILITY_RIPEN) + SET_STATCHANGER(statId, 2, FALSE); + else + SET_STATCHANGER(statId, 1, FALSE); + + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; + gBattleScripting.animArg2 = 0; + BattleScriptCall(BattleScript_ConsumableStatRaiseRet); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryShellBell(u32 battlerAtk) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleScripting.savedDmg > 0 + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && (IsAnyTargetTurnDamaged(battlerAtk) || gBattleScripting.savedDmg > 0) + && !IsBattlerAtMaxHp(battlerAtk) + && IsBattlerAlive(battlerAtk) + && GetMoveEffect(gCurrentMove) != EFFECT_PAIN_SPLIT + && !IsFutureSightAttackerInParty(battlerAtk, gBattlerTarget, gCurrentMove) + && !(B_HEAL_BLOCKING >= GEN_5 && gBattleMons[battlerAtk].volatiles.healBlock)) + { + SetHealAmount(battlerAtk, gBattleScripting.savedDmg / GetBattlerHoldEffectParam(battlerAtk)); + BattleScriptCall(BattleScript_ItemHealHP_Ret); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryLifeOrb(u32 battlerAtk) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerAlive(battlerAtk) + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && (IsAnyTargetTurnDamaged(battlerAtk) || gBattleScripting.savedDmg > 0) + && !IsAbilityAndRecord(battlerAtk, GetBattlerAbility(battlerAtk), ABILITY_MAGIC_GUARD) + && GetMoveEffect(gCurrentMove) != EFFECT_PAIN_SPLIT + && !IsFutureSightAttackerInParty(battlerAtk, gBattlerTarget, gCurrentMove)) + { + SetPassiveDamageAmount(battlerAtk, GetNonDynamaxMaxHP(battlerAtk) / 10); + BattleScriptCall(BattleScript_ItemHurtRet); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryStickyBarbOnTargetHit(u32 battlerDef, u32 battlerAtk, u32 item) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (IsBattlerTurnDamaged(battlerDef) + && !CanBattlerAvoidContactEffects(battlerAtk, battlerDef, GetBattlerAbility(battlerAtk), GetBattlerHoldEffect(battlerAtk), gCurrentMove) + && !DoesSubstituteBlockMove(battlerAtk, battlerDef, gCurrentMove) + && IsBattlerAlive(battlerAtk) + && CanStealItem(battlerAtk, battlerDef, item) + && gBattleMons[battlerAtk].item == ITEM_NONE) + { + // No sticky hold checks. + gEffectBattler = battlerDef; + StealTargetItem(battlerAtk, battlerDef); // Attacker takes target's barb + BattleScriptCall(BattleScript_StickyBarbTransfer); + effect = ITEM_EFFECT_OTHER; + } + + return effect; +} + +static enum ItemEffect TryStickyBarbOnEndTurn(u32 battler, u32 item) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (!IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) + { + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8); + PREPARE_ITEM_BUFFER(gBattleTextBuff1, item); + BattleScriptExecute(BattleScript_ItemHurtEnd2); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryToxicOrb(u32 battler) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + enum Ability ability = GetBattlerAbility(battler); + + if (CanBePoisoned(battler, battler, ability, ability)) // Can corrosion trigger toxic orb on itself? + { + gBattleMons[battler].status1 = STATUS1_TOXIC_POISON; + BattleScriptExecute(BattleScript_ToxicOrb); + effect = ITEM_STATUS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryFlameOrb(u32 battler) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + enum Ability ability = GetBattlerAbility(battler); + + if (CanBeBurned(battler, battler, ability)) + { + gBattleMons[battler].status1 = STATUS1_BURN; + BattleScriptExecute(BattleScript_FlameOrb); + effect = ITEM_STATUS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryLeftovers(u32 battler, enum HoldEffect holdEffect) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleMons[battler].hp < gBattleMons[battler].maxHP + && !(B_HEAL_BLOCKING >= GEN_5 && gBattleMons[battler].volatiles.healBlock)) + { + SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / 16); + RecordItemEffectBattle(battler, holdEffect); + BattleScriptExecute(BattleScript_ItemHealHP_End2); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryBlackSludgeDamage(u32 battler, enum HoldEffect holdEffect) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (!IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) + { + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8); + RecordItemEffectBattle(battler, holdEffect); + BattleScriptExecute(BattleScript_ItemHurtEnd2); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryCureParalysis(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) + { + gBattleMons[battler].status1 &= ~STATUS1_PARALYSIS; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PARALYSIS; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryCureStatusEnd2); + else + BattleScriptCall(BattleScript_BerryCureStatusRet); + effect = ITEM_STATUS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryCurePoison(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleMons[battler].status1 & STATUS1_PSN_ANY) + { + gBattleMons[battler].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_POISON; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryCureStatusEnd2); + else + BattleScriptCall(BattleScript_BerryCureStatusRet); + effect = ITEM_STATUS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryCureBurn(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleMons[battler].status1 & STATUS1_BURN) + { + gBattleMons[battler].status1 &= ~STATUS1_BURN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_BURN; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryCureStatusEnd2); + else + BattleScriptCall(BattleScript_BerryCureStatusRet); + effect = ITEM_STATUS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryCureFreezeOrFrostbite(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleMons[battler].status1 & STATUS1_FREEZE) + { + gBattleMons[battler].status1 &= ~STATUS1_FREEZE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_FREEEZE; + effect = ITEM_STATUS_CHANGE; + } + else if (gBattleMons[battler].status1 & STATUS1_FROSTBITE) + { + gBattleMons[battler].status1 &= ~STATUS1_FROSTBITE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_FROSTBITE; + effect = ITEM_STATUS_CHANGE; + } + + if (effect == ITEM_STATUS_CHANGE) + { + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryCureStatusEnd2); + else + BattleScriptCall(BattleScript_BerryCureStatusRet); + } + + return effect; +} + +static enum ItemEffect TryCureSleep(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + { + gBattleMons[battler].status1 &= ~STATUS1_SLEEP; + gBattleMons[battler].volatiles.nightmare = FALSE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_SLEEP; + TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryCureStatusEnd2); + else + BattleScriptCall(BattleScript_BerryCureStatusRet); + effect = ITEM_STATUS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TryCureConfusion(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (gBattleMons[battler].volatiles.confusionTurns > 0) + { + RemoveConfusionStatus(battler); + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryCureConfusionEnd2); + else + BattleScriptCall(BattleScript_BerryCureConfusionRet); + effect = ITEM_EFFECT_OTHER; + } + + return effect; +} + +static enum ItemEffect TryCureAnyStatus(u32 battler, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + u32 string = 0; + + if ((gBattleMons[battler].status1 & STATUS1_ANY || gBattleMons[battler].volatiles.confusionTurns > 0)) + { + if (gBattleMons[battler].status1 & STATUS1_PSN_ANY) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + string++; + } + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + { + gBattleMons[battler].volatiles.nightmare = FALSE; + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); + string++; + } + if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + string++; + } + if (gBattleMons[battler].status1 & STATUS1_BURN) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + string++; + } + if (gBattleMons[battler].status1 & STATUS1_FREEZE || gBattleMons[battler].status1 & STATUS1_FROSTBITE) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + string++; + } + if (gBattleMons[battler].volatiles.confusionTurns > 0) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); + string++; + } + if (string <= 1) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; + gBattleMons[battler].status1 = 0; + RemoveConfusionStatus(battler); + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryCureStatusEnd2); + else + BattleScriptCall(BattleScript_BerryCureStatusRet); + effect = ITEM_STATUS_CHANGE; + } + + return effect; +} + +enum HealAmount +{ + FIXED_HEAL_AMOUNT, + PERCENT_HEAL_AMOUNT, +}; + +static u32 ItemHealHp(u32 battler, u32 itemId, enum HealAmount percentHeal, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + enum Ability ability = GetBattlerAbility(battler); + + if (!(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) + && !(B_HEAL_BLOCKING >= GEN_5 && gBattleMons[battler].volatiles.healBlock) + && HasEnoughHpToEatBerry(battler, ability, 2, itemId)) + { + s32 healAmount = 0; + if (percentHeal == PERCENT_HEAL_AMOUNT) + healAmount = (GetNonDynamaxMaxHP(battler) * GetItemHoldEffectParam(itemId) / 100); + else + healAmount = GetItemHoldEffectParam(itemId); + + if (ability == ABILITY_RIPEN && GetItemPocket(itemId) == POCKET_BERRIES) + healAmount *= 2; + + SetHealAmount(battler, healAmount); + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2); + else + BattleScriptCall(BattleScript_ItemHealHP_RemoveItemRet); + + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static u32 ItemRestorePp(u32 battler, u32 itemId, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + struct Pokemon *mon = GetBattlerMon(battler); + u32 i, changedPP = 0; + enum Ability ability = GetBattlerAbility(battler); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + u32 move = GetMonData(mon, MON_DATA_MOVE1 + i); + u32 currentPP = GetMonData(mon, MON_DATA_PP1 + i); + u32 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + u32 maxPP = CalculatePPWithBonus(move, ppBonuses, i); + if (move && (currentPP == 0 || (gBattleScripting.overrideBerryRequirements && currentPP != maxPP))) + { + u32 ppRestored = GetItemHoldEffectParam(itemId); + + if (ability == ABILITY_RIPEN) + { + ppRestored *= 2; + gBattlerAbility = battler; + } + if (currentPP + ppRestored > maxPP) + changedPP = maxPP; + else + changedPP = currentPP + ppRestored; + + PREPARE_MOVE_BUFFER(gBattleTextBuff1, move); + + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryPPHealEnd2); + else + BattleScriptCall(BattleScript_BerryPPHealRet); + + gBattleScripting.battler = battler; + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); + MarkBattlerForControllerExec(battler); + if (MOVE_IS_PERMANENT(battler, i)) + gBattleMons[battler].pp[i] = changedPP; + effect = ITEM_PP_CHANGE; + } + } + return effect; +} + +static enum ItemEffect HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + u32 hpFraction = B_CONFUSE_BERRIES_HEAL >= GEN_7 ? 4 : 2; + u32 ability = GetBattlerAbility(battler); + + if (HasEnoughHpToEatBerry(battler, ability, hpFraction, itemId) + && !(B_HEAL_BLOCKING >= GEN_5 && gBattleMons[battler].volatiles.healBlock)) + { + s32 healAmount = GetNonDynamaxMaxHP(battler) / GetItemHoldEffectParam(itemId); + if (ability == ABILITY_RIPEN) + healAmount *= 2; + SetHealAmount(battler, healAmount); + if (timing == IsOnSwitchInFirstTurnActivation) + { + if (GetFlavorRelationByPersonality(gBattleMons[battler].personality, flavorId) < 0) + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); + else + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2); + } + else + { + if (GetFlavorRelationByPersonality(gBattleMons[battler].personality, flavorId) < 0) + BattleScriptCall(BattleScript_BerryConfuseHealRet); + else + BattleScriptCall(BattleScript_ItemHealHP_RemoveItemRet); + } + PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, flavorId); + effect = ITEM_HP_CHANGE; + } + + return effect; +} + +static enum ItemEffect StatRaiseBerry(u32 battler, u32 itemId, enum Stat statId, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + enum Ability ability = GetBattlerAbility(battler); + + if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN, ability) + && HasEnoughHpToEatBerry(battler, ability, GetItemHoldEffectParam(itemId), itemId)) + { + gEffectBattler = gBattleScripting.battler = battler; + SET_STATCHANGER(statId, ability == ABILITY_RIPEN ? 2 : 1, FALSE); + gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; + gBattleScripting.animArg2 = 0; + + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); + else + BattleScriptCall(BattleScript_ConsumableStatRaiseRet); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect CriticalHitRatioUp(u32 battler, u32 itemId, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (!gBattleMons[battler].volatiles.focusEnergy + && !gBattleMons[battler].volatiles.dragonCheer + && HasEnoughHpToEatBerry(battler, GetBattlerAbility(battler), GetItemHoldEffectParam(itemId), itemId)) + { + gBattleMons[battler].volatiles.focusEnergy = TRUE; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); + else + BattleScriptCall(BattleScript_BerryFocusEnergyRet); + effect = ITEM_EFFECT_OTHER; + } + + return effect; +} + +static enum ItemEffect RandomStatRaiseBerry(u32 battler, u32 itemId, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + enum Stat stat; + enum Ability ability = GetBattlerAbility(battler); + + for (stat = STAT_ATK; stat < NUM_STATS; stat++) + { + if (CompareStat(battler, stat, MAX_STAT_STAGE, CMP_LESS_THAN, ability)) + break; + } + + if (stat == NUM_STATS) + return effect; + + if (HasEnoughHpToEatBerry(battler, ability, GetItemHoldEffectParam(itemId), itemId)) + { + u32 savedAttacker = gBattlerAttacker; + // MoodyCantRaiseStat requires that the battler is set to gBattlerAttacker + gBattlerAttacker = gBattleScripting.battler = battler; + gBattleScripting.statChanger = 0; + if (ability != ABILITY_CONTRARY) + stat = RandomUniformExcept(RNG_RANDOM_STAT_UP, STAT_ATK, NUM_STATS - 1, MoodyCantRaiseStat); + else + stat = RandomUniformExcept(RNG_RANDOM_STAT_UP, STAT_ATK, NUM_STATS - 1, MoodyCantLowerStat); + gBattlerAttacker = savedAttacker; + + PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); + SET_STATCHANGER(stat, ability == ABILITY_RIPEN ? 4 : 2, FALSE); + gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + stat; + gBattleScripting.animArg2 = 0; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); + else + BattleScriptCall(BattleScript_ConsumableStatRaiseRet); + effect = ITEM_STATS_CHANGE; + } + + return effect; +} + +static enum ItemEffect TrySetMicleBerry(u32 battler, u32 itemId, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + + if (HasEnoughHpToEatBerry(battler, GetBattlerAbility(battler), 4, itemId)) + { + gBattleStruct->battlerState[battler].usedMicleBerry = TRUE; + if (timing == IsOnSwitchInFirstTurnActivation) + BattleScriptExecute(BattleScript_MicleBerryActivateEnd2); + else + BattleScriptCall(BattleScript_MicleBerryActivateRet); + effect = ITEM_EFFECT_OTHER; + } + return effect; +} + +enum ItemEffect ItemBattleEffects(u32 itemBattler, u32 battler, enum HoldEffect holdEffect, ActivationTiming timing) +{ + enum ItemEffect effect = ITEM_NO_EFFECT; + u32 item; + + if (timing == IsOnBerryActivation || timing == IsOnFlingActivation) + item = gLastUsedItem; + else + item = gBattleMons[itemBattler].item; + + if (holdEffect == HOLD_EFFECT_NONE + || !timing(holdEffect) + || IsUnnerveBlocked(itemBattler, item)) + return effect; + + if (!IsBattlerAlive(itemBattler) + && holdEffect != HOLD_EFFECT_ROWAP_BERRY // Hacky workaround for them right now + && holdEffect != HOLD_EFFECT_JABOCA_BERRY + && holdEffect != HOLD_EFFECT_ROCKY_HELMET) + return effect; + + switch (holdEffect) + { + case HOLD_EFFECT_DOUBLE_PRIZE: + effect = TryDoublePrize(itemBattler); + break; + case HOLD_EFFECT_ROOM_SERVICE: + effect = TryRoomService(itemBattler, timing); + break; + case HOLD_EFFECT_TERRAIN_SEED: + effect = TryTerrainSeeds(itemBattler, item, timing); + break; + case HOLD_EFFECT_BERSERK_GENE: + effect = TryBerserkGene(itemBattler, timing); + break; + case HOLD_EFFECT_BOOSTER_ENERGY: + effect = TryBoosterEnergy(itemBattler, GetBattlerAbility(itemBattler), timing); + break; + case HOLD_EFFECT_WHITE_HERB: + effect = RestoreWhiteHerbStats(itemBattler, timing); + break; + case HOLD_EFFECT_MIRROR_HERB: + effect = TryConsumeMirrorHerb(itemBattler, timing); + break; + case HOLD_EFFECT_FLINCH: // Kings Rock + effect = TryKingsRock(itemBattler, battler, item); + break; + case HOLD_EFFECT_AIR_BALLOON: + effect = TryAirBalloon(itemBattler, timing); + break; + case HOLD_EFFECT_ROCKY_HELMET: + effect = TryRockyHelmet(itemBattler, battler, item); + break; + case HOLD_EFFECT_WEAKNESS_POLICY: + effect = TryWeaknessPolicy(itemBattler); + break; + case HOLD_EFFECT_SNOWBALL: + effect = TrySnowball(itemBattler); + break; + case HOLD_EFFECT_LUMINOUS_MOSS: + effect = TryLuminousMoss(itemBattler); + break; + case HOLD_EFFECT_CELL_BATTERY: + effect = TryCellBattery(itemBattler); + break; + case HOLD_EFFECT_ABSORB_BULB: + effect = TryAbsorbBulb(itemBattler); + break; + case HOLD_EFFECT_JABOCA_BERRY: + effect = TryJabocaBerry(itemBattler, battler, item); + break; + case HOLD_EFFECT_ROWAP_BERRY: + effect = TryRowapBerry(itemBattler, battler, item); + break; + case HOLD_EFFECT_ENIGMA_BERRY: // consume and heal if hit by super effective move + effect = TrySetEnigmaBerry(itemBattler, battler); + break; + case HOLD_EFFECT_BLUNDER_POLICY: + effect = TryBlunderPolicy(itemBattler); + break; + case HOLD_EFFECT_MENTAL_HERB: + effect = TryMentalHerb(itemBattler); + break; + case HOLD_EFFECT_THROAT_SPRAY: + effect = TryThroatSpray(itemBattler); + break; + case HOLD_EFFECT_KEE_BERRY: // consume and boost defense if used physical move + effect = DamagedStatBoostBerryEffect(itemBattler, battler, STAT_DEF, DAMAGE_CATEGORY_PHYSICAL); + break; + case HOLD_EFFECT_MARANGA_BERRY: // consume and boost sp. defense if used special move + effect = DamagedStatBoostBerryEffect(itemBattler, battler, STAT_SPDEF, DAMAGE_CATEGORY_SPECIAL); + break; + case HOLD_EFFECT_SHELL_BELL: + effect = TryShellBell(itemBattler); + break; + case HOLD_EFFECT_LIFE_ORB: + effect = TryLifeOrb(itemBattler); + break; + case HOLD_EFFECT_STICKY_BARB: + if (timing == IsOnTargetHitActivation) + effect = TryStickyBarbOnTargetHit(itemBattler, battler, item); + else + effect = TryStickyBarbOnEndTurn(itemBattler, item); + break; + case HOLD_EFFECT_TOXIC_ORB: + effect = TryToxicOrb(itemBattler); + break; + case HOLD_EFFECT_FLAME_ORB: + effect = TryFlameOrb(itemBattler); + break; + case HOLD_EFFECT_LEFTOVERS: + effect = TryLeftovers(itemBattler, holdEffect); + break; + case HOLD_EFFECT_BLACK_SLUDGE: + if (IS_BATTLER_OF_TYPE(itemBattler, TYPE_POISON)) + effect = TryLeftovers(itemBattler, holdEffect); + else + effect = TryBlackSludgeDamage(itemBattler, holdEffect); + break; + case HOLD_EFFECT_CURE_PAR: // Cheri Berry + effect = TryCureParalysis(itemBattler, timing); + break; + case HOLD_EFFECT_CURE_PSN: // Pecha Berry + effect = TryCurePoison(itemBattler, timing); + break; + case HOLD_EFFECT_CURE_BRN: // Rawst Berry + effect = TryCureBurn(itemBattler, timing); + break; + case HOLD_EFFECT_CURE_FRZ: // Aspear Berry + effect = TryCureFreezeOrFrostbite(itemBattler, timing); + break; + case HOLD_EFFECT_CURE_SLP: // Chesto Berry + effect = TryCureSleep(itemBattler, timing); + break; + case HOLD_EFFECT_CURE_CONFUSION: // Persim Berry + effect = TryCureConfusion(itemBattler, timing); + break; + case HOLD_EFFECT_CURE_STATUS: // Lum Berry + effect = TryCureAnyStatus(itemBattler, timing); + break; + case HOLD_EFFECT_RESTORE_HP: // Oran / Sitrus Berry / Berry Juice + effect = ItemHealHp(itemBattler, item, FIXED_HEAL_AMOUNT, timing); + break; + case HOLD_EFFECT_RESTORE_PCT_HP: // Sitrus Berry + effect = ItemHealHp(itemBattler, item, PERCENT_HEAL_AMOUNT, timing); + break; + case HOLD_EFFECT_RESTORE_PP: // Leppa Berry + effect = ItemRestorePp(itemBattler, item, timing); + break; + case HOLD_EFFECT_CONFUSE_SPICY: // Figy Berry + effect = HealConfuseBerry(itemBattler, item, FLAVOR_SPICY, timing); + break; + case HOLD_EFFECT_CONFUSE_DRY: // Wiki Berry + effect = HealConfuseBerry(itemBattler, item, FLAVOR_DRY, timing); + break; + case HOLD_EFFECT_CONFUSE_SWEET: // Mago Berry + effect = HealConfuseBerry(itemBattler, item, FLAVOR_SWEET, timing); + break; + case HOLD_EFFECT_CONFUSE_BITTER: // Aguav Berry + effect = HealConfuseBerry(itemBattler, item, FLAVOR_BITTER, timing); + break; + case HOLD_EFFECT_CONFUSE_SOUR: // Iapapa Berry + effect = HealConfuseBerry(itemBattler, item, FLAVOR_SOUR, timing); + break; + case HOLD_EFFECT_ATTACK_UP: // Liechi Berry + effect = StatRaiseBerry(itemBattler, item, STAT_ATK, timing); + break; + case HOLD_EFFECT_DEFENSE_UP: // Ganlon Berry + effect = StatRaiseBerry(itemBattler, item, STAT_DEF, timing); + break; + case HOLD_EFFECT_SPEED_UP: // Salac Berry + effect = StatRaiseBerry(itemBattler, item, STAT_SPEED, timing); + break; + case HOLD_EFFECT_SP_ATTACK_UP: // Petaya Berry + effect = StatRaiseBerry(itemBattler, item, STAT_SPATK, timing); + break; + case HOLD_EFFECT_SP_DEFENSE_UP: // Apicot Berry + effect = StatRaiseBerry(itemBattler, item, STAT_SPDEF, timing); + break; + case HOLD_EFFECT_CRITICAL_UP: // Lansat Berry + effect = CriticalHitRatioUp(itemBattler, item, timing); + break; + case HOLD_EFFECT_RANDOM_STAT_UP: // Starf Berry + effect = RandomStatRaiseBerry(itemBattler, item, timing); + break; + case HOLD_EFFECT_MICLE_BERRY: + effect = TrySetMicleBerry(itemBattler, item, timing); + break; + default: + break; + } + + if (effect == ITEM_STATUS_CHANGE) + { + BtlController_EmitSetMonData(itemBattler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[itemBattler].status1); + MarkBattlerForControllerExec(itemBattler); + } + + if (effect) + { + gLastUsedItem = item; + gBattleScripting.battler = gPotentialItemEffectBattler = itemBattler; + if ((item >= FIRST_BERRY_INDEX && item <= LAST_BERRY_INDEX)) + GetBattlerPartyState(itemBattler)->ateBerry = TRUE; + } + + return effect; +} diff --git a/src/battle_interface.c b/src/battle_interface.c index 80c85bb141e6..f87a88964119 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1175,12 +1175,13 @@ void SwapHpBarsWithHpText(void) for (i = 0; i < gBattlersCount; i++) { + struct Pokemon *mon = GetBattlerMon(i); if (gSprites[gHealthboxSpriteIds[i]].callback == SpriteCallbackDummy && IsOnPlayerSide(i) && (GetBattlerCoordsIndex(i) != BATTLE_COORDS_SINGLES || !IsOnPlayerSide(i))) { - s32 currHp = GetMonData(GetBattlerMon(i), MON_DATA_HP); - s32 maxHp = GetMonData(GetBattlerMon(i), MON_DATA_MAX_HP); + s32 currHp = GetMonData(mon, MON_DATA_HP); + s32 maxHp = GetMonData(mon, MON_DATA_MAX_HP); bool8 noBars; gBattleSpritesDataPtr->battlerData[i].hpNumbersNoBars ^= 1; @@ -1202,7 +1203,7 @@ void SwapHpBarsWithHpText(void) else // text to bars { UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[i], GetBattlerMon(i), HEALTHBOX_HEALTH_BAR); + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], mon, HEALTHBOX_HEALTH_BAR); CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_FRAME_END_BAR), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32); } } @@ -1213,7 +1214,7 @@ void SwapHpBarsWithHpText(void) if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) { // Most likely a debug function. - PrintSafariMonInfo(gHealthboxSpriteIds[i], GetBattlerMon(i)); + PrintSafariMonInfo(gHealthboxSpriteIds[i], mon); } else { @@ -1226,9 +1227,9 @@ void SwapHpBarsWithHpText(void) else // text to bars { UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]); - UpdateHealthboxAttribute(gHealthboxSpriteIds[i], GetBattlerMon(i), HEALTHBOX_HEALTH_BAR); + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], mon, HEALTHBOX_HEALTH_BAR); if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - UpdateHealthboxAttribute(gHealthboxSpriteIds[i], GetBattlerMon(i), HEALTHBOX_NICK); + UpdateHealthboxAttribute(gHealthboxSpriteIds[i], mon, HEALTHBOX_NICK); } } gSprites[gHealthboxSpriteIds[i]].hMain_Data7 ^= 1; @@ -1805,9 +1806,9 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) battler = gSprites[healthboxSpriteId].hMain_Battler; healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId; + status = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS); if (IsOnPlayerSide(battler)) { - status = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS); switch (GetBattlerCoordsIndex(battler)) { case BATTLE_COORDS_SINGLES: @@ -1820,7 +1821,6 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) } else { - status = GetMonData(GetBattlerMon(battler), MON_DATA_STATUS); tileNumAdder = 0x11; } @@ -2258,10 +2258,11 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 for (i = 0; i < scale; i++) pixelsArray[i] = 0; + // Safe Div, because 2vs1 battles can have maxValue 0. if (maxValue < totalPixels) - pixels = (*currValue * totalPixels / maxValue) >> 8; + pixels = SAFE_DIV(*currValue * totalPixels, maxValue) >> 8; else - pixels = *currValue * totalPixels / maxValue; + pixels = SAFE_DIV(*currValue * totalPixels, maxValue); filledPixels = pixels; @@ -2410,30 +2411,69 @@ static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 wi CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP); } -#define ABILITY_POP_UP_TAG 0xD720 +#define ABILITY_POP_UP_POS_X_DIFF 64 +#define ABILITY_POP_UP_POS_X_SLIDE 128 +#define ABILITY_POP_UP_POS_X_SPEED 4 -// for sprite -#define tOriginalX data[0] -#define tHide data[1] -#define tFrames data[2] -#define tRightToLeft data[3] -#define tBattlerId data[4] -#define tIsMain data[5] +#define ABILITY_POP_UP_WIN_WIDTH 10 +#define ABILITY_POP_UP_STR_WIDTH (ABILITY_POP_UP_WIN_WIDTH * 8) -// for task -#define tSpriteId1 data[6] -#define tSpriteId2 data[7] +#define ABILITY_POP_UP_PLAYER_LEFT_WIN_W 6 +#define ABILITY_POP_UP_PLAYER_RIGHT_WIN_W 4 +#define ABILITY_POP_UP_OPPONENT_LEFT_WIN_W 7 +#define ABILITY_POP_UP_OPPONENT_RIGHT_WIN_W 3 -static const u8 ALIGNED(4) sAbilityPopUpGfx[] = INCBIN_U8("graphics/battle_interface/ability_pop_up.4bpp"); +#define ABILITY_POP_UP_WAIT_FRAMES 48 + +/* + * BG = BackGround + * FG = ForeGround + * SH = SHadow + */ +#define ABILITY_POP_UP_BATTLER_BG_TXTCLR 2 +#define ABILITY_POP_UP_BATTLER_FG_TXTCLR 7 +#define ABILITY_POP_UP_BATTLER_SH_TXTCLR 1 + +#define ABILITY_POP_UP_ABILITY_BG_TXTCLR 7 +#define ABILITY_POP_UP_ABILITY_FG_TXTCLR 9 +#define ABILITY_POP_UP_ABILITY_SH_TXTCLR 1 + +#define sState data[0] +#define sAutoDestroy data[1] +#define sTimer data[2] +#define sIsPlayerSide data[3] +#define sBattlerId data[4] +#define sIsMain data[5] + +enum +{ + APU_STATE_SLIDE_IN = 0, + APU_STATE_IDLE, + APU_STATE_SLIDE_OUT, + APU_STATE_END +}; + +enum +{ + TAG_ABILITY_POP_UP = 0xD720, // Only used for the SpritePalette, the rest below is for the SpriteSheets. + TAG_ABILITY_POP_UP_PLAYER1 = TAG_ABILITY_POP_UP, + TAG_ABILITY_POP_UP_OPPONENT1, + TAG_ABILITY_POP_UP_PLAYER2, + TAG_ABILITY_POP_UP_OPPONENT2, + TAG_LAST_BALL_WINDOW, +}; + +static const u32 sAbilityPopUpGfx[] = INCBIN_U32("graphics/battle_interface/ability_pop_up.4bpp"); static const u16 sAbilityPopUpPalette[] = INCBIN_U16("graphics/battle_interface/ability_pop_up.gbapal"); static const struct SpriteSheet sSpriteSheet_AbilityPopUp = { - sAbilityPopUpGfx, sizeof(sAbilityPopUpGfx), ABILITY_POP_UP_TAG + sAbilityPopUpGfx, sizeof(sAbilityPopUpGfx), TAG_ABILITY_POP_UP }; + static const struct SpritePalette sSpritePalette_AbilityPopUp = { - sAbilityPopUpPalette, ABILITY_POP_UP_TAG + sAbilityPopUpPalette, TAG_ABILITY_POP_UP }; static const struct OamData sOamData_AbilityPopUp = @@ -2447,8 +2487,8 @@ static const struct OamData sOamData_AbilityPopUp = static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp = { - .tileTag = ABILITY_POP_UP_TAG, - .paletteTag = ABILITY_POP_UP_TAG, + .tileTag = TAG_NONE, // Changed on the fly. + .paletteTag = TAG_ABILITY_POP_UP, .oam = &sOamData_AbilityPopUp, .anims = gDummySpriteAnimTable, .images = NULL, @@ -2456,279 +2496,150 @@ static const struct SpriteTemplate sSpriteTemplate_AbilityPopUp = .callback = SpriteCb_AbilityPopUp }; -#define ABILITY_POP_UP_POS_X_DIFF (64 - 7) // Hide second sprite underneath to gain proper letter spacing -#define ABILITY_POP_UP_POS_X_SLIDE 68 - static const s16 sAbilityPopUpCoordsDoubles[MAX_BATTLERS_COUNT][2] = { - {29, 80}, // player left - {186, 19}, // opponent left - {29, 97}, // player right - {186, 36}, // opponent right + { 24, 80}, // Player left + {178, 19}, // Opponent left + { 24, 97}, // Player right + {178, 36}, // Opponent right }; static const s16 sAbilityPopUpCoordsSingles[MAX_BATTLERS_COUNT][2] = { - {29, 97}, // player - {186, 57}, // opponent + { 24, 97}, // Player + {178, 57}, // Opponent }; -#define POPUP_WINDOW_WIDTH 8 -#define MAX_POPUP_STRING_WIDTH (POPUP_WINDOW_WIDTH * 8) - -static u8* AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32 y, u32 color1, u32 color2, u32 color3, u32 *windowId) +static u8 *AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32 y, u32 bgColor, u32 fgColor, u32 shadowColor, u32 *windowId) { u32 fontId; - u8 color[3] = {color1, color2, color3}; + u8 color[3] = {bgColor, fgColor, shadowColor}; struct WindowTemplate winTemplate = {0}; - winTemplate.width = POPUP_WINDOW_WIDTH; + winTemplate.width = ABILITY_POP_UP_WIN_WIDTH; winTemplate.height = 2; *windowId = AddWindow(&winTemplate); - FillWindowPixelBuffer(*windowId, PIXEL_FILL(color1)); + FillWindowPixelBuffer(*windowId, PIXEL_FILL(bgColor)); - fontId = GetFontIdToFit(str, FONT_SMALL, 0, 76); + fontId = GetFontIdToFit(str, FONT_SMALL, 0, ABILITY_POP_UP_STR_WIDTH); AddTextPrinterParameterized4(*windowId, fontId, x, y, 0, 0, color, TEXT_SKIP_DRAW, str); + return (u8 *)(GetWindowAttribute(*windowId, WINDOW_TILE_DATA)); } -static void TextIntoAbilityPopUp(void *dest, u8 *windowTileData, s32 xTileAmount, bool32 arg3) +static void TextIntoAbilityPopUp(void *dest, u8 *windowTileData, s32 windowWidth, bool32 printNickname) { - CpuCopy32(windowTileData + 256, dest + 256, xTileAmount * 32); - if (xTileAmount > 0) + #define PIXELS(n) (n * 4) + if (windowWidth > 0) { do { - if (arg3) - CpuCopy32(windowTileData + 16, dest + 16, 16); + if (printNickname) + { + CpuCopy32(windowTileData + PIXELS(3), dest + PIXELS(3), PIXELS(5)); + CpuCopy32(windowTileData + TILE_OFFSET_4BPP(ABILITY_POP_UP_WIN_WIDTH), dest + TILE_OFFSET_4BPP(8), PIXELS(5)); + } else - CpuCopy32(windowTileData + 20, dest + 20, 12); - dest += 32, windowTileData += 32; - xTileAmount--; - } while (xTileAmount != 0); + { + CpuCopy32(windowTileData + PIXELS(7), dest + PIXELS(7), PIXELS(1)); + CpuCopy32(windowTileData + TILE_OFFSET_4BPP(ABILITY_POP_UP_WIN_WIDTH), dest + TILE_OFFSET_4BPP(8), TILE_SIZE_4BPP); + } + + dest += TILE_SIZE_4BPP, windowTileData += TILE_SIZE_4BPP; + windowWidth--; + } while (windowWidth != 0); } + #undef PIXELS } -static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTileData2, u32 x1, u32 x2, u32 y, u32 color1, u32 color2, u32 color3) +static void PrintOnAbilityPopUp(const u8 *str, u8 *spriteTileData1, u8 *spriteTileData2, u32 x, u32 y, u32 bgColor, u32 fgColor, u32 shadowColor, u32 printNickname, u32 battler) { - u32 windowId; - u8 *windowTileData; - u16 width; + u32 windowId, fontId; + u8 *windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(str, x, y, bgColor, fgColor, shadowColor, &windowId); + u32 size1 = ABILITY_POP_UP_OPPONENT_LEFT_WIN_W, size2 = ABILITY_POP_UP_OPPONENT_RIGHT_WIN_W; - windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(str, x1, y, color1, color2, color3, &windowId); - TextIntoAbilityPopUp(spriteTileData1, windowTileData, 8, (y == 0)); - RemoveWindow(windowId); - - width = GetStringWidth(FONT_SMALL, str, 0); + spriteTileData1 += TILE_OFFSET_4BPP(1); + if (IsOnPlayerSide(battler)) + { + size1 = ABILITY_POP_UP_PLAYER_LEFT_WIN_W, size2 = ABILITY_POP_UP_PLAYER_RIGHT_WIN_W; + // Increment again as the *first* column of the sprite + // is not shown for player's pop up when sliding in. + spriteTileData1 += TILE_OFFSET_4BPP(1); + } - if (width > MAX_POPUP_STRING_WIDTH - 5) + TextIntoAbilityPopUp(spriteTileData1, windowTileData, size1, printNickname); + fontId = GetFontIdToFit(str, FONT_SMALL, 0, ABILITY_POP_UP_STR_WIDTH); + if (GetStringWidth(fontId, str, 0) > (size1 * 8)) { - windowTileData = AddTextPrinterAndCreateWindowOnAbilityPopUp(str, x2 - MAX_POPUP_STRING_WIDTH, y, color1, color2, color3, &windowId); - TextIntoAbilityPopUp(spriteTileData2, windowTileData, 3, (y == 0)); - RemoveWindow(windowId); + windowTileData += TILE_OFFSET_4BPP(size1); + TextIntoAbilityPopUp(spriteTileData2, windowTileData, size2, printNickname); } -} -static const u8 sText_Spaces20[]= _(" "); -static void ClearAbilityName(u8 spriteId1, u8 spriteId2) -{ - PrintOnAbilityPopUp(sText_Spaces20, - (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256, - (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256, - 5, 12, - 4, - 7, 9, 1); + RemoveWindow(windowId); } static void PrintBattlerOnAbilityPopUp(u8 battler, u8 spriteId1, u8 spriteId2) { - int i; - u8 lastChar; - u8* textPtr; - u8 monName[POKEMON_NAME_LENGTH + 3] = {0}; + u32 totalChar = 0, lastChar; struct Pokemon *illusionMon = GetIllusionMonPtr(battler); - u8 nick[POKEMON_NAME_LENGTH + 1] = {0}; if (illusionMon != NULL) - GetMonData(illusionMon, MON_DATA_NICKNAME, nick); + GetMonData(illusionMon, MON_DATA_NICKNAME, gStringVar1); else - GetMonData(GetBattlerMon(battler), MON_DATA_NICKNAME, nick); + GetMonData(GetBattlerMon(battler), MON_DATA_NICKNAME, gStringVar1); - for (i = 0; i < POKEMON_NAME_LENGTH; ++i) - { - if (nick[i] == EOS) // End of string - break; + while (gStringVar1[totalChar] != EOS) + totalChar++; - monName[i] = nick[i]; - } - - textPtr = monName + i; - - lastChar = *(textPtr - 1); - - // Make the string say "[NAME]'s" instead of "[NAME]" - textPtr[0] = CHAR_SGL_QUOTE_RIGHT; // apostraphe - textPtr++; + lastChar = gStringVar1[totalChar - 1]; + StringAppend(gStringVar1, COMPOUND_STRING("'")); if (lastChar != CHAR_S && lastChar != CHAR_s) - { - textPtr[0] = CHAR_s; - textPtr++; - } - - textPtr[0] = EOS; + StringAppend(gStringVar1, COMPOUND_STRING("s")); - PrintOnAbilityPopUp((const u8 *)monName, - (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32), - (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32), - 5, 12, - 0, - 2, 7, 1); + PrintOnAbilityPopUp(gStringVar1, + (void *)(OBJ_VRAM0) + TILE_OFFSET_4BPP(gSprites[spriteId1].oam.tileNum), + (void *)(OBJ_VRAM0) + TILE_OFFSET_4BPP(gSprites[spriteId2].oam.tileNum), + 0, 0, + ABILITY_POP_UP_BATTLER_BG_TXTCLR, ABILITY_POP_UP_BATTLER_FG_TXTCLR, ABILITY_POP_UP_BATTLER_SH_TXTCLR, + TRUE, gSprites[spriteId1].sBattlerId); } -static void PrintAbilityOnAbilityPopUp(u32 ability, u8 spriteId1, u8 spriteId2) +static void PrintAbilityOnAbilityPopUp(enum Ability ability, u8 spriteId1, u8 spriteId2) { - ClearAbilityName(spriteId1, spriteId2); + PrintOnAbilityPopUp(COMPOUND_STRING(" "), + (void *)(OBJ_VRAM0) + TILE_OFFSET_4BPP(gSprites[spriteId1].oam.tileNum) + TILE_OFFSET_4BPP(8), + (void *)(OBJ_VRAM0) + TILE_OFFSET_4BPP(gSprites[spriteId2].oam.tileNum) + TILE_OFFSET_4BPP(8), + 0, 4, + ABILITY_POP_UP_ABILITY_BG_TXTCLR, ABILITY_POP_UP_ABILITY_FG_TXTCLR, ABILITY_POP_UP_ABILITY_SH_TXTCLR, + FALSE, gSprites[spriteId1].sBattlerId); PrintOnAbilityPopUp(gAbilitiesInfo[ability].name, - (void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32) + 256, - (void*)(OBJ_VRAM0) + (gSprites[spriteId2].oam.tileNum * 32) + 256, - 5, 12, - 4, - 7, 9, 1); -} - -#define PIXEL_COORDS_TO_OFFSET(x, y)( \ -/*Add tiles by X*/ \ -((y / 8) * 32 * 8) \ -/*Add tiles by X*/ \ -+ ((x / 8) * 32) \ -/*Add pixels by Y*/ \ -+ ((((y) - ((y / 8) * 8))) * 4) \ -/*Add pixels by X*/ \ -+ ((((x) - ((x / 8) * 8)) / 2))) - -static const u16 sOverwrittenPixelsTable[][2] = -{ - {PIXEL_COORDS_TO_OFFSET(0, 0), 5}, - {PIXEL_COORDS_TO_OFFSET(0, 1), 5}, - {PIXEL_COORDS_TO_OFFSET(0, 2), 5}, - {PIXEL_COORDS_TO_OFFSET(0, 3), 5}, - {PIXEL_COORDS_TO_OFFSET(0, 4), 5}, - {PIXEL_COORDS_TO_OFFSET(0, 5), 5}, - {PIXEL_COORDS_TO_OFFSET(0, 6), 5}, - {PIXEL_COORDS_TO_OFFSET(0, 7), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 8), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 9), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 10), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 11), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 12), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 13), 8}, - - {PIXEL_COORDS_TO_OFFSET(8, 13), 8}, - {PIXEL_COORDS_TO_OFFSET(16, 13), 8}, - {PIXEL_COORDS_TO_OFFSET(24, 13), 8}, - {PIXEL_COORDS_TO_OFFSET(32, 13), 8}, - {PIXEL_COORDS_TO_OFFSET(40, 13), 8}, - {PIXEL_COORDS_TO_OFFSET(48, 13), 8}, - {PIXEL_COORDS_TO_OFFSET(56, 13), 8}, - - {PIXEL_COORDS_TO_OFFSET(0, 14), 8}, - {PIXEL_COORDS_TO_OFFSET(8, 14), 8}, - {PIXEL_COORDS_TO_OFFSET(16, 14), 8}, - {PIXEL_COORDS_TO_OFFSET(24, 14), 8}, - {PIXEL_COORDS_TO_OFFSET(32, 14), 8}, - {PIXEL_COORDS_TO_OFFSET(40, 14), 8}, - {PIXEL_COORDS_TO_OFFSET(48, 14), 8}, - {PIXEL_COORDS_TO_OFFSET(56, 14), 8}, - - {PIXEL_COORDS_TO_OFFSET(0, 15), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 16), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 17), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 18), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 19), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 20), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 21), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 22), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 23), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 24), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 25), 3}, - {PIXEL_COORDS_TO_OFFSET(0, 26), 3}, - -//Second Row Of Image - {PIXEL_COORDS_TO_OFFSET(0, 45), 8}, - {PIXEL_COORDS_TO_OFFSET(0, 46), 8}, - {PIXEL_COORDS_TO_OFFSET(0, 47), 8}, - {PIXEL_COORDS_TO_OFFSET(8, 45), 8}, - {PIXEL_COORDS_TO_OFFSET(8, 46), 8}, - {PIXEL_COORDS_TO_OFFSET(8, 47), 8}, - {PIXEL_COORDS_TO_OFFSET(16, 45), 8}, - {PIXEL_COORDS_TO_OFFSET(16, 46), 8}, - {PIXEL_COORDS_TO_OFFSET(16, 47), 8}, -}; - -static inline void CopyPixels(u8 *dest, const u8 *src, u32 pixelCount) -{ - u32 i = 0; - - if (pixelCount & 1) - { - while (pixelCount != 0) - { - dest[i] &= ~(0xF); - dest[i] |= (src[i] & 0xF); - if (--pixelCount != 0) - { - dest[i] &= ~(0xF0); - dest[i] |= (src[i] & 0xF0); - pixelCount--; - } - i++; - } - } - else - { - for (i = 0; i < pixelCount / 2; i++) - dest[i] = src[i]; - } -} - -static void RestoreOverwrittenPixels(u8 *tiles) -{ - u32 i; - u8 *buffer = Alloc(sizeof(sAbilityPopUpGfx) * 2); - - CpuCopy32(tiles, buffer, sizeof(sAbilityPopUpGfx)); - - for (i = 0; i < ARRAY_COUNT(sOverwrittenPixelsTable); i++) - { - CopyPixels(buffer + sOverwrittenPixelsTable[i][0], - sAbilityPopUpGfx + sOverwrittenPixelsTable[i][0], - sOverwrittenPixelsTable[i][1]); - } - - CpuCopy32(buffer, tiles, sizeof(sAbilityPopUpGfx)); - Free(buffer); + (void *)(OBJ_VRAM0) + TILE_OFFSET_4BPP(gSprites[spriteId1].oam.tileNum) + TILE_OFFSET_4BPP(8), + (void *)(OBJ_VRAM0) + TILE_OFFSET_4BPP(gSprites[spriteId2].oam.tileNum) + TILE_OFFSET_4BPP(8), + 0, 4, + ABILITY_POP_UP_ABILITY_BG_TXTCLR, ABILITY_POP_UP_ABILITY_FG_TXTCLR, ABILITY_POP_UP_ABILITY_SH_TXTCLR, + FALSE, gSprites[spriteId1].sBattlerId); } static inline bool32 IsAnyAbilityPopUpActive(void) { + u32 activeAbilityPopUps = 0; for (u32 battler = 0; battler < gBattlersCount; battler++) { if (gBattleStruct->battlerState[battler].activeAbilityPopUps) - return TRUE; + activeAbilityPopUps++; } - return FALSE; + return activeAbilityPopUps; } -void CreateAbilityPopUp(u8 battler, u32 ability, bool32 isDoubleBattle) +void CreateAbilityPopUp(u8 battler, enum Ability ability, bool32 isDoubleBattle) { + u8 *spriteIds; + u32 xSlide, tileTag, battlerPosition = GetBattlerPosition(battler); + struct SpriteTemplate template; const s16 (*coords)[2]; - u8 spriteId1, spriteId2, battlerPosition, taskId; - - if (B_ABILITY_POP_UP == FALSE) - return; - if (gBattleScripting.abilityPopupOverwrite != 0) + if (gBattleScripting.abilityPopupOverwrite) ability = gBattleScripting.abilityPopupOverwrite; if (gTestRunnerEnabled) @@ -2739,111 +2650,122 @@ void CreateAbilityPopUp(u8 battler, u32 ability, bool32 isDoubleBattle) } if (!IsAnyAbilityPopUpActive()) - { - LoadSpriteSheet(&sSpriteSheet_AbilityPopUp); LoadSpritePalette(&sSpritePalette_AbilityPopUp); - } - gBattleStruct->battlerState[battler].activeAbilityPopUps = TRUE; - battlerPosition = GetBattlerPosition(battler); + tileTag = (TAG_ABILITY_POP_UP_PLAYER1 + battler); + if (IndexOfSpriteTileTag(tileTag) == 0xFF) + { + struct SpriteSheet sheet = sSpriteSheet_AbilityPopUp; + sheet.tag = tileTag; + LoadSpriteSheet(&sheet); + } - if (isDoubleBattle) - coords = sAbilityPopUpCoordsDoubles; - else - coords = sAbilityPopUpCoordsSingles; + coords = isDoubleBattle ? sAbilityPopUpCoordsDoubles : sAbilityPopUpCoordsSingles; + xSlide = IsOnPlayerSide(battler) ? -ABILITY_POP_UP_POS_X_SLIDE : ABILITY_POP_UP_POS_X_SLIDE; - if ((battlerPosition & BIT_SIDE) == B_SIDE_PLAYER) - { - spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp, - coords[battlerPosition][0] - ABILITY_POP_UP_POS_X_SLIDE, - coords[battlerPosition][1], 0); - spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp, - coords[battlerPosition][0] - ABILITY_POP_UP_POS_X_SLIDE + ABILITY_POP_UP_POS_X_DIFF, - coords[battlerPosition][1], 1); //Appears below + template = sSpriteTemplate_AbilityPopUp; + template.tileTag = tileTag; + spriteIds = gBattleStruct->abilityPopUpSpriteIds[battler]; + spriteIds[0] = CreateSprite(&template, coords[battlerPosition][0] + xSlide, + coords[battlerPosition][1], 0); + spriteIds[1] = CreateSprite(&template, coords[battlerPosition][0] + xSlide + ABILITY_POP_UP_POS_X_DIFF, + coords[battlerPosition][1], 0); - gSprites[spriteId1].tRightToLeft = TRUE; - gSprites[spriteId2].tRightToLeft = TRUE; - } - else + if (IsOnPlayerSide(battler)) { - spriteId1 = CreateSprite(&sSpriteTemplate_AbilityPopUp, - coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_SLIDE, - coords[battlerPosition][1], 0); - spriteId2 = CreateSprite(&sSpriteTemplate_AbilityPopUp, - coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_SLIDE + ABILITY_POP_UP_POS_X_DIFF, - coords[battlerPosition][1], 1); //Appears below - - gSprites[spriteId1].tRightToLeft = FALSE; - gSprites[spriteId2].tRightToLeft = FALSE; + gSprites[spriteIds[0]].sIsPlayerSide = TRUE; + gSprites[spriteIds[1]].sIsPlayerSide = TRUE; } - gSprites[spriteId1].tOriginalX = coords[battlerPosition][0]; - gSprites[spriteId2].tOriginalX = coords[battlerPosition][0] + ABILITY_POP_UP_POS_X_DIFF; - gSprites[spriteId2].oam.tileNum += (8 * 4); //Second half of pop up + gSprites[spriteIds[1]].oam.tileNum += 32; // Second half of the pop up tiles. - gBattleStruct->abilityPopUpSpriteIds[battler][0] = spriteId1; - gBattleStruct->abilityPopUpSpriteIds[battler][1] = spriteId2; - - taskId = CreateTask(Task_FreeAbilityPopUpGfx, 5); - gTasks[taskId].tSpriteId1 = spriteId1; - gTasks[taskId].tSpriteId2 = spriteId2; + // Create only one instance, as it's only used for + // tracking the SpriteSheet(s) and SpritePalette. + if (!IsAnyAbilityPopUpActive()) + CreateTask(Task_FreeAbilityPopUpGfx, 5); - gSprites[spriteId1].tIsMain = TRUE; - gSprites[spriteId1].tBattlerId = battler; - gSprites[spriteId2].tBattlerId = battler; + gBattleStruct->battlerState[battler].activeAbilityPopUps = TRUE; - StartSpriteAnim(&gSprites[spriteId1], 0); - StartSpriteAnim(&gSprites[spriteId2], 0); + gSprites[spriteIds[0]].sIsMain = TRUE; + gSprites[spriteIds[0]].sBattlerId = battler; + gSprites[spriteIds[1]].sBattlerId = battler; - PrintBattlerOnAbilityPopUp(battler, spriteId1, spriteId2); - PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2); - RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32)); + PrintBattlerOnAbilityPopUp(battler, spriteIds[0], spriteIds[1]); + PrintAbilityOnAbilityPopUp(ability, spriteIds[0], spriteIds[1]); } void UpdateAbilityPopup(u8 battler) { - u8 spriteId1 = gBattleStruct->abilityPopUpSpriteIds[battler][0]; - u8 spriteId2 = gBattleStruct->abilityPopUpSpriteIds[battler][1]; - u16 ability = (gBattleScripting.abilityPopupOverwrite != 0) ? gBattleScripting.abilityPopupOverwrite : gBattleMons[battler].ability; - - PrintAbilityOnAbilityPopUp(ability, spriteId1, spriteId2); - RestoreOverwrittenPixels((void*)(OBJ_VRAM0) + (gSprites[spriteId1].oam.tileNum * 32)); + u8 *spriteIds = gBattleStruct->abilityPopUpSpriteIds[battler]; + enum Ability ability = (gBattleScripting.abilityPopupOverwrite) ? gBattleScripting.abilityPopupOverwrite + : gBattleMons[battler].ability; + PrintAbilityOnAbilityPopUp(ability, spriteIds[0], spriteIds[1]); } -#define FRAMES_TO_WAIT 48 - static void SpriteCb_AbilityPopUp(struct Sprite *sprite) { - if (!sprite->tHide) // Show + s16 *data = sprite->data; + u32 battlerPosition = GetBattlerPosition(sBattlerId); + u32 fullX = sprite->x + sprite->x2; + u32 speed; + + switch (sState) + { + case APU_STATE_SLIDE_IN: { - if (sprite->tIsMain && ++sprite->tFrames == 4) + const s16 (*coords)[2] = IsDoubleBattle() ? sAbilityPopUpCoordsDoubles : sAbilityPopUpCoordsSingles; + u32 xCoord = coords[battlerPosition][0]; + + if (sIsMain && ++sTimer == 4) PlaySE(SE_BALL_TRAY_ENTER); - if ((!sprite->tRightToLeft && (sprite->x -= 4) <= sprite->tOriginalX) - || (sprite->tRightToLeft && (sprite->x += 4) >= sprite->tOriginalX) - ) - { - sprite->x = sprite->tOriginalX; - sprite->tHide = TRUE; - sprite->tFrames = FRAMES_TO_WAIT; - } + + if (!sIsMain) + xCoord += ABILITY_POP_UP_POS_X_DIFF; + + if (fullX == xCoord) + { + sTimer = ABILITY_POP_UP_WAIT_FRAMES; + sState = APU_STATE_IDLE; + break; + } + + speed = sIsPlayerSide ? ABILITY_POP_UP_POS_X_SPEED : -ABILITY_POP_UP_POS_X_SPEED; + sprite->x2 += speed; + break; } - else // Hide + case APU_STATE_IDLE: { - if (sprite->tFrames == 0) + if (!sTimer || sAutoDestroy) { - if ((!sprite->tRightToLeft && (sprite->x += 4) >= sprite->tOriginalX + ABILITY_POP_UP_POS_X_SLIDE) - ||(sprite->tRightToLeft && (sprite->x -= 4) <= sprite->tOriginalX - ABILITY_POP_UP_POS_X_SLIDE) - ) - { - gBattleStruct->battlerState[sprite->tBattlerId].activeAbilityPopUps = FALSE; - DestroySprite(sprite); - } - } - else - { - if (!gBattleScripting.fixedPopup) - sprite->tFrames--; + sState = APU_STATE_SLIDE_OUT; + break; } + + if (!gBattleScripting.fixedPopup) + sTimer--; + + break; + } + case APU_STATE_SLIDE_OUT: + { + if (fullX == sprite->x) + { + sState = APU_STATE_END; + break; + } + + speed = sIsPlayerSide ? -ABILITY_POP_UP_POS_X_SPEED : ABILITY_POP_UP_POS_X_SPEED; + sprite->x2 += speed; + break; + } + case APU_STATE_END: + { + if (sIsMain) + gBattleStruct->battlerState[sBattlerId].activeAbilityPopUps = FALSE; + + DestroySprite(sprite); + break; + } } } @@ -2851,26 +2773,33 @@ void DestroyAbilityPopUp(u8 battler) { if (gBattleStruct->battlerState[battler].activeAbilityPopUps) { - gSprites[gBattleStruct->abilityPopUpSpriteIds[battler][0]].tFrames = 0; - gSprites[gBattleStruct->abilityPopUpSpriteIds[battler][1]].tFrames = 0; + gSprites[gBattleStruct->abilityPopUpSpriteIds[battler][0]].sAutoDestroy = TRUE; + gSprites[gBattleStruct->abilityPopUpSpriteIds[battler][1]].sAutoDestroy = TRUE; } - gBattleScripting.fixedPopup = FALSE; } static void Task_FreeAbilityPopUpGfx(u8 taskId) { - if (!gSprites[gTasks[taskId].tSpriteId1].inUse - && !gSprites[gTasks[taskId].tSpriteId2].inUse - && !IsAnyAbilityPopUpActive()) + if (!IsAnyAbilityPopUpActive()) { - FreeSpriteTilesByTag(ABILITY_POP_UP_TAG); - FreeSpritePaletteByTag(ABILITY_POP_UP_TAG); + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + if (IndexOfSpriteTileTag(TAG_ABILITY_POP_UP_PLAYER1 + battler) != 0xFF) + FreeSpriteTilesByTag(TAG_ABILITY_POP_UP_PLAYER1 + battler); + } + FreeSpritePaletteByTag(TAG_ABILITY_POP_UP); DestroyTask(taskId); } } +#undef sState +#undef sAutoDestroy +#undef sTimer +#undef sIsPlayerSide +#undef sBattlerId +#undef sIsMain + // last used ball -#define LAST_BALL_WINDOW_TAG 0xD721 static const struct OamData sOamData_LastUsedBall = { @@ -2891,8 +2820,8 @@ static const struct OamData sOamData_LastUsedBall = static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow = { - .tileTag = LAST_BALL_WINDOW_TAG, - .paletteTag = ABILITY_POP_UP_TAG, + .tileTag = TAG_LAST_BALL_WINDOW, + .paletteTag = TAG_ABILITY_POP_UP, .oam = &sOamData_LastUsedBall, .anims = gDummySpriteAnimTable, .images = NULL, @@ -2922,7 +2851,7 @@ static const struct OamData sOamData_MoveInfoWindow = static const struct SpriteTemplate sSpriteTemplate_MoveInfoWindow = { .tileTag = MOVE_INFO_WINDOW_TAG, - .paletteTag = ABILITY_POP_UP_TAG, + .paletteTag = TAG_ABILITY_POP_UP, .oam = &sOamData_MoveInfoWindow, .anims = gDummySpriteAnimTable, .images = NULL, @@ -2941,7 +2870,7 @@ static const struct SpriteTemplate sSpriteTemplate_MoveInfoWindow = #endif static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow = { - sLastUsedBallWindowGfx, sizeof(sLastUsedBallWindowGfx), LAST_BALL_WINDOW_TAG + sLastUsedBallWindowGfx, sizeof(sLastUsedBallWindowGfx), TAG_LAST_BALL_WINDOW }; #if B_MOVE_DESCRIPTION_BUTTON == R_BUTTON @@ -2997,9 +2926,9 @@ void TryAddLastUsedBallItemSprites(void) u16 firstBall; // we have to compact the bag first bc it is typically only compacted when you open it - CompactItemsInBagPocket(&gBagPockets[BALLS_POCKET]); + CompactItemsInBagPocket(POCKET_POKE_BALLS); - firstBall = gBagPockets[BALLS_POCKET].itemSlots[0].itemId; + firstBall = GetBagItemId(POCKET_POKE_BALLS, 0); if (firstBall > ITEM_NONE) gBallToDisplay = firstBall; } @@ -3020,7 +2949,7 @@ void TryAddLastUsedBallItemSprites(void) // window LoadSpritePalette(&sSpritePalette_AbilityPopUp); - if (GetSpriteTileStartByTag(LAST_BALL_WINDOW_TAG) == 0xFFFF) + if (GetSpriteTileStartByTag(TAG_LAST_BALL_WINDOW) == 0xFFFF) LoadSpriteSheet(&sSpriteSheet_LastUsedBallWindow); if (gBattleStruct->ballSpriteIds[1] == MAX_SPRITES) @@ -3038,8 +2967,9 @@ void TryAddLastUsedBallItemSprites(void) static void DestroyLastUsedBallWinGfx(struct Sprite *sprite) { - FreeSpriteTilesByTag(LAST_BALL_WINDOW_TAG); - FreeSpritePaletteByTag(ABILITY_POP_UP_TAG); + FreeSpriteTilesByTag(TAG_LAST_BALL_WINDOW); + if (GetSpriteTileStartByTag(MOVE_INFO_WINDOW_TAG) == 0xFFFF) + FreeSpritePaletteByTag(TAG_ABILITY_POP_UP); DestroySprite(sprite); gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; } @@ -3076,7 +3006,8 @@ void TryToHideMoveInfoWindow(void) static void DestroyMoveInfoWinGfx(struct Sprite *sprite) { FreeSpriteTilesByTag(MOVE_INFO_WINDOW_TAG); - FreeSpritePaletteByTag(ABILITY_POP_UP_TAG); + if (GetSpriteTileStartByTag(TAG_LAST_BALL_WINDOW) == 0xFFFF) + FreeSpritePaletteByTag(TAG_ABILITY_POP_UP); DestroySprite(sprite); gBattleStruct->moveInfoSpriteId = MAX_SPRITES; } diff --git a/src/battle_intro.c b/src/battle_intro.c index 5239a815759a..ebc737dac150 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -125,6 +125,9 @@ void HandleIntroSlide(u8 environment) } else { + if (environment >= NELEMS(sBattleIntroSlideFuncs) + || sBattleIntroSlideFuncs[environment] == NULL) + environment = BATTLE_ENVIRONMENT_PLAIN; taskId = CreateTask(sBattleIntroSlideFuncs[environment], 0); } diff --git a/src/battle_main.c b/src/battle_main.c index fc7304b1a314..787e05608ed4 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -6,6 +6,7 @@ #include "battle_arena.h" #include "battle_controllers.h" #include "battle_end_turn.h" +#include "battle_hold_effects.h" #include "battle_interface.h" #include "battle_main.h" #include "battle_message.h" @@ -13,7 +14,6 @@ #include "battle_scripts.h" #include "battle_setup.h" #include "battle_tower.h" -#include "battle_util.h" #include "battle_z_move.h" #include "battle_gimmick.h" #include "berry.h" @@ -53,6 +53,7 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "test/battle.h" #include "test_runner.h" #include "text.h" #include "trainer_pools.h" @@ -66,7 +67,6 @@ #include "constants/battle_move_effects.h" #include "constants/battle_string_ids.h" #include "constants/battle_partner.h" -#include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/party_menu.h" @@ -76,6 +76,7 @@ #include "constants/trainers.h" #include "constants/weather.h" #include "cable_club.h" +#include "test/test_runner_battle.h" extern const struct BgTemplate gBattleBgTemplates[]; extern const struct WindowTemplate *const gBattleWindowTemplates[]; @@ -112,7 +113,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(u32 battler); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2, u32 *quickClawRandom, u32 *quickDrawRandom); +static void TryChangingTurnOrderEffects(struct BattleContext *ctx, u32 *quickClawRandom, u32 *quickDrawRandom); static void CheckChangingTurnOrderEffects(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); static void ReturnFromBattleToOverworld(void); @@ -167,7 +168,7 @@ EWRAM_DATA u16 gChosenMove = 0; EWRAM_DATA u16 gCalledMove = 0; EWRAM_DATA s32 gBideDmg[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastUsedItem = 0; -EWRAM_DATA u16 gLastUsedAbility = 0; +EWRAM_DATA enum Ability gLastUsedAbility = 0; EWRAM_DATA u8 gBattlerAttacker = 0; EWRAM_DATA u8 gBattlerTarget = 0; EWRAM_DATA u8 gBattlerFainted = 0; @@ -193,8 +194,6 @@ EWRAM_DATA u32 gHitMarker = 0; EWRAM_DATA u8 gBideTarget[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u32 gSideStatuses[NUM_BATTLE_SIDES] = {0}; EWRAM_DATA struct SideTimer gSideTimers[NUM_BATTLE_SIDES] = {0}; -EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0}; -EWRAM_DATA u32 gStatuses4[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gPauseCounterBattle = 0; EWRAM_DATA u16 gPaydayMoney = 0; @@ -238,7 +237,7 @@ EWRAM_DATA u16 gBattleTurnCounter = 0; EWRAM_DATA u8 gBattlerAbility = 0; EWRAM_DATA struct QueuedStatBoost gQueuedStatBoosts[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA bool8 gHasFetchedBall = FALSE; -EWRAM_DATA u8 gLastUsedBall = 0; +EWRAM_DATA u16 gLastUsedBall = 0; EWRAM_DATA u16 gLastThrownBall = 0; EWRAM_DATA u16 gBallToDisplay = 0; EWRAM_DATA bool8 gLastUsedBallMenuPresent = FALSE; @@ -246,7 +245,7 @@ EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0}; EWRAM_DATA static u8 sTriedEvolving = 0; EWRAM_DATA u8 gCategoryIconSpriteId = 0; -COMMON_DATA void (*gPreBattleCallback1)(void) = NULL; +COMMON_DATA MainCallback gPreBattleCallback1 = NULL; COMMON_DATA void (*gBattleMainFunc)(void) = NULL; COMMON_DATA struct BattleResults gBattleResults = {0}; COMMON_DATA u8 gLeveledUpInBattle = 0; @@ -306,7 +305,7 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = { [TRAINER_CLASS_PKMN_TRAINER_1] = { _("{PKMN} TRAINER") }, [TRAINER_CLASS_PKMN_TRAINER_2] = { _("{PKMN} TRAINER") }, - [TRAINER_CLASS_HIKER] = { _("HIKER"), 10 }, + [TRAINER_CLASS_HIKER] = { _("HIKER"), 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_ULTRA : BALL_POKE }, [TRAINER_CLASS_TEAM_AQUA] = { _("TEAM AQUA") }, [TRAINER_CLASS_PKMN_BREEDER] = { _("{PKMN} BREEDER"), 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_HEAL : BALL_FRIEND }, [TRAINER_CLASS_COOLTRAINER] = { _("COOLTRAINER"), 12, BALL_ULTRA }, @@ -325,7 +324,7 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = [TRAINER_CLASS_TUBER_F] = { _("TUBER"), 1 }, [TRAINER_CLASS_TUBER_M] = { _("TUBER"), 1 }, [TRAINER_CLASS_LADY] = { _("LADY"), 50 }, - [TRAINER_CLASS_BEAUTY] = { _("BEAUTY"), 20 }, + [TRAINER_CLASS_BEAUTY] = { _("BEAUTY"), 20, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_GREAT : BALL_POKE }, [TRAINER_CLASS_RICH_BOY] = { _("RICH BOY"), 50 }, [TRAINER_CLASS_POKEMANIAC] = { _("POKΓ©MANIAC"), 15 }, [TRAINER_CLASS_GUITARIST] = { _("GUITARIST"), 8 }, @@ -336,13 +335,13 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = [TRAINER_CLASS_PSYCHIC] = { _("PSYCHIC"), 6 }, [TRAINER_CLASS_GENTLEMAN] = { _("GENTLEMAN"), 20, BALL_LUXURY }, [TRAINER_CLASS_ELITE_FOUR] = { _("ELITE FOUR"), 25, BALL_ULTRA }, - [TRAINER_CLASS_LEADER] = { _("LEADER"), 25 }, + [TRAINER_CLASS_LEADER] = { _("LEADER"), 25, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_ULTRA : BALL_POKE }, [TRAINER_CLASS_SCHOOL_KID] = { _("SCHOOL KID") }, [TRAINER_CLASS_SR_AND_JR] = { _("SR. AND JR."), 4 }, [TRAINER_CLASS_WINSTRATE] = { _("WINSTRATE"), 10 }, [TRAINER_CLASS_POKEFAN] = { _("POKΓ©FAN"), 20 }, [TRAINER_CLASS_YOUNGSTER] = { _("YOUNGSTER"), 4 }, - [TRAINER_CLASS_CHAMPION] = { _("CHAMPION"), 50 }, + [TRAINER_CLASS_CHAMPION] = { _("CHAMPION"), 50, BALL_ULTRA }, [TRAINER_CLASS_FISHERMAN] = { _("FISHERMAN"), 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? BALL_DIVE : BALL_LURE }, [TRAINER_CLASS_TRIATHLETE] = { _("TRIATHLETE"), 10 }, [TRAINER_CLASS_DRAGON_TAMER] = { _("DRAGON TAMER"), 12 }, @@ -362,7 +361,7 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = [TRAINER_CLASS_YOUNG_COUPLE] = { _("YOUNG COUPLE"), 8 }, [TRAINER_CLASS_OLD_COUPLE] = { _("OLD COUPLE"), 10 }, [TRAINER_CLASS_SIS_AND_BRO] = { _("SIS AND BRO"), 3 }, - [TRAINER_CLASS_SALON_MAIDEN] = { _("SALON MAIDEN") }, + [TRAINER_CLASS_SALON_MAIDEN] = { _("SALON MAIDEN"), 0, BALL_ULTRA }, [TRAINER_CLASS_DOME_ACE] = { _("DOME ACE") }, [TRAINER_CLASS_PALACE_MAVEN] = { _("PALACE MAVEN") }, [TRAINER_CLASS_ARENA_TYCOON] = { _("ARENA TYCOON") }, @@ -487,10 +486,9 @@ static void CB2_InitBattleInternal(void) else { gBattle_WIN0V = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); + ScanlineEffect_Clear(); if (B_FAST_INTRO_NO_SLIDE == FALSE && !gTestRunnerHeadless) { - ScanlineEffect_Clear(); - for (i = 0; i < DISPLAY_HEIGHT / 2; i++) { gScanlineEffectRegBuffers[0][i] = 0xF0; @@ -523,6 +521,8 @@ static void CB2_InitBattleInternal(void) } if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) gBattleEnvironment = BATTLE_ENVIRONMENT_BUILDING; + if (TestRunner_Battle_GetForcedEnvironment()) + gBattleEnvironment = TestRunner_Battle_GetForcedEnvironment() - 1; if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER @@ -550,9 +550,9 @@ static void CB2_InitBattleInternal(void) SetVBlankCallback(VBlankCB_Battle); SetUpBattleVarsAndBirchZigzagoon(); - if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - SetMainCallback2(CB2_HandleStartMultiPartnerBattle); - else if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + if ((IsMultibattleTest() && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + || (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + || (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)) SetMainCallback2(CB2_HandleStartMultiPartnerBattle); else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) SetMainCallback2(CB2_HandleStartMultiBattle); @@ -1987,7 +1987,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer } if (partyData[monIndex].isShiny) { - u32 data = TRUE; + bool32 data = TRUE; SetMonData(&party[i], MON_DATA_IS_SHINY, &data); } if (partyData[monIndex].dynamaxLevel > 0) @@ -2005,7 +2005,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer if (partyData[monIndex].teraType > 0) { gBattleStruct->opponentMonCanTera |= 1 << i; - u32 data = partyData[monIndex].teraType; + enum Type data = partyData[monIndex].teraType; SetMonData(&party[i], MON_DATA_TERA_TYPE, &data); } CalculateMonStats(&party[i]); @@ -2026,7 +2026,24 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir u8 retVal; if (trainerNum == TRAINER_SECRET_BASE) return 0; - retVal = CreateNPCTrainerPartyFromTrainer(party, GetTrainerStructFromId(trainerNum), firstTrainer, gBattleTypeFlags); + if (GetTrainerStructFromId(trainerNum)->overrideTrainer) + { + struct Trainer tempTrainer; + memcpy(&tempTrainer, GetTrainerStructFromId(trainerNum), sizeof(struct Trainer)); + const struct Trainer *origTrainer = GetTrainerStructFromId(tempTrainer.overrideTrainer); + + tempTrainer.party = origTrainer->party; + + tempTrainer.poolSize = origTrainer->poolSize; + if (tempTrainer.partySize == 0) + tempTrainer.partySize = origTrainer->partySize; + + retVal = CreateNPCTrainerPartyFromTrainer(party, (const struct Trainer *)(&tempTrainer), firstTrainer, gBattleTypeFlags); + } + else + { + retVal = CreateNPCTrainerPartyFromTrainer(party, GetTrainerStructFromId(trainerNum), firstTrainer, gBattleTypeFlags); + } return retVal; } @@ -2967,7 +2984,7 @@ void BeginBattleIntro(void) { BattleStartClearSetData(); gBattleCommunication[1] = 0; - gBattleStruct->introState = 0; + gBattleStruct->eventState.battleIntro = 0; gBattleMainFunc = DoBattleIntro; } @@ -2988,8 +3005,11 @@ static void ClearSetBScriptingStruct(void) memset(&gBattleScripting, 0, sizeof(gBattleScripting)); gBattleScripting.windowsType = temp; - gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle; - gBattleScripting.expOnCatch = (B_EXP_CATCH >= GEN_6); + if (TESTING) + gBattleScripting.battleStyle = OPTIONS_BATTLE_STYLE_SET; + else + gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle; + gBattleScripting.expOnCatch = (GetConfig(CONFIG_EXP_CATCH) >= GEN_6); gBattleScripting.specialTrainerBattleType = specialBattleType; } @@ -2998,7 +3018,7 @@ static void BattleStartClearSetData(void) s32 i; TurnValuesCleanUp(FALSE); - SpecialStatusesClear(); + memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses)); memset(&gDisableStructs, 0, sizeof(gDisableStructs)); memset(&gFieldTimers, 0, sizeof(gFieldTimers)); @@ -3010,8 +3030,6 @@ static void BattleStartClearSetData(void) for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - gStatuses3[i] = 0; - gStatuses4[i] = 0; gDisableStructs[i].isFirstTurn = 2; gLastMoves[i] = MOVE_NONE; gLastLandedMoves[i] = MOVE_NONE; @@ -3090,13 +3108,12 @@ static void BattleStartClearSetData(void) { gSideTimers[i].stickyWebBattlerId = 0xFF; } - gBattleStruct->appearedInBattle = 0; gBattleStruct->beatUpSlot = 0; for (i = 0; i < PARTY_SIZE; i++) { - gBattleStruct->usedHeldItems[i][B_SIDE_PLAYER] = 0; - gBattleStruct->usedHeldItems[i][B_SIDE_OPPONENT] = 0; + gBattleStruct->partyState[B_SIDE_PLAYER][i].usedHeldItem = ITEM_NONE; + gBattleStruct->partyState[B_SIDE_OPPONENT][i].usedHeldItem = ITEM_NONE; gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); gBattleStruct->itemLost[B_SIDE_OPPONENT][i].originalItem = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM); gPartyCriticalHits[i] = 0; @@ -3117,7 +3134,9 @@ static void BattleStartClearSetData(void) } } -void SwitchInClearSetData(u32 battler) +#define UNPACK_VOLATILE_BATON_PASSABLES(_enum, _fieldName, _typeMaxValue, ...) __VA_OPT__(if ((FIRST(__VA_ARGS__)) & V_BATON_PASSABLE) gBattleMons[battler].volatiles._fieldName = volatilesCopy->_fieldName;) + +void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy) { s32 i; enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); @@ -3130,50 +3149,52 @@ void SwitchInClearSetData(u32 battler) gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; for (i = 0; i < gBattlersCount; i++) { - if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == battler) - gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; - if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].battlerWithSureHit == battler) + if (gBattleMons[i].volatiles.escapePrevention && gDisableStructs[i].battlerPreventingEscape == battler) + gBattleMons[i].volatiles.escapePrevention = FALSE; + if (gBattleMons[i].volatiles.lockOn && gDisableStructs[i].battlerWithSureHit == battler) { - gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; + gBattleMons[i].volatiles.lockOn = 0; gDisableStructs[i].battlerWithSureHit = 0; } } } + + // Clear volatiles - reapply some if Baton Pass was used + memset(&gBattleMons[battler].volatiles, 0, sizeof(struct Volatiles)); if (effect == EFFECT_BATON_PASS) { - gBattleMons[battler].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY_ANY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED); - gStatuses3[battler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED - | STATUS3_GASTRO_ACID | STATUS3_EMBARGO | STATUS3_TELEKINESIS | STATUS3_MAGNET_RISE | STATUS3_HEAL_BLOCK - | STATUS3_AQUA_RING | STATUS3_POWER_TRICK); - gStatuses4[battler] &= (STATUS4_MUD_SPORT | STATUS4_WATER_SPORT | STATUS4_INFINITE_CONFUSION); + // Transfer Baton Passable volatile statuses + VOLATILE_DEFINITIONS(UNPACK_VOLATILE_BATON_PASSABLES) + /* Expands to the following (compiler removes `if` statements): + * gBattleMons[battler].volatiles.confusionTurns = volatilesCopy->confusionTurns; + * gBattleMons[battler].volatiles.substitute = volatilesCopy->substitute; + * gBattleMons[battler].volatiles.escapePrevention = volatilesCopy->escapePrevention; + * ...etc + */ + for (i = 0; i < gBattlersCount; i++) { if (!IsBattlerAlly(battler, i) - && (gStatuses3[i] & STATUS3_ALWAYS_HITS) != 0 + && gBattleMons[i].volatiles.lockOn != 0 && (gDisableStructs[i].battlerWithSureHit == battler)) { - gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; - gStatuses3[i] |= STATUS3_ALWAYS_HITS_TURN(2); + gBattleMons[i].volatiles.lockOn = 0; } } - if (gStatuses3[battler] & STATUS3_POWER_TRICK) + if (gBattleMons[battler].volatiles.powerTrick) SWAP(gBattleMons[battler].attack, gBattleMons[battler].defense, i); } - else - { - gBattleMons[battler].status2 = 0; - gStatuses3[battler] = 0; - gStatuses4[battler] = 0; - } for (i = 0; i < gBattlersCount; i++) { - if (gBattleMons[i].status2 & STATUS2_INFATUATED_WITH(battler)) - gBattleMons[i].status2 &= ~STATUS2_INFATUATED_WITH(battler); - if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && gBattleStruct->wrappedBy[i] == battler) - gBattleMons[i].status2 &= ~STATUS2_WRAPPED; - if ((gStatuses4[i] & STATUS4_SYRUP_BOMB) && gBattleStruct->stickySyrupdBy[i] == battler) - gStatuses4[i] &= ~STATUS4_SYRUP_BOMB; + if (gBattleMons[i].volatiles.infatuation == INFATUATED_WITH(battler)) + gBattleMons[i].volatiles.infatuation = 0; + if (gBattleMons[i].volatiles.wrapped && gBattleMons[i].volatiles.wrappedBy == battler) + gBattleMons[i].volatiles.wrapped = FALSE; + if (gBattleMons[i].volatiles.syrupBomb && gBattleMons[i].volatiles.stickySyrupedBy == battler) + gBattleMons[i].volatiles.syrupBomb = FALSE; + if (gDisableStructs[i].octolock && gDisableStructs[i].octolockedBy == battler) + gDisableStructs[i].octolock = FALSE; } gActionSelectionCursor[battler] = 0; @@ -3181,6 +3202,9 @@ void SwitchInClearSetData(u32 battler) memset(&gDisableStructs[battler], 0, sizeof(struct DisableStruct)); + if (GetProtectType(gProtectStructs[battler].protected) == PROTECT_TYPE_SINGLE) // Side type protects expire at the end of the turn + gProtectStructs[battler].protected = PROTECT_NONE; + if (effect == EFFECT_BATON_PASS) { gDisableStructs[battler].substituteHP = disableStructCopy.substituteHP; @@ -3192,7 +3216,7 @@ void SwitchInClearSetData(u32 battler) } else if (effect == EFFECT_SHED_TAIL) { - gBattleMons[battler].status2 |= STATUS2_SUBSTITUTE; + gBattleMons[battler].volatiles.substitute = TRUE; gDisableStructs[battler].substituteHP = disableStructCopy.substituteHP; } @@ -3208,7 +3232,7 @@ void SwitchInClearSetData(u32 battler) gLastHitBy[battler] = 0xFF; gBattleStruct->lastTakenMove[battler] = 0; - gBattleStruct->sameMoveTurns[battler] = 0; + gBattleStruct->metronomeItemCounter[battler] = 0; gBattleStruct->lastTakenMoveFrom[battler][0] = 0; gBattleStruct->lastTakenMoveFrom[battler][1] = 0; gBattleStruct->lastTakenMoveFrom[battler][2] = 0; @@ -3216,6 +3240,10 @@ void SwitchInClearSetData(u32 battler) gBattleStruct->battlerState[battler].stompingTantrumTimer = 0; gBattleStruct->palaceFlags &= ~(1u << battler); gBattleStruct->battlerState[battler].canPickupItem = FALSE; + gBattleStruct->battlerState[battler].wasAboveHalfHp = gBattleMons[battler].hp > gBattleMons[battler].maxHP / 2; + gBattleStruct->hazardsCounter = 0; + gDisableStructs[battler].hazardsDone = FALSE; + gSpecialStatuses[battler].switchInItemDone = FALSE; ClearPursuitValuesIfSet(battler); @@ -3235,8 +3263,7 @@ void SwitchInClearSetData(u32 battler) } gBattleStruct->choicedMove[battler] = MOVE_NONE; - gCurrentMove = MOVE_NONE; - gBattleStruct->arenaTurnCounter = 0xFF; + gBattleStruct->eventState.arenaTurn = 0xFF; // Restore struct member so replacement does not miss timing gSpecialStatuses[battler].switchInAbilityDone = FALSE; @@ -3250,9 +3277,6 @@ void SwitchInClearSetData(u32 battler) gAiLogicData->ejectButtonSwitch = FALSE; gAiLogicData->ejectPackSwitch = FALSE; - // Reset G-Max Chi Strike boosts. - gBattleStruct->bonusCritStages[battler] = 0; - // Clear selected party ID so Revival Blessing doesn't get confused. gSelectedMonPartyId = PARTY_SIZE; @@ -3263,7 +3287,7 @@ void SwitchInClearSetData(u32 battler) u32 side = GetBattlerSide(battler); u32 partyIndex = gBattlerPartyIndexes[battler]; if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[i].ability = gDisableStructs[i].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex); + gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); } #endif // TESTING @@ -3278,20 +3302,22 @@ const u8* FaintClearSetData(u32 battler) for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; - gBattleMons[battler].status2 = 0; - gStatuses3[battler] &= STATUS3_GASTRO_ACID; // Edge case: Keep Gastro Acid if pokemon's ability can have effect after fainting, for example Innards Out. - gStatuses4[battler] = 0; + bool32 keepGastroAcid = gBattleMons[battler].volatiles.gastroAcid; + memset(&gBattleMons[battler].volatiles, 0, sizeof(struct Volatiles)); + gBattleMons[battler].volatiles.gastroAcid = keepGastroAcid; // Edge case: Keep Gastro Acid if pokemon's ability can have effect after fainting, for example Innards Out. for (i = 0; i < gBattlersCount; i++) { - if ((gBattleMons[i].status2 & STATUS2_ESCAPE_PREVENTION) && gDisableStructs[i].battlerPreventingEscape == battler) - gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; - if (gBattleMons[i].status2 & STATUS2_INFATUATED_WITH(battler)) - gBattleMons[i].status2 &= ~STATUS2_INFATUATED_WITH(battler); - if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && gBattleStruct->wrappedBy[i] == battler) - gBattleMons[i].status2 &= ~STATUS2_WRAPPED; - if ((gStatuses4[i] & STATUS4_SYRUP_BOMB) && gBattleStruct->stickySyrupdBy[i] == battler) - gStatuses4[i] &= ~STATUS4_SYRUP_BOMB; + if (gBattleMons[i].volatiles.escapePrevention && gDisableStructs[i].battlerPreventingEscape == battler) + gBattleMons[i].volatiles.escapePrevention = FALSE; + if (gBattleMons[i].volatiles.infatuation == INFATUATED_WITH(battler)) + gBattleMons[i].volatiles.infatuation = 0; + if (gBattleMons[i].volatiles.wrapped && gBattleMons[i].volatiles.wrappedBy == battler) + gBattleMons[i].volatiles.wrapped = FALSE; + if (gBattleMons[i].volatiles.syrupBomb && gBattleMons[i].volatiles.stickySyrupedBy == battler) + gBattleMons[i].volatiles.syrupBomb = FALSE; + if (gDisableStructs[i].octolock && gDisableStructs[i].octolockedBy == battler) + gDisableStructs[i].octolock = FALSE; } gActionSelectionCursor[battler] = 0; @@ -3303,9 +3329,8 @@ const u8* FaintClearSetData(u32 battler) gProtectStructs[battler].protected = PROTECT_NONE; gProtectStructs[battler].quash = FALSE; - gProtectStructs[battler].endured = FALSE; gProtectStructs[battler].noValidMoves = FALSE; - gProtectStructs[battler].helpingHand = FALSE; + gProtectStructs[battler].helpingHand = 0; gProtectStructs[battler].bounceMove = FALSE; gProtectStructs[battler].stealMove = FALSE; gProtectStructs[battler].nonVolatileStatusImmobility = FALSE; @@ -3313,9 +3338,7 @@ const u8* FaintClearSetData(u32 battler) gProtectStructs[battler].confusionSelfDmg = FALSE; gProtectStructs[battler].chargingTurn = FALSE; gProtectStructs[battler].fleeType = 0; - gProtectStructs[battler].notFirstStrike = FALSE; gProtectStructs[battler].statRaised = FALSE; - gProtectStructs[battler].statFell = FALSE; gProtectStructs[battler].pranksterElevated = FALSE; gDisableStructs[battler].isFirstTurn = 2; @@ -3329,7 +3352,7 @@ const u8* FaintClearSetData(u32 battler) gLastHitBy[battler] = 0xFF; gBattleStruct->choicedMove[battler] = MOVE_NONE; - gBattleStruct->sameMoveTurns[battler] = 0; + gBattleStruct->metronomeItemCounter[battler] = 0; gBattleStruct->lastTakenMove[battler] = MOVE_NONE; gBattleStruct->lastTakenMoveFrom[battler][0] = 0; gBattleStruct->lastTakenMoveFrom[battler][1] = 0; @@ -3339,7 +3362,7 @@ const u8* FaintClearSetData(u32 battler) ClearPursuitValuesIfSet(battler); - if (gBattleStruct->commanderActive[battler] != SPECIES_NONE) + if (gBattleStruct->battlerState[battler].commanderSpecies != SPECIES_NONE) { u32 partner = BATTLE_PARTNER(battler); if (IsBattlerAlive(partner)) @@ -3364,8 +3387,8 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->lastTakenMoveFrom[i][battler] = 0; } - gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[0] = GetSpeciesType(gBattleMons[battler].species, 0); + gBattleMons[battler].types[1] = GetSpeciesType(gBattleMons[battler].species, 1); gBattleMons[battler].types[2] = TYPE_MYSTERY; Ai_UpdateFaintData(battler); @@ -3382,27 +3405,28 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->skyDropTargets[otherSkyDropper] = SKY_DROP_NO_TARGET; // If the other Pokemon involved in this Sky Drop was the target, not the attacker - if (gStatuses3[otherSkyDropper] & STATUS3_SKY_DROPPED) + if (gBattleMons[otherSkyDropper].volatiles.semiInvulnerable == STATE_SKY_DROP) { // Release the target and take them out of the semi-invulnerable state - gStatuses3[otherSkyDropper] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR); + gBattleMons[otherSkyDropper].volatiles.semiInvulnerable = STATE_NONE; // Make the target's sprite visible gSprites[gBattlerSpriteIds[otherSkyDropper]].invisible = FALSE; // If the target was sky dropped in the middle of using Outrage/Petal Dance/Thrash, // confuse them upon release and print "confused via fatigue" message and animation. - if (gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE) + if (gBattleMons[otherSkyDropper].volatiles.lockConfusionTurns) { - gBattleMons[otherSkyDropper].status2 &= ~(STATUS2_LOCK_CONFUSE); + gBattleMons[otherSkyDropper].volatiles.lockConfusionTurns = 0; // If the released mon can be confused, do so. // Don't use CanBeConfused here, since it can cause issues in edge cases. - if (!(GetBattlerAbility(otherSkyDropper) == ABILITY_OWN_TEMPO - || gBattleMons[otherSkyDropper].status2 & STATUS2_CONFUSION - || IsBattlerTerrainAffected(otherSkyDropper, STATUS_FIELD_MISTY_TERRAIN))) + enum Ability ability = GetBattlerAbility(otherSkyDropper); + if (!(ability == ABILITY_OWN_TEMPO + || gBattleMons[otherSkyDropper].volatiles.confusionTurns + || IsBattlerTerrainAffected(otherSkyDropper, ability, GetBattlerHoldEffect(otherSkyDropper), STATUS_FIELD_MISTY_TERRAIN))) { - gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); + gBattleMons[otherSkyDropper].volatiles.confusionTurns = ((Random()) % 4) + 2; gBattlerAttacker = otherSkyDropper; result = BattleScript_ThrashConfuses; } @@ -3418,21 +3442,21 @@ static void DoBattleIntro(void) s32 i; u32 battler; - switch ((enum BattleIntroStates)gBattleStruct->introState) + switch ((enum BattleIntroStates)gBattleStruct->eventState.battleIntro) { case BATTLE_INTRO_STATE_GET_MON_DATA: battler = gBattleCommunication[1]; BtlController_EmitGetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_ALL_BATTLE, 0); MarkBattlerForControllerExec(battler); - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_LOOP_BATTLER_DATA: if (!gBattleControllerExecFlags) { if (++gBattleCommunication[1] == gBattlersCount) - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; else - gBattleStruct->introState = BATTLE_INTRO_STATE_GET_MON_DATA; + gBattleStruct->eventState.battleIntro = BATTLE_INTRO_STATE_GET_MON_DATA; } break; case BATTLE_INTRO_STATE_PREPARE_BG_SLIDE: @@ -3443,12 +3467,12 @@ static void DoBattleIntro(void) MarkBattlerForControllerExec(battler); gBattleCommunication[0] = 0; gBattleCommunication[1] = 0; - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; } break; case BATTLE_INTRO_STATE_WAIT_FOR_BG_SLIDE: if (!gBattleControllerExecFlags) - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_DRAW_SPRITES: for (battler = 0; battler < gBattlersCount; battler++) @@ -3460,12 +3484,12 @@ static void DoBattleIntro(void) else { memcpy(&gBattleMons[battler], &gBattleResources->bufferB[battler][4], sizeof(struct BattlePokemon)); - gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[0] = GetSpeciesType(gBattleMons[battler].species, 0); + gBattleMons[battler].types[1] = GetSpeciesType(gBattleMons[battler].species, 1); gBattleMons[battler].types[2] = TYPE_MYSTERY; gBattleMons[battler].ability = GetAbilityBySpecies(gBattleMons[battler].species, gBattleMons[battler].abilityNum); gBattleStruct->hpOnSwitchout[GetBattlerSide(battler)] = gBattleMons[battler].hp; - gBattleMons[battler].status2 = 0; + memset(&gBattleMons[battler].volatiles, 0, sizeof(struct Volatiles)); for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; #if TESTING @@ -3474,7 +3498,7 @@ static void DoBattleIntro(void) u32 side = GetBattlerSide(battler); u32 partyIndex = gBattlerPartyIndexes[battler]; if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex); + gBattleMons[battler].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); } #endif } @@ -3529,9 +3553,9 @@ static void DoBattleIntro(void) } if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; else // Skip party summary since it is a wild battle. - gBattleStruct->introState = BATTLE_INTRO_STATE_INTRO_TEXT; + gBattleStruct->eventState.battleIntro = BATTLE_INTRO_STATE_INTRO_TEXT; break; case BATTLE_INTRO_STATE_DRAW_PARTY_SUMMARY: if (!gBattleControllerExecFlags) @@ -3576,18 +3600,18 @@ static void DoBattleIntro(void) BtlController_EmitDrawPartyStatusSummary(battler, B_COMM_TO_CONTROLLER, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY); MarkBattlerForControllerExec(battler); - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; } break; case BATTLE_INTRO_STATE_WAIT_FOR_PARTY_SUMMARY: if (!gBattleControllerExecFlags) - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_INTRO_TEXT: if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) { PrepareStringBattle(STRINGID_INTROMSG, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; } break; case BATTLE_INTRO_STATE_WAIT_FOR_INTRO_TEXT: @@ -3595,14 +3619,14 @@ static void DoBattleIntro(void) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; } else { if (B_FAST_INTRO_PKMN_TEXT == TRUE) - gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; + gBattleStruct->eventState.battleIntro = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; else - gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM; + gBattleStruct->eventState.battleIntro = BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM; } } break; @@ -3611,11 +3635,11 @@ static void DoBattleIntro(void) PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); else PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_SEND_OUT_TEXT: if (!gBattleControllerExecFlags) - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_TRAINER_1_SEND_OUT_ANIM: if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3625,7 +3649,7 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, B_COMM_TO_CONTROLLER); MarkBattlerForControllerExec(battler); - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_TRAINER_2_SEND_OUT_ANIM: if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) @@ -3640,17 +3664,17 @@ static void DoBattleIntro(void) } if (B_FAST_INTRO_PKMN_TEXT == TRUE && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK))) - gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; // Print at the same time as trainer sends out second mon. + gBattleStruct->eventState.battleIntro = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; // Print at the same time as trainer sends out second mon. else - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM: if (!gBattleControllerExecFlags) - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT: if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_PRINT_PLAYER_SEND_OUT_TEXT: if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) @@ -3671,7 +3695,7 @@ static void DoBattleIntro(void) PrepareStringBattle(STRINGID_INTROSENDOUT, battler); } - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_WAIT_FOR_PLAYER_SEND_OUT_TEXT: if (!(gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleControllerExecFlags)) @@ -3682,7 +3706,7 @@ static void DoBattleIntro(void) battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); if (!IsBattlerMarkedForControllerExec(battler)) - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; } break; case BATTLE_INTRO_STATE_PRINT_PLAYER_1_SEND_OUT_TEXT: @@ -3693,7 +3717,7 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, B_COMM_TO_CONTROLLER); MarkBattlerForControllerExec(battler); - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_PRINT_PLAYER_2_SEND_OUT_TEXT: if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) @@ -3706,16 +3730,19 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, B_COMM_TO_CONTROLLER); MarkBattlerForControllerExec(battler); } - gBattleStruct->introState++; + gBattleStruct->eventState.battleIntro++; break; case BATTLE_INTRO_STATE_SET_DEX_AND_BATTLE_VARS: if (!gBattleControllerExecFlags) { - gBattleStruct->eventsBeforeFirstTurnState = 0; + gBattleStruct->eventState.beforeFristTurn = 0; gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->overworldWeatherDone = FALSE; Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield. + // mark all battlers as sent out + for (battler = 0; battler < gBattlersCount; battler++) + GetBattlerPartyState(battler)->sentOut = TRUE; + // Try to set a status to start the battle with gBattleStruct->startingStatus = 0; if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetTrainerStartingStatusFromId(TRAINER_BATTLE_PARAM.opponentB)) @@ -3746,7 +3773,7 @@ static void TryDoEventsBeforeFirstTurn(void) if (gBattleControllerExecFlags) return; - switch ((enum FirstTurnEventsStates)gBattleStruct->eventsBeforeFirstTurnState) + switch (gBattleStruct->eventState.beforeFristTurn) { case FIRST_TURN_EVENTS_START: // Set invalid mons as absent(for example when starting a double battle with only one pokemon). @@ -3770,7 +3797,7 @@ static void TryDoEventsBeforeFirstTurn(void) u32 side = GetBattlerSide(i); u32 partyIndex = gBattlerPartyIndexes[i]; if (TestRunner_Battle_GetForcedAbility(side, partyIndex)) - gBattleMons[i].ability = gDisableStructs[i].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex); + gBattleMons[i].ability = TestRunner_Battle_GetForcedAbility(side, partyIndex); } } #endif // TESTING @@ -3778,45 +3805,40 @@ static void TryDoEventsBeforeFirstTurn(void) gBattleStruct->speedTieBreaks = RandomUniform(RNG_SPEED_TIE, 0, Factorial(MAX_BATTLERS_COUNT) - 1); gBattleTurnCounter = 0; + struct BattleContext ctx = {0}; for (i = 0; i < gBattlersCount; i++) + { gBattlerByTurnOrder[i] = i; + ctx.abilities[i] = GetBattlerAbility(i); + ctx.holdEffects[i] = GetBattlerHoldEffect(i); + } for (i = 0; i < gBattlersCount - 1; i++) { for (j = i + 1; j < gBattlersCount; j++) { - if (GetWhichBattlerFaster(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], TRUE) == -1) + ctx.battlerAtk = gBattlerByTurnOrder[i]; + ctx.battlerDef = gBattlerByTurnOrder[j]; + + if (GetWhichBattlerFaster(&ctx, TRUE) == -1) SwapTurnOrder(i, j); } } - gBattleStruct->eventsBeforeFirstTurnState++; + gBattleStruct->eventState.beforeFristTurn++; break; case FIRST_TURN_EVENTS_OVERWORLD_WEATHER: - if (!gBattleStruct->overworldWeatherDone - && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_WEATHER, 0, 0, ABILITYEFFECT_SWITCH_IN_WEATHER, 0) != 0) - { - gBattleStruct->overworldWeatherDone = TRUE; + gBattleStruct->eventState.beforeFristTurn++; + if (TryFieldEffects(FIELD_EFFECT_OVERWORLD_WEATHER)) return; - } - gBattleStruct->eventsBeforeFirstTurnState++; break; case FIRST_TURN_EVENTS_TERRAIN: - if (!gBattleStruct->terrainDone - && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_TERRAIN, 0, 0, ABILITYEFFECT_SWITCH_IN_TERRAIN, 0) != 0) - { - gBattleStruct->terrainDone = TRUE; + gBattleStruct->eventState.beforeFristTurn++; + if (TryFieldEffects(FIELD_EFFECT_OVERWORLD_TERRAIN)) return; - } - gBattleStruct->eventsBeforeFirstTurnState++; break; case FIRST_TURN_EVENTS_STARTING_STATUS: - if (!gBattleStruct->startingStatusDone - && gBattleStruct->startingStatus - && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_STATUSES, 0, 0, ABILITYEFFECT_SWITCH_IN_STATUSES, 0) != 0) - { - gBattleStruct->startingStatusDone = TRUE; + gBattleStruct->eventState.beforeFristTurn++; + if (TryFieldEffects(FIELD_EFFECT_TRAINER_STATUSES)) return; - } - gBattleStruct->eventsBeforeFirstTurnState++; break; case FIRST_TURN_EVENTS_TOTEM_BOOST: for (i = 0; i < gBattlersCount; i++) @@ -3829,46 +3851,79 @@ static void TryDoEventsBeforeFirstTurn(void) } } memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); // erase all totem boosts for Mirror Herb and Opportunist - gBattleStruct->eventsBeforeFirstTurnState++; + gBattleStruct->eventState.beforeFristTurn++; break; case FIRST_TURN_EVENTS_NEUTRALIZING_GAS: - if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0) - return; - gBattleStruct->eventsBeforeFirstTurnState++; + while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest + { + i = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; + if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN, i, 0, 0, 0) != 0) + return; + } + gBattleStruct->switchInBattlerCounter = 0; + gBattleStruct->eventState.beforeFristTurn++; break; case FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest { - i = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; + u32 battler = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; - if (TryPrimalReversion(i)) + if (TryPrimalReversion(battler)) return; - if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0) != 0) + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battler, 0, 0, 0)) return; - if (TryClearIllusion(i, ABILITYEFFECT_ON_SWITCHIN)) + if (TryClearIllusion(battler, ABILITYEFFECT_ON_SWITCHIN)) + return; + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN_IMMUNITIES, battler, 0, 0, 0) != 0) return; } gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->eventsBeforeFirstTurnState++; - break; - case FIRST_TURN_EVENTS_OPPORTUNIST_1: - if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0)) - return; - gBattleStruct->eventsBeforeFirstTurnState++; + gBattleStruct->eventState.beforeFristTurn++; break; case FIRST_TURN_EVENTS_ITEM_EFFECTS: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest { - if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN, gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++], FALSE)) + u32 battler = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnSwitchInFirstTurnActivation)) + return; + } + gBattleStruct->switchInBattlerCounter = 0; + gBattleStruct->eventState.beforeFristTurn++; + break; + case FIRST_TURN_EVENTS_WHITE_HERB: + while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest + { + u32 battler = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsWhiteHerbFirstTurnActivation)) + return; + } + gBattleStruct->switchInBattlerCounter = 0; + gBattleStruct->eventState.beforeFristTurn++; + break; + case FIRST_TURN_EVENTS_OPPORTUNIST: + while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest + { + u32 battler = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; + if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST_FIRST_TURN, battler, GetBattlerAbility(battler), 0, 0)) + return; + } + gBattleStruct->switchInBattlerCounter = 0; + gBattleStruct->eventState.beforeFristTurn++; + break; + case FIRST_TURN_EVENTS_MIRROR_HERB: + while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest + { + u32 battler = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++]; + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsMirrorHerbFirstTurnActivation)) return; } gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->eventsBeforeFirstTurnState++; + gBattleStruct->eventState.beforeFristTurn++; break; - case FIRST_TURN_EVENTS_OPPORTUNIST_2: - if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0)) + case FIRST_TURN_EVENTS_EJECT_PACK: + gBattleStruct->eventState.beforeFristTurn++; + if (TrySwitchInEjectPack(FIRST_TURN)) return; - gBattleStruct->eventsBeforeFirstTurnState++; break; case FIRST_TURN_EVENTS_END: for (i = 0; i < MAX_BATTLERS_COUNT; i++) @@ -3876,10 +3931,9 @@ static void TryDoEventsBeforeFirstTurn(void) gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE; gChosenActionByBattler[i] = B_ACTION_NONE; gChosenMoveByBattler[i] = MOVE_NONE; - gBattleStruct->battlerState[i].absent = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE); } TurnValuesCleanUp(FALSE); - SpecialStatusesClear(); + memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses)); BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG); AssignUsableGimmicks(); gBattleMainFunc = HandleTurnActionSelectionState; @@ -3888,19 +3942,11 @@ static void TryDoEventsBeforeFirstTurn(void) for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; i++) gBattleCommunication[i] = 0; - for (i = 0; i < gBattlersCount; i++) - { - gBattleMons[i].status2 &= ~STATUS2_FLINCHED; - // Record party slots of player's mons that appeared in battle - if (!BattlerHasAi(i)) - gBattleStruct->appearedInBattle |= 1u << gBattlerPartyIndexes[i]; - } - - *(&gBattleStruct->eventBlockCounter) = 0; - *(&gBattleStruct->turnEffectsBattlerId) = 0; + gBattleStruct->eventState.endTurnBlock = 0; + gBattleStruct->eventState.endTurnBattler = 0; gBattleScripting.moveendState = 0; - gBattleStruct->faintedActionsState = 0; - gBattleStruct->endTurnEventsCounter = 0; + gBattleStruct->eventState.faintedAction = 0; + gBattleStruct->eventState.endTurn = 0; memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); SetShellSideArmCategory(); @@ -3914,7 +3960,7 @@ static void TryDoEventsBeforeFirstTurn(void) if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_BEFORE_FIRST_TURN))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); - gBattleStruct->eventsBeforeFirstTurnState = 0; + gBattleStruct->eventState.beforeFristTurn = 0; break; } } @@ -3930,13 +3976,13 @@ static void HandleEndTurn_ContinueBattle(void) gBattleCommunication[i] = 0; for (i = 0; i < gBattlersCount; i++) { - gBattleMons[i].status2 &= ~STATUS2_FLINCHED; - if ((gBattleMons[i].status1 & STATUS1_SLEEP) && (gBattleMons[i].status2 & STATUS2_MULTIPLETURNS)) + gBattleMons[i].volatiles.flinched = FALSE; + if ((gBattleMons[i].status1 & STATUS1_SLEEP) && (gBattleMons[i].volatiles.multipleTurns)) CancelMultiTurnMoves(i, SKY_DROP_IGNORE); } - gBattleStruct->eventBlockCounter = 0; - gBattleStruct->turnEffectsBattlerId = 0; - gBattleStruct->endTurnEventsCounter = 0; + gBattleStruct->eventState.endTurnBlock = 0; + gBattleStruct->eventState.endTurnBattler = 0; + gBattleStruct->eventState.endTurn = 0; } } @@ -3955,13 +4001,11 @@ void BattleTurnPassed(void) if (HandleFaintedMonActions()) return; - gBattleStruct->faintedActionsState = 0; + gBattleStruct->eventState.faintedAction = 0; TurnValuesCleanUp(FALSE); - gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; gHitMarker &= ~HITMARKER_UNABLE_TO_USE_MOVE; gHitMarker &= ~HITMARKER_PLAYER_FAINTED; - gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; gBattleScripting.animTurn = 0; gBattleScripting.animTargetsHit = 0; gBattleScripting.moveendState = 0; @@ -3979,18 +4023,17 @@ void BattleTurnPassed(void) if (gBattleResults.battleTurnCounter < 0xFF) { gBattleResults.battleTurnCounter++; - gBattleStruct->arenaTurnCounter++; + gBattleStruct->eventState.arenaTurn++; } for (i = 0; i < gBattlersCount; i++) { gChosenActionByBattler[i] = B_ACTION_NONE; gChosenMoveByBattler[i] = MOVE_NONE; - gBattleStruct->battlerState[i].absent = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE); gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE; - gStatuses4[i] &= ~STATUS4_ELECTRIFIED; - gBattleMons[i].status2 &= ~STATUS2_FLINCHED; - gBattleMons[i].status2 &= ~STATUS2_POWDER; + gBattleMons[i].volatiles.electrified = FALSE; + gBattleMons[i].volatiles.flinched = FALSE; + gBattleMons[i].volatiles.powder = FALSE; if (gBattleStruct->battlerState[i].stompingTantrumTimer > 0) gBattleStruct->battlerState[i].stompingTantrumTimer--; @@ -4012,7 +4055,7 @@ void BattleTurnPassed(void) if (gBattleTypeFlags & BATTLE_TYPE_PALACE) BattleScriptExecute(BattleScript_PalacePrintFlavorText); - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0) + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->eventState.arenaTurn == 0) BattleScriptExecute(BattleScript_ArenaTurnBeginning); else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_LAST_LOW_HP))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); @@ -4032,7 +4075,7 @@ void BattleTurnPassed(void) u8 IsRunningFromBattleImpossible(u32 battler) { - enum ItemHoldEffect holdEffect; + enum HoldEffect holdEffect; u32 i; if (FlagGet(B_FLAG_NO_RUNNING)) @@ -4165,10 +4208,10 @@ static void HandleTurnActionSelectionState(void) gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; if (gBattleTypeFlags & BATTLE_TYPE_MULTI || (position & BIT_FLANK) == B_FLANK_LEFT - || gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absent + || gAbsentBattlerFlags & 1u << GetBattlerAtPosition(BATTLE_PARTNER(position)) || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) { - if (gBattleStruct->battlerState[battler].absent || gBattleStruct->battlerState[battler].commandingDondozo) + if (gAbsentBattlerFlags & 1u << battler || gBattleStruct->battlerState[battler].commandingDondozo) { gChosenActionByBattler[battler] = B_ACTION_NOTHING_FAINTED; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -4178,8 +4221,8 @@ static void HandleTurnActionSelectionState(void) } else { - if (gBattleMons[battler].status2 & STATUS2_MULTIPLETURNS - || gBattleMons[battler].status2 & STATUS2_RECHARGE) + if (gBattleMons[battler].volatiles.multipleTurns + || gDisableStructs[battler].rechargeTimer > 0) { gChosenActionByBattler[battler] = B_ACTION_USE_MOVE; gBattleCommunication[battler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; @@ -4224,16 +4267,23 @@ static void HandleTurnActionSelectionState(void) if (AreAllMovesUnusable(battler)) { gBattleCommunication[battler] = STATE_SELECTION_SCRIPT; - gBattleStruct->selectionScriptFinished[battler] = FALSE; + gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE; gBattleStruct->stateIdAfterSelScript[battler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; gBattleStruct->moveTarget[battler] = gBattleResources->bufferB[battler][3]; return; } - else if (gDisableStructs[battler].encoredMove != 0) + else if (GetConfig(CONFIG_ENCORE_TARGET) < GEN_5 && gDisableStructs[battler].encoredMove != MOVE_NONE) { gChosenMoveByBattler[battler] = gDisableStructs[battler].encoredMove; gBattleStruct->chosenMovePositions[battler] = gDisableStructs[battler].encoredMovePos; gBattleCommunication[battler] = STATE_WAIT_ACTION_CONFIRMED_STANDBY; + if (gTestRunnerEnabled) + { + UNUSED enum Gimmick gimmick = GIMMICK_NONE; + if (gBattleResources->bufferB[battler][2] & RET_GIMMICK) + gimmick = gBattleStruct->gimmick.usableGimmick[battler]; + TestRunner_Battle_CheckChosenMove(battler, gDisableStructs[battler].encoredMove, gDisableStructs[battler].encoredMovePos, gimmick); + } return; } else @@ -4261,12 +4311,12 @@ static void HandleTurnActionSelectionState(void) } break; case B_ACTION_USE_ITEM: - if (FlagGet(B_FLAG_NO_BAG_USE)) + if (ShouldBattleRestrictionsApply(battler) && !IsAllowedToUseBag()) { RecordedBattle_ClearBattlerAction(battler, 1); gSelectionBattleScripts[battler] = BattleScript_ActionSelectionItemsCantBeUsed; gBattleCommunication[battler] = STATE_SELECTION_SCRIPT; - gBattleStruct->selectionScriptFinished[battler] = FALSE; + gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE; gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN; return; } @@ -4277,12 +4327,12 @@ static void HandleTurnActionSelectionState(void) | BATTLE_TYPE_RECORDED_LINK)) && !gTestRunnerEnabled) // Or if currently held by Sky Drop - || gStatuses3[battler] & STATUS3_SKY_DROPPED) + || gBattleMons[battler].volatiles.semiInvulnerable == STATE_SKY_DROP) { RecordedBattle_ClearBattlerAction(battler, 1); gSelectionBattleScripts[battler] = BattleScript_ActionSelectionItemsCantBeUsed; gBattleCommunication[battler] = STATE_SELECTION_SCRIPT; - gBattleStruct->selectionScriptFinished[battler] = FALSE; + gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE; gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN; return; } @@ -4295,23 +4345,23 @@ static void HandleTurnActionSelectionState(void) case B_ACTION_SWITCH: gBattleStruct->battlerPartyIndexes[battler] = gBattlerPartyIndexes[battler]; if (gBattleTypeFlags & BATTLE_TYPE_ARENA - || !CanBattlerEscape(battler)) + || (!CanBattlerEscape(battler) && GetBattlerHoldEffect(battler) != HOLD_EFFECT_SHED_SHELL)) { - BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); + BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, 0, gBattleStruct->battlerPartyOrders[battler]); } else if (GetItemHoldEffect(gBattleMons[battler].item) != HOLD_EFFECT_SHED_SHELL && (i = IsAbilityPreventingEscape(battler))) // must be last to keep i value integrity { - BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gBattleMons[i - 1].ability, gBattleStruct->battlerPartyOrders[battler]); + BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gBattleMons[i - 1].ability, i - 1, gBattleStruct->battlerPartyOrders[battler]); } else { if (battler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH) - BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, gBattleStruct->monToSwitchIntoId[0], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); + BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, gBattleStruct->monToSwitchIntoId[0], ABILITY_NONE, 0, gBattleStruct->battlerPartyOrders[battler]); else if (battler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH) - BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, gBattleStruct->monToSwitchIntoId[1], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); + BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, gBattleStruct->monToSwitchIntoId[1], ABILITY_NONE, 0, gBattleStruct->battlerPartyOrders[battler]); else - BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); + BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_MON, PARTY_SIZE, ABILITY_NONE, 0, gBattleStruct->battlerPartyOrders[battler]); } MarkBattlerForControllerExec(battler); break; @@ -4320,7 +4370,7 @@ static void HandleTurnActionSelectionState(void) { gSelectionBattleScripts[battler] = BattleScript_PrintFullBox; gBattleCommunication[battler] = STATE_SELECTION_SCRIPT; - gBattleStruct->selectionScriptFinished[battler] = FALSE; + gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE; gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN; return; } @@ -4333,8 +4383,8 @@ static void HandleTurnActionSelectionState(void) gBattleCommunication[battler] = STATE_WAIT_SET_BEFORE_ACTION; gBattleCommunication[GetPartnerBattler(battler)] = STATE_BEFORE_ACTION_CHOSEN; RecordedBattle_ClearBattlerAction(battler, 1); - if (gBattleMons[GetPartnerBattler(battler)].status2 & STATUS2_MULTIPLETURNS - || gBattleMons[GetPartnerBattler(battler)].status2 & STATUS2_RECHARGE) + if (gBattleMons[GetPartnerBattler(battler)].volatiles.multipleTurns + || gDisableStructs[GetPartnerBattler(battler)].rechargeTimer > 0) { BtlController_EmitEndBounceEffect(battler, B_COMM_TO_CONTROLLER); MarkBattlerForControllerExec(battler); @@ -4381,7 +4431,7 @@ static void HandleTurnActionSelectionState(void) { gSelectionBattleScripts[battler] = BattleScript_AskIfWantsToForfeitMatch; gBattleCommunication[battler] = STATE_SELECTION_SCRIPT_MAY_RUN; - gBattleStruct->selectionScriptFinished[battler] = FALSE; + gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE; gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN; return; } @@ -4389,7 +4439,7 @@ static void HandleTurnActionSelectionState(void) { gSelectionBattleScripts[battler] = BattleScript_QuestionForfeitBattle; gBattleCommunication[battler] = STATE_SELECTION_SCRIPT_MAY_RUN; - gBattleStruct->selectionScriptFinished[battler] = FALSE; + gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE; gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN; return; } @@ -4406,7 +4456,7 @@ static void HandleTurnActionSelectionState(void) { gSelectionBattleScripts[battler] = BattleScript_PrintCantEscapeFromBattle; gBattleCommunication[battler] = STATE_SELECTION_SCRIPT; - gBattleStruct->selectionScriptFinished[battler] = FALSE; + gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE; gBattleStruct->stateIdAfterSelScript[battler] = STATE_BEFORE_ACTION_CHOSEN; return; } @@ -4448,7 +4498,7 @@ static void HandleTurnActionSelectionState(void) { RecordedBattle_ClearBattlerAction(battler, 1); gBattleCommunication[battler] = STATE_SELECTION_SCRIPT; - gBattleStruct->selectionScriptFinished[battler] = FALSE; + gBattleStruct->battlerState[battler].selectionScriptFinished = FALSE; gBattleResources->bufferB[battler][1] = B_ACTION_USE_MOVE; gBattleStruct->stateIdAfterSelScript[battler] = STATE_WAIT_ACTION_CHOSEN; return; @@ -4463,8 +4513,12 @@ static void HandleTurnActionSelectionState(void) // Get the chosen move position (and thus the chosen move) and target from the returned buffer. gBattleStruct->chosenMovePositions[battler] = gBattleResources->bufferB[battler][2] & ~RET_GIMMICK; - gChosenMoveByBattler[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; + gChosenMoveByBattler[battler] = GetChosenMoveFromPosition(battler); gBattleStruct->moveTarget[battler] = gBattleResources->bufferB[battler][3]; + if (IsBattleMoveStatus(gChosenMoveByBattler[battler]) && GetBattlerAbility(battler) == ABILITY_MYCELIUM_MIGHT) + gProtectStructs[battler].myceliumMight = TRUE; + if (GetBattlerHoldEffect(battler) == HOLD_EFFECT_LAGGING_TAIL) + gProtectStructs[battler].laggingTail = TRUE; // Check to see if any gimmicks need to be prepared. if (gBattleResources->bufferB[battler][2] & RET_GIMMICK) @@ -4473,13 +4527,16 @@ static void HandleTurnActionSelectionState(void) // Max Move check if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX)) { - gBattleStruct->dynamax.baseMoves[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; + gBattleStruct->dynamax.baseMoves[battler] = GetChosenMoveFromPosition(battler); } gBattleCommunication[battler]++; if (gTestRunnerEnabled) { - TestRunner_Battle_CheckChosenMove(battler, gChosenMoveByBattler[battler], gBattleStruct->moveTarget[battler]); + UNUSED enum Gimmick gimmick = GIMMICK_NONE; + if (gBattleResources->bufferB[battler][2] & RET_GIMMICK) + gimmick = gBattleStruct->gimmick.usableGimmick[battler]; + TestRunner_Battle_CheckChosenMove(battler, gChosenMoveByBattler[battler], gBattleStruct->moveTarget[battler], gimmick); } } break; @@ -4556,7 +4613,7 @@ static void HandleTurnActionSelectionState(void) if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !IsDoubleBattle()) || (position & BIT_FLANK) != B_FLANK_LEFT - || gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absent) + || gAbsentBattlerFlags & 1u << GetBattlerAtPosition(BATTLE_PARTNER(position))) { BtlController_EmitLinkStandbyMsg(battler, B_COMM_TO_CONTROLLER, LINK_STANDBY_MSG_STOP_BOUNCE, i); } @@ -4575,7 +4632,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_SELECTION_SCRIPT: - if (gBattleStruct->selectionScriptFinished[battler]) + if (gBattleStruct->battlerState[battler].selectionScriptFinished) { gBattleCommunication[battler] = gBattleStruct->stateIdAfterSelScript[battler]; } @@ -4597,7 +4654,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_SELECTION_SCRIPT_MAY_RUN: - if (gBattleStruct->selectionScriptFinished[battler]) + if (gBattleStruct->battlerState[battler].selectionScriptFinished) { if (gBattleResources->bufferB[battler][1] == B_ACTION_NOTHING_FAINTED) { @@ -4698,7 +4755,7 @@ void SwapTurnOrder(u8 id1, u8 id2) } // For AI, so it doesn't 'cheat' by knowing player's ability -u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, enum ItemHoldEffect holdEffect) +u32 GetBattlerTotalSpeedStat(u32 battler, enum Ability ability, enum HoldEffect holdEffect) { u32 speed = gBattleMons[battler].speed; @@ -4726,10 +4783,10 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, enum ItemHoldEffect h speed *= 2; else if (ability == ABILITY_SLOW_START && gDisableStructs[battler].slowStartTimer != 0) speed /= 2; - else if (ability == ABILITY_PROTOSYNTHESIS && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && ((gBattleWeather & B_WEATHER_SUN && HasWeatherEffect()) || gDisableStructs[battler].boosterEnergyActivates)) - speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; - else if (ability == ABILITY_QUARK_DRIVE && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gDisableStructs[battler].boosterEnergyActivates)) - speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; + else if (ability == ABILITY_PROTOSYNTHESIS && !(gBattleMons[battler].volatiles.transformed) && ((gBattleWeather & B_WEATHER_SUN && HasWeatherEffect()) || gDisableStructs[battler].boosterEnergyActivated)) + speed = (GetParadoxBoostedStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; + else if (ability == ABILITY_QUARK_DRIVE && !(gBattleMons[battler].volatiles.transformed) && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gDisableStructs[battler].boosterEnergyActivated)) + speed = (GetParadoxBoostedStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; else if (ability == ABILITY_UNBURDEN && gDisableStructs[battler].unburdenActive) speed *= 2; @@ -4738,7 +4795,7 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, enum ItemHoldEffect h && ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_SPEED, battler) && IsOnPlayerSide(battler)) { - speed = (speed * 110) / 100; + speed = uq4_12_multiply_by_int_half_down(GetBadgeBoostModifier(), speed); } // item effects @@ -4748,7 +4805,7 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, enum ItemHoldEffect h speed /= 2; else if (holdEffect == HOLD_EFFECT_CHOICE_SCARF && GetActiveGimmick(battler) != GIMMICK_DYNAMAX) speed = (speed * 150) / 100; - else if (holdEffect == HOLD_EFFECT_QUICK_POWDER && gBattleMons[battler].species == SPECIES_DITTO && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + else if (holdEffect == HOLD_EFFECT_QUICK_POWDER && gBattleMons[battler].species == SPECIES_DITTO && !(gBattleMons[battler].volatiles.transformed)) speed *= 2; // various effects @@ -4757,7 +4814,7 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, enum ItemHoldEffect h // paralysis drop if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && ability != ABILITY_QUICK_FEET) - speed /= GetGenConfig(GEN_CONFIG_PARALYSIS_SPEED) >= GEN_7 ? 2 : 4; + speed /= GetConfig(CONFIG_PARALYSIS_SPEED) >= GEN_7 ? 2 : 4; if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SWAMP) speed /= 4; @@ -4765,14 +4822,7 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, enum ItemHoldEffect h return speed; } -u32 GetBattlerTotalSpeedStat(u32 battler) -{ - u32 ability = GetBattlerAbility(battler); - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); - return GetBattlerTotalSpeedStatArgs(battler, ability, holdEffect); -} - -s32 GetChosenMovePriority(u32 battler, u32 ability) +s32 GetChosenMovePriority(u32 battler, enum Ability ability) { u16 move; @@ -4780,12 +4830,12 @@ s32 GetChosenMovePriority(u32 battler, u32 ability) if (gProtectStructs[battler].noValidMoves) move = MOVE_STRUGGLE; else - move = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; + move = GetChosenMoveFromPosition(battler); return GetBattleMovePriority(battler, ability, move); } -s32 GetBattleMovePriority(u32 battler, u32 ability, u32 move) +s32 GetBattleMovePriority(u32 battler, enum Ability ability, u32 move) { s32 priority = 0; @@ -4798,32 +4848,34 @@ s32 GetBattleMovePriority(u32 battler, u32 ability, u32 move) if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS) return GetMovePriority(MOVE_MAX_GUARD); - if (ability == ABILITY_GALE_WINGS - && (GetGenConfig(GEN_CONFIG_GALE_WINGS) < GEN_7 || IsBattlerAtMaxHp(battler)) - && GetMoveType(move) == TYPE_FLYING) + if (gProtectStructs[battler].quash) + { + priority = -8; + } + else if (ability == ABILITY_GALE_WINGS + && (GetConfig(CONFIG_GALE_WINGS) < GEN_7 || IsBattlerAtMaxHp(battler)) + && GetMoveType(move) == TYPE_FLYING) { priority++; } - else if (ability == ABILITY_PRANKSTER && IsBattleMoveStatus(move)) + else if (IsBattleMoveStatus(move) && IsAbilityAndRecord(battler, ability, ABILITY_PRANKSTER)) { gProtectStructs[battler].pranksterElevated = 1; priority++; } - else if (GetMoveEffect(move) == EFFECT_GRASSY_GLIDE && IsBattlerTerrainAffected(battler, STATUS_FIELD_GRASSY_TERRAIN) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX && !IsGimmickSelected(battler, GIMMICK_DYNAMAX)) + else if (GetMoveEffect(move) == EFFECT_GRASSY_GLIDE && IsBattlerTerrainAffected(battler, ability, GetBattlerHoldEffect(battler), STATUS_FIELD_GRASSY_TERRAIN) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX && !IsGimmickSelected(battler, GIMMICK_DYNAMAX)) { priority++; } else if (ability == ABILITY_TRIAGE && IsHealingMove(move)) + { priority += 3; - - if (gProtectStructs[battler].quash) - priority = -8; + } return priority; } -s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMoves, u32 ability1, u32 ability2, - enum ItemHoldEffect holdEffectBattler1, enum ItemHoldEffect holdEffectBattler2, u32 speedBattler1, u32 speedBattler2, s32 priority1, s32 priority2) +s32 GetWhichBattlerFasterArgs(struct BattleContext *ctx, bool32 ignoreChosenMoves, u32 speedBattler1, u32 speedBattler2, s32 priority1, s32 priority2) { u32 strikesFirst = 0; @@ -4832,18 +4884,18 @@ s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov // Quick Claw / Quick Draw / Custap Berry - always first // Stall / Mycelium Might - last but before Lagging Tail // Lagging Tail - always last - bool32 battler1HasQuickEffect = gProtectStructs[battler1].quickDraw || gProtectStructs[battler1].usedCustapBerry; - bool32 battler2HasQuickEffect = gProtectStructs[battler2].quickDraw || gProtectStructs[battler2].usedCustapBerry; - bool32 battler1HasStallingAbility = ability1 == ABILITY_STALL || (ability1 == ABILITY_MYCELIUM_MIGHT && IsBattleMoveStatus(gChosenMoveByBattler[battler1])); - bool32 battler2HasStallingAbility = ability2 == ABILITY_STALL || (ability2 == ABILITY_MYCELIUM_MIGHT && IsBattleMoveStatus(gChosenMoveByBattler[battler2])); + bool32 battler1HasQuickEffect = gProtectStructs[ctx->battlerAtk].quickDraw || gProtectStructs[ctx->battlerAtk].usedCustapBerry; + bool32 battler2HasQuickEffect = gProtectStructs[ctx->battlerDef].quickDraw || gProtectStructs[ctx->battlerDef].usedCustapBerry; + bool32 battler1HasStallingAbility = ctx->abilities[ctx->battlerAtk] == ABILITY_STALL || gProtectStructs[ctx->battlerAtk].myceliumMight; + bool32 battler2HasStallingAbility = ctx->abilities[ctx->battlerDef] == ABILITY_STALL || gProtectStructs[ctx->battlerDef].myceliumMight; if (battler1HasQuickEffect && !battler2HasQuickEffect) strikesFirst = 1; else if (battler2HasQuickEffect && !battler1HasQuickEffect) strikesFirst = -1; - else if (holdEffectBattler1 == HOLD_EFFECT_LAGGING_TAIL && holdEffectBattler2 != HOLD_EFFECT_LAGGING_TAIL) + else if (gProtectStructs[ctx->battlerAtk].laggingTail && !gProtectStructs[ctx->battlerDef].laggingTail) strikesFirst = -1; - else if (holdEffectBattler2 == HOLD_EFFECT_LAGGING_TAIL && holdEffectBattler1 != HOLD_EFFECT_LAGGING_TAIL) + else if (gProtectStructs[ctx->battlerDef].laggingTail && !gProtectStructs[ctx->battlerAtk].laggingTail) strikesFirst = 1; else if (battler1HasStallingAbility && !battler2HasStallingAbility) strikesFirst = -1; @@ -4885,32 +4937,27 @@ s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov return strikesFirst; } -s32 GetWhichBattlerFasterOrTies(u32 battler1, u32 battler2, bool32 ignoreChosenMoves) +s32 GetWhichBattlerFasterOrTies(struct BattleContext *ctx, bool32 ignoreChosenMoves) { s32 priority1 = 0, priority2 = 0; - u32 ability1 = GetBattlerAbility(battler1); - u32 speedBattler1 = GetBattlerTotalSpeedStat(battler1); - enum ItemHoldEffect holdEffectBattler1 = GetBattlerHoldEffect(battler1, TRUE); - u32 speedBattler2 = GetBattlerTotalSpeedStat(battler2); - enum ItemHoldEffect holdEffectBattler2 = GetBattlerHoldEffect(battler2, TRUE); - u32 ability2 = GetBattlerAbility(battler2); + u32 speedBattler1 = GetBattlerTotalSpeedStat(ctx->battlerAtk, ctx->abilities[ctx->battlerAtk], ctx->holdEffects[ctx->battlerAtk]); + u32 speedBattler2 = GetBattlerTotalSpeedStat(ctx->battlerDef, ctx->abilities[ctx->battlerDef], ctx->holdEffects[ctx->battlerDef]); if (!ignoreChosenMoves) { - if (gChosenActionByBattler[battler1] == B_ACTION_USE_MOVE) - priority1 = GetChosenMovePriority(battler1, ability1); - if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE) - priority2 = GetChosenMovePriority(battler2, ability2); + if (gChosenActionByBattler[ctx->battlerAtk] == B_ACTION_USE_MOVE) + priority1 = GetChosenMovePriority(ctx->battlerAtk, ctx->abilities[ctx->battlerAtk]); + if (gChosenActionByBattler[ctx->battlerDef] == B_ACTION_USE_MOVE) + priority2 = GetChosenMovePriority(ctx->battlerDef, ctx->abilities[ctx->battlerDef]); } return GetWhichBattlerFasterArgs( - battler1, battler2, + ctx, ignoreChosenMoves, - ability1, ability2, - holdEffectBattler1, holdEffectBattler2, - speedBattler1, speedBattler2, - priority1, priority2 - ); + speedBattler1, + speedBattler2, + priority1, + priority2); } // 24 == MAX_BATTLERS_COUNT!. @@ -4944,13 +4991,13 @@ static const u8 sBattlerOrders[24][4] = { 3, 2, 1, 0 }, }; -s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves) +s32 GetWhichBattlerFaster(struct BattleContext *ctx, bool32 ignoreChosenMoves) { - s32 strikesFirst = GetWhichBattlerFasterOrTies(battler1, battler2, ignoreChosenMoves); + s32 strikesFirst = GetWhichBattlerFasterOrTies(ctx, ignoreChosenMoves); if (strikesFirst == 0) { - s32 order1 = sBattlerOrders[gBattleStruct->speedTieBreaks][battler1]; - s32 order2 = sBattlerOrders[gBattleStruct->speedTieBreaks][battler2]; + s32 order1 = sBattlerOrders[gBattleStruct->speedTieBreaks][ctx->battlerAtk]; + s32 order2 = sBattlerOrders[gBattleStruct->speedTieBreaks][ctx->battlerDef]; if (order1 < order2) strikesFirst = 1; else @@ -5044,13 +5091,19 @@ static void SetActionsAndBattlersTurnOrder(void) turnOrderId++; } } + struct BattleContext ctx = {0}; + for (i = 0; i < gBattlersCount; i++) + { + ctx.abilities[i] = GetBattlerAbility(i); + ctx.holdEffects[i] = GetBattlerHoldEffect(i); + } for (i = 0; i < gBattlersCount - 1; i++) { for (j = i + 1; j < gBattlersCount; j++) { - u8 battler1 = gBattlerByTurnOrder[i]; - u8 battler2 = gBattlerByTurnOrder[j]; - TryChangingTurnOrderEffects(battler1, battler2, quickClawRandom, quickDrawRandom); + ctx.battlerAtk = gBattlerByTurnOrder[i]; + ctx.battlerDef = gBattlerByTurnOrder[j]; + TryChangingTurnOrderEffects(&ctx, quickClawRandom, quickDrawRandom); if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM && gActionsByTurnOrder[i] != B_ACTION_SWITCH @@ -5058,7 +5111,7 @@ static void SetActionsAndBattlersTurnOrder(void) && gActionsByTurnOrder[i] != B_ACTION_THROW_BALL && gActionsByTurnOrder[j] != B_ACTION_THROW_BALL) { - if (GetWhichBattlerFaster(battler1, battler2, FALSE) == -1) + if (GetWhichBattlerFaster(&ctx, FALSE) == -1) SwapTurnOrder(i, j); } } @@ -5091,38 +5144,34 @@ static void TurnValuesCleanUp(bool8 var0) gDisableStructs[i].isFirstTurn--; if (gDisableStructs[i].rechargeTimer) - { gDisableStructs[i].rechargeTimer--; - if (gDisableStructs[i].rechargeTimer == 0) - gBattleMons[i].status2 &= ~STATUS2_RECHARGE; - } + gBattleStruct->battlerState[i].canPickupItem = FALSE; + gBattleStruct->battlerState[i].wasAboveHalfHp = FALSE; } if (gDisableStructs[i].substituteHP == 0) - gBattleMons[i].status2 &= ~STATUS2_SUBSTITUTE; + gBattleMons[i].volatiles.substitute = FALSE; - if (!(gStatuses3[i] & STATUS3_COMMANDER)) + if (gBattleMons[i].volatiles.semiInvulnerable != STATE_COMMANDER) gBattleStruct->battlerState[i].commandingDondozo = FALSE; gSpecialStatuses[i].parentalBondState = PARENTAL_BOND_OFF; gBattleStruct->battlerState[i].usedEjectItem = FALSE; gProtectStructs[i].lashOutAffected = FALSE; + gDisableStructs[i].endured = FALSE; } gSideTimers[B_SIDE_PLAYER].followmeTimer = 0; gSideTimers[B_SIDE_OPPONENT].followmeTimer = 0; - gBattleStruct->pledgeMove = FALSE; // combined pledge move may not have been used due to a canceller + gBattleStruct->pledgeMove = FALSE; // combined pledge move may not have been used due to a canceler + gBattleStruct->tryDestinyBond = FALSE; + gBattleStruct->tryGrudge = FALSE; ClearPursuitValues(); ClearDamageCalcResults(); } -void SpecialStatusesClear(void) -{ - memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses)); -} - static void PopulateArrayWithBattlers(u8 *battlers) { u32 i; @@ -5162,7 +5211,7 @@ static bool32 TryDoGimmicksBeforeMoves(void) } } - if (B_MEGA_EVO_TURN_ORDER >= GEN_7) + if (GetConfig(CONFIG_MEGA_EVO_TURN_ORDER) >= GEN_7) TryChangeTurnOrder(); // This will just do nothing if no mon has mega evolved. return FALSE; } @@ -5210,29 +5259,38 @@ static bool32 TryDoMoveEffectsBeforeMoves(void) static void TryChangeTurnOrder(void) { u32 i, j; + + struct BattleContext ctx = {0}; + for (i = 0; i < gBattlersCount; i++) + { + ctx.abilities[i] = GetBattlerAbility(i); + ctx.holdEffects[i] = GetBattlerHoldEffect(i); + } for (i = gCurrentTurnActionNumber; i < gBattlersCount - 1; i++) { for (j = i + 1; j < gBattlersCount; j++) { - u32 battler1 = gBattlerByTurnOrder[i]; - u32 battler2 = gBattlerByTurnOrder[j]; + ctx.battlerAtk = gBattlerByTurnOrder[i]; + ctx.battlerDef = gBattlerByTurnOrder[j]; if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE) { - if (GetWhichBattlerFaster(battler1, battler2, FALSE) == -1) + if (GetWhichBattlerFaster(&ctx, FALSE) == -1) SwapTurnOrder(i, j); } } } } -static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2, u32 *quickClawRandom, u32 *quickDrawRandom) +static void TryChangingTurnOrderEffects(struct BattleContext *ctx, u32 *quickClawRandom, u32 *quickDrawRandom) { - u32 ability1 = GetBattlerAbility(battler1); - enum ItemHoldEffect holdEffectBattler1 = GetBattlerHoldEffect(battler1, TRUE); - enum ItemHoldEffect holdEffectBattler2 = GetBattlerHoldEffect(battler2, TRUE); - u32 ability2 = GetBattlerAbility(battler2); + u32 battler1 = ctx->battlerAtk; + u32 battler2 = ctx->battlerDef; + enum Ability ability1 = ctx->abilities[ctx->battlerAtk]; + enum Ability ability2 = ctx->abilities[ctx->battlerDef]; + enum HoldEffect holdEffectBattler1 = ctx->holdEffects[ctx->battlerAtk]; + enum HoldEffect holdEffectBattler2 = ctx->holdEffects[ctx->battlerDef]; // Battler 1 // Quick Draw @@ -5241,7 +5299,7 @@ static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2, u32 *quickCl // Quick Claw and Custap Berry if (!gProtectStructs[battler1].quickDraw && ((holdEffectBattler1 == HOLD_EFFECT_QUICK_CLAW && quickClawRandom[battler1]) - || (holdEffectBattler1 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler1, 4, gBattleMons[battler1].item)))) + || (holdEffectBattler1 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler1, ability1, 4, gBattleMons[battler1].item)))) gProtectStructs[battler1].usedCustapBerry = TRUE; // Battler 2 @@ -5251,7 +5309,7 @@ static void TryChangingTurnOrderEffects(u32 battler1, u32 battler2, u32 *quickCl // Quick Claw and Custap Berry if (!gProtectStructs[battler2].quickDraw && ((holdEffectBattler2 == HOLD_EFFECT_QUICK_CLAW && quickClawRandom[battler2]) - || (holdEffectBattler2 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler2, 4, gBattleMons[battler2].item)))) + || (holdEffectBattler2 == HOLD_EFFECT_CUSTAP_BERRY && HasEnoughHpToEatBerry(battler2, ability2, 4, gBattleMons[battler2].item)))) gProtectStructs[battler2].usedCustapBerry = TRUE; } @@ -5276,14 +5334,14 @@ static void CheckChangingTurnOrderEffects(void) { gLastUsedItem = gBattleMons[battler].item; PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); - if (GetBattlerHoldEffect(battler, FALSE) == HOLD_EFFECT_CUSTAP_BERRY) + if (GetBattlerHoldEffect(battler) == HOLD_EFFECT_CUSTAP_BERRY) { // don't record berry since its gone now BattleScriptExecute(BattleScript_CustapBerryActivation); } else { - RecordItemEffectBattle(battler, GetBattlerHoldEffect(battler, FALSE)); + RecordItemEffectBattle(battler, GetBattlerHoldEffect(battler)); BattleScriptExecute(BattleScript_QuickClawActivation); } } @@ -5309,14 +5367,13 @@ static void CheckChangingTurnOrderEffects(void) for (i = 0; i < MAX_BATTLERS_COUNT; i++) { gBattleStruct->battlerState[i].focusPunchBattlers = FALSE; - gBattleStruct->ateBoost[i] = FALSE; + gBattleStruct->battlerState[i].ateBoost = FALSE; gSpecialStatuses[i].gemBoost = FALSE; } gBattleMainFunc = RunTurnActionsFunctions; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; - gBattleScripting.multihitMoveEffect = 0; gBattleResources->battleScriptsStack->size = 0; } @@ -5348,16 +5405,12 @@ static void RunTurnActionsFunctions(void) if (gCurrentTurnActionNumber >= gBattlersCount) // everyone did their actions, turn finished { - gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; } else { if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battler - { - gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; gHitMarker &= ~HITMARKER_UNABLE_TO_USE_MOVE; - } } } @@ -5533,12 +5586,29 @@ static void HandleEndTurn_FinishBattle(void) GetMonData(GetBattlerMon(battler), MON_DATA_NICKNAME, gBattleResults.playerMon2Name); } } - else if (!IsOnPlayerSide(battler)) + } + TryPutPokemonTodayOnAir(); + } + + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_TRAINER_HILL + | BATTLE_TYPE_FRONTIER))) + { + for (enum BattleSide side = 0; side < NUM_BATTLE_SIDES; side++) + { + struct Pokemon *party = GetSideParty(side); + + if (side == B_SIDE_PLAYER && !B_PARTNER_MONS_MARKED_SEEN) + continue; + + for (u32 partySlot = 0; partySlot < PARTY_SIZE; partySlot++) { - HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[battler].species), FLAG_SET_SEEN, gBattleMons[battler].personality); + if (gBattleStruct->partyState[side][partySlot].sentOut) + HandleSetPokedexFlagFromMon(&party[partySlot], FLAG_SET_SEEN); } } - TryPutPokemonTodayOnAir(); } if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK @@ -5571,18 +5641,7 @@ static void HandleEndTurn_FinishBattle(void) for (i = 0; i < PARTY_SIZE; i++) { - bool8 changedForm = FALSE; - - // Appeared in battle and didn't faint - if ((gBattleStruct->appearedInBattle & (1u << i)) && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) - changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE_TERRAIN); - - if (!changedForm) - changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE); - - // Clear original species field - gBattleStruct->changedSpecies[B_SIDE_PLAYER][i] = SPECIES_NONE; - gBattleStruct->changedSpecies[B_SIDE_OPPONENT][i] = SPECIES_NONE; + bool32 changedForm = TryRevertPartyMonFormChange(i); // Recalculate the stats of every party member before the end if (!changedForm && B_RECALCULATE_STATS >= GEN_5) @@ -5619,6 +5678,7 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) else gSaveBlock3Ptr->dexNavChain = 0; + ClearCurrentTrainerWantRematchVsSeeker(); gDexNavSpecies = SPECIES_NONE; ResetSpriteData(); if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK @@ -5666,20 +5726,24 @@ static void TryEvolvePokemon(void) if (!(sTriedEvolving & (1u << i))) { bool32 canStopEvo = TRUE; - u32 species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_SPECIAL, i, NULL, &canStopEvo, CHECK_EVO); + enum EvolutionMode mode = EVO_MODE_BATTLE_SPECIAL; + u32 evolutionItemArg = i; + u32 species = GetEvolutionTargetSpecies(&gPlayerParty[i], mode, evolutionItemArg, NULL, &canStopEvo, CHECK_EVO); sTriedEvolving |= 1u << i; if (species == SPECIES_NONE && (gLeveledUpInBattle & (1u << i))) { gLeveledUpInBattle &= ~(1u << i); - species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_ONLY, gLeveledUpInBattle, NULL, &canStopEvo, CHECK_EVO); + mode = EVO_MODE_BATTLE_ONLY; + evolutionItemArg = gLeveledUpInBattle; + species = GetEvolutionTargetSpecies(&gPlayerParty[i], mode, evolutionItemArg, NULL, &canStopEvo, CHECK_EVO); } if (species != SPECIES_NONE) { FreeAllWindowBuffers(); gBattleMainFunc = WaitForEvoSceneToFinish; - GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_ONLY, gLeveledUpInBattle, NULL, &canStopEvo, DO_EVO); + GetEvolutionTargetSpecies(&gPlayerParty[i], mode, evolutionItemArg, NULL, &canStopEvo, DO_EVO); EvolutionScene(&gPlayerParty[i], species, canStopEvo, i); return; } @@ -5749,9 +5813,9 @@ void RunBattleScriptCommands(void) gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } -u32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) +enum Type TrySetAteType(u32 move, u32 battlerAtk, enum Ability attackerAbility) { - u32 ateType = TYPE_NONE; + enum Type ateType = TYPE_NONE; switch (GetMoveEffect(move)) { @@ -5797,22 +5861,24 @@ u32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) } // Returns TYPE_NONE if type doesn't change. -u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState state) +enum Type GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState state) { - u32 moveType = GetMoveType(move); + enum Type moveType = GetMoveType(move); enum BattleMoveEffects moveEffect = GetMoveEffect(move); - u32 species, heldItem, ability, type1, type2, type3; - enum ItemHoldEffect holdEffect; + u32 species, heldItem; + enum Type type1, type2, type3; + enum Ability ability; + enum HoldEffect holdEffect; enum Gimmick gimmick = GetActiveGimmick(battler); - if (move == MOVE_STRUGGLE) - return TYPE_NORMAL; - if (state == MON_IN_BATTLE) { + if (moveEffect == EFFECT_STRUGGLE) + return TYPE_MYSTERY; + species = gBattleMons[battler].species; heldItem = gBattleMons[battler].item; - holdEffect = GetBattlerHoldEffect(battler, TRUE); + holdEffect = GetBattlerHoldEffect(battler); ability = GetBattlerAbility(battler); type1 = gBattleMons[battler].types[0]; type2 = gBattleMons[battler].types[1]; @@ -5824,8 +5890,8 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); holdEffect = GetItemHoldEffect(heldItem); ability = GetMonAbility(mon); - type1 = gSpeciesInfo[species].types[0]; - type2 = gSpeciesInfo[species].types[1]; + type1 = GetSpeciesType(species, 0); + type2 = GetSpeciesType(species, 1); type3 = TYPE_MYSTERY; } @@ -5910,7 +5976,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState case EFFECT_REVELATION_DANCE: if (gimmick != GIMMICK_Z_MOVE) { - u32 teraType; + enum Type teraType; if (gimmick == GIMMICK_TERA && ((teraType = GetMonData(mon, MON_DATA_TERA_TYPE)) != TYPE_STELLAR)) return teraType; else if (type1 != TYPE_MYSTERY && !(gDisableStructs[battler].roostActive && type1 == TYPE_FLYING)) @@ -5931,7 +5997,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState case SPECIES_TAUROS_PALDEA_COMBAT: case SPECIES_TAUROS_PALDEA_BLAZE: case SPECIES_TAUROS_PALDEA_AQUA: - return gSpeciesInfo[species].types[1]; + return GetSpeciesType(species, 1); } break; case EFFECT_IVY_CUDGEL: @@ -5943,7 +6009,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState case SPECIES_OGERPON_HEARTHFLAME_TERA: case SPECIES_OGERPON_CORNERSTONE: case SPECIES_OGERPON_CORNERSTONE_TERA: - return gSpeciesInfo[species].types[1]; + return GetSpeciesType(species, 1); } break; case EFFECT_NATURAL_GIFT: @@ -5954,7 +6020,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState case EFFECT_TERRAIN_PULSE: if (state == MON_IN_BATTLE) { - if (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY)) + if (IsBattlerTerrainAffected(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler), STATUS_FIELD_TERRAIN_ANY)) { if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) return TYPE_ELECTRIC; @@ -6014,7 +6080,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState { u32 ateType = TrySetAteType(move, battler, ability); if (ateType != TYPE_NONE && state == MON_IN_BATTLE) - gBattleStruct->ateBoost[battler] = TRUE; + gBattleStruct->battlerState[battler].ateBoost = TRUE; return ateType; } else if (moveEffect != EFFECT_CHANGE_TYPE_ON_ITEM @@ -6026,7 +6092,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState && gimmick != GIMMICK_Z_MOVE) { if (state == MON_IN_BATTLE && gimmick != GIMMICK_DYNAMAX) - gBattleStruct->ateBoost[battler] = TRUE; + gBattleStruct->battlerState[battler].ateBoost = TRUE; return TYPE_NORMAL; } @@ -6035,12 +6101,12 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, enum MonState void SetTypeBeforeUsingMove(u32 move, u32 battler) { - u32 moveType; + enum Type moveType; u32 heldItem = gBattleMons[battler].item; - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); gBattleStruct->dynamicMoveType = 0; - gBattleStruct->ateBoost[battler] = FALSE; + gBattleStruct->battlerState[battler].ateBoost = FALSE; gSpecialStatuses[battler].gemBoost = FALSE; moveType = GetDynamicMoveType(GetBattlerMon(battler), @@ -6052,7 +6118,8 @@ void SetTypeBeforeUsingMove(u32 move, u32 battler) gBattleStruct->dynamicMoveType = moveType | F_DYNAMIC_TYPE_SET; moveType = GetBattleMoveType(move); - if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) || gStatuses4[battler] & STATUS4_ELECTRIFIED) + if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) + || gBattleMons[battler].volatiles.electrified) gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; // Check if a gem should activate. @@ -6061,7 +6128,7 @@ void SetTypeBeforeUsingMove(u32 move, u32 battler) && GetBattleMoveType(move) == GetItemSecondaryId(heldItem) && effect != EFFECT_PLEDGE && effect != EFFECT_OHKO - && effect != EFFECT_STRUGGLE) + && effect != EFFECT_SHEER_COLD) { gSpecialStatuses[battler].gemParam = GetBattlerHoldEffectParam(battler); gSpecialStatuses[battler].gemBoost = TRUE; @@ -6127,3 +6194,10 @@ bool32 DidPlayerForfeitNormalTrainerBattle(void) return (gBattleOutcome == B_OUTCOME_FORFEITED); } + +// Wins the battle instantly. Used in the battle debug with LIST_ITEM_INSTANT_WIN +void BattleDebug_WonBattle(void) +{ + gBattleOutcome |= B_OUTCOME_WON; + gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; +} diff --git a/src/battle_message.c b/src/battle_message.c index 78708d47d6aa..1d73aed23074 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -67,7 +67,7 @@ const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1} is preventing switching const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); const u8 gText_StatFell[] = _("fell!"); -const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); +const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}rose!"); static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}You got away safely!\p"); static const u8 sText_PlayerDefeatedLinkTrainer[] = _("You defeated {B_LINK_OPPONENT1_NAME}!"); static const u8 sText_TwoLinkTrainersDefeated[] = _("You defeated {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); @@ -108,6 +108,7 @@ static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}! Come back!"); static const u8 sText_PkmnGoodComeBack[] = _("Good job, {B_BUFF1}! Come back!"); static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_NAME_WITH_CLASS} withdrew {B_BUFF1}!"); +static const u8 sText_Trainer2WithdrewPkmn[] = _("{B_TRAINER2_NAME_WITH_CLASS} withdrew {B_BUFF1}!"); static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew {B_BUFF1}!"); static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew {B_BUFF1}!"); static const u8 sText_WildPkmnPrefix[] = _("The wild "); @@ -187,22 +188,18 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_STATSWONTINCREASE2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s stats won't go any higher!"), [STRINGID_AVOIDEDDAMAGE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} avoided damage with {B_DEF_ABILITY}!"), //not in gen 5+, ability popup [STRINGID_ITDOESNTAFFECT] = COMPOUND_STRING("It doesn't affect {B_DEF_NAME_WITH_PREFIX2}…"), - [STRINGID_ATTACKERFAINTED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} fainted!\p"), - [STRINGID_TARGETFAINTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} fainted!\p"), + [STRINGID_BATTLERFAINTED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} fainted!\p"), [STRINGID_PLAYERGOTMONEY] = COMPOUND_STRING("You got Β₯{B_BUFF1} for winning!\p"), [STRINGID_PLAYERWHITEOUT] = COMPOUND_STRING("You have no more PokΓ©mon that can fight!\p"), -#if B_WHITEOUT_MONEY >= GEN_4 - [STRINGID_PLAYERWHITEOUT2] = COMPOUND_STRING("You panicked and dropped Β₯{B_BUFF1}…\pYou were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"), -#else - [STRINGID_PLAYERWHITEOUT2] = COMPOUND_STRING("You were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"), -#endif - [STRINGID_PREVENTSESCAPE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} prevents escape with {B_SCR_ACTIVE_ABILITY}!\p"), + [STRINGID_PLAYERWHITEOUT2_WILD] = COMPOUND_STRING("You panicked and dropped Β₯{B_BUFF1}…"), + [STRINGID_PLAYERWHITEOUT2_TRAINER] = COMPOUND_STRING("You gave Β₯{B_BUFF1} to the winner…"), + [STRINGID_PLAYERWHITEOUT3] = COMPOUND_STRING("You were overwhelmed by your defeat!"), + [STRINGID_PREVENTSESCAPE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} prevents escape with {B_SCR_ABILITY}!\p"), [STRINGID_HITXTIMES] = COMPOUND_STRING("The PokΓ©mon was hit {B_BUFF1} time(s)!"), //SV has dynamic plural here [STRINGID_PKMNFELLASLEEP] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} fell asleep!"), [STRINGID_PKMNMADESLEEP] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_BUFF1} made {B_EFF_NAME_WITH_PREFIX2} sleep!"), //not in gen 5+, ability popup [STRINGID_PKMNALREADYASLEEP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is already asleep!"), [STRINGID_PKMNALREADYASLEEP2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is already asleep!"), - [STRINGID_PKMNWASNTAFFECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} wasn't affected!"), //not in gen 5+, ability popup [STRINGID_PKMNWASPOISONED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} was poisoned!"), [STRINGID_PKMNPOISONEDBY] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} was poisoned by {B_SCR_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), //not in gen 5+, ability popup [STRINGID_PKMNHURTBYPOISON] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was hurt by its poisoning!"), @@ -223,11 +220,8 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNISPARALYZED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} couldn't move because it's paralyzed!"), [STRINGID_PKMNISALREADYPARALYZED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is already paralyzed!"), [STRINGID_PKMNHEALEDPARALYSIS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was cured of paralysis!"), - [STRINGID_PKMNDREAMEATEN] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s dream was eaten!"), //not in gen 5+, expansion doesn't use anymore [STRINGID_STATSWONTINCREASE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any higher!"), [STRINGID_STATSWONTDECREASE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any lower!"), - [STRINGID_TEAMSTOPPEDWORKING] = COMPOUND_STRING("Your team's {B_BUFF1} stopped working!"), //unused - [STRINGID_FOESTOPPEDWORKING] = COMPOUND_STRING("The foe's {B_BUFF1} stopped working!"), //unused [STRINGID_PKMNISCONFUSED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is confused!"), [STRINGID_PKMNHEALEDCONFUSION] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} snapped out of its confusion!"), [STRINGID_PKMNWASCONFUSED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} became confused!"), @@ -235,7 +229,6 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNFELLINLOVE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} fell in love!"), [STRINGID_PKMNINLOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is in love with {B_SCR_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNIMMOBILIZEDBYLOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is immobilized by love!"), - [STRINGID_PKMNBLOWNAWAY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was blown away!"), //unused [STRINGID_PKMNCHANGEDTYPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} transformed into the {B_BUFF1} type!"), [STRINGID_PKMNFLINCHED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} flinched and couldn't move!"), [STRINGID_PKMNREGAINEDHEALTH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s HP was restored."), @@ -273,13 +266,12 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNFASTASLEEP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is fast asleep."), [STRINGID_PKMNWOKEUP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} woke up!"), [STRINGID_PKMNUPROARKEPTAWAKE] = COMPOUND_STRING("But the uproar kept {B_SCR_NAME_WITH_PREFIX2} awake!"), - [STRINGID_PKMNWOKEUPINUPROAR] = COMPOUND_STRING("The uproar woke {B_ATK_NAME_WITH_PREFIX2}!"), + [STRINGID_PKMNWOKEUPINUPROAR] = COMPOUND_STRING("The uproar woke {B_EFF_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNCAUSEDUPROAR] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} caused an uproar!"), [STRINGID_PKMNMAKINGUPROAR] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is making an uproar!"), [STRINGID_PKMNCALMEDDOWN] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} calmed down."), [STRINGID_PKMNCANTSLEEPINUPROAR] = COMPOUND_STRING("But {B_DEF_NAME_WITH_PREFIX2} can't sleep in an uproar!"), [STRINGID_PKMNSTOCKPILED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} stockpiled {B_BUFF1}!"), - [STRINGID_PKMNCANTSTOCKPILE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} can't stockpile any more!"), //I think this was replaced with just "But it failed!" [STRINGID_PKMNCANTSLEEPINUPROAR2] = COMPOUND_STRING("But {B_DEF_NAME_WITH_PREFIX2} can't sleep in an uproar!"), [STRINGID_UPROARKEPTPKMNAWAKE] = COMPOUND_STRING("But the uproar kept {B_DEF_NAME_WITH_PREFIX2} awake!"), [STRINGID_PKMNSTAYEDAWAKEUSING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} stayed awake using its {B_DEF_ABILITY}!"), //not in gen 5+, ability popup @@ -297,15 +289,16 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNRAGEBUILDING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s rage is building!"), [STRINGID_PKMNMOVEWASDISABLED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled!"), [STRINGID_PKMNMOVEISDISABLED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} is disabled!\p"), - [STRINGID_PKMNMOVEDISABLEDNOMORE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s move is no longer disabled!"), + [STRINGID_PKMNMOVEDISABLEDNOMORE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s move is no longer disabled!"), [STRINGID_PKMNGOTENCORE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} must do an encore!"), - [STRINGID_PKMNENCOREENDED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} ended its encore!"), + [STRINGID_PKMNGOTENCOREDMOVE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} can only use {B_CURRENT_MOVE}!\p"), + [STRINGID_PKMNENCOREENDED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} ended its encore!"), [STRINGID_PKMNTOOKAIM] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} took aim at {B_DEF_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNSKETCHEDMOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} sketched {B_BUFF1}!"), [STRINGID_PKMNTRYINGTOTAKEFOE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is hoping to take its attacker down with it!"), [STRINGID_PKMNTOOKFOE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} took its attacker down with it!"), [STRINGID_PKMNREDUCEDPP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s PP was reduced!"), - [STRINGID_PKMNSTOLEITEM] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} stole {B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"), + [STRINGID_PKMNSTOLEITEM] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} stole {B_EFF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"), [STRINGID_TARGETCANTESCAPENOW] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} can no longer escape!"), [STRINGID_PKMNFELLINTONIGHTMARE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} began having a nightmare!"), [STRINGID_PKMNLOCKEDINNIGHTMARE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is locked in a nightmare!"), @@ -319,14 +312,14 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNENDUREDHIT] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} endured the hit!"), [STRINGID_MAGNITUDESTRENGTH] = COMPOUND_STRING("Magnitude {B_BUFF1}!"), [STRINGID_PKMNCUTHPMAXEDATTACK] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} cut its own HP and maximized its Attack!"), - [STRINGID_PKMNCOPIEDSTATCHANGES] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} copied {B_DEF_NAME_WITH_PREFIX2}'s stat changes!"), + [STRINGID_PKMNCOPIEDSTATCHANGES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} copied {B_EFF_NAME_WITH_PREFIX2}'s stat changes!"), [STRINGID_PKMNGOTFREE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} got free of {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), //not in gen 5+, generic rapid spin? [STRINGID_PKMNSHEDLEECHSEED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} shed Leech Seed!"), //not in gen 5+, generic rapid spin? [STRINGID_PKMNBLEWAWAYSPIKES] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} blew away Spikes!"), //not in gen 5+, generic rapid spin? [STRINGID_PKMNFLEDFROMBATTLE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} fled from battle!"), [STRINGID_PKMNFORESAWATTACK] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} foresaw an attack!"), [STRINGID_PKMNTOOKATTACK] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} took the {B_BUFF1} attack!"), - [STRINGID_PKMNATTACK] = COMPOUND_STRING("{B_BUFF1}'s attack!"), //not in gen 5+, expansion doesn't use anymore + [STRINGID_PKMNATTACK] = COMPOUND_STRING("{B_BUFF1}'s attack!"), //not in gen 5+ [STRINGID_PKMNCENTERATTENTION] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} became the center of attention!"), [STRINGID_PKMNCHARGINGPOWER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} began charging power!"), [STRINGID_NATUREPOWERTURNEDINTO] = COMPOUND_STRING("Nature Power turned into {B_CURRENT_MOVE}!"), @@ -340,7 +333,6 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNREADYTOHELP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is ready to help {B_DEF_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNSWITCHEDITEMS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} switched items with its target!"), [STRINGID_PKMNCOPIEDFOE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} copied {B_DEF_NAME_WITH_PREFIX2}'s Ability!"), - [STRINGID_PKMNMADEWISH] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} made a wish!"), //unused [STRINGID_PKMNWISHCAMETRUE] = COMPOUND_STRING("{B_BUFF1}'s wish came true!"), [STRINGID_PKMNPLANTEDROOTS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} planted its roots!"), [STRINGID_PKMNABSORBEDNUTRIENTS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} absorbed nutrients with its roots!"), @@ -356,30 +348,27 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNMOVEBOUNCED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} bounced the {B_CURRENT_MOVE} back!"), [STRINGID_PKMNWAITSFORTARGET] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} waits for a target to make a move!"), [STRINGID_PKMNSNATCHEDMOVE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} snatched {B_SCR_NAME_WITH_PREFIX2}'s move!"), - [STRINGID_PKMNMADEITRAIN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it rain!"), //not in gen 5+, ability popup - [STRINGID_PKMNRAISEDSPEED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its Speed!"), //not in gen 5+, ability popup + [STRINGID_PKMNMADEITRAIN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} made it rain!"), //not in gen 5+, ability popup [STRINGID_PKMNPROTECTEDBY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was protected by {B_DEF_ABILITY}!"), //not in gen 5+, ability popup [STRINGID_PKMNPREVENTSUSAGE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents {B_ATK_NAME_WITH_PREFIX2} from using {B_CURRENT_MOVE}!"), //I don't see this in SV text [STRINGID_PKMNRESTOREDHPUSING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} restored HP using its {B_DEF_ABILITY}!"), //not in gen 5+, ability popup - [STRINGID_PKMNCHANGEDTYPEWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made it the {B_BUFF1} type!"), //not in gen 5+, ability popup - [STRINGID_PKMNPREVENTSPARALYSISWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} prevents paralysis!"), //not in gen 5+, ability popup + [STRINGID_PKMNCHANGEDTYPEWITH] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} made it the {B_BUFF1} type!"), //not in gen 5+, ability popup [STRINGID_PKMNPREVENTSROMANCEWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents romance!"), //not in gen 5+, ability popup - [STRINGID_PKMNPREVENTSPOISONINGWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} prevents poisoning!"), //not in gen 5+, ability popup - [STRINGID_PKMNPREVENTSCONFUSIONWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents confusion!"), //not in gen 5+, ability popup + [STRINGID_PKMNPREVENTSCONFUSIONWITH] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} prevents confusion!"), //not in gen 5+, ability popup [STRINGID_PKMNRAISEDFIREPOWERWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised the power of Fire-type moves!"), //not in gen 5+, ability popup [STRINGID_PKMNANCHORSITSELFWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} anchors itself with {B_DEF_ABILITY}!"), //not in gen 5+, ability popup - [STRINGID_PKMNCUTSATTACKWITH] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cuts {B_DEF_NAME_WITH_PREFIX2}'s Attack!"), //not in gen 5+, ability popup - [STRINGID_PKMNPREVENTSSTATLOSSWITH] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents stat loss!"), //not in gen 5+, ability popup + [STRINGID_PKMNCUTSATTACKWITH] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} cuts {B_DEF_NAME_WITH_PREFIX2}'s Attack!"), //not in gen 5+, ability popup + [STRINGID_PKMNPREVENTSSTATLOSSWITH] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} prevents stat loss!"), //not in gen 5+, ability popup [STRINGID_PKMNHURTSWITH] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was hurt by {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), [STRINGID_PKMNTRACED] = COMPOUND_STRING("It traced {B_BUFF1}'s {B_BUFF2}!"), [STRINGID_STATSHARPLY] = gText_StatSharply, [STRINGID_STATROSE] = gText_StatRose, [STRINGID_STATHARSHLY] = COMPOUND_STRING("harshly "), [STRINGID_STATFELL] = gText_StatFell, - [STRINGID_ATTACKERSSTATROSE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"), + [STRINGID_ATTACKERSSTATROSE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}rose!"), [STRINGID_DEFENDERSSTATROSE] = gText_DefendersStatRose, - [STRINGID_ATTACKERSSTATFELL] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"), - [STRINGID_DEFENDERSSTATFELL] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"), + [STRINGID_ATTACKERSSTATFELL] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}fell!"), + [STRINGID_DEFENDERSSTATFELL] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}fell!"), [STRINGID_CRITICALHIT] = COMPOUND_STRING("A critical hit!"), [STRINGID_ONEHITKO] = COMPOUND_STRING("It's a one-hit KO!"), [STRINGID_123POOF] = COMPOUND_STRING("One…{PAUSE 10}two…{PAUSE 10}and…{PAUSE 10}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"), @@ -394,7 +383,6 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_BUTNOTHINGHAPPENED] = COMPOUND_STRING("But nothing happened!"), [STRINGID_BUTITFAILED] = COMPOUND_STRING("But it failed!"), [STRINGID_ITHURTCONFUSION] = COMPOUND_STRING("It hurt itself in its confusion!"), - [STRINGID_MIRRORMOVEFAILED] = COMPOUND_STRING("The Mirror Move failed!"), //not in gen 5+, uses "but it failed" [STRINGID_STARTEDTORAIN] = COMPOUND_STRING("It started to rain!"), [STRINGID_DOWNPOURSTARTED] = COMPOUND_STRING("A downpour started!"), // corresponds to DownpourText in pokegold and pokecrystal and is used by Rain Dance in GSC [STRINGID_RAINCONTINUES] = COMPOUND_STRING("Rain continues to fall."), //not in gen 5+ @@ -409,9 +397,6 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_STARTEDHAIL] = COMPOUND_STRING("It started to hail!"), [STRINGID_HAILCONTINUES] = COMPOUND_STRING("The hail is crashing down."), [STRINGID_HAILSTOPPED] = COMPOUND_STRING("The hail stopped."), - [STRINGID_FAILEDTOSPITUP] = COMPOUND_STRING("But it failed to spit up a thing!"), //not in gen 5+, uses "but it failed" - [STRINGID_FAILEDTOSWALLOW] = COMPOUND_STRING("But it failed to swallow a thing!"), //not in gen 5+, uses "but it failed" - [STRINGID_WINDBECAMEHEATWAVE] = COMPOUND_STRING("The wind turned into a Heat Wave!"), //unused [STRINGID_STATCHANGESGONE] = COMPOUND_STRING("All stat changes were eliminated!"), [STRINGID_COINSSCATTERED] = COMPOUND_STRING("Coins were scattered everywhere!"), [STRINGID_TOOWEAKFORSUBSTITUTE] = COMPOUND_STRING("But it does not have enough HP left to make a substitute!"), @@ -468,14 +453,13 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_ITEMALLOWSONLYYMOVE] = COMPOUND_STRING("{B_LAST_ITEM} only allows the use of {B_CURRENT_MOVE}!\p"), [STRINGID_PKMNHUNGONWITHX] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} hung on using its {B_LAST_ITEM}!"), [STRINGID_EMPTYSTRING3] = gText_EmptyString3, - [STRINGID_PKMNSXPREVENTSBURNS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} prevents burns!"), //not in gen 5+, ability popup [STRINGID_PKMNSXBLOCKSY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} blocks {B_CURRENT_MOVE}!"), //not in gen 5+, ability popup [STRINGID_PKMNSXRESTOREDHPALITTLE2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} restored its HP a little!"), //not in gen 5+, ability popup - [STRINGID_PKMNSXWHIPPEDUPSANDSTORM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} whipped up a sandstorm!"), //not in gen 5+, ability popup - [STRINGID_PKMNSXPREVENTSYLOSS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_BUFF1} loss!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXWHIPPEDUPSANDSTORM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} whipped up a sandstorm!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXPREVENTSYLOSS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} prevents {B_BUFF1} loss!"), //not in gen 5+, ability popup [STRINGID_PKMNSXINFATUATEDY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} infatuated {B_ATK_NAME_WITH_PREFIX2}!"), //not in gen 5+, ability popup [STRINGID_PKMNSXMADEYINEFFECTIVE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made {B_CURRENT_MOVE} ineffective!"), //not in gen 5+, ability popup - [STRINGID_PKMNSXCUREDYPROBLEM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXCUREDYPROBLEM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup [STRINGID_ITSUCKEDLIQUIDOOZE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} sucked up the liquid ooze!"), [STRINGID_PKMNTRANSFORMED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} transformed!"), [STRINGID_ELECTRICITYWEAKENED] = COMPOUND_STRING("Electricity's power was weakened!"), @@ -487,14 +471,14 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PLAYERDEFEATEDTRAINER1] = sText_PlayerDefeatedLinkTrainerTrainer1, [STRINGID_SOOTHINGAROMA] = COMPOUND_STRING("A soothing aroma wafted through the area!"), [STRINGID_ITEMSCANTBEUSEDNOW] = COMPOUND_STRING("Items can't be used now.{PAUSE 64}"), //not in gen 5+, i think - [STRINGID_FORXCOMMAYZ] = COMPOUND_STRING("For {B_SCR_NAME_WITH_PREFIX2}, {B_LAST_ITEM} {B_BUFF1}"), //not in gen 5+, expansion doesn't use anymore - [STRINGID_USINGITEMSTATOFPKMNROSE] = COMPOUND_STRING("Using {B_LAST_ITEM}, the {B_BUFF1} of {B_SCR_NAME_WITH_PREFIX2} {B_BUFF2}"), //todo: update this, will require code changes + [STRINGID_USINGITEMSTATOFPKMNROSE] = COMPOUND_STRING("Using {B_LAST_ITEM}, the {B_BUFF1} of {B_SCR_NAME_WITH_PREFIX2} {B_BUFF2}rose!"), //todo: update this, will require code changes + [STRINGID_USINGITEMSTATOFPKMNFELL] = COMPOUND_STRING("Using {B_LAST_ITEM}, the {B_BUFF1} of {B_SCR_NAME_WITH_PREFIX2} {B_BUFF2}fell!"), [STRINGID_PKMNUSEDXTOGETPUMPED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} used the {B_LAST_ITEM} to get pumped!"), [STRINGID_PKMNSXMADEYUSELESS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made {B_CURRENT_MOVE} useless!"), //not in gen 5+, ability popup [STRINGID_PKMNTRAPPEDBYSANDTOMB] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} became trapped by the quicksand!"), [STRINGID_EMPTYSTRING4] = COMPOUND_STRING(""), [STRINGID_ABOOSTED] = COMPOUND_STRING(" a boosted"), - [STRINGID_PKMNSXINTENSIFIEDSUN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} intensified the sun's rays!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXINTENSIFIEDSUN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} intensified the sun's rays!"), //not in gen 5+, ability popup [STRINGID_PKMNMAKESGROUNDMISS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} makes Ground-type moves miss with {B_DEF_ABILITY}!"), //not in gen 5+, ability popup [STRINGID_YOUTHROWABALLNOWRIGHT] = COMPOUND_STRING("You throw a Ball now, right? I… I'll do my best!"), [STRINGID_PKMNSXTOOKATTACK] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} took the attack!"), //In gen 5+ but without naming the ability @@ -504,28 +488,23 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNFLEDUSINGITS] = COMPOUND_STRING("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled using its {B_LAST_ITEM}!\p"), [STRINGID_PKMNFLEDUSING] = COMPOUND_STRING("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled using {B_ATK_ABILITY}!\p"), //not in gen 5+ [STRINGID_PKMNWASDRAGGEDOUT] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was dragged out!\p"), - [STRINGID_PREVENTEDFROMWORKING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevented {B_SCR_NAME_WITH_PREFIX2}'s {B_BUFF1} from working!"), //unused [STRINGID_PKMNSITEMNORMALIZEDSTATUS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} normalized its status!"), [STRINGID_TRAINER1USEDITEM] = COMPOUND_STRING("{B_ATK_TRAINER_NAME_WITH_CLASS} used {B_LAST_ITEM}!"), [STRINGID_BOXISFULL] = COMPOUND_STRING("The Box is full! You can't catch any more!\p"), [STRINGID_PKMNAVOIDEDATTACK] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} avoided the attack!"), - [STRINGID_PKMNSXMADEITINEFFECTIVE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it ineffective!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXMADEITINEFFECTIVE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} made it ineffective!"), //not in gen 5+, ability popup [STRINGID_PKMNSXPREVENTSFLINCHING] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} prevents flinching!"), //not in gen 5+, ability popup [STRINGID_PKMNALREADYHASBURN] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is already burned!"), [STRINGID_STATSWONTDECREASE2] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s stats won't go any lower!"), - [STRINGID_PKMNSXBLOCKSY2] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} blocks {B_CURRENT_MOVE}!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXBLOCKSY2] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} blocks {B_CURRENT_MOVE}!"), //not in gen 5+, ability popup [STRINGID_PKMNSXWOREOFF] = COMPOUND_STRING("{B_ATK_TEAM1} team's {B_BUFF1} wore off!"), - [STRINGID_PKMNRAISEDDEFALITTLE] = COMPOUND_STRING("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE} raised DEFENSE a little!"), //expansion doesn't use anymore - [STRINGID_PKMNRAISEDSPDEFALITTLE] = COMPOUND_STRING("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE} raised SP. DEF a little!"), //expansion doesn't use anymore [STRINGID_THEWALLSHATTERED] = COMPOUND_STRING("The wall shattered!"), //not in gen5+, uses "your teams light screen wore off!" etc instead - [STRINGID_PKMNSXPREVENTSYSZ] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"), - [STRINGID_PKMNSXCUREDITSYPROBLEM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXCUREDITSYPROBLEM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup [STRINGID_ATTACKERCANTESCAPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} can't escape!"), [STRINGID_PKMNOBTAINEDX] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}."), [STRINGID_PKMNOBTAINEDX2] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."), [STRINGID_PKMNOBTAINEDXYOBTAINEDZ] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."), [STRINGID_BUTNOEFFECT] = COMPOUND_STRING("But it had no effect!"), - [STRINGID_PKMNSXHADNOEFFECTONY] = COMPOUND_STRING("Target protected by {B_LAST_ABILITY}!"), //not in gen 5+, ability popup [STRINGID_TWOENEMIESDEFEATED] = sText_TwoInGameTrainersDefeated, [STRINGID_TRAINER2LOSETEXT] = COMPOUND_STRING("{B_TRAINER2_LOSE_TEXT}"), [STRINGID_PKMNINCAPABLEOFPOWER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} appears incapable of using its power!"), @@ -584,10 +563,8 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_FELLSTRAIGHTDOWN] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} fell straight down!"), [STRINGID_TARGETCHANGEDTYPE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} transformed into the {B_BUFF1} type!"), [STRINGID_PKMNACQUIREDSIMPLE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} acquired Simple!"), //shouldn't directly use the name - [STRINGID_EMPTYSTRING5] = sText_EmptyString4, [STRINGID_KINDOFFER] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} took the kind offer!"), [STRINGID_RESETSTARGETSSTATLEVELS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s stat changes were removed!"), - [STRINGID_EMPTYSTRING6] = sText_EmptyString4, [STRINGID_ALLYSWITCHPOSITION] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} and {B_SCR_NAME_WITH_PREFIX2} switched places!"), [STRINGID_RESTORETARGETSHEALTH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s HP was restored!"), [STRINGID_TOOKPJMNINTOTHESKY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX2} into the sky!"), @@ -597,7 +574,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_TRANSFERHELDITEM] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM} from {B_ATK_NAME_WITH_PREFIX2}"), [STRINGID_EMBARGOENDS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} can use items again!"), [STRINGID_ELECTROMAGNETISM] = COMPOUND_STRING("electromagnetism"), - [STRINGID_BUFFERENDS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} wore off!"), + [STRINGID_BUFFERENDS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_BUFF1} wore off!"), [STRINGID_TELEKINESISENDS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was freed from the telekinesis!"), [STRINGID_TAILWINDENDS] = COMPOUND_STRING("{B_ATK_TEAM1} team's Tailwind petered out!"), [STRINGID_LUCKYCHANTENDS] = COMPOUND_STRING("{B_ATK_TEAM1} team's Lucky Chant wore off!"), @@ -612,9 +589,9 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_MISTYTERRAINENDS] = COMPOUND_STRING("The mist disappeared from the battlefield."), [STRINGID_PSYCHICTERRAINENDS] = COMPOUND_STRING("The weirdness disappeared from the battlefield!"), [STRINGID_GRASSYTERRAINENDS] = COMPOUND_STRING("The grass disappeared from the battlefield."), - [STRINGID_TARGETABILITYSTATRAISE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised its {B_BUFF1}!"), + [STRINGID_TARGETABILITYSTATRAISE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} {B_BUFF2}raised its {B_BUFF1}!"), [STRINGID_TARGETSSTATWASMAXEDOUT] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed its {B_BUFF1}!"), - [STRINGID_ATTACKERABILITYSTATRAISE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} raised its {B_BUFF1}!"), + [STRINGID_ATTACKERABILITYSTATRAISE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} {B_BUFF2}raised its {B_BUFF1}!"), [STRINGID_POISONHEALHPUP] = COMPOUND_STRING("The poisoning healed {B_ATK_NAME_WITH_PREFIX2} a little bit!"), //don't think this message is displayed anymore [STRINGID_BADDREAMSDMG] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is tormented!"), [STRINGID_MOLDBREAKERENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} breaks the mold!"), @@ -625,26 +602,26 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_SOLARPOWERHPDROP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} takes its toll!"), //don't think this message is displayed anymore [STRINGID_AFTERMATHDMG] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was hurt!"), [STRINGID_ANTICIPATIONACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} shuddered!"), - [STRINGID_FOREWARNACTIVATES] = COMPOUND_STRING("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_NAME_WITH_PREFIX2} to {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), + [STRINGID_FOREWARNACTIVATES] = COMPOUND_STRING("{B_SCR_ABILITY} alerted {B_SCR_NAME_WITH_PREFIX2} to {B_EFF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), [STRINGID_ICEBODYHPGAIN] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} healed it a little bit!"), //don't think this message is displayed anymore [STRINGID_SNOWWARNINGHAIL] = COMPOUND_STRING("It started to hail!"), [STRINGID_FRISKACTIVATES] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX2} and found its {B_LAST_ITEM}!"), - [STRINGID_UNNERVEENTERS] = COMPOUND_STRING("{B_DEF_TEAM1} team is too nervous to eat Berries!"), + [STRINGID_UNNERVEENTERS] = COMPOUND_STRING("{B_EFF_TEAM1} team is too nervous to eat Berries!"), [STRINGID_HARVESTBERRY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} harvested its {B_LAST_ITEM}!"), [STRINGID_MAGICBOUNCEACTIVATES] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} bounced the {B_ATK_NAME_WITH_PREFIX2} back!"), [STRINGID_PROTEANTYPECHANGE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed it into the {B_BUFF1} type!"), [STRINGID_SYMBIOSISITEMPASS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} passed its {B_LAST_ITEM} to {B_EFF_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"), [STRINGID_STEALTHROCKDMG] = COMPOUND_STRING("Pointed stones dug into {B_SCR_NAME_WITH_PREFIX2}!"), - [STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_SCR_TEAM2} team!"), + [STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_EFF_TEAM2} team!"), [STRINGID_TOXICSPIKESPOISONED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was poisoned!"), [STRINGID_TOXICSPIKESBADLYPOISONED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was badly poisoned!"), [STRINGID_STICKYWEBSWITCHIN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was caught in a sticky web!"), [STRINGID_HEALINGWISHCAMETRUE] = COMPOUND_STRING("The healing wish came true for {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_HEALINGWISHHEALED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} regained health!"), [STRINGID_LUNARDANCECAMETRUE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became cloaked in mystical moonlight!"), - [STRINGID_CUSEDBODYDISABLED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"), + [STRINGID_CURSEDBODYDISABLED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"), [STRINGID_ATTACKERACQUIREDABILITY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} acquired {B_ATK_ABILITY}!"), - [STRINGID_TARGETABILITYSTATLOWER] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} lowered its {B_BUFF1}!"), + [STRINGID_TARGETABILITYSTATLOWER] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} {B_BUFF2}lowered its {B_BUFF1}!"), [STRINGID_TARGETSTATWONTGOHIGHER] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any higher!"), [STRINGID_PKMNMOVEBOUNCEDABILITY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was bounced back by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"), [STRINGID_IMPOSTERTRANSFORM] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} transformed into {B_DEF_NAME_WITH_PREFIX2} using {B_LAST_ABILITY}!"), @@ -683,13 +660,13 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_MISTYTERRAINPREVENTS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} surrounds itself with a protective mist!"), [STRINGID_GRASSYTERRAINHEALS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is healed by the grassy terrain!"), [STRINGID_ELECTRICTERRAINPREVENTS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} surrounds itself with electrified terrain!"), - [STRINGID_PSYCHICTERRAINPREVENTS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} surrounds itself with psychic terrain!"), + [STRINGID_PSYCHICTERRAINPREVENTS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is protected by the Psychic Terrain!"), [STRINGID_SAFETYGOGGLESPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is not affected thanks to its {B_LAST_ITEM}!"), [STRINGID_FLOWERVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} surrounded itself with a veil of petals!"), [STRINGID_SWEETVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} can't fall asleep due to a veil of sweetness!"), [STRINGID_AROMAVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is protected by an aromatic veil!"), [STRINGID_CELEBRATEMESSAGE] = COMPOUND_STRING("Congratulations, {B_PLAYER_NAME}!"), - [STRINGID_USEDINSTRUCTEDMOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} followed {B_BUFF1}'s instructions!"), + [STRINGID_USEDINSTRUCTEDMOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} followed {B_SCR_NAME_WITH_PREFIX2}'s instructions!"), [STRINGID_THROATCHOPENDS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} can use sound-based moves again!"), [STRINGID_PKMNCANTUSEMOVETHROATCHOP] = COMPOUND_STRING("The effects of Throat Chop prevent {B_ATK_NAME_WITH_PREFIX2} from using certain moves!\p"), [STRINGID_LASERFOCUS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} concentrated intensely!"), @@ -703,11 +680,11 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_ATTACKERCUREDTARGETSTATUS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} cured {B_DEF_NAME_WITH_PREFIX2}'s problem!"), [STRINGID_ATTACKERLOSTFIRETYPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} burned itself out!"), [STRINGID_HEALERCURE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} cured {B_SCR_NAME_WITH_PREFIX2}'s problem!"), - [STRINGID_SCRIPTINGABILITYSTATRAISE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"), - [STRINGID_RECEIVERABILITYTAKEOVER] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} was taken over!"), + [STRINGID_SCRIPTINGABILITYSTATRAISE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} {B_BUFF2}raised its {B_BUFF1}!"), + [STRINGID_RECEIVERABILITYTAKEOVER] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} was taken over!"), [STRINGID_PKNMABSORBINGPOWER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is absorbing power!"), [STRINGID_NOONEWILLBEABLETORUNAWAY] = COMPOUND_STRING("No one will be able to run away during the next turn!"), - [STRINGID_DESTINYKNOTACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"), + [STRINGID_DESTINYKNOTACTIVATES] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"), [STRINGID_CLOAKEDINAFREEZINGLIGHT] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became cloaked in a freezing light!"), [STRINGID_CLEARAMULETWONTLOWERSTATS] = COMPOUND_STRING("The effects of the {B_LAST_ITEM} held by {B_SCR_NAME_WITH_PREFIX2} prevents its stats from being lowered!"), [STRINGID_FERVENTWISHREACHED] = COMPOUND_STRING("{B_ATK_TRAINER_NAME}'s fervent wish has reached {B_ATK_NAME_WITH_PREFIX2}!"), @@ -719,10 +696,8 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_COMATOSEENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is drowsing!"), [STRINGID_SCREENCLEANERENTERS] = COMPOUND_STRING("All screens on the field were cleansed!"), [STRINGID_FETCHEDPOKEBALL] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} found a {B_LAST_ITEM}!"), - [STRINGID_BATTLERABILITYRAISEDSTAT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"), [STRINGID_ASANDSTORMKICKEDUP] = COMPOUND_STRING("A sandstorm kicked up!"), [STRINGID_PKMNSWILLPERISHIN3TURNS] = COMPOUND_STRING("Both PokΓ©mon will perish in three turns!"), //don't think this message is displayed anymore - [STRINGID_ABILITYRAISEDSTATDRASTICALLY] = COMPOUND_STRING("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1} drastically!"), [STRINGID_AURAFLAREDTOLIFE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!"), [STRINGID_ASONEENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} has two Abilities!"), [STRINGID_CURIOUSMEDICINEENTERS] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s stat changes were removed!"), @@ -735,9 +710,9 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_PKMNBURNHEALED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s burn was cured!"), [STRINGID_REDCARDACTIVATE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} held up its Red Card against {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_EJECTBUTTONACTIVATE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is switched out with the {B_LAST_ITEM}!"), - [STRINGID_ATKGOTOVERINFATUATION] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} got over its infatuation!"), - [STRINGID_TORMENTEDNOMORE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is no longer tormented!"), - [STRINGID_HEALBLOCKEDNOMORE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is cured of its heal block!"), + [STRINGID_ATKGOTOVERINFATUATION] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} got over its infatuation!"), + [STRINGID_TORMENTEDNOMORE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is no longer tormented!"), + [STRINGID_HEALBLOCKEDNOMORE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is cured of its heal block!"), [STRINGID_ATTACKERBECAMEFULLYCHARGED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became fully charged due to its bond with its trainer!\p"), [STRINGID_ATTACKERBECAMEASHSPECIES] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became Ash-Greninja!\p"), [STRINGID_EXTREMELYHARSHSUNLIGHT] = COMPOUND_STRING("The sunlight turned extremely harsh!"), @@ -759,7 +734,6 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_BROKETHROUGHPROTECTION] = COMPOUND_STRING("It broke through {B_DEF_NAME_WITH_PREFIX2}'s protection!"), [STRINGID_ABILITYALLOWSONLYMOVE] = COMPOUND_STRING("{B_ATK_ABILITY} only allows the use of {B_CURRENT_MOVE}!\p"), [STRINGID_SWAPPEDABILITIES] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} swapped Abilities with its target!"), - [STRINGID_PASTELVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is protected by a pastel veil!"), [STRINGID_PASTELVEILENTERS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was cured of its poisoning!"), [STRINGID_BATTLERTYPECHANGEDTO] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s type changed to {B_BUFF1}!"), [STRINGID_BOTHCANNOLONGERESCAPE] = COMPOUND_STRING("Neither PokΓ©mon can run away!"), @@ -775,8 +749,6 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_METEORBEAMCHARGING] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is overflowing with space power!"), [STRINGID_HEATUPBEAK] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} started heating up its beak!"), [STRINGID_COURTCHANGE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} swapped the battle effects affecting each side of the field!"), - [STRINGID_PLAYERLOSTTOENEMYTRAINER] = COMPOUND_STRING("You have no more PokΓ©mon that can fight!\pYou lost to {B_TRAINER1_NAME_WITH_CLASS}!{PAUSE_UNTIL_PRESS}"), - [STRINGID_PLAYERPAIDPRIZEMONEY] = COMPOUND_STRING("You gave Β₯{B_BUFF1} to the winner…\pYou were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"), [STRINGID_ZPOWERSURROUNDS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} surrounded itself with its Z-Power!"), [STRINGID_ZMOVEUNLEASHED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} unleashes its full-force Z-Move!"), [STRINGID_ZMOVERESETSSTATS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} returned its decreased stats to normal using its Z-Power!"), @@ -797,9 +769,9 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_SUNLIGHTACTIVATEDABILITY] = COMPOUND_STRING("The harsh sunlight activated {B_SCR_NAME_WITH_PREFIX2}'s Protosynthesis!"), [STRINGID_STATWASHEIGHTENED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!"), [STRINGID_ELECTRICTERRAINACTIVATEDABILITY] = COMPOUND_STRING("The Electric Terrain activated {B_SCR_NAME_WITH_PREFIX2}'s Quark Drive!"), - [STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} weakened the {B_BUFF1} of all surrounding PokΓ©mon!\p"), + [STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} weakened the {B_BUFF1} of all surrounding PokΓ©mon!\p"), [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} gained strength from the fallen!"), - [STRINGID_PKMNSABILITYPREVENTSABILITY] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"), //not in gen 5+, ability popup + [STRINGID_PKMNSABILITYPREVENTSABILITY] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"), //not in gen 5+, ability popup [STRINGID_PREPARESHELLTRAP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"), [STRINGID_SHELLTRAPDIDNTWORK] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"), [STRINGID_SPIKESDISAPPEAREDFROMTEAM] = COMPOUND_STRING("The spikes disappeared from the ground around {B_ATK_TEAM2} team!"), @@ -831,7 +803,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_TEAMGAINEDEXP] = COMPOUND_STRING("The rest of your team gained Exp. Points thanks to the Exp. Share!\p"), [STRINGID_CURRENTMOVECANTSELECT] = COMPOUND_STRING("{B_BUFF1} cannot be used!\p"), [STRINGID_TARGETISBEINGSALTCURED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is being salt cured!"), - [STRINGID_TARGETISHURTBYSALTCURE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"), + [STRINGID_TARGETISHURTBYSALTCURE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"), [STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} got covered in sticky candy syrup!"), [STRINGID_SHARPSTEELFLOATS] = COMPOUND_STRING("Sharp-pointed pieces of steel started floating around {B_DEF_TEAM2} PokΓ©mon!"), [STRINGID_SHARPSTEELDMG] = COMPOUND_STRING("The sharp steel bit into {B_DEF_NAME_WITH_PREFIX2}!"), @@ -857,7 +829,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_SWAMPENVELOPEDSIDE] = COMPOUND_STRING("A swamp enveloped {B_DEF_TEAM2} team!"), [STRINGID_THESWAMPDISAPPEARED] = COMPOUND_STRING("The swamp around {B_ATK_TEAM2} team disappeared!"), [STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is preparing to tell a chillingly bad joke!"), - [STRINGID_HOSPITALITYRESTORATION] = COMPOUND_STRING("{B_ATK_PARTNER_NAME} drank down all the matcha that {B_ATK_NAME_WITH_PREFIX2} made!"), + [STRINGID_HOSPITALITYRESTORATION] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} drank down all the matcha that {B_SCR_NAME_WITH_PREFIX2} made!"), [STRINGID_ELECTROSHOTCHARGING] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} absorbed electricity!"), [STRINGID_ITEMWASUSEDUP] = COMPOUND_STRING("The {B_LAST_ITEM} was used up…"), [STRINGID_ATTACKERLOSTITSTYPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} lost its {B_BUFF1} type!"), @@ -869,7 +841,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_BIZARREAREACREATED] = COMPOUND_STRING("A bizarre area was created in which Defense and Sp. Def stats are swapped!"), [STRINGID_TIDYINGUPCOMPLETE] = COMPOUND_STRING("Tidying up complete!"), [STRINGID_PKMNTERASTALLIZEDINTO] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} terastallized into the {B_BUFF1} type!"), - [STRINGID_BOOSTERENERGYACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} used its {B_LAST_ITEM} to activate {B_SCR_ACTIVE_ABILITY}!"), + [STRINGID_BOOSTERENERGYACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} used its {B_LAST_ITEM} to activate {B_SCR_ABILITY}!"), [STRINGID_FOGCREPTUP] = COMPOUND_STRING("Fog crept up as thick as soup!"), [STRINGID_FOGISDEEP] = COMPOUND_STRING("The fog is deep…"), [STRINGID_FOGLIFTED] = COMPOUND_STRING("The fog lifted."), @@ -898,9 +870,9 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] = [STRINGID_TIMETODYNAMAX] = COMPOUND_STRING("Time to Dynamax!"), [STRINGID_TIMETOGIGANTAMAX] = COMPOUND_STRING("Time to Gigantamax!"), [STRINGID_QUESTIONFORFEITBATTLE] = COMPOUND_STRING("Would you like to give up on this battle and quit now? Quitting the battle is the same as losing the battle."), - [STRINGID_FORFEITBATTLEGAVEMONEY] = COMPOUND_STRING("You gave Β₯{B_BUFF1} to the winner…{PAUSE_UNTIL_PRESS}"), [STRINGID_POWERCONSTRUCTPRESENCEOFMANY] = COMPOUND_STRING("You sense the presence of many!"), [STRINGID_POWERCONSTRUCTTRANSFORM] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} transformed into its Complete Forme!"), + [STRINGID_ABILITYSHIELDPROTECTS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s Ability is protected by the effects of its {B_LAST_ITEM}!"), }; const u16 gTrainerUsedItemStringIds[] = @@ -1098,24 +1070,12 @@ const u16 gUproarOverTurnStringIds[] = [B_MSG_UPROAR_ENDS] = STRINGID_PKMNCALMEDDOWN }; -const u16 gStockpileUsedStringIds[] = -{ - [B_MSG_STOCKPILED] = STRINGID_PKMNSTOCKPILED, - [B_MSG_CANT_STOCKPILE] = STRINGID_PKMNCANTSTOCKPILE, -}; - const u16 gWokeUpStringIds[] = { [B_MSG_WOKE_UP] = STRINGID_PKMNWOKEUP, [B_MSG_WOKE_UP_UPROAR] = STRINGID_PKMNWOKEUPINUPROAR }; -const u16 gSwallowFailStringIds[] = -{ - [B_MSG_SWALLOW_FAILED] = STRINGID_FAILEDTOSWALLOW, - [B_MSG_SWALLOW_FULL_HP] = STRINGID_PKMNHPFULL -}; - const u16 gUproarAwakeStringIds[] = { [B_MSG_CANT_SLEEP_UPROAR] = STRINGID_PKMNCANTSLEEPINUPROAR2, @@ -1124,20 +1084,21 @@ const u16 gUproarAwakeStringIds[] = const u16 gStatUpStringIds[] = { - [B_MSG_ATTACKER_STAT_ROSE] = STRINGID_ATTACKERSSTATROSE, - [B_MSG_DEFENDER_STAT_ROSE] = STRINGID_DEFENDERSSTATROSE, - [B_MSG_STAT_WONT_INCREASE] = STRINGID_STATSWONTINCREASE, - [B_MSG_STAT_ROSE_EMPTY] = STRINGID_EMPTYSTRING3, - [B_MSG_STAT_ROSE_ITEM] = STRINGID_USINGITEMSTATOFPKMNROSE, - [B_MSG_USED_DIRE_HIT] = STRINGID_PKMNUSEDXTOGETPUMPED, + [B_MSG_ATTACKER_STAT_CHANGED] = STRINGID_ATTACKERSSTATROSE, + [B_MSG_DEFENDER_STAT_CHANGED] = STRINGID_DEFENDERSSTATROSE, + [B_MSG_STAT_WONT_CHANGE] = STRINGID_STATSWONTINCREASE, + [B_MSG_STAT_CHANGE_EMPTY] = STRINGID_EMPTYSTRING3, + [B_MSG_STAT_CHANGED_ITEM] = STRINGID_USINGITEMSTATOFPKMNROSE, + [B_MSG_USED_DIRE_HIT] = STRINGID_PKMNUSEDXTOGETPUMPED, }; const u16 gStatDownStringIds[] = { - [B_MSG_ATTACKER_STAT_FELL] = STRINGID_ATTACKERSSTATFELL, - [B_MSG_DEFENDER_STAT_FELL] = STRINGID_DEFENDERSSTATFELL, - [B_MSG_STAT_WONT_DECREASE] = STRINGID_STATSWONTDECREASE, - [B_MSG_STAT_FELL_EMPTY] = STRINGID_EMPTYSTRING3, + [B_MSG_ATTACKER_STAT_CHANGED] = STRINGID_ATTACKERSSTATFELL, + [B_MSG_DEFENDER_STAT_CHANGED] = STRINGID_DEFENDERSSTATFELL, + [B_MSG_STAT_WONT_CHANGE] = STRINGID_STATSWONTDECREASE, + [B_MSG_STAT_CHANGE_EMPTY] = STRINGID_EMPTYSTRING3, + [B_MSG_STAT_CHANGED_ITEM] = STRINGID_USINGITEMSTATOFPKMNFELL, }; // Index copied from move's index in sTrappingMoves @@ -1205,7 +1166,8 @@ const u16 gGotBurnedStringIds[] = const u16 gGotFrostbiteStringIds[] = { - [B_MSG_STATUSED] = STRINGID_PKMNGOTFROSTBITE + [B_MSG_STATUSED] = STRINGID_PKMNGOTFROSTBITE, + [B_MSG_STATUSED_BY_ABILITY] = STRINGID_PKMNGOTFROSTBITE, }; const u16 gFrostbiteHealedStringIds[] = @@ -1330,22 +1292,18 @@ const u16 gSafariPokeblockResultStringIds[] = [B_MSG_MON_IGNORED] = STRINGID_PKMNIGNOREDX }; -const u16 gBerryEffectStringIds[] = +const u16 CureStatusBerryEffectStringID[] = { + [B_MSG_CURED_PARALYSIS] = STRINGID_PKMNSITEMCUREDPARALYSIS, + [B_MSG_CURED_POISON] = STRINGID_PKMNSITEMCUREDPOISON, + [B_MSG_CURED_BURN] = STRINGID_PKMNSITEMHEALEDBURN, + [B_MSG_CURED_FREEEZE] = STRINGID_PKMNSITEMDEFROSTEDIT, + [B_MSG_CURED_FROSTBITE] = STRINGID_PKMNSITEMHEALEDFROSTBITE, + [B_MSG_CURED_SLEEP] = STRINGID_PKMNSITEMWOKEIT, [B_MSG_CURED_PROBLEM] = STRINGID_PKMNSITEMCUREDPROBLEM, [B_MSG_NORMALIZED_STATUS] = STRINGID_PKMNSITEMNORMALIZEDSTATUS }; -const u16 gStatusPreventionStringIds[] = -{ - [B_MSG_ABILITY_PREVENTS_MOVE_BURN] = STRINGID_PKMNSXPREVENTSBURNS, - [B_MSG_ABILITY_PREVENTS_MOVE_PARALYSIS] = STRINGID_PKMNPREVENTSPARALYSISWITH, - [B_MSG_ABILITY_PREVENTS_MOVE_POISON] = STRINGID_PKMNPREVENTSPOISONINGWITH, - [B_MSG_ABILITY_PREVENTS_ABILITY_STATUS] = STRINGID_PKMNSXPREVENTSYSZ, - [B_MSG_STATUS_HAD_NO_EFFECT] = STRINGID_PKMNSXHADNOEFFECTONY, - [B_MSG_ABILITY_PASTEL_VEIL] = STRINGID_PASTELVEILPROTECTED -}; - const u16 gItemSwapStringIds[] = { [B_MSG_ITEM_SWAP_TAKEN] = STRINGID_PKMNOBTAINEDX, @@ -1381,11 +1339,6 @@ const u16 gStatusConditionsStringIds[] = STRINGID_PKMNWASPOISONED, STRINGID_PKMNBADLYPOISONED, STRINGID_PKMNWASBURNED, STRINGID_PKMNWASPARALYZED, STRINGID_PKMNFELLASLEEP, STRINGID_PKMNGOTFROSTBITE }; -const u16 gStatus2StringIds[] = -{ - STRINGID_PKMNWASCONFUSED, STRINGID_PKMNFELLINLOVE, STRINGID_TARGETCANTESCAPENOW, STRINGID_PKMNSUBJECTEDTOTORMENT -}; - const u16 gDamageNonTypesStartStringIds[] = { [B_MSG_TRAPPED_WITH_VINES] = STRINGID_TEAMTRAPPEDWITHVINES, @@ -1402,6 +1355,24 @@ const u16 gDamageNonTypesDmgStringIds[] = [B_MSG_HURT_BY_ROCKS_THROWN] = STRINGID_PKMNHURTBYROCKSTHROWN, }; +const u16 gDefogHazardsStringIds[] = +{ + [HAZARDS_SPIKES] = STRINGID_SPIKESDISAPPEAREDFROMTEAM, + [HAZARDS_STICKY_WEB] = STRINGID_STICKYWEBDISAPPEAREDFROMTEAM, + [HAZARDS_TOXIC_SPIKES] = STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM, + [HAZARDS_STEALTH_ROCK] = STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM, + [HAZARDS_STEELSURGE] = STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM, +}; + +const u16 gSpinHazardsStringIds[] = +{ + [HAZARDS_SPIKES] = STRINGID_PKMNBLEWAWAYSPIKES, + [HAZARDS_STICKY_WEB] = STRINGID_PKMNBLEWAWAYSTICKYWEB, + [HAZARDS_TOXIC_SPIKES] = STRINGID_PKMNBLEWAWAYTOXICSPIKES, + [HAZARDS_STEALTH_ROCK] = STRINGID_PKMNBLEWAWAYSTEALTHROCK, + [HAZARDS_STEELSURGE] = STRINGID_PKMNBLEWAWAYSHARPSTEEL, +}; + const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p"); const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p"); @@ -1472,6 +1443,8 @@ static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_NAME_WITH_CLASS} se static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_NAME_WITH_CLASS} sent out {B_BUFF1}!"); static const u8 sText_TwoTrainersWantToBattle[] = _("You are challenged by {B_TRAINER1_NAME_WITH_CLASS} and {B_TRAINER2_NAME_WITH_CLASS}!\p"); static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_NAME_WITH_CLASS} sent out {B_PLAYER_MON2_NAME}! Go, {B_PLAYER_MON1_NAME}!"); +static const u8 sText_InGamePartnerSentOutPkmn2[] = _("{B_PARTNER_NAME_WITH_CLASS} sent out {B_PLAYER_MON2_NAME}!"); +static const u8 sText_InGamePartnerWithdrewPkmn2[] = _("{B_PARTNER_NAME_WITH_CLASS} withdrew {B_PLAYER_MON2_NAME}!"); const u16 gBattlePalaceFlavorTextTable[] = { @@ -2094,9 +2067,31 @@ void BufferStringBattle(enum StringID stringID, u32 battler) else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - stringPtr = sText_TwoLinkTrainersWantToBattlePause; + { + if (TESTING && gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + stringPtr = sText_Trainer1WantsToBattle; + else + stringPtr = sText_TwoTrainersWantToBattle; + } + else if (TESTING && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + { + stringPtr = sText_TwoTrainersWantToBattle; + } + else if (!(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + { + stringPtr = sText_LinkTrainerWantsToBattlePause; + } + else + { + stringPtr = sText_TwoLinkTrainersWantToBattlePause; + } + } else + { stringPtr = sText_TwoLinkTrainersWantToBattle; + } } else { @@ -2182,7 +2177,9 @@ void BufferStringBattle(enum StringID stringID, u32 battler) case STRINGID_RETURNMON: // sending poke to ball msg if (IsOnPlayerSide(battler)) { - if (*(&gBattleStruct->hpScale) == 0) + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT) + stringPtr = sText_InGamePartnerWithdrewPkmn2; + else if (*(&gBattleStruct->hpScale) == 0) stringPtr = sText_PkmnThatsEnough; else if (*(&gBattleStruct->hpScale) == 1 || IsDoubleBattle()) stringPtr = sText_PkmnComeBack; @@ -2202,14 +2199,27 @@ void BufferStringBattle(enum StringID stringID, u32 battler) } else { - stringPtr = sText_Trainer1WithdrewPkmn; + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + { + if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT) + stringPtr = sText_Trainer1WithdrewPkmn; + else + stringPtr = sText_Trainer2WithdrewPkmn; + + } + else + { + stringPtr = sText_Trainer1WithdrewPkmn; + } } } break; case STRINGID_SWITCHINMON: // switch-in msg if (IsOnPlayerSide(gBattleScripting.battler)) { - if (*(&gBattleStruct->hpScale) == 0 || IsDoubleBattle()) + if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) && (GetBattlerAtPosition(gBattleScripting.battler) == 2)) + stringPtr = sText_InGamePartnerSentOutPkmn2; + else if (*(&gBattleStruct->hpScale) == 0 || IsDoubleBattle()) stringPtr = sText_GoPkmn2; else if (*(&gBattleStruct->hpScale) == 1) stringPtr = sText_DoItPkmn; @@ -2231,12 +2241,39 @@ void BufferStringBattle(enum StringID stringID, u32 battler) } else { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + if (TESTING && gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (gBattleScripting.battler == 1) + { + stringPtr = sText_Trainer1SentOutPkmn; + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + stringPtr = sText_Trainer2SentOutPkmn; + else + stringPtr = sText_Trainer1SentOutPkmn2; + } + } + else if (TESTING && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + { + if (gBattleScripting.battler == 1) + stringPtr = sText_Trainer1SentOutPkmn; + else + stringPtr = sText_Trainer2SentOutPkmn; + } + else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { stringPtr = sText_LinkTrainerMultiSentOutPkmn; + } else if (TRAINER_BATTLE_PARAM.opponentA == TRAINER_UNION_ROOM) + { stringPtr = sText_Trainer1SentOutPkmn2; + } else + { stringPtr = sText_LinkTrainerSentOutPkmn2; + } } } else @@ -3110,14 +3147,14 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) else toCpy = sText_Opposing2; break; - case B_TXT_SCR_TEAM1: - if (IsOnPlayerSide(gBattleScripting.battler)) + case B_TXT_EFF_TEAM1: + if (IsOnPlayerSide(gEffectBattler)) toCpy = sText_Your1; else toCpy = sText_Opposing1; break; - case B_TXT_SCR_TEAM2: - if (IsOnPlayerSide(gBattleScripting.battler)) + case B_TXT_EFF_TEAM2: + if (IsOnPlayerSide(gEffectBattler)) toCpy = sText_Your2; else toCpy = sText_Opposing2; @@ -3187,7 +3224,7 @@ static void IllusionNickHack(u32 battler, u32 partyId, u8 *dst) else partnerMon = mon; - id = GetIllusionMonPartyId(gEnemyParty, mon, partnerMon); + id = GetIllusionMonPartyId(gEnemyParty, mon, partnerMon, battler); } if (id != PARTY_SIZE) diff --git a/src/battle_pike.c b/src/battle_pike.c index f1857b5d8242..199a5eea5036 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -811,7 +811,7 @@ static void HealMon(struct Pokemon *mon) static bool8 DoesAbilityPreventStatus(struct Pokemon *mon, u32 status) { - u16 ability = GetMonAbility(mon); + enum Ability ability = GetMonAbility(mon); bool8 ret = FALSE; if (ability == ABILITY_COMATOSE) @@ -851,22 +851,22 @@ static bool8 DoesTypePreventStatus(u16 species, u32 status) switch (status) { case STATUS1_TOXIC_POISON: - if (gSpeciesInfo[species].types[0] == TYPE_STEEL || gSpeciesInfo[species].types[0] == TYPE_POISON - || gSpeciesInfo[species].types[1] == TYPE_STEEL || gSpeciesInfo[species].types[1] == TYPE_POISON) + if (GetSpeciesType(species, 0) == TYPE_STEEL || GetSpeciesType(species, 0) == TYPE_POISON + || GetSpeciesType(species, 1) == TYPE_STEEL || GetSpeciesType(species, 1) == TYPE_POISON) ret = TRUE; break; case STATUS1_FREEZE: case STATUS1_FROSTBITE: - if (gSpeciesInfo[species].types[0] == TYPE_ICE || gSpeciesInfo[species].types[1] == TYPE_ICE) + if (GetSpeciesType(species, 0) == TYPE_ICE || GetSpeciesType(species, 1) == TYPE_ICE) ret = TRUE; break; case STATUS1_PARALYSIS: - if (gSpeciesInfo[species].types[0] == TYPE_GROUND || gSpeciesInfo[species].types[1] == TYPE_GROUND - || (B_PARALYZE_ELECTRIC >= GEN_6 && (gSpeciesInfo[species].types[0] == TYPE_ELECTRIC || gSpeciesInfo[species].types[1] == TYPE_ELECTRIC))) + if (GetSpeciesType(species, 0) == TYPE_GROUND || GetSpeciesType(species, 1) == TYPE_GROUND + || (GetConfig(CONFIG_PARALYZE_ELECTRIC) >= GEN_6 && (GetSpeciesType(species, 0) == TYPE_ELECTRIC || GetSpeciesType(species, 1) == TYPE_ELECTRIC))) ret = TRUE; break; case STATUS1_BURN: - if (gSpeciesInfo[species].types[0] == TYPE_FIRE || gSpeciesInfo[species].types[1] == TYPE_FIRE) + if (GetSpeciesType(species, 0) == TYPE_FIRE || GetSpeciesType(species, 1) == TYPE_FIRE) ret = TRUE; break; case STATUS1_SLEEP: @@ -1141,7 +1141,7 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate) MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[wildMons[headerId][pikeMonId].species].growthRate][monLevel]); - if (gSpeciesInfo[wildMons[headerId][pikeMonId].species].abilities[1]) + if (GetSpeciesAbility(wildMons[headerId][pikeMonId].species, 1)) abilityNum = Random() % 2; else abilityNum = 0; @@ -1587,7 +1587,7 @@ static void SaveMonHeldItems(void) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - int heldItem = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], + int heldItem = GetMonData(GetSavedPlayerPartyMon(gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1), MON_DATA_HELD_ITEM); gSaveBlock2Ptr->frontier.pikeHeldItemsBackup[i] = heldItem; } @@ -1623,7 +1623,7 @@ static bool8 CanEncounterWildMon(u8 enemyMonLevel) { if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)) { - u16 monAbility = GetMonAbility(&gPlayerParty[0]); + enum Ability monAbility = GetMonAbility(&gPlayerParty[0]); if (monAbility == ABILITY_KEEN_EYE || monAbility == ABILITY_INTIMIDATE) { u8 playerMonLevel = GetMonData(&gPlayerParty[0], MON_DATA_LEVEL); diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 6e56f4867b90..a93e3a7b8e27 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -81,7 +81,7 @@ static void HidePyramidItem(void); static void SetPyramidFacilityTrainers(void); static void ShowPostBattleHintText(void); static void UpdatePyramidWinStreak(void); -static void GetInBattlePyramid(void); +static void GetCurrentBattlePyramidLocation(void); static void UpdatePyramidLightRadius(void); static void ClearPyramidPartyHeldItems(void); static void SetPyramidFloorPalette(void); @@ -805,7 +805,7 @@ static void (*const sBattlePyramidFunctions[])(void) = [BATTLE_PYRAMID_FUNC_SET_TRAINERS] = SetPyramidFacilityTrainers, [BATTLE_PYRAMID_FUNC_SHOW_HINT_TEXT] = ShowPostBattleHintText, [BATTLE_PYRAMID_FUNC_UPDATE_STREAK] = UpdatePyramidWinStreak, - [BATTLE_PYRAMID_FUNC_IS_IN] = GetInBattlePyramid, + [BATTLE_PYRAMID_FUNC_CURRENT_LOCATION] = GetCurrentBattlePyramidLocation, [BATTLE_PYRAMID_FUNC_UPDATE_LIGHT] = UpdatePyramidLightRadius, [BATTLE_PYRAMID_FUNC_CLEAR_HELD_ITEMS] = ClearPyramidPartyHeldItems, [BATTLE_PYRAMID_FUNC_SET_FLOOR_PALETTE] = SetPyramidFloorPalette, @@ -1127,9 +1127,9 @@ static void UpdatePyramidWinStreak(void) gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; } -static void GetInBattlePyramid(void) +static void GetCurrentBattlePyramidLocation(void) { - gSpecialVar_Result = InBattlePyramid(); + gSpecialVar_Result = CurrentBattlePyramidLocation(); } static void UpdatePyramidLightRadius(void) @@ -1221,19 +1221,19 @@ static void RestorePyramidPlayerParty(void) int partyIndex = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; for (j = 0; j < FRONTIER_PARTY_SIZE; j++) { - if (GetMonData(&gSaveBlock1Ptr->playerParty[partyIndex], MON_DATA_SPECIES, NULL) == GetMonData(&gPlayerParty[j], MON_DATA_SPECIES, NULL)) + if (GetMonData(GetSavedPlayerPartyMon(partyIndex), MON_DATA_SPECIES, NULL) == GetMonData(&gPlayerParty[j], MON_DATA_SPECIES, NULL)) { for (k = 0; k < MAX_MON_MOVES; k++) { for (l = 0; l < MAX_MON_MOVES; l++) { - if (GetMonData(&gSaveBlock1Ptr->playerParty[partyIndex], MON_DATA_MOVE1 + l, NULL) == GetMonData(&gPlayerParty[j], MON_DATA_MOVE1 + k, NULL)) + if (GetMonData(GetSavedPlayerPartyMon(partyIndex), MON_DATA_MOVE1 + l, NULL) == GetMonData(&gPlayerParty[j], MON_DATA_MOVE1 + k, NULL)) break; } if (l == MAX_MON_MOVES) SetMonMoveSlot(&gPlayerParty[j], MOVE_SKETCH, k); } - gSaveBlock1Ptr->playerParty[partyIndex] = gPlayerParty[j]; + SavePlayerPartyMon(partyIndex, &gPlayerParty[j]); gSelectedOrderFromParty[j] = partyIndex + 1; break; } @@ -1426,7 +1426,7 @@ void GenerateBattlePyramidWildMon(void) continue; // check type - if (reqs->type != TYPE_MYSTERY && gSpeciesInfo[species].types[0] != reqs->type && gSpeciesInfo[species].types[1] != reqs->type) + if (reqs->type != TYPE_MYSTERY && GetSpeciesType(species, 0) != reqs->type && GetSpeciesType(species, 1) != reqs->type) continue; // check base stat total @@ -1459,7 +1459,7 @@ void GenerateBattlePyramidWildMon(void) { for (j = 0; j < NUM_ABILITY_SLOTS; j++) { - if (gSpeciesInfo[species].abilities[j] == reqs->abilities[i]) + if (GetSpeciesAbility(species, j) == reqs->abilities[i]) { abilities[abilityCount] = reqs->abilities[i]; abilityCount++; @@ -1520,7 +1520,7 @@ void GenerateBattlePyramidWildMon(void) } // Initialize a random ability num - if (gSpeciesInfo[species].abilities[1]) + if (GetSpeciesAbility(species, 1)) { i = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL) % 2; SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &i); @@ -1540,7 +1540,7 @@ void GenerateBattlePyramidWildMon(void) id = abilities[Random() % abilityCount]; for (j = 0; j < NUM_ABILITY_SLOTS; j++) { - if (id == gSpeciesInfo[species].abilities[j]) + if (id == GetSpeciesAbility(species, j)) { // Set this ability num SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &id); @@ -1606,7 +1606,7 @@ void GenerateBattlePyramidWildMon(void) break; case ABILITY_RANDOM: default: - if (gSpeciesInfo[wildMons[id].species].abilities[1]) + if (GetSpeciesAbility(wildMons[id].species, 1)) { i = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL) % 2; SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &i); @@ -1643,14 +1643,14 @@ u8 GetPyramidRunMultiplier(void) return sPyramidFloorTemplates[id].runMultiplier; } -u8 InBattlePyramid(void) +u8 CurrentBattlePyramidLocation(void) { if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR) - return 1; + return PYRAMID_LOCATION_FLOOR; else if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP) - return 2; + return PYRAMID_LOCATION_TOP; else - return FALSE; + return PYRAMID_LOCATION_NONE; } bool8 InBattlePyramid_(void) @@ -1661,7 +1661,7 @@ bool8 InBattlePyramid_(void) void PausePyramidChallenge(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { RestorePyramidPlayerParty(); gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED; @@ -1672,7 +1672,7 @@ void PausePyramidChallenge(void) void SoftResetInBattlePyramid(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) DoSoftReset(); } @@ -1781,6 +1781,7 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % PYRAMID_FLOOR_SQUARES_WIDE)) + x; gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / PYRAMID_FLOOR_SQUARES_WIDE)) + y; } + // Copy the elevation and collision, but overwrite the metatile ID map[x] = (layoutMap[x] & (MAPGRID_ELEVATION_MASK | MAPGRID_COLLISION_MASK)) | METATILE_BattlePyramid_Floor; } else diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 9cc8a05aa6bb..cd74e6c40b4c 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -16,7 +16,6 @@ #include "item_use.h" #include "list_menu.h" #include "mail.h" -#include "main.h" #include "malloc.h" #include "menu.h" #include "menu_helpers.h" @@ -414,7 +413,7 @@ void CB2_ReturnToPyramidBagMenu(void) GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PREV, gPyramidBagMenuState.exitCallback); } -void GoToBattlePyramidBagMenu(u8 location, void (*exitCallback)(void)) +void GoToBattlePyramidBagMenu(u8 location, MainCallback exitCallback) { gPyramidBagMenu = AllocZeroed(sizeof(*gPyramidBagMenu)); @@ -573,7 +572,7 @@ static bool8 LoadPyramidBagGfx(void) case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - LZDecompressWram(gBattlePyramidBagTilemap, gPyramidBagMenu->tilemapBuffer); + DecompressDataWithHeaderWram(gBattlePyramidBagTilemap, gPyramidBagMenu->tilemapBuffer); gPyramidBagMenu->state++; } break; @@ -1526,7 +1525,7 @@ static void CreatePyramidBagYesNo(u8 taskId, const struct YesNoFuncTable *yesNoT CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_MenuActions[MENU_WIN_YESNO], 1, 0, 2, 1, 0xE, yesNoTable); } -void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback)(u8 taskId)) +void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, TaskFunc callback) { FillWindowPixelBuffer(WIN_MSG, PIXEL_FILL(1)); DisplayMessageAndContinueTask(taskId, WIN_MSG, 0xA, 0xD, FONT_NORMAL, GetPlayerTextSpeedDelay(), str, callback); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 41b473c5af1a..9dbbbe914d57 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1,10 +1,12 @@ #include "global.h" #include "battle.h" +#include "battle_hold_effects.h" #include "battle_message.h" #include "battle_anim.h" #include "battle_ai_main.h" #include "battle_ai_util.h" #include "battle_scripts.h" +#include "battle_environment.h" #include "battle_z_move.h" #include "item.h" #include "util.h" @@ -52,20 +54,23 @@ #include "constants/battle_move_effects.h" #include "constants/battle_string_ids.h" #include "constants/battle_partner.h" -#include "constants/hold_effects.h" #include "constants/items.h" #include "constants/item_effects.h" -#include "constants/map_types.h" #include "constants/moves.h" #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainer_slide.h" #include "constants/trainers.h" +#include "test/battle.h" #include "battle_util.h" #include "constants/pokemon.h" #include "config/battle.h" #include "data/battle_move_effects.h" +#include "test/battle.h" +#include "follower_npc.h" +#include "load_save.h" +#include "test/test_runner_battle.h" // table to avoid ugly powing on gba (courtesy of doesnt) // this returns (i^2.5)/4 @@ -285,20 +290,6 @@ static const s32 sExperienceScalingFactors[] = 159767, }; -static const u16 sTrappingMoves[NUM_TRAPPING_MOVES] = -{ - MOVE_BIND, - MOVE_WRAP, - MOVE_FIRE_SPIN, - MOVE_CLAMP, - MOVE_WHIRLPOOL, - MOVE_SAND_TOMB, - MOVE_MAGMA_STORM, - MOVE_INFESTATION, - MOVE_SNAP_TRAP, - MOVE_THUNDER_CAGE -}; - static const u16 sWhiteOutBadgeMoney[9] = { 8, 16, 24, 36, 48, 64, 80, 100, 120 }; enum GiveCaughtMonStates @@ -319,8 +310,7 @@ enum GiveCaughtMonStates #define TAG_LVLUP_BANNER_MON_ICON 55130 -static void TrySetDestinyBondToHappen(void); -static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr); +static u32 ChangeStatBuffs(u32 battler, s8 statValue, enum Stat statId, union StatChangeFlags flags, u32 stats, const u8 *BS_ptr); static bool32 IsMonGettingExpSentOut(void); static void InitLevelUpBanner(void); static bool8 SlideInLevelUpBanner(void); @@ -332,24 +322,27 @@ static void DrawLevelUpBannerText(void); static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite); static bool32 CriticalCapture(u32 odds); static void BestowItem(u32 battlerAtk, u32 battlerDef); -static bool8 IsFinalStrikeEffect(enum BattleMoveEffects moveEffect); +static bool32 IsFinalStrikeEffect(enum MoveEffect moveEffect); static void TryUpdateRoundTurnOrder(void); static bool32 ChangeOrderTargetAfterAttacker(void); static bool32 SetTargetToNextPursuiter(u32 battlerDef); void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler); static void RemoveAllWeather(void); static void RemoveAllTerrains(void); -static bool32 CanAbilityPreventStatLoss(u32 abilityDef); +static bool32 CanAbilityPreventStatLoss(enum Ability abilityDef); static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent); static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16 usedMove); static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move); static void ResetValuesForCalledMove(void); -static void TryRestoreDamageAfterCheekPouch(u32 battler); +static bool32 TrySymbiosis(u32 battler, u32 itemId, bool32 moveEnd); +static bool32 CanAbilityShieldActivateForBattler(u32 battler); +static void TryClearChargeVolatile(u32 moveType); +static bool32 IsAnyTargetAffected(void); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); -static void Cmd_attackstring(void); -static void Cmd_ppreduce(void); +static void Cmd_printattackstring(void); +static void Cmd_unused_0x3(void); static void Cmd_critcalc(void); static void Cmd_damagecalc(void); static void Cmd_typecalc(void); @@ -370,16 +363,16 @@ static void Cmd_printselectionstringfromtable(void); static void Cmd_setadditionaleffects(void); static void Cmd_seteffectprimary(void); static void Cmd_seteffectsecondary(void); -static void Cmd_clearstatusfromeffect(void); +static void Cmd_clearvolatile(void); static void Cmd_tryfaintmon(void); static void Cmd_dofaintanimation(void); static void Cmd_cleareffectsonfaint(void); static void Cmd_jumpifstatus(void); -static void Cmd_jumpifstatus2(void); +static void Cmd_jumpifvolatile(void); static void Cmd_jumpifability(void); static void Cmd_jumpifsideaffecting(void); static void Cmd_jumpifstat(void); -static void Cmd_jumpifstatus3condition(void); +static void Cmd_jumpifstatignorecontrary(void); static void Cmd_jumpbasedontype(void); static void Cmd_getexp(void); static void Cmd_checkteamslost(void); @@ -405,20 +398,20 @@ static void Cmd_bichalfword(void); static void Cmd_bicword(void); static void Cmd_pause(void); static void Cmd_waitstate(void); -static void Cmd_absorb(void); +static void Cmd_isdmgblockedbydisguise(void); static void Cmd_return(void); static void Cmd_end(void); static void Cmd_end2(void); static void Cmd_end3(void); -static void Cmd_unused5(void); +static void Cmd_setchargingturn(void); static void Cmd_call(void); static void Cmd_setroost(void); static void Cmd_jumpifabilitypresent(void); static void Cmd_endselectionscript(void); static void Cmd_playanimation(void); static void Cmd_playanimation_var(void); -static void Cmd_setgraphicalstatchangevalues(void); -static void Cmd_playstatchangeanimation(void); +static void Cmd_jumpfifsemiinvulnerable(void); +static void Cmd_unused_0x48(void); static void Cmd_moveend(void); static void Cmd_sethealblock(void); static void Cmd_returnatktoball(void); @@ -447,8 +440,8 @@ static void Cmd_drawpartystatussummary(void); static void Cmd_hidepartystatussummary(void); static void Cmd_jumptocalledmove(void); static void Cmd_statusanimation(void); -static void Cmd_status2animation(void); -static void Cmd_chosenstatusanimation(void); +static void Cmd_unused_0x65(void); +static void Cmd_unused_0x66(void); static void Cmd_yesnobox(void); static void Cmd_cancelallactions(void); static void Cmd_setgravity(void); @@ -464,25 +457,25 @@ static void Cmd_jumpifplayerran(void); static void Cmd_hpthresholds(void); static void Cmd_hpthresholds2(void); static void Cmd_useitemonopponent(void); -static void Cmd_various(void); +static void Cmd_unused_0x78(void); static void Cmd_setprotectlike(void); static void Cmd_tryexplosion(void); static void Cmd_setatkhptozero(void); static void Cmd_jumpifnexttargetvalid(void); static void Cmd_tryhealhalfhealth(void); -static void Cmd_trymirrormove(void); +static void Cmd_unused_0x7e(void); static void Cmd_setfieldweather(void); static void Cmd_setreflect(void); static void Cmd_setseeded(void); static void Cmd_manipulatedamage(void); static void Cmd_trysetrest(void); -static void Cmd_jumpifnotfirstturn(void); -static void Cmd_setmiracleeye(void); +static void Cmd_unused_0x82(void); +static void Cmd_unused_0x83(void); static void Cmd_jumpifuproarwakes(void); static void Cmd_stockpile(void); static void Cmd_stockpiletobasedamage(void); static void Cmd_stockpiletohpheal(void); -static void Cmd_setdrainedhp(void); +static void Cmd_unused_0x88(void); static void Cmd_statbuffchange(void); static void Cmd_normalisebuffs(void); static void Cmd_setbide(void); @@ -494,9 +487,9 @@ static void Cmd_tryconversiontypechange(void); static void Cmd_givepaydaymoney(void); static void Cmd_setlightscreen(void); static void Cmd_tryKO(void); -static void Cmd_unused_0x94(void); +static void Cmd_checknonvolatiletrigger(void); static void Cmd_copybidedmg(void); -static void Cmd_unused_96(void); +static void Cmd_animatewildpokemonafterfailedpokeball(void); static void Cmd_tryinfatuating(void); static void Cmd_updatestatusicon(void); static void Cmd_setmist(void); @@ -504,7 +497,7 @@ static void Cmd_setfocusenergy(void); static void Cmd_transformdataexecution(void); static void Cmd_setsubstitute(void); static void Cmd_mimicattackcopy(void); -static void Cmd_metronome(void); +static void Cmd_setcalledmove(void); static void Cmd_unused_0x9f(void); static void Cmd_unused_0xA0(void); static void Cmd_counterdamagecalculator(void); @@ -515,15 +508,15 @@ static void Cmd_painsplitdmgcalc(void); static void Cmd_settypetorandomresistance(void); static void Cmd_setalwayshitflag(void); static void Cmd_copymovepermanently(void); -static void Cmd_trychoosesleeptalkmove(void); -static void Cmd_trysetdestinybond(void); -static void Cmd_trysetdestinybondtohappen(void); +static void Cmd_unused_0xA9(void); +static void Cmd_unused_AA(void); +static void Cmd_unused_0xab(void); static void Cmd_settailwind(void); static void Cmd_tryspiteppreduce(void); static void Cmd_healpartystatus(void); static void Cmd_cursetarget(void); static void Cmd_trysetspikes(void); -static void Cmd_setforesight(void); +static void Cmd_setvolatile(void); static void Cmd_trysetperishsong(void); static void Cmd_handlerollout(void); static void Cmd_jumpifconfusedandstatmaxed(void); @@ -533,24 +526,24 @@ static void Cmd_presentdamagecalculation(void); static void Cmd_setsafeguard(void); static void Cmd_magnitudedamagecalculation(void); static void Cmd_jumpifnopursuitswitchdmg(void); -static void Cmd_tryrestorehpberry(void); +static void Cmd_tryactivateitem(void); static void Cmd_halvehp(void); static void Cmd_copyfoestats(void); static void Cmd_rapidspinfree(void); -static void Cmd_setdefensecurlbit(void); +static void Cmd_unused_0xBF(void); static void Cmd_recoverbasedonsunlight(void); static void Cmd_setstickyweb(void); static void Cmd_selectfirstvalidtarget(void); -static void Cmd_trysetfutureattack(void); +static void Cmd_setfutureattack(void); static void Cmd_trydobeatup(void); static void Cmd_setsemiinvulnerablebit(void); static void Cmd_tryfiretwoturnmovenowbyeffect(void); -static void Cmd_setminimize(void); +static void Cmd_unused_0xC7(void); static void Cmd_unused_c8(void); static void Cmd_trymemento(void); static void Cmd_setforcedtarget(void); -static void Cmd_setcharge(void); -static void Cmd_callenvironmentattack(void); +static void Cmd_unused_0xcb(void); +static void Cmd_unused_0xCC(void); static void Cmd_curestatuswithmove(void); static void Cmd_settorment(void); static void Cmd_jumpifnodamage(void); @@ -567,14 +560,14 @@ static void Cmd_setroom(void); static void Cmd_tryswapabilities(void); static void Cmd_tryimprison(void); static void Cmd_setstealthrock(void); -static void Cmd_setuserstatus3(void); -static void Cmd_assistattackselect(void); +static void Cmd_trysetvolatile(void); +static void Cmd_unused_0xde(void); static void Cmd_trysetmagiccoat(void); static void Cmd_trysetsnatch(void); static void Cmd_unused2(void); static void Cmd_switchoutabilities(void); static void Cmd_jumpifhasnohp(void); -static void Cmd_jumpifnotcurrentmoveargtype(void); +static void Cmd_unused_0xE4(void); static void Cmd_pickup(void); static void Cmd_unused_0xE6(void); static void Cmd_unused_0xE7(void); @@ -590,7 +583,7 @@ static void Cmd_givecaughtmon(void); static void Cmd_trysetcaughtmondexflags(void); static void Cmd_displaydexinfo(void); static void Cmd_trygivecaughtmonnick(void); -static void Cmd_subattackerhpbydmg(void); +static void Cmd_unused_0xf4(void); static void Cmd_removeattackerstatus1(void); static void Cmd_finishaction(void); static void Cmd_finishturn(void); @@ -600,15 +593,15 @@ static void Cmd_swapstatstages(void); static void Cmd_averagestats(void); static void Cmd_jumpifcaptivateaffected(void); static void Cmd_setnonvolatilestatus(void); -static void Cmd_tryworryseed(void); +static void Cmd_tryoverwriteability(void); static void Cmd_callnative(void); void (*const gBattleScriptingCommandsTable[])(void) = { Cmd_attackcanceler, //0x0 Cmd_accuracycheck, //0x1 - Cmd_attackstring, //0x2 - Cmd_ppreduce, //0x3 + Cmd_printattackstring, //0x2 + Cmd_unused_0x3, //0x3 Cmd_critcalc, //0x4 Cmd_damagecalc, //0x5 Cmd_typecalc, //0x6 @@ -629,16 +622,16 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_setadditionaleffects, //0x15 Cmd_seteffectprimary, //0x16 Cmd_seteffectsecondary, //0x17 - Cmd_clearstatusfromeffect, //0x18 + Cmd_clearvolatile, //0x18 Cmd_tryfaintmon, //0x19 Cmd_dofaintanimation, //0x1A Cmd_cleareffectsonfaint, //0x1B Cmd_jumpifstatus, //0x1C - Cmd_jumpifstatus2, //0x1D + Cmd_jumpifvolatile, //0x1D Cmd_jumpifability, //0x1E Cmd_jumpifsideaffecting, //0x1F Cmd_jumpifstat, //0x20 - Cmd_jumpifstatus3condition, //0x21 + Cmd_jumpifstatignorecontrary, //0x21 Cmd_jumpbasedontype, //0x22 Cmd_getexp, //0x23 Cmd_checkteamslost, //0x24 @@ -664,20 +657,20 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_bicword, //0x38 Cmd_pause, //0x39 Cmd_waitstate, //0x3A - Cmd_absorb, //0x3B + Cmd_isdmgblockedbydisguise, //0x3B Cmd_return, //0x3C Cmd_end, //0x3D Cmd_end2, //0x3E Cmd_end3, //0x3F - Cmd_unused5, //0x40 + Cmd_setchargingturn, //0x40 Cmd_call, //0x41 Cmd_setroost, //0x42 Cmd_jumpifabilitypresent, //0x43 Cmd_endselectionscript, //0x44 Cmd_playanimation, //0x45 Cmd_playanimation_var, //0x46 - Cmd_setgraphicalstatchangevalues, //0x47 - Cmd_playstatchangeanimation, //0x48 + Cmd_jumpfifsemiinvulnerable, //0x47 + Cmd_unused_0x48, //0x48 Cmd_moveend, //0x49 Cmd_sethealblock, //0x4A Cmd_returnatktoball, //0x4B @@ -706,8 +699,8 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_hidepartystatussummary, //0x62 Cmd_jumptocalledmove, //0x63 Cmd_statusanimation, //0x64 - Cmd_status2animation, //0x65 - Cmd_chosenstatusanimation, //0x66 + Cmd_unused_0x65, //0x65 + Cmd_unused_0x66, //0x66 Cmd_yesnobox, //0x67 Cmd_cancelallactions, //0x68 Cmd_setgravity, //0x69 @@ -723,25 +716,25 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_hpthresholds, //0x73 Cmd_hpthresholds2, //0x74 Cmd_useitemonopponent, //0x75 - Cmd_various, //0x76 + Cmd_unused_0x78, //0x76 Cmd_setprotectlike, //0x77 Cmd_tryexplosion, //0x78 Cmd_setatkhptozero, //0x79 Cmd_jumpifnexttargetvalid, //0x7A Cmd_tryhealhalfhealth, //0x7B - Cmd_trymirrormove, //0x7C + Cmd_unused_0x7e, //0x7C Cmd_setfieldweather, //0x7D Cmd_setreflect, //0x7E Cmd_setseeded, //0x7F Cmd_manipulatedamage, //0x80 Cmd_trysetrest, //0x81 - Cmd_jumpifnotfirstturn, //0x82 - Cmd_setmiracleeye, //0x83 + Cmd_unused_0x82, //0x82 + Cmd_unused_0x83, //0x83 Cmd_jumpifuproarwakes, //0x84 Cmd_stockpile, //0x85 Cmd_stockpiletobasedamage, //0x86 Cmd_stockpiletohpheal, //0x87 - Cmd_setdrainedhp, //0x88 + Cmd_unused_0x88, //0x88 Cmd_statbuffchange, //0x89 Cmd_normalisebuffs, //0x8A Cmd_setbide, //0x8B @@ -753,9 +746,9 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_givepaydaymoney, //0x91 Cmd_setlightscreen, //0x92 Cmd_tryKO, //0x93 - Cmd_unused_0x94, //0x94 + Cmd_checknonvolatiletrigger, //0x94 Cmd_copybidedmg, //0x95 - Cmd_unused_96, //0x96 + Cmd_animatewildpokemonafterfailedpokeball, //0x96 Cmd_tryinfatuating, //0x97 Cmd_updatestatusicon, //0x98 Cmd_setmist, //0x99 @@ -763,7 +756,7 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_transformdataexecution, //0x9B Cmd_setsubstitute, //0x9C Cmd_mimicattackcopy, //0x9D - Cmd_metronome, //0x9E + Cmd_setcalledmove, //0x9E Cmd_unused_0x9f, //0x9F Cmd_unused_0xA0, //0xA0 Cmd_counterdamagecalculator, //0xA1 @@ -774,15 +767,15 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_settypetorandomresistance, //0xA6 Cmd_setalwayshitflag, //0xA7 Cmd_copymovepermanently, //0xA8 - Cmd_trychoosesleeptalkmove, //0xA9 - Cmd_trysetdestinybond, //0xAA - Cmd_trysetdestinybondtohappen, //0xAB + Cmd_unused_0xA9, //0xA9 + Cmd_unused_AA, //0xAA + Cmd_unused_0xab, //0xAB Cmd_settailwind, //0xAC Cmd_tryspiteppreduce, //0xAD Cmd_healpartystatus, //0xAE Cmd_cursetarget, //0xAF Cmd_trysetspikes, //0xB0 - Cmd_setforesight, //0xB1 + Cmd_setvolatile, //0xB1 Cmd_trysetperishsong, //0xB2 Cmd_handlerollout, //0xB3 Cmd_jumpifconfusedandstatmaxed, //0xB4 @@ -792,24 +785,24 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_setsafeguard, //0xB8 Cmd_magnitudedamagecalculation, //0xB9 Cmd_jumpifnopursuitswitchdmg, //0xBA - Cmd_tryrestorehpberry, //0xBB + Cmd_tryactivateitem, //0xBB Cmd_halvehp, //0xBC Cmd_copyfoestats, //0xBD Cmd_rapidspinfree, //0xBE - Cmd_setdefensecurlbit, //0xBF + Cmd_unused_0xBF, //0xBF Cmd_recoverbasedonsunlight, //0xC0 Cmd_setstickyweb, //0xC1 Cmd_selectfirstvalidtarget, //0xC2 - Cmd_trysetfutureattack, //0xC3 + Cmd_setfutureattack, //0xC3 Cmd_trydobeatup, //0xC4 Cmd_setsemiinvulnerablebit, //0xC5 Cmd_tryfiretwoturnmovenowbyeffect, //0xC6 - Cmd_setminimize, //0xC7 + Cmd_unused_0xC7, //0xC7 Cmd_unused_c8, //0xC8 Cmd_trymemento, //0xC9 Cmd_setforcedtarget, //0xCA - Cmd_setcharge, //0xCB - Cmd_callenvironmentattack, //0xCC + Cmd_unused_0xcb, //0xCB + Cmd_unused_0xCC, //0xCC Cmd_curestatuswithmove, //0xCD Cmd_settorment, //0xCE Cmd_jumpifnodamage, //0xCF @@ -826,14 +819,14 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_tryswapabilities, //0xDA Cmd_tryimprison, //0xDB Cmd_setstealthrock, //0xDC - Cmd_setuserstatus3, //0xDD - Cmd_assistattackselect, //0xDE + Cmd_trysetvolatile, //0xDD + Cmd_unused_0xde, //0xDE Cmd_trysetmagiccoat, //0xDF Cmd_trysetsnatch, //0xE0 Cmd_unused2, //0xE1 Cmd_switchoutabilities, //0xE2 Cmd_jumpifhasnohp, //0xE3 - Cmd_jumpifnotcurrentmoveargtype, //0xE4 + Cmd_unused_0xE4, //0xE4 Cmd_pickup, //0xE5 Cmd_unused_0xE6, //0xE6 Cmd_unused_0xE7, //0xE7 @@ -849,7 +842,7 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_trysetcaughtmondexflags, //0xF1 Cmd_displaydexinfo, //0xF2 Cmd_trygivecaughtmonnick, //0xF3 - Cmd_subattackerhpbydmg, //0xF4 + Cmd_unused_0xf4, //0xF4 Cmd_removeattackerstatus1, //0xF5 Cmd_finishaction, //0xF6 Cmd_finishturn, //0xF7 @@ -859,7 +852,7 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_averagestats, //0xFB Cmd_jumpifcaptivateaffected, //0xFC Cmd_setnonvolatilestatus, //0xFD - Cmd_tryworryseed, //0xFE + Cmd_tryoverwriteability, //0xFE Cmd_callnative, //0xFF }; @@ -880,41 +873,6 @@ const struct StatFractions gAccuracyStageRatios[] = { 3, 1}, // +6 }; -static const u32 sStatusFlagsForMoveEffects[NUM_MOVE_EFFECTS] = -{ - [MOVE_EFFECT_SLEEP] = STATUS1_SLEEP, - [MOVE_EFFECT_POISON] = STATUS1_POISON, - [MOVE_EFFECT_BURN] = STATUS1_BURN, - [MOVE_EFFECT_FREEZE] = STATUS1_FREEZE, - [MOVE_EFFECT_PARALYSIS] = STATUS1_PARALYSIS, - [MOVE_EFFECT_TOXIC] = STATUS1_TOXIC_POISON, - [MOVE_EFFECT_FROSTBITE] = STATUS1_FROSTBITE, - [MOVE_EFFECT_CONFUSION] = STATUS2_CONFUSION, - [MOVE_EFFECT_FLINCH] = STATUS2_FLINCHED, - [MOVE_EFFECT_UPROAR] = STATUS2_UPROAR, - [MOVE_EFFECT_CHARGING] = STATUS2_MULTIPLETURNS, - [MOVE_EFFECT_WRAP] = STATUS2_WRAPPED, - [MOVE_EFFECT_RECHARGE] = STATUS2_RECHARGE, - [MOVE_EFFECT_PREVENT_ESCAPE] = STATUS2_ESCAPE_PREVENTION, - [MOVE_EFFECT_NIGHTMARE] = STATUS2_NIGHTMARE, - [MOVE_EFFECT_THRASH] = STATUS2_LOCK_CONFUSE, -}; - -static const u8 *const sMoveEffectBS_Ptrs[] = -{ - [MOVE_EFFECT_SLEEP] = BattleScript_MoveEffectSleep, - [MOVE_EFFECT_POISON] = BattleScript_MoveEffectPoison, - [MOVE_EFFECT_BURN] = BattleScript_MoveEffectBurn, - [MOVE_EFFECT_FREEZE] = BattleScript_MoveEffectFreeze, - [MOVE_EFFECT_PARALYSIS] = BattleScript_MoveEffectParalysis, - [MOVE_EFFECT_TOXIC] = BattleScript_MoveEffectToxic, - [MOVE_EFFECT_CONFUSION] = BattleScript_MoveEffectConfusion, - [MOVE_EFFECT_UPROAR] = BattleScript_MoveEffectUproar, - [MOVE_EFFECT_PAYDAY] = BattleScript_MoveEffectPayDay, - [MOVE_EFFECT_WRAP] = BattleScript_MoveEffectWrap, - [MOVE_EFFECT_FROSTBITE] = BattleScript_MoveEffectFrostbite, -}; - static const struct WindowTemplate sUnusedWinTemplate = { .bg = 0, @@ -927,7 +885,7 @@ static const struct WindowTemplate sUnusedWinTemplate = }; static const u16 sLevelUpBanner_Pal[] = INCBIN_U16("graphics/battle_interface/level_up_banner.gbapal"); -static const u32 sLevelUpBanner_Gfx[] = INCBIN_U32("graphics/battle_interface/level_up_banner.4bpp.lz"); +static const u32 sLevelUpBanner_Gfx[] = INCBIN_U32("graphics/battle_interface/level_up_banner.4bpp.smol"); static const struct OamData sOamData_MonIconOnLvlUpBanner = { @@ -959,89 +917,6 @@ static const struct SpriteTemplate sSpriteTemplate_MonIconOnLvlUpBanner = static const u16 sProtectSuccessRates[] = {USHRT_MAX, USHRT_MAX / 2, USHRT_MAX / 4, USHRT_MAX / 8}; -static const u16 sFinalStrikeOnlyEffects[] = -{ - MOVE_EFFECT_BUG_BITE, - MOVE_EFFECT_STEAL_ITEM, - MOVE_EFFECT_REMOVE_ARG_TYPE, - MOVE_EFFECT_REMOVE_STATUS, - MOVE_EFFECT_RECOIL_HP_25, - MOVE_EFFECT_PREVENT_ESCAPE, - MOVE_EFFECT_WRAP, -}; - -static const u16 sNaturePowerMoves[BATTLE_ENVIRONMENT_COUNT] = -{ -#if B_NATURE_POWER_MOVES >= GEN_7 - [BATTLE_ENVIRONMENT_GRASS] = MOVE_ENERGY_BALL, - [BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_ENERGY_BALL, - [BATTLE_ENVIRONMENT_SAND] = MOVE_EARTH_POWER, - [BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTH_POWER, - [BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTH_POWER, - [BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK, - [BATTLE_ENVIRONMENT_PLAIN] = MOVE_TRI_ATTACK, - [BATTLE_ENVIRONMENT_SNOW] = MOVE_ICE_BEAM, -#elif B_NATURE_POWER_MOVES == GEN_6 - [BATTLE_ENVIRONMENT_GRASS] = MOVE_ENERGY_BALL, - [BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_ENERGY_BALL, - [BATTLE_ENVIRONMENT_SAND] = MOVE_EARTH_POWER, - [BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTH_POWER, - [BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTH_POWER, - [BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK, - [BATTLE_ENVIRONMENT_PLAIN] = MOVE_TRI_ATTACK, - [BATTLE_ENVIRONMENT_SNOW] = MOVE_FROST_BREATH, -#elif B_NATURE_POWER_MOVES == GEN_5 - [BATTLE_ENVIRONMENT_GRASS] = MOVE_SEED_BOMB, - [BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_SEED_BOMB, - [BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE, - [BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTHQUAKE, - [BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTHQUAKE, - [BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK, - [BATTLE_ENVIRONMENT_PLAIN] = MOVE_EARTHQUAKE, - [BATTLE_ENVIRONMENT_SNOW] = MOVE_BLIZZARD, -#elif B_NATURE_POWER_MOVES == GEN_4 - [BATTLE_ENVIRONMENT_GRASS] = MOVE_SEED_BOMB, - [BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_SEED_BOMB, - [BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE, - [BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_ROCK_SLIDE, - [BATTLE_ENVIRONMENT_CAVE] = MOVE_ROCK_SLIDE, - [BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK, - [BATTLE_ENVIRONMENT_PLAIN] = MOVE_EARTHQUAKE, - [BATTLE_ENVIRONMENT_SNOW] = MOVE_BLIZZARD, -#else // Gen 1-3 - [BATTLE_ENVIRONMENT_GRASS] = MOVE_STUN_SPORE, - [BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_RAZOR_LEAF, - [BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE, - [BATTLE_ENVIRONMENT_WATER] = MOVE_SURF, - [BATTLE_ENVIRONMENT_POND] = MOVE_BUBBLE_BEAM, - [BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_ROCK_SLIDE, - [BATTLE_ENVIRONMENT_CAVE] = MOVE_SHADOW_BALL, - [BATTLE_ENVIRONMENT_BUILDING] = MOVE_SWIFT, - [BATTLE_ENVIRONMENT_PLAIN] = MOVE_SWIFT, - [BATTLE_ENVIRONMENT_SNOW] = MOVE_BLIZZARD, -#endif - [BATTLE_ENVIRONMENT_UNDERWATER] = MOVE_HYDRO_PUMP, - [BATTLE_ENVIRONMENT_SOARING] = MOVE_AIR_SLASH, - [BATTLE_ENVIRONMENT_SKY_PILLAR] = MOVE_AIR_SLASH, - [BATTLE_ENVIRONMENT_BURIAL_GROUND] = MOVE_SHADOW_BALL, - [BATTLE_ENVIRONMENT_PUDDLE] = MOVE_MUD_BOMB, - [BATTLE_ENVIRONMENT_MARSH] = MOVE_MUD_BOMB, - [BATTLE_ENVIRONMENT_SWAMP] = MOVE_MUD_BOMB, - [BATTLE_ENVIRONMENT_ICE] = MOVE_ICE_BEAM, - [BATTLE_ENVIRONMENT_VOLCANO] = MOVE_LAVA_PLUME, - [BATTLE_ENVIRONMENT_DISTORTION_WORLD] = MOVE_TRI_ATTACK, - [BATTLE_ENVIRONMENT_SPACE] = MOVE_DRACO_METEOR, - [BATTLE_ENVIRONMENT_ULTRA_SPACE] = MOVE_PSYSHOCK, -}; - #define _ 0 static const struct PickupItem sPickupTable[] = @@ -1080,31 +955,23 @@ static const struct PickupItem sPickupTable[] = #undef _ -static const u8 sEnvironmentToType[BATTLE_ENVIRONMENT_COUNT] = -{ - [BATTLE_ENVIRONMENT_GRASS] = TYPE_GRASS, - [BATTLE_ENVIRONMENT_LONG_GRASS] = TYPE_GRASS, - [BATTLE_ENVIRONMENT_SAND] = TYPE_GROUND, - [BATTLE_ENVIRONMENT_UNDERWATER] = TYPE_WATER, - [BATTLE_ENVIRONMENT_WATER] = TYPE_WATER, - [BATTLE_ENVIRONMENT_POND] = TYPE_WATER, - [BATTLE_ENVIRONMENT_CAVE] = TYPE_ROCK, - [BATTLE_ENVIRONMENT_BUILDING] = TYPE_NORMAL, - [BATTLE_ENVIRONMENT_SOARING] = TYPE_FLYING, - [BATTLE_ENVIRONMENT_SKY_PILLAR] = TYPE_FLYING, - [BATTLE_ENVIRONMENT_BURIAL_GROUND] = TYPE_GHOST, - [BATTLE_ENVIRONMENT_PUDDLE] = TYPE_GROUND, - [BATTLE_ENVIRONMENT_MARSH] = TYPE_GROUND, - [BATTLE_ENVIRONMENT_SWAMP] = TYPE_GROUND, - [BATTLE_ENVIRONMENT_SNOW] = TYPE_ICE, - [BATTLE_ENVIRONMENT_ICE] = TYPE_ICE, - [BATTLE_ENVIRONMENT_VOLCANO] = TYPE_FIRE, - [BATTLE_ENVIRONMENT_DISTORTION_WORLD] = TYPE_NORMAL, - [BATTLE_ENVIRONMENT_SPACE] = TYPE_DRAGON, - [BATTLE_ENVIRONMENT_ULTRA_SPACE] = TYPE_PSYCHIC, - [BATTLE_ENVIRONMENT_MOUNTAIN] = (B_CAMOUFLAGE_TYPES >= GEN_5 ? TYPE_GROUND : TYPE_ROCK), - [BATTLE_ENVIRONMENT_PLAIN] = (B_CAMOUFLAGE_TYPES >= GEN_4 ? TYPE_GROUND : TYPE_NORMAL), -}; +static void ValidateSavedBattlerCounts(void) +{ + if (gBattleStruct->savedAttackerCount > 0) + { + if (TESTING) + Test_ExitWithResult(TEST_RESULT_ERROR, 0, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!", __FILE__, __LINE__); + else + DebugPrintfLevel(MGBA_LOG_WARN, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!"); + } + if (gBattleStruct->savedTargetCount > 0) + { + if (TESTING) + Test_ExitWithResult(TEST_RESULT_ERROR, 0, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!", __FILE__, __LINE__); + else + DebugPrintfLevel(MGBA_LOG_WARN, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!"); + } +} static bool32 NoTargetPresent(u8 battler, u32 move) { @@ -1132,7 +999,7 @@ static bool32 NoTargetPresent(u8 battler, u32 move) return FALSE; } -bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) +bool32 ProteanTryChangeType(u32 battler, enum Ability ability, u32 move, enum Type moveType) { if ((ability == ABILITY_PROTEAN || ability == ABILITY_LIBERO) && !gDisableStructs[gBattlerAttacker].usedProteanLibero @@ -1152,6 +1019,34 @@ bool32 IsMoveNotAllowedInSkyBattles(u32 move) return (gBattleStruct->isSkyBattle && IsMoveSkyBattleBanned(gCurrentMove)); } +static void TryClearChargeVolatile(u32 moveType) +{ + if (B_CHARGE < GEN_9) // Prior to gen9, charge is cleared during the end turn + return; + + if (moveType == TYPE_ELECTRIC && gBattleMons[gBattlerAttacker].volatiles.chargeTimer == 1) + gBattleMons[gBattlerAttacker].volatiles.chargeTimer = 0; + + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + if (gBattleMons[battler].volatiles.chargeTimer == 2) // Has been set this turn by move + gBattleMons[battler].volatiles.chargeTimer--; + } +} + +static bool32 IsAnyTargetAffected(void) +{ + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + if (battler == gBattlerAttacker) + continue; + + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)) + return TRUE; + } + return FALSE; +} + u32 NumAffectedSpreadMoveTargets(void) { u32 targetCount = 0; @@ -1170,9 +1065,9 @@ u32 NumAffectedSpreadMoveTargets(void) u32 NumFaintedBattlersByAttacker(u32 battlerAtk) { - u32 numMonsFainted = 0; + u32 battler, numMonsFainted = 0; - for (u32 battler = 0; battler < gBattlersCount; battler++) + for (battler = 0; battler < gBattlersCount; battler++) { if (battler == battlerAtk) continue; @@ -1184,52 +1079,43 @@ u32 NumFaintedBattlersByAttacker(u32 battlerAtk) return numMonsFainted; } -bool32 IsMovePowderBlocked(u32 battlerAtk, u32 battlerDef, u32 move) +bool32 IsPowderMoveBlocked(struct BattleContext *ctx) { - bool32 effect = FALSE; - - if (IsPowderMove(move) && (battlerAtk != battlerDef)) - { - if (B_POWDER_GRASS >= GEN_6 - && (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || GetBattlerAbility(battlerDef) == ABILITY_OVERCOAT)) - { - gBattlerAbility = battlerDef; - RecordAbilityBattle(gBattlerTarget, ABILITY_OVERCOAT); - effect = TRUE; - } - else if (GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_SAFETY_GOGGLES) - { - RecordItemEffectBattle(battlerDef, HOLD_EFFECT_SAFETY_GOGGLES); - gLastUsedItem = gBattleMons[battlerDef].item; - effect = TRUE; - } - - if (effect) - gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect; - } + if (!IsPowderMove(ctx->currentMove) + || ctx->battlerAtk == ctx->battlerDef + || IsAffectedByPowderMove(ctx->battlerDef, ctx->abilities[ctx->battlerDef], GetBattlerHoldEffect(ctx->battlerDef))) + return FALSE; - return effect; + gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect; + return TRUE; } bool32 EmergencyExitCanBeTriggered(u32 battler) { - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); if (ability != ABILITY_EMERGENCY_EXIT && ability != ABILITY_WIMP_OUT) return FALSE; - if (IsBattlerTurnDamaged(battler) - && IsBattlerAlive(battler) + if (IsBattlerAlive(battler) && HadMoreThanHalfHpNowDoesnt(battler) && (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) && !(gBattleTypeFlags & BATTLE_TYPE_ARENA) - && CountUsablePartyMons(battler) > 0 - && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) + && gBattleMons[battler].volatiles.semiInvulnerable != STATE_SKY_DROP) return TRUE; return FALSE; } +static inline bool32 IsBattlerUsingBeakBlast(u32 battler) +{ + if (gChosenActionByBattler[battler] != B_ACTION_USE_MOVE) + return FALSE; + if (GetMoveEffect(gChosenMoveByBattler[battler]) != EFFECT_BEAK_BLAST) + return FALSE; + return !HasBattlerActedThisTurn(battler); +} + static void Cmd_attackcanceler(void) { CMD_ARGS(); @@ -1247,19 +1133,31 @@ static void Cmd_attackcanceler(void) return; } - enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); + struct BattleContext ctx = {0}; + ctx.battlerAtk = gBattlerAttacker; + ctx.battlerDef = gBattlerTarget; + ctx.currentMove = gCurrentMove; + + enum BattleMoveEffects moveEffect = GetMoveEffect(ctx.currentMove); - if (!IsBattlerAlive(gBattlerAttacker) && effect != EFFECT_EXPLOSION && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) + if (!IsBattlerAlive(gBattlerAttacker) + && moveEffect != EFFECT_EXPLOSION + && moveEffect != EFFECT_MISTY_EXPLOSION) { gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gBattlescriptCurrInstr = BattleScript_MoveEnd; return; } - if (AtkCanceller_MoveSuccessOrder()) + + // With how attackcanceler works right now we only need attacker and target abilities. Might change in the future + ctx.abilities[ctx.battlerAtk] = GetBattlerAbility(ctx.battlerAtk); + ctx.abilities[ctx.battlerDef] = GetBattlerAbility(ctx.battlerDef); + + if (AtkCanceler_MoveSuccessOrder(&ctx) != MOVE_STEP_SUCCESS) return; if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_OFF - && GetBattlerAbility(gBattlerAttacker) == ABILITY_PARENTAL_BOND + && ctx.abilities[ctx.battlerAtk] == ABILITY_PARENTAL_BOND && IsMoveAffectedByParentalBond(gCurrentMove, gBattlerAttacker) && !(gAbsentBattlerFlags & (1u << gBattlerTarget)) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE) @@ -1270,68 +1168,73 @@ static void Cmd_attackcanceler(void) return; } - - u32 abilityDef = GetBattlerAbility(gBattlerTarget); - if (CanAbilityBlockMove(gBattlerAttacker, - gBattlerTarget, - GetBattlerAbility(gBattlerAttacker), - abilityDef, - gCurrentMove, - ABILITY_RUN_SCRIPT)) + if (CanAbilityBlockMove( + ctx.battlerAtk, + ctx.battlerDef, + ctx.abilities[ctx.battlerAtk], + ctx.abilities[ctx.battlerDef], + ctx.currentMove, + RUN_SCRIPT)) return; - if (GetMoveNonVolatileStatus(gCurrentMove) == MOVE_EFFECT_PARALYSIS) + if (GetMoveNonVolatileStatus(ctx.currentMove) == MOVE_EFFECT_PARALYSIS) { - if (CanAbilityAbsorbMove(gBattlerAttacker, - gBattlerTarget, - abilityDef, - gCurrentMove, - GetBattleMoveType(gCurrentMove), - ABILITY_RUN_SCRIPT)) + if (CanAbilityAbsorbMove( + ctx.battlerAtk, + ctx.battlerDef, + ctx.abilities[ctx.battlerDef], + ctx.currentMove, + GetBattleMoveType(ctx.currentMove), + RUN_SCRIPT)) return; } - if (IsMovePowderBlocked(gBattlerAttacker, gBattlerTarget, gCurrentMove)) - return; - - if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE - && !(gHitMarker & (HITMARKER_ALLOW_NO_PP | HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT)) - && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) - { - gBattlescriptCurrInstr = BattleScript_NoPPForMove; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + if (IsPowderMoveBlocked(&ctx)) return; - } - - gHitMarker &= ~HITMARKER_ALLOW_NO_PP; // Check if no available target present on the field or if Sky Battles ban the move if ((NoTargetPresent(gBattlerAttacker, gCurrentMove) - && (!gBattleMoveEffects[effect].twoTurnEffect || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) + && (!gBattleMoveEffects[moveEffect].twoTurnEffect || (gBattleMons[gBattlerAttacker].volatiles.multipleTurns))) || (IsMoveNotAllowedInSkyBattles(gCurrentMove))) { gBattleStruct->noTargetPresent = TRUE; - if (effect == EFFECT_FLING) // Edge case for removing a mon's item when there is no target available after using Fling. + if (moveEffect == EFFECT_FLING) // Edge case for removing a mon's item when there is no target available after using Fling. gBattlescriptCurrInstr = BattleScript_FlingFailConsumeItem; else - gBattlescriptCurrInstr = BattleScript_FailedFromAtkString; + gBattlescriptCurrInstr = BattleScript_ButItFailed; - if (!gBattleMoveEffects[effect].twoTurnEffect || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + if (!gBattleMoveEffects[moveEffect].twoTurnEffect || (gBattleMons[gBattlerAttacker].volatiles.multipleTurns)) + CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELER_CHECK); return; } u32 isBounceable = MoveCanBeBouncedBack(gCurrentMove); - if (gProtectStructs[gBattlerTarget].bounceMove + bool32 bounceActive = (gProtectStructs[gBattlerTarget].bounceMove && IsBattlerAlive(gBattlerTarget)); + + if (!bounceActive + && !gBattleStruct->bouncedMoveIsUsed + && isBounceable + && GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) == MOVE_TARGET_OPPONENTS_FIELD) + { + u32 partner = BATTLE_PARTNER(gBattlerTarget); + + if (partner < gBattlersCount + && GetBattlerSide(partner) == GetBattlerSide(gBattlerTarget) + && gProtectStructs[partner].bounceMove + && IsBattlerAlive(partner)) + { + gBattlerTarget = partner; + bounceActive = TRUE; + } + } + + if (bounceActive && isBounceable && !gBattleStruct->bouncedMoveIsUsed) { gBattleStruct->bouncedMoveIsUsed = TRUE; // Edge case for bouncing a powder move against a grass type pokemon. - - ClearDamageCalcResults(); - SetAtkCancellerForCalledMove(); gEffectBattler = gBattlerTarget; if (BlocksPrankster(gCurrentMove, gBattlerTarget, gBattlerAttacker, TRUE)) { @@ -1341,8 +1244,7 @@ static void Cmd_attackcanceler(void) } else { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MagicCoat; + BattleScriptCall(BattleScript_MagicCoat); } return; } @@ -1350,7 +1252,7 @@ static void Cmd_attackcanceler(void) { u32 battler = gBattlerTarget; - if (abilityDef == ABILITY_MAGIC_BOUNCE) + if (ctx.abilities[ctx.battlerDef] == ABILITY_MAGIC_BOUNCE) { battler = gBattlerTarget; gBattleStruct->bouncedMoveIsUsed = TRUE; @@ -1365,10 +1267,7 @@ static void Cmd_attackcanceler(void) if (gBattleStruct->bouncedMoveIsUsed) { - ClearDamageCalcResults(); - SetAtkCancellerForCalledMove(); // Edge case for bouncing a powder move against a grass type pokemon. - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MagicBounce; + BattleScriptCall(BattleScript_MagicBounce); gBattlerAbility = battler; return; } @@ -1384,45 +1283,32 @@ static void Cmd_attackcanceler(void) return; } - for (u32 i = 0; i < gBattlersCount; i++) + u32 i; + for (i = 0; i < gBattlersCount; i++) { if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && MoveCanBeSnatched(gCurrentMove)) { gProtectStructs[gBattlerByTurnOrder[i]].stealMove = FALSE; gBattleStruct->snatchedMoveIsUsed = TRUE; gBattleScripting.battler = gBattlerByTurnOrder[i]; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SnatchedMove; + BattleScriptCall(BattleScript_SnatchedMove); return; } } - if (gSpecialStatuses[gBattlerTarget].lightningRodRedirected) - { - gSpecialStatuses[gBattlerTarget].lightningRodRedirected = FALSE; - gLastUsedAbility = ABILITY_LIGHTNING_ROD; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TookAttack; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); - } - else if (gSpecialStatuses[gBattlerTarget].stormDrainRedirected) + if (gSpecialStatuses[gBattlerTarget].abilityRedirected) { - gSpecialStatuses[gBattlerTarget].stormDrainRedirected = FALSE; - gLastUsedAbility = ABILITY_STORM_DRAIN; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TookAttack; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + gSpecialStatuses[gBattlerTarget].abilityRedirected = FALSE; + BattleScriptCall(BattleScript_TookAttack); } else if (IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) - && (effect != EFFECT_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) - && (!gBattleMoveEffects[effect].twoTurnEffect || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) - && effect != EFFECT_SUCKER_PUNCH - && effect != EFFECT_COUNTER - && effect != EFFECT_UPPER_HAND) + && (moveEffect != EFFECT_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) + && (!gBattleMoveEffects[moveEffect].twoTurnEffect || (gBattleMons[gBattlerAttacker].volatiles.multipleTurns)) + && moveEffect != EFFECT_COUNTER) { - if (IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) + if (!CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), gCurrentMove)) gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELER_CHECK); gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; gLastLandedMoves[gBattlerTarget] = 0; gLastHitByType[gBattlerTarget] = 0; @@ -1436,7 +1322,8 @@ static void Cmd_attackcanceler(void) gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; gBattlescriptCurrInstr = cmd->nextInstr; } - else if (gProtectStructs[gBattlerTarget].beakBlastCharge && IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) + else if (IsBattlerUsingBeakBlast(gBattlerTarget) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; @@ -1458,22 +1345,29 @@ static void JumpIfMoveFailed(u32 adder, u32 move, u32 moveType, const u8 *failIn } else { - TrySetDestinyBondToHappen(); - if (CanAbilityAbsorbMove(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget), move, moveType, - ABILITY_RUN_SCRIPT)) + RUN_SCRIPT)) return; } gBattlescriptCurrInstr += adder; } -static void Cmd_unused5(void) +static void Cmd_setchargingturn(void) { + CMD_ARGS(); + + if (!gBattleMons[gBattlerAttacker].volatiles.multipleTurns) + { + gBattleMons[gBattlerAttacker].volatiles.multipleTurns = TRUE; + gLockedMoves[gBattlerAttacker] = gCurrentMove; + gProtectStructs[gBattlerAttacker].chargingTurn = TRUE; + } + gBattlescriptCurrInstr = cmd->nextInstr; } static bool32 JumpIfMoveAffectedByProtect(u32 move, u32 battler, u32 shouldJump, const u8 *failInstr) @@ -1488,227 +1382,39 @@ static bool32 JumpIfMoveAffectedByProtect(u32 move, u32 battler, u32 shouldJump, return affected; } -static bool32 AccuracyCalcHelper(u32 move, u32 battler) -{ - bool32 effect = FALSE; - u32 ability = ABILITY_NONE; - enum BattleMoveEffects moveEffect = GetMoveEffect(move); - u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); - - if ((gStatuses3[battler] & STATUS3_ALWAYS_HITS && gDisableStructs[battler].battlerWithSureHit == gBattlerAttacker) - || (B_TOXIC_NEVER_MISS >= GEN_6 - && nonVolatileStatus == MOVE_EFFECT_TOXIC - && IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_POISON)) - || gStatuses4[battler] & STATUS4_GLAIVE_RUSH) - { - effect = TRUE; - } - // If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits. - else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD - && !(gStatuses3[battler] & STATUS3_COMMANDER) - && (moveEffect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[battler] == SKY_DROP_NO_TARGET)) - { - effect = TRUE; - ability = ABILITY_NO_GUARD; - } - // If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits. - else if (GetBattlerAbility(battler) == ABILITY_NO_GUARD - && (moveEffect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[battler] == SKY_DROP_NO_TARGET)) - { - effect = TRUE; - ability = ABILITY_NO_GUARD; - } - // If the target is under the effects of Telekinesis, and the move isn't a OH-KO move, move hits. - else if (gStatuses3[battler] & STATUS3_TELEKINESIS - && !(gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE) - && moveEffect != EFFECT_OHKO) - { - effect = TRUE; - } - else if (gBattleStruct->battlerState[battler].pursuitTarget) - { - effect = TRUE; - } - else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !(gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE)) - { - effect = TRUE; - } - else if ((gStatuses3[battler] & STATUS3_COMMANDER) - || (gStatuses3[battler] & STATUS3_PHANTOM_FORCE) - || ((gStatuses3[battler] & STATUS3_ON_AIR) && !(MoveDamagesAirborne(move) || MoveDamagesAirborneDoubleDamage(move))) - || ((gStatuses3[battler] & STATUS3_UNDERGROUND) && !MoveDamagesUnderground(move)) - || ((gStatuses3[battler] & STATUS3_UNDERWATER) && !MoveDamagesUnderWater(move))) - { - gBattleStruct->moveResultFlags[battler] |= MOVE_RESULT_MISSED; - effect = TRUE; - } - else if (B_MINIMIZE_DMG_ACC >= GEN_6 - && (gStatuses3[battler] & STATUS3_MINIMIZED) - && MoveIncreasesPowerToMinimizedTargets(move)) - { - effect = TRUE; - } - else if (GetMoveAccuracy(move) == 0) - { - effect = TRUE; - } - - if (!effect && HasWeatherEffect()) - { - if (MoveAlwaysHitsInRain(move) && IsBattlerWeatherAffected(battler, B_WEATHER_RAIN)) - effect = TRUE; - else if ((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && MoveAlwaysHitsInHailSnow(move)) - effect = TRUE; - - if (effect) - return effect; - } - - if (ability != ABILITY_NONE) - RecordAbilityBattle(gBattlerAttacker, ABILITY_NO_GUARD); - - return effect; -} - -u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect) -{ - u32 calc, moveAcc; - s8 buff, accStage, evasionStage; - u32 atkParam = GetBattlerHoldEffectParam(battlerAtk); - u32 defParam = GetBattlerHoldEffectParam(battlerDef); - u32 atkAlly = BATTLE_PARTNER(battlerAtk); - u32 atkAllyAbility = GetBattlerAbility(atkAlly); - - gPotentialItemEffectBattler = battlerDef; - accStage = gBattleMons[battlerAtk].statStages[STAT_ACC]; - evasionStage = gBattleMons[battlerDef].statStages[STAT_EVASION]; - if (atkAbility == ABILITY_UNAWARE || atkAbility == ABILITY_KEEN_EYE || atkAbility == ABILITY_MINDS_EYE - || (B_ILLUMINATE_EFFECT >= GEN_9 && atkAbility == ABILITY_ILLUMINATE)) - evasionStage = DEFAULT_STAT_STAGE; - if (MoveIgnoresDefenseEvasionStages(move)) - evasionStage = DEFAULT_STAT_STAGE; - if (defAbility == ABILITY_UNAWARE) - accStage = DEFAULT_STAT_STAGE; - - if (gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT || gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED) - buff = accStage; - else - buff = accStage + DEFAULT_STAT_STAGE - evasionStage; - - if (buff < MIN_STAT_STAGE) - buff = MIN_STAT_STAGE; - if (buff > MAX_STAT_STAGE) - buff = MAX_STAT_STAGE; - - moveAcc = GetMoveAccuracy(move); - // Check Thunder and Hurricane on sunny weather. - if (IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && MoveHas50AccuracyInSun(move)) - moveAcc = 50; - // Check Wonder Skin. - if (defAbility == ABILITY_WONDER_SKIN && IsBattleMoveStatus(move) && moveAcc > 50) - moveAcc = 50; - - calc = gAccuracyStageRatios[buff].dividend * moveAcc; - calc /= gAccuracyStageRatios[buff].divisor; - - // Attacker's ability - switch (atkAbility) - { - case ABILITY_COMPOUND_EYES: - calc = (calc * 130) / 100; // 1.3 compound eyes boost - break; - case ABILITY_VICTORY_STAR: - calc = (calc * 110) / 100; // 1.1 victory star boost - break; - case ABILITY_HUSTLE: - if (IsBattleMovePhysical(move)) - calc = (calc * 80) / 100; // 1.2 hustle loss - break; - } - - // Target's ability - switch (defAbility) - { - case ABILITY_SAND_VEIL: - if (HasWeatherEffect() && gBattleWeather & B_WEATHER_SANDSTORM) - calc = (calc * 80) / 100; // 1.2 sand veil loss - break; - case ABILITY_SNOW_CLOAK: - if (HasWeatherEffect() && (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) - calc = (calc * 80) / 100; // 1.2 snow cloak loss - break; - case ABILITY_TANGLED_FEET: - if (gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - calc = (calc * 50) / 100; // 1.5 tangled feet loss - break; - } - - // Attacker's ally's ability - switch (atkAllyAbility) - { - case ABILITY_VICTORY_STAR: - if (IsBattlerAlive(atkAlly)) - calc = (calc * 110) / 100; // 1.1 ally's victory star boost - break; - } - - // Attacker's hold effect - switch (atkHoldEffect) - { - case HOLD_EFFECT_WIDE_LENS: - calc = (calc * (100 + atkParam)) / 100; - break; - case HOLD_EFFECT_ZOOM_LENS: - if (GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef)) - calc = (calc * (100 + atkParam)) / 100; - break; - } - - // Target's hold effect - switch (defHoldEffect) - { - case HOLD_EFFECT_EVASION_UP: - calc = (calc * (100 - defParam)) / 100; - break; - } - - if (gBattleStruct->battlerState[battlerAtk].usedMicleBerry) - { - if (atkAbility == ABILITY_RIPEN) - calc = (calc * 140) / 100; // ripen gives 40% acc boost - else - calc = (calc * 120) / 100; // 20% acc boost - } - - if (gFieldStatuses & STATUS_FIELD_GRAVITY) - calc = (calc * 5) / 3; // 1.66 Gravity acc boost - - if (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(battlerDef) == AFFECTION_FIVE_HEARTS) - calc = (calc * 90) / 100; - - if (HasWeatherEffect() && gBattleWeather & B_WEATHER_FOG) - calc = (calc * 60) / 100; // modified by 3/5 - - return calc; -} - static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move) { if (move == ACC_CURR_MOVE) move = gCurrentMove; - enum BattleMoveEffects effect = GetMoveEffect(move); - u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); - enum ItemHoldEffect holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - if (move == NO_ACC_CALC_CHECK_LOCK_ON) { - if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) + if (gBattleMons[gBattlerTarget].volatiles.lockOn && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) + { gBattlescriptCurrInstr = nextInstr; - else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE)) + } + else if (IsSemiInvulnerable(gBattlerTarget, CHECK_ALL)) + { + if (gBattlerTarget != BATTLE_PARTNER(gBattlerAttacker)) + { + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleStruct->missStringId[gBattlerTarget] = gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_ATK; + } gBattlescriptCurrInstr = failInstr; - else if (!JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE, failInstr)) + } + else if (IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + { + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleStruct->missStringId[gBattlerTarget] = gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; + gLastLandedMoves[gBattlerTarget] = 0; + gLastHitByType[gBattlerTarget] = 0; + gBattlescriptCurrInstr = failInstr; + } + else + { gBattlescriptCurrInstr = nextInstr; + } + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) { if (gProtectStructs[gBattlerTarget].protected == PROTECT_MAX_GUARD) @@ -1719,10 +1425,16 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u GetBattlerAbility(gBattlerTarget), gCurrentMove, GetBattleMoveType(gCurrentMove), - ABILITY_RUN_SCRIPT); + RUN_SCRIPT); } + return; } - else if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT + + enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); + enum HoldEffect holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker); + enum BattleMoveEffects effect = GetMoveEffect(move); + + if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT || (gSpecialStatuses[gBattlerAttacker].multiHitOn && (abilityAtk == ABILITY_SKILL_LINK || holdEffectAtk == HOLD_EFFECT_LOADED_DICE || !(effect == EFFECT_TRIPLE_KICK || effect == EFFECT_POPULATION_BOMB)))) @@ -1732,33 +1444,37 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u } else { - u32 numTargets = 0; - u32 numMisses = 0; - u32 moveType = GetBattleMoveType(move); - u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); + u32 battlerDef, + numTargets = 0, + numMisses = 0, + moveType = GetBattleMoveType(move), + moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); bool32 calcSpreadMove = IsSpreadMove(moveTarget) && !IsBattleMoveStatus(move); - for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { if (gBattleStruct->calculatedSpreadMoveAccuracy) break; if ((!calcSpreadMove && battlerDef != gBattlerTarget) || IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) - || (gBattleStruct->noResultString[battlerDef] && gBattleStruct->noResultString[battlerDef] != DO_ACCURACY_CHECK)) + || gBattleStruct->noResultString[battlerDef] == WILL_FAIL) continue; numTargets++; - if (JumpIfMoveAffectedByProtect(move, battlerDef, FALSE, failInstr) || AccuracyCalcHelper(move, battlerDef)) + enum Ability abilityDef = GetBattlerAbility(battlerDef); + if (JumpIfMoveAffectedByProtect(move, battlerDef, FALSE, failInstr) + || CanMoveSkipAccuracyCalc(gBattlerAttacker, battlerDef, abilityAtk, abilityDef, move, RUN_SCRIPT)) continue; + u32 holdEffectDef = GetBattlerHoldEffect(battlerDef); u32 accuracy = GetTotalAccuracy(gBattlerAttacker, battlerDef, move, abilityAtk, - GetBattlerAbility(battlerDef), + abilityDef, holdEffectAtk, - GetBattlerHoldEffect(battlerDef, TRUE)); + holdEffectDef); if (!RandomPercentage(RNG_ACCURACY, accuracy)) { @@ -1783,7 +1499,21 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u } if (GetMovePower(move) != 0) - CalcTypeEffectivenessMultiplier(move, moveType, gBattlerAttacker, battlerDef, GetBattlerAbility(battlerDef), TRUE); + { + struct DamageContext ctx = {0}; + ctx.battlerAtk = gBattlerAttacker; + ctx.battlerDef = battlerDef; + ctx.move = move; + ctx.chosenMove = gChosenMove; + ctx.moveType = moveType; + ctx.updateFlags = TRUE; + ctx.abilityAtk = abilityAtk; + ctx.abilityDef = abilityDef; + ctx.holdEffectAtk = holdEffectAtk; + ctx.holdEffectDef = holdEffectDef; + + CalcTypeEffectivenessMultiplier(&ctx); + } } } @@ -1810,76 +1540,20 @@ static void Cmd_accuracycheck(void) AccuracyCheck(FALSE, cmd->nextInstr, cmd->failInstr, cmd->move); } -static void Cmd_attackstring(void) +static void Cmd_printattackstring(void) { CMD_ARGS(); if (gBattleControllerExecFlags) return; - if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED))) - { - PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker); - gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; - } - gBattlescriptCurrInstr = cmd->nextInstr; + PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 0; + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_ppreduce(void) +static void Cmd_unused_0x3(void) { - CMD_ARGS(); - - s32 i, ppToDeduct = 1; - u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); - - if (gBattleControllerExecFlags) - return; - - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; - - if (moveTarget == MOVE_TARGET_BOTH - || moveTarget == MOVE_TARGET_FOES_AND_ALLY - || moveTarget == MOVE_TARGET_ALL_BATTLERS - || MoveForcesPressure(gCurrentMove)) - { - for (i = 0; i < gBattlersCount; i++) - { - if (!IsBattlerAlly(i, gBattlerAttacker) && IsBattlerAlive(i)) - ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE); - } - } - else if (moveTarget != MOVE_TARGET_OPPONENTS_FIELD) - { - if (gBattlerAttacker != gBattlerTarget && GetBattlerAbility(gBattlerTarget) == ABILITY_PRESSURE) - ppToDeduct++; - } - - if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBattlerAttacker].pp[gCurrMovePos]) - { - gProtectStructs[gBattlerAttacker].notFirstStrike = TRUE; - - // For item Metronome, echoed voice - if (gCurrentMove != gLastResultingMoves[gBattlerAttacker] || WasUnableToUseMove(gBattlerAttacker)) - gBattleStruct->sameMoveTurns[gBattlerAttacker] = 0; - - if (gBattleMons[gBattlerAttacker].pp[gCurrMovePos] > ppToDeduct) - gBattleMons[gBattlerAttacker].pp[gCurrMovePos] -= ppToDeduct; - else - gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 0; - - if (MOVE_IS_PERMANENT(gBattlerAttacker, gCurrMovePos)) - { - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, - sizeof(gBattleMons[gBattlerAttacker].pp[gCurrMovePos]), - &gBattleMons[gBattlerAttacker].pp[gCurrMovePos]); - MarkBattlerForControllerExec(gBattlerAttacker); - } - } - - gHitMarker &= ~HITMARKER_NO_PPDEDUCT; - gBattlescriptCurrInstr = cmd->nextInstr; } // The chance is 1/N for each stage. @@ -1890,17 +1564,17 @@ static const u32 sGen2CriticalHitOdds[] = {17, 32, 64, 85, 128}; // X/256 static inline u32 GetCriticalHitOdds(u32 critChance) { - if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) >= GEN_7) + if (GetConfig(CONFIG_CRIT_CHANCE) >= GEN_7) return sGen7CriticalHitOdds[critChance]; - if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_6) + if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_6) return sGen6CriticalHitOdds[critChance]; - if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_2) + if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_2) return sGen2CriticalHitOdds[critChance]; return sCriticalHitOdds[critChance]; } -static inline u32 IsBattlerLeekAffected(u32 battler, enum ItemHoldEffect holdEffect) +static inline u32 IsBattlerLeekAffected(u32 battler, enum HoldEffect holdEffect) { if (holdEffect == HOLD_EFFECT_LEEK) { @@ -1910,7 +1584,7 @@ static inline u32 IsBattlerLeekAffected(u32 battler, enum ItemHoldEffect holdEff return FALSE; } -static inline u32 GetHoldEffectCritChanceIncrease(u32 battler, enum ItemHoldEffect holdEffect) +static inline u32 GetHoldEffectCritChanceIncrease(u32 battler, enum HoldEffect holdEffect) { u32 critStageIncrease = 0; @@ -1935,15 +1609,15 @@ static inline u32 GetHoldEffectCritChanceIncrease(u32 battler, enum ItemHoldEffe return critStageIncrease; } -s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, enum ItemHoldEffect holdEffectAtk) +s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, enum Ability abilityAtk, enum Ability abilityDef, enum HoldEffect holdEffectAtk) { s32 critChance = 0; - if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT) + if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_LUCKY_CHANT) { critChance = CRITICAL_HIT_BLOCKED; } - else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS + else if (gBattleMons[battlerAtk].volatiles.laserFocus || MoveAlwaysCrits(move) || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) { @@ -1951,13 +1625,13 @@ s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordA } else { - critChance = 2 * ((gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY) != 0) - + 1 * ((gBattleMons[battlerAtk].status2 & STATUS2_DRAGON_CHEER) != 0) + critChance = (gBattleMons[battlerAtk].volatiles.focusEnergy != 0 ? 2 : 0) + + (gBattleMons[battlerAtk].volatiles.dragonCheer != 0 ? 1 : 0) + GetMoveCriticalHitStage(move) + GetHoldEffectCritChanceIncrease(battlerAtk, holdEffectAtk) - + 2 * (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(battlerAtk) == AFFECTION_FIVE_HEARTS) - + (abilityAtk == ABILITY_SUPER_LUCK) - + gBattleStruct->bonusCritStages[gBattlerAttacker]; + + ((B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(battlerAtk) == AFFECTION_FIVE_HEARTS) ? 2 : 0) + + (abilityAtk == ABILITY_SUPER_LUCK ? 1 : 0) + + gBattleMons[battlerAtk].volatiles.bonusCritStages; if (critChance >= ARRAY_COUNT(sCriticalHitOdds)) critChance = ARRAY_COUNT(sCriticalHitOdds) - 1; @@ -1984,13 +1658,13 @@ s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordA // Threshold = Base Speed / 2 // High crit move = 8 * (Base Speed / 2) // Focus Energy = 4 * (Base Speed / 2) -s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, enum ItemHoldEffect holdEffectAtk) +s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, enum Ability abilityAtk, enum Ability abilityDef, enum HoldEffect holdEffectAtk) { s32 critChance = 0; s32 moveCritStage = GetMoveCriticalHitStage(gCurrentMove); - s32 bonusCritStage = gBattleStruct->bonusCritStages[battlerAtk]; // G-Max Chi Strike + s32 bonusCritStage = gBattleMons[battlerAtk].volatiles.bonusCritStages; // G-Max Chi Strike u32 holdEffectCritStage = GetHoldEffectCritChanceIncrease(battlerAtk, holdEffectAtk); - u16 baseSpeed = gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed; + u16 baseSpeed = GetSpeciesBaseSpeed(gBattleMons[battlerAtk].species); critChance = baseSpeed / 2; @@ -2001,9 +1675,9 @@ s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec if (bonusCritStage > 0) critChance *= bonusCritStage; - if (gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY) + if (gBattleMons[battlerAtk].volatiles.focusEnergy) critChance *= 4; - else if (gBattleMons[battlerAtk].status2 & STATUS2_DRAGON_CHEER) + else if (gBattleMons[battlerAtk].volatiles.dragonCheer) critChance *= 2; if (holdEffectCritStage > 0) @@ -2026,7 +1700,7 @@ s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec } // Guaranteed crits - else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS + else if (gBattleMons[battlerAtk].volatiles.laserFocus || MoveAlwaysCrits(move) || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) { @@ -2048,14 +1722,14 @@ static void Cmd_critcalc(void) { CMD_ARGS(); - u32 partySlot = gBattlerPartyIndexes[gBattlerAttacker]; - u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + u32 partySlot = gBattlerPartyIndexes[gBattlerAttacker], + moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove), + battlerDef; bool32 calcSpreadMoveDamage = IsSpreadMove(moveTarget) && !IsBattleMoveStatus(gCurrentMove); - u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); - enum ItemHoldEffect holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); + enum HoldEffect holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker); gPotentialItemEffectBattler = gBattlerAttacker; - for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { if (gBattleStruct->calculatedDamageDone) break; @@ -2064,13 +1738,14 @@ static void Cmd_critcalc(void) continue; if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) - || gBattleStruct->noResultString[battlerDef] + || gBattleStruct->noResultString[battlerDef] != CAN_DAMAGE || gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT) continue; - u32 abilityDef = GetBattlerAbility(battlerDef); + enum Ability abilityDef = GetBattlerAbility(battlerDef); + enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); - if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) gBattleStruct->critChance[battlerDef] = CalcCritChanceStageGen1(gBattlerAttacker, battlerDef, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); else gBattleStruct->critChance[battlerDef] = CalcCritChanceStage(gBattlerAttacker, battlerDef, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); @@ -2083,9 +1758,9 @@ static void Cmd_critcalc(void) gSpecialStatuses[battlerDef].criticalHit = TRUE; else { - if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, gBattleStruct->critChance[battlerDef], 256); - else if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_2) + else if (GetConfig(CONFIG_CRIT_CHANCE) == GEN_2) gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, GetCriticalHitOdds(gBattleStruct->critChance[battlerDef]), 256); else gSpecialStatuses[battlerDef].criticalHit = RandomChance(RNG_CRITICAL_HIT, 1, GetCriticalHitOdds(gBattleStruct->critChance[battlerDef])); @@ -2100,18 +1775,18 @@ static void Cmd_critcalc(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static inline void CalculateAndSetMoveDamage(struct DamageCalculationData *damageCalcData, u32 battlerDef) +static inline void CalculateAndSetMoveDamage(struct DamageContext *ctx) { - SetDynamicMoveCategory(gBattlerAttacker, battlerDef, gCurrentMove); - damageCalcData->battlerDef = battlerDef; - damageCalcData->isCrit = gSpecialStatuses[battlerDef].criticalHit; - gBattleStruct->moveDamage[battlerDef] = CalculateMoveDamage(damageCalcData, 0); + SetDynamicMoveCategory(gBattlerAttacker, ctx->battlerDef, gCurrentMove); + ctx->isCrit = gSpecialStatuses[ctx->battlerDef].criticalHit; + ctx->fixedBasePower = 0; + gBattleStruct->moveDamage[ctx->battlerDef] = CalculateMoveDamage(ctx); // Slighly hacky but we need to check move result flags for distortion match-up as well but it can only be done after damage calcs - if (gSpecialStatuses[battlerDef].distortedTypeMatchups && gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT) + if (gSpecialStatuses[ctx->battlerDef].distortedTypeMatchups && gBattleStruct->moveResultFlags[ctx->battlerDef] & MOVE_RESULT_NO_EFFECT) { - gSpecialStatuses[battlerDef].distortedTypeMatchups = FALSE; - gSpecialStatuses[battlerDef].teraShellAbilityDone = FALSE; + gSpecialStatuses[ctx->battlerDef].distortedTypeMatchups = FALSE; + gSpecialStatuses[ctx->battlerDef].teraShellAbilityDone = FALSE; } } @@ -2127,12 +1802,13 @@ static void Cmd_damagecalc(void) u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); - struct DamageCalculationData damageCalcData; - damageCalcData.battlerAtk = gBattlerAttacker; - damageCalcData.move = gCurrentMove; - damageCalcData.moveType = GetBattleMoveType(gCurrentMove); - damageCalcData.randomFactor = TRUE; - damageCalcData.updateFlags = TRUE; + struct DamageContext ctx = {0}; + ctx.battlerAtk = gBattlerAttacker; + ctx.move = gCurrentMove; + ctx.chosenMove = gChosenMove; + ctx.moveType = GetBattleMoveType(gCurrentMove); + ctx.randomFactor = TRUE; + ctx.updateFlags = TRUE; if (IsSpreadMove(moveTarget)) { @@ -2140,16 +1816,18 @@ static void Cmd_damagecalc(void) for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) - || gBattleStruct->noResultString[battlerDef] + || gBattleStruct->noResultString[battlerDef] != CAN_DAMAGE || gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT) continue; - CalculateAndSetMoveDamage(&damageCalcData, battlerDef); + ctx.battlerDef = battlerDef; + CalculateAndSetMoveDamage(&ctx); } } else { - CalculateAndSetMoveDamage(&damageCalcData, gBattlerTarget); + ctx.battlerDef = gBattlerTarget; + CalculateAndSetMoveDamage(&ctx); } gBattlescriptCurrInstr = cmd->nextInstr; @@ -2159,10 +1837,21 @@ static void Cmd_typecalc(void) { CMD_ARGS(); - if (!IsSpreadMove(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove))) // Handled in CANCELLER_MULTI_TARGET_MOVES for Spread Moves + if (!IsSpreadMove(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove))) // Handled in CANCELER_MULTI_TARGET_MOVES for Spread Moves { - u32 moveType = GetBattleMoveType(gCurrentMove); - CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget), TRUE); + struct DamageContext ctx = {0}; + ctx.battlerAtk = gBattlerAttacker; + ctx.battlerDef = gBattlerTarget; + ctx.move = gCurrentMove; + ctx.chosenMove = gChosenMove; + ctx.moveType = GetBattleMoveType(gCurrentMove); + ctx.updateFlags = TRUE; + ctx.abilityAtk = GetBattlerAbility(gBattlerAttacker); + ctx.abilityDef = GetBattlerAbility(gBattlerTarget); + ctx.holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker); + ctx.holdEffectDef = GetBattlerHoldEffect(gBattlerTarget); + + CalcTypeEffectivenessMultiplier(&ctx); } gBattlescriptCurrInstr = cmd->nextInstr; @@ -2172,15 +1861,15 @@ static void Cmd_adjustdamage(void) { CMD_ARGS(); - enum ItemHoldEffect holdEffect; + enum HoldEffect holdEffect; u8 param; u32 battlerDef; u32 rand = Random() % 100; - u32 affectionScore = GetBattlerAffectionHearts(gBattlerTarget); + u32 affectionScore; u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); bool32 calcSpreadMoveDamage = IsSpreadMove(moveTarget) && !IsBattleMoveStatus(gCurrentMove); - bool32 enduredHit = FALSE; + u32 enduredHit = 0; for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { @@ -2191,7 +1880,7 @@ static void Cmd_adjustdamage(void) continue; if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) - || gBattleStruct->noResultString[battlerDef]) + || gBattleStruct->noResultString[battlerDef] != CAN_DAMAGE) continue; if (DoesSubstituteBlockMove(gBattlerAttacker, battlerDef, gCurrentMove)) @@ -2209,46 +1898,47 @@ static void Cmd_adjustdamage(void) gBattleStruct->moveResultFlags[battlerDef] &= ~(MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE); gBattleStruct->moveDamage[battlerDef] = 0; gSpecialStatuses[battlerDef].enduredDamage = TRUE; - RecordAbilityBattle(gBattlerTarget, ABILITY_ICE_FACE); + RecordAbilityBattle(battlerDef, ABILITY_ICE_FACE); gDisableStructs[battlerDef].iceFaceActivationPrevention = TRUE; // Form change will be done after attack animation in Cmd_resultmessage. continue; } - if (gBattleMons[gBattlerTarget].hp > gBattleStruct->moveDamage[battlerDef]) + if (gBattleMons[battlerDef].hp > gBattleStruct->moveDamage[battlerDef]) continue; - holdEffect = GetBattlerHoldEffect(battlerDef, TRUE); + holdEffect = GetBattlerHoldEffect(battlerDef); param = GetBattlerHoldEffectParam(battlerDef); + affectionScore = GetBattlerAffectionHearts(battlerDef); gPotentialItemEffectBattler = battlerDef; if (moveEffect == EFFECT_FALSE_SWIPE) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; } - else if (gProtectStructs[battlerDef].endured) + else if (gDisableStructs[battlerDef].endured) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_ENDURED; } else if (holdEffect == HOLD_EFFECT_FOCUS_BAND && rand < param) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; RecordItemEffectBattle(battlerDef, holdEffect); gLastUsedItem = gBattleMons[battlerDef].item; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_HUNG_ON; } - else if (B_STURDY >= GEN_5 && GetBattlerAbility(battlerDef) == ABILITY_STURDY && IsBattlerAtMaxHp(battlerDef)) + else if (GetConfig(CONFIG_STURDY) >= GEN_5 && GetBattlerAbility(battlerDef) == ABILITY_STURDY && IsBattlerAtMaxHp(battlerDef)) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; RecordAbilityBattle(battlerDef, ABILITY_STURDY); gLastUsedAbility = ABILITY_STURDY; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_STURDIED; } else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && IsBattlerAtMaxHp(battlerDef)) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; RecordItemEffectBattle(battlerDef, holdEffect); gLastUsedItem = gBattleMons[battlerDef].item; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_HUNG_ON; @@ -2259,16 +1949,17 @@ static void Cmd_adjustdamage(void) || (affectionScore == AFFECTION_FOUR_HEARTS && rand < 15) || (affectionScore == AFFECTION_THREE_HEARTS && rand < 10)) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_ENDURED_AFFECTION; } } // Handle reducing the dmg to 1 hp. - if (enduredHit) + if (enduredHit & 1u << battlerDef) { gBattleStruct->moveDamage[battlerDef] = gBattleMons[battlerDef].hp - 1; gSpecialStatuses[battlerDef].enduredDamage = TRUE; + gProtectStructs[battlerDef].assuranceDoubled = TRUE; } } @@ -2282,8 +1973,7 @@ static void Cmd_adjustdamage(void) && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleMons[gBattlerAttacker].item) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_GemActivates; + BattleScriptCall(BattleScript_GemActivates); gLastUsedItem = gBattleMons[gBattlerAttacker].item; } } @@ -2301,8 +1991,7 @@ static void Cmd_multihitresultmessage(void) if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_STURDIED) { gBattleStruct->moveResultFlags[gBattlerTarget] &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_HUNG_ON); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SturdiedMsg; + BattleScriptCall(BattleScript_SturdiedMsg); return; } else if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_FOE_HUNG_ON) @@ -2310,8 +1999,7 @@ static void Cmd_multihitresultmessage(void) gLastUsedItem = gBattleMons[gBattlerTarget].item; gPotentialItemEffectBattler = gBattlerTarget; gBattleStruct->moveResultFlags[gBattlerTarget] &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_HUNG_ON); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_HangedOnMsg; + BattleScriptCall(BattleScript_HangedOnMsg); return; } } @@ -2321,9 +2009,9 @@ static void Cmd_multihitresultmessage(void) static inline bool32 DoesBattlerNegateDamage(u32 battler) { u32 species = gBattleMons[battler].species; - u32 ability = GetBattlerAbility(battler); + enum Ability ability = GetBattlerAbility(battler); - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + if (gBattleMons[battler].volatiles.transformed) return FALSE; if (ability == ABILITY_DISGUISE && species == SPECIES_MIMIKYU) return TRUE; @@ -2340,8 +2028,8 @@ static u32 UpdateEffectivenessResultFlagsForDoubleSpreadMoves(u32 resultFlags) { for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { - if ((gBattleStruct->moveResultFlags[battlerDef] & (MOVE_RESULT_MISSED | MOVE_RESULT_NO_EFFECT) - || gBattleStruct->noResultString[battlerDef])) + if (gBattleStruct->moveResultFlags[battlerDef] & (MOVE_RESULT_MISSED | MOVE_RESULT_NO_EFFECT) + || gBattleStruct->noResultString[battlerDef] != CAN_DAMAGE) continue; switch (sound) @@ -2377,8 +2065,7 @@ static inline bool32 TryStrongWindsWeakenAttack(u32 battlerDef, u32 moveType) && !gBattleStruct->printedStrongWindsWeakenedAttack) { gBattleStruct->printedStrongWindsWeakenedAttack = TRUE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AttackWeakenedByStrongWinds; + BattleScriptCall(BattleScript_AttackWeakenedByStrongWinds); return TRUE; } } @@ -2392,8 +2079,7 @@ static inline bool32 TryTeraShellDistortTypeMatchups(u32 battlerDef) { gSpecialStatuses[battlerDef].teraShellAbilityDone = FALSE; gBattleScripting.battler = battlerDef; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TeraShellDistortingTypeMatchups; + BattleScriptCall(BattleScript_TeraShellDistortingTypeMatchups); return TRUE; } return FALSE; @@ -2401,15 +2087,19 @@ static inline bool32 TryTeraShellDistortTypeMatchups(u32 battlerDef) // According to Gen5 Weakness berry activation happens after the attackanimation. // It doesn't have any impact on gameplay and is only a visual thing which can be adjusted later. -static inline bool32 TryActivateWeakenessBerry(u32 battlerDef) +static inline bool32 TryActivateWeaknessBerry(u32 battlerDef) { + if (DoesDisguiseBlockMove(battlerDef, gCurrentMove)) + { + gSpecialStatuses[battlerDef].berryReduced = FALSE; + return FALSE; + } if (gSpecialStatuses[battlerDef].berryReduced && gBattleMons[battlerDef].item != ITEM_NONE) { gBattleScripting.battler = battlerDef; gLastUsedItem = gBattleMons[battlerDef].item; - gBattleStruct->partyState[GetBattlerSide(battlerDef)][gBattlerPartyIndexes[battlerDef]].ateBerry = TRUE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryReduceDmg; + GetBattlerPartyState(battlerDef)->ateBerry = TRUE; + BattleScriptCall(BattleScript_BerryReduceDmg); return TRUE; } @@ -2422,13 +2112,14 @@ static bool32 ProcessPreAttackAnimationFuncs(void) if (IsDoubleSpreadMove()) { u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + if (!gBattleStruct->printedStrongWindsWeakenedAttack) { for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) || (battlerDef == BATTLE_PARTNER(gBattlerAttacker) && !(moveTarget & MOVE_TARGET_FOES_AND_ALLY)) - || (gBattleStruct->noResultString[battlerDef] && gBattleStruct->noResultString[battlerDef] != DO_ACCURACY_CHECK)) + || gBattleStruct->noResultString[battlerDef] == WILL_FAIL) continue; if (TryStrongWindsWeakenAttack(battlerDef, moveType)) @@ -2440,12 +2131,12 @@ static bool32 ProcessPreAttackAnimationFuncs(void) { if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) || (battlerDef == BATTLE_PARTNER(gBattlerAttacker) && !(moveTarget & MOVE_TARGET_FOES_AND_ALLY)) - || (gBattleStruct->noResultString[battlerDef] && gBattleStruct->noResultString[battlerDef] != DO_ACCURACY_CHECK)) + || gBattleStruct->noResultString[battlerDef] == WILL_FAIL) continue; if (TryTeraShellDistortTypeMatchups(battlerDef)) return TRUE; - if (TryActivateWeakenessBerry(battlerDef)) + if (TryActivateWeaknessBerry(battlerDef)) return TRUE; } } @@ -2455,7 +2146,7 @@ static bool32 ProcessPreAttackAnimationFuncs(void) return TRUE; if (TryTeraShellDistortTypeMatchups(gBattlerTarget)) return TRUE; - if (TryActivateWeakenessBerry(gBattlerTarget)) + if (TryActivateWeaknessBerry(gBattlerTarget)) return TRUE; } @@ -2471,14 +2162,15 @@ static void Cmd_attackanimation(void) u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); u32 moveResultFlags = gBattleStruct->moveResultFlags[gBattlerTarget]; + enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); if (IsDoubleSpreadMove()) moveResultFlags = UpdateEffectivenessResultFlagsForDoubleSpreadMoves(gBattleStruct->moveResultFlags[gBattlerTarget]); if ((gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION)) - && gCurrentMove != MOVE_TRANSFORM - && gCurrentMove != MOVE_SUBSTITUTE - && gCurrentMove != MOVE_ALLY_SWITCH + && effect != EFFECT_TRANSFORM + && effect != EFFECT_SUBSTITUTE + && effect != EFFECT_ALLY_SWITCH // In a wild double battle gotta use the teleport animation if two wild pokemon are alive. && !(GetMoveEffect(gCurrentMove) == EFFECT_TELEPORT && WILD_DOUBLE_BATTLE && !IsOnPlayerSide(gBattlerAttacker) && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))) { @@ -2511,7 +2203,7 @@ static void Cmd_attackanimation(void) if (!(moveResultFlags & MOVE_RESULT_NO_EFFECT)) { u32 multihit; - if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) + if (gBattleMons[gBattlerTarget].volatiles.substitute) { multihit = gMultiHitCounter; } @@ -2536,6 +2228,10 @@ static void Cmd_attackanimation(void) gBattleMons[gBattlerAttacker].friendship, &gDisableStructs[gBattlerAttacker], multihit); +#if T_SHOULD_RUN_MOVE_ANIM + gCountAllocs = TRUE; + gSpriteAllocs = 0; +#endif gBattleScripting.animTurn++; gBattleScripting.animTargetsHit++; MarkBattlerForControllerExec(gBattlerAttacker); @@ -2553,31 +2249,33 @@ static void Cmd_waitanimation(void) { CMD_ARGS(); - if (gBattleControllerExecFlags == 0) + if (gBattleControllerExecFlags == 0 && gBattleStruct->battlerKOAnimsRunning == 0) + { +#if T_SHOULD_RUN_MOVE_ANIM + gCountAllocs = FALSE; +#endif gBattlescriptCurrInstr = cmd->nextInstr; + } } static void DoublesHPBarReduction(void) { - if (gBattleStruct->doneDoublesSpreadHit - || gHitMarker & (HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE)) + if (gBattleStruct->doneDoublesSpreadHit) return; for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { if (gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT || gBattleStruct->moveDamage[battlerDef] == 0 - || gBattleStruct->noResultString[battlerDef] + || gBattleStruct->noResultString[battlerDef] != CAN_DAMAGE || DoesSubstituteBlockMove(gBattlerAttacker, battlerDef, gCurrentMove) || DoesDisguiseBlockMove(battlerDef, gCurrentMove)) continue; - s32 currDmg = gBattleStruct->moveDamage[battlerDef]; - s32 healthValue = min(currDmg, 10000); // Max damage (10000) not present in R/S, ensures that huge damage values don't change sign - BtlController_EmitHealthBarUpdate(battlerDef, B_COMM_TO_CONTROLLER, healthValue); + s32 dmgUpdate = min(gBattleStruct->moveDamage[battlerDef], 10000); + BtlController_EmitHealthBarUpdate(battlerDef, B_COMM_TO_CONTROLLER, dmgUpdate); MarkBattlerForControllerExec(battlerDef); - - if (IsOnPlayerSide(battlerDef) && currDmg > 0) + if (IsOnPlayerSide(battlerDef) && dmgUpdate > 0) gBattleResults.playerMonWasDamaged = TRUE; } @@ -2586,170 +2284,201 @@ static void DoublesHPBarReduction(void) static void Cmd_healthbarupdate(void) { - CMD_ARGS(u8 battler); + CMD_ARGS(u8 battler, u8 updateState); u32 battler = GetBattlerForBattleScript(cmd->battler); if (gBattleControllerExecFlags) return; - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) + switch (cmd->updateState) { - if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && gDisableStructs[battler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) - { + case PASSIVE_HP_UPDATE: + BtlController_EmitHealthBarUpdate(battler, B_COMM_TO_CONTROLLER, min(gBattleStruct->passiveHpUpdate[battler], 10000)); + MarkBattlerForControllerExec(battler); + break; + case MOVE_DAMAGE_HP_UPDATE: + if (IsDoubleSpreadMove()) + { + DoublesHPBarReduction(); + if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove)) + PrepareStringBattle(STRINGID_SUBSTITUTEDAMAGED, battler); + } + else if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove)) + { PrepareStringBattle(STRINGID_SUBSTITUTEDAMAGED, battler); - if (IsDoubleSpreadMove()) - DoublesHPBarReduction(); } - else if (!DoesDisguiseBlockMove(battler, gCurrentMove)) + else if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + && !DoesDisguiseBlockMove(battler, gCurrentMove)) { - if (IsDoubleSpreadMove()) - { - DoublesHPBarReduction(); - } - else - { - s16 healthValue = min(gBattleStruct->moveDamage[battler], 10000); // Max damage (10000) not present in R/S, ensures that huge damage values don't change sign - - BtlController_EmitHealthBarUpdate(battler, B_COMM_TO_CONTROLLER, healthValue); - MarkBattlerForControllerExec(battler); - - if (IsOnPlayerSide(battler) && gBattleStruct->moveDamage[battler] > 0) - gBattleResults.playerMonWasDamaged = TRUE; - } + s32 damage = min(gBattleStruct->moveDamage[battler], 10000); + BtlController_EmitHealthBarUpdate(battler, B_COMM_TO_CONTROLLER, damage); + MarkBattlerForControllerExec(battler); + if (IsOnPlayerSide(battler) && damage > 0) + gBattleResults.playerMonWasDamaged = TRUE; } - } - else if (IsDoubleSpreadMove()) - { - DoublesHPBarReduction(); + break; } gBattlescriptCurrInstr = cmd->nextInstr; } -// Update the active battler's HP and various HP trackers (Substitute, Bide, etc.) -static void Cmd_datahpupdate(void) +static void PassiveDataHpUpdate(u32 battler, const u8 *nextInstr) { - CMD_ARGS(u8 battler); + if (gBattleStruct->passiveHpUpdate[battler] < 0) + { + // Negative damage is HP gain + gBattleMons[battler].hp += -gBattleStruct->passiveHpUpdate[battler]; + if (gBattleMons[battler].hp > gBattleMons[battler].maxHP) + gBattleMons[battler].hp = gBattleMons[battler].maxHP; + } + else + { + if (gBattleMons[battler].hp > gBattleStruct->passiveHpUpdate[battler]) + gBattleMons[battler].hp -= gBattleStruct->passiveHpUpdate[battler]; + else + gBattleMons[battler].hp = 0; + // Since this is reset for the next turn, it should be fine to set it here. + gProtectStructs[battler].assuranceDoubled = TRUE; + } - if (gBattleControllerExecFlags) - return; + // Send updated HP + BtlController_EmitSetMonData( + battler, + B_COMM_TO_CONTROLLER, + REQUEST_HP_BATTLE, + 0, + sizeof(gBattleMons[battler].hp), &gBattleMons[battler].hp); + MarkBattlerForControllerExec(battler); - u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattleStruct->passiveHpUpdate[battler] = 0; + gBattlescriptCurrInstr = nextInstr; +} - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) +static void MoveDamageDataHpUpdate(u32 battler, u32 scriptBattler, const u8 *nextInstr) +{ + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + { + gBattlescriptCurrInstr = nextInstr; + return; + } + else if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && gDisableStructs[battler].substituteHP) { - if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && gDisableStructs[battler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + if (gDisableStructs[battler].substituteHP >= gBattleStruct->moveDamage[battler]) { - if (gDisableStructs[battler].substituteHP >= gBattleStruct->moveDamage[battler]) - { - gDisableStructs[battler].substituteHP -= gBattleStruct->moveDamage[battler]; - } - else - { - gBattleStruct->moveDamage[battler] = gDisableStructs[battler].substituteHP; - gDisableStructs[battler].substituteHP = 0; - } - // check substitute fading - if (gDisableStructs[battler].substituteHP == 0) - { - gBattlescriptCurrInstr = cmd->nextInstr; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SubstituteFade; - return; - } + TestRunner_Battle_RecordSubHit(battler, gBattleStruct->moveDamage[battler], FALSE); + gDisableStructs[battler].substituteHP -= gBattleStruct->moveDamage[battler]; } - else if (DoesDisguiseBlockMove(battler, gCurrentMove)) + else { - // TODO: Convert this to a proper FORM_CHANGE type. - u32 side = GetBattlerSide(battler); - gBattleScripting.battler = battler; - if (gBattleStruct->changedSpecies[side][gBattlerPartyIndexes[battler]] == SPECIES_NONE) - gBattleStruct->changedSpecies[side][gBattlerPartyIndexes[battler]] = gBattleMons[battler].species; - if (gBattleMons[battler].species == SPECIES_MIMIKYU_TOTEM_DISGUISED) - gBattleMons[battler].species = SPECIES_MIMIKYU_BUSTED_TOTEM; - else - gBattleMons[battler].species = SPECIES_MIMIKYU_BUSTED; - if (B_DISGUISE_HP_LOSS >= GEN_8) - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TargetFormChange; - return; + TestRunner_Battle_RecordSubHit(battler, gDisableStructs[battler].substituteHP, TRUE); + gBattleStruct->moveDamage[battler] = gDisableStructs[battler].substituteHP; + gDisableStructs[battler].substituteHP = 0; + } + // check substitute fading + if (gDisableStructs[battler].substituteHP == 0) + { + gBattlescriptCurrInstr = nextInstr; + BattleScriptCall(BattleScript_SubstituteFade); + } + else + { + gBattlescriptCurrInstr = nextInstr; + } + return; + } + else if (DoesDisguiseBlockMove(battler, gCurrentMove)) + { + // TODO: Convert this to a proper FORM_CHANGE type. + gBattleScripting.battler = battler; + gBattleStruct->moveDamage[battler] = 0; + gBattleStruct->moveResultFlags[battler] &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE); + if (GetBattlerPartyState(battler)->changedSpecies == SPECIES_NONE) + GetBattlerPartyState(battler)->changedSpecies = gBattleMons[battler].species; + if (gBattleMons[battler].species == SPECIES_MIMIKYU_TOTEM_DISGUISED) + gBattleMons[battler].species = SPECIES_MIMIKYU_BUSTED_TOTEM; + else + gBattleMons[battler].species = SPECIES_MIMIKYU_BUSTED; + if (GetConfig(CONFIG_DISGUISE_HP_LOSS) >= GEN_8) + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8); + BattleScriptPush(nextInstr); + gBattlescriptCurrInstr = BattleScript_TargetFormChange; + } + else + { + if (gBattleStruct->moveDamage[battler] < 0) + { + // Negative damage is HP gain + gBattleMons[battler].hp += -gBattleStruct->moveDamage[battler]; + if (gBattleMons[battler].hp > gBattleMons[battler].maxHP) + gBattleMons[battler].hp = gBattleMons[battler].maxHP; } else { - gHitMarker &= ~HITMARKER_IGNORE_SUBSTITUTE; - if (gBattleStruct->moveDamage[battler] < 0) + gBideDmg[battler] += gBattleStruct->moveDamage[battler]; + if (scriptBattler == BS_TARGET) + gBideTarget[battler] = gBattlerAttacker; + else + gBideTarget[battler] = gBattlerTarget; + + // Deal damage to the battler + if (gBattleMons[battler].hp > gBattleStruct->moveDamage[battler]) { - // Negative damage is HP gain - gBattleMons[battler].hp += -gBattleStruct->moveDamage[battler]; - if (gBattleMons[battler].hp > gBattleMons[battler].maxHP) - gBattleMons[battler].hp = gBattleMons[battler].maxHP; + gBattleMons[battler].hp -= gBattleStruct->moveDamage[battler]; } else { - if (gHitMarker & HITMARKER_IGNORE_BIDE) - { - gHitMarker &= ~HITMARKER_IGNORE_BIDE; - } - else - { - gBideDmg[battler] += gBattleStruct->moveDamage[battler]; - if (cmd->battler == BS_TARGET) - gBideTarget[battler] = gBattlerAttacker; - else - gBideTarget[battler] = gBattlerTarget; - } + gBattleStruct->moveDamage[battler] = gBattleMons[battler].hp; + gBattleMons[battler].hp = 0; + } + gProtectStructs[battler].assuranceDoubled = TRUE; + gProtectStructs[battler].revengeDoubled |= 1u << gBattlerAttacker; - // Deal damage to the battler - if (gBattleMons[battler].hp > gBattleStruct->moveDamage[battler]) - { - gBattleMons[battler].hp -= gBattleStruct->moveDamage[battler]; - } - else - { - gBattleStruct->moveDamage[battler] = gBattleMons[battler].hp; - gBattleMons[battler].hp = 0; - } + } + // Send updated HP + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[battler].hp), &gBattleMons[battler].hp); + MarkBattlerForControllerExec(battler); + gBattlescriptCurrInstr = nextInstr; + } - enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); + // Note: While physicalDmg/specialDmg below are only distinguished between for Counter/Mirror Coat, + // they are used in combination as general damage trackers for other purposes. + if (IsBattleMovePhysical(gCurrentMove)) + { + gProtectStructs[battler].physicalDmg = gBattleStruct->moveDamage[battler] + 1; + gSpecialStatuses[battler].physicalDmg = gBattleStruct->moveDamage[battler] + 1; + gProtectStructs[battler].physicalBattlerId = gBattlerAttacker; + } + else // Special move + { + gProtectStructs[battler].specialDmg = gBattleStruct->moveDamage[battler] + 1; + gSpecialStatuses[battler].specialDmg = gBattleStruct->moveDamage[battler] + 1; + gProtectStructs[battler].specialBattlerId = gBattlerAttacker; + } - // Note: While physicalDmg/specialDmg below are only distinguished between for Counter/Mirror Coat, they are - // used in combination as general damage trackers for other purposes. specialDmg is additionally used - // to help determine if a fire move should defrost the target. - if (IsBattleMovePhysical(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && effect != EFFECT_PAIN_SPLIT) - { - gProtectStructs[battler].physicalDmg = gBattleStruct->moveDamage[battler]; - gSpecialStatuses[battler].physicalDmg = gBattleStruct->moveDamage[battler]; - if (cmd->battler == BS_TARGET) - gProtectStructs[battler].physicalBattlerId = gBattlerAttacker; - else - gProtectStructs[battler].physicalBattlerId = gBattlerTarget; - } - else if (!IsBattleMovePhysical(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && effect != EFFECT_PAIN_SPLIT) - { - // Record special damage/attacker for Mirror Coat - gProtectStructs[battler].specialDmg = gBattleStruct->moveDamage[battler]; - gSpecialStatuses[battler].specialDmg = gBattleStruct->moveDamage[battler]; - if (cmd->battler == BS_TARGET) - gProtectStructs[battler].specialBattlerId = gBattlerAttacker; - else - gProtectStructs[battler].specialBattlerId = gBattlerTarget; - } - } - gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; - // Send updated HP - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[battler].hp), &gBattleMons[battler].hp); - MarkBattlerForControllerExec(battler); - } + if (IsBattlerTurnDamaged(gBattlerTarget) && GetMoveCategory(gCurrentMove) != DAMAGE_CATEGORY_STATUS) + GetBattlerPartyState(battler)->timesGotHit++; +} - if (gBattlerAttacker != gBattlerTarget - && GetMoveCategory(gCurrentMove) != DAMAGE_CATEGORY_STATUS - && IsBattlerTurnDamaged(gBattlerTarget)) - gBattleStruct->timesGotHit[GetBattlerSide(gBattlerTarget)][gBattlerPartyIndexes[gBattlerTarget]]++; +static void Cmd_datahpupdate(void) +{ + CMD_ARGS(u8 battler, u8 updateState); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (gBattleControllerExecFlags) + return; + + switch (cmd->updateState) + { + case PASSIVE_HP_UPDATE: + PassiveDataHpUpdate(battler, cmd->nextInstr); + break; + case MOVE_DAMAGE_HP_UPDATE: + MoveDamageDataHpUpdate(battler, cmd->battler, cmd->nextInstr); + break; } + if (gBattleMons[battler].hp > gBattleMons[battler].maxHP / 2) + gBattleStruct->battlerState[battler].wasAboveHalfHp = TRUE; - TryRestoreDamageAfterCheekPouch(battler); - gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_critmessage(void) @@ -2840,7 +2569,7 @@ static inline bool32 ShouldPrintTwoFoesMessage(u32 moveResult) { return gBattlerTarget == BATTLE_OPPOSITE(gBattlerAttacker) && gBattleStruct->moveResultFlags[BATTLE_PARTNER(gBattlerTarget)] & moveResult - && !gBattleStruct->noResultString[BATTLE_PARTNER(gBattlerTarget)]; + && gBattleStruct->noResultString[BATTLE_PARTNER(gBattlerTarget)] == CAN_DAMAGE; } static inline bool32 ShouldRelyOnTwoFoesMessage(u32 moveResult) @@ -2848,7 +2577,7 @@ static inline bool32 ShouldRelyOnTwoFoesMessage(u32 moveResult) return gBattlerTarget == BATTLE_PARTNER(BATTLE_OPPOSITE(gBattlerAttacker)) && gBattleStruct->moveResultFlags[BATTLE_OPPOSITE(gBattlerAttacker)] & moveResult && !(gBattleStruct->moveResultFlags[BATTLE_OPPOSITE(gBattlerAttacker)] & MOVE_RESULT_MISSED && gBattleStruct->missStringId[BATTLE_OPPOSITE(gBattlerAttacker)] > B_MSG_AVOIDED_ATK) - && !gBattleStruct->noResultString[BATTLE_OPPOSITE(gBattlerAttacker)]; + && gBattleStruct->noResultString[BATTLE_OPPOSITE(gBattlerAttacker)] == CAN_DAMAGE; } static void Cmd_resultmessage(void) @@ -2866,13 +2595,11 @@ static void Cmd_resultmessage(void) if (gDisableStructs[gBattlerTarget].iceFaceActivationPrevention) { gDisableStructs[gBattlerTarget].iceFaceActivationPrevention = FALSE; - u32 side = GetBattlerSide(gBattlerTarget); - if (gBattleStruct->changedSpecies[side][gBattlerPartyIndexes[gBattlerTarget]] == SPECIES_NONE) - gBattleStruct->changedSpecies[side][gBattlerPartyIndexes[gBattlerTarget]] = gBattleMons[gBattlerTarget].species; + if (GetBattlerPartyState(gBattlerTarget)->changedSpecies == SPECIES_NONE) + GetBattlerPartyState(gBattlerTarget)->changedSpecies = gBattleMons[gBattlerTarget].species; gBattleMons[gBattlerTarget].species = SPECIES_EISCUE_NOICE; gBattleScripting.battler = gBattlerTarget; // For STRINGID_PKMNTRANSFORMED - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_IceFaceNullsDamage; + BattleScriptCall(BattleScript_IceFaceNullsDamage); return; } @@ -2883,13 +2610,19 @@ static void Cmd_resultmessage(void) { gMultiHitCounter = 0; *moveResultFlags &= ~MOVE_RESULT_MISSED; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings; + BattleScriptCall(BattleScript_MultiHitPrintStrings); + return; + } + + if (gBattleStruct->missStringId[gBattlerTarget] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate + { + gBattlerAbility = gBattlerTarget; + gBattleCommunication[MULTISTRING_CHOOSER] = gBattleStruct->missStringId[gBattlerTarget]; + gBattlescriptCurrInstr = cmd->nextInstr; + BattleScriptCall(BattleScript_AbilityAvoidsDamage); return; } - if (gBattleStruct->missStringId[gBattlerTarget] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate - show the ability pop-up - CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, IsDoubleBattle()); gBattleCommunication[MSG_DISPLAY] = 1; stringId = gMissStringIds[gBattleStruct->missStringId[gBattlerTarget]]; } @@ -2962,8 +2695,7 @@ static void Cmd_resultmessage(void) gLastUsedItem = gBattleMons[gBattlerTarget].item; gPotentialItemEffectBattler = gBattlerTarget; *moveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_HangedOnMsg; + BattleScriptCall(BattleScript_HangedOnMsg); return; default: if (*moveResultFlags & MOVE_RESULT_ONE_HIT_KO) @@ -2971,22 +2703,19 @@ static void Cmd_resultmessage(void) *moveResultFlags &= ~MOVE_RESULT_ONE_HIT_KO; *moveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE; *moveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_OneHitKOMsg; + BattleScriptCall(BattleScript_OneHitKOMsg); return; } else if (*moveResultFlags & MOVE_RESULT_STURDIED) { *moveResultFlags &= ~(MOVE_RESULT_STURDIED | MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SturdiedMsg; + BattleScriptCall(BattleScript_SturdiedMsg); return; } else if (*moveResultFlags & MOVE_RESULT_FOE_ENDURED) { *moveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EnduredMsg; + BattleScriptCall(BattleScript_EnduredMsg); return; } else if (*moveResultFlags & MOVE_RESULT_FOE_HUNG_ON) @@ -2994,8 +2723,7 @@ static void Cmd_resultmessage(void) gLastUsedItem = gBattleMons[gBattlerTarget].item; gPotentialItemEffectBattler = gBattlerTarget; *moveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_HangedOnMsg; + BattleScriptCall(BattleScript_HangedOnMsg); return; } else if (*moveResultFlags & MOVE_RESULT_FAILED) @@ -3005,8 +2733,7 @@ static void Cmd_resultmessage(void) else if (B_AFFECTION_MECHANICS == TRUE && (*moveResultFlags & MOVE_RESULT_FOE_ENDURED_AFFECTION)) { *moveResultFlags &= ~MOVE_RESULT_FOE_ENDURED_AFFECTION; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AffectionBasedEndurance; + BattleScriptCall(BattleScript_AffectionBasedEndurance); return; } } @@ -3101,9 +2828,20 @@ static void Cmd_printselectionstringfromtable(void) } } -u8 GetBattlerTurnOrderNum(u8 battler) +bool32 HasBattlerActedThisTurn(u32 battler) { - s32 i; + u32 i; + for (i = 0; i < gCurrentTurnActionNumber; i++) + { + if (gBattlerByTurnOrder[i] == battler) + return TRUE; + } + return FALSE; +} + +u32 GetBattlerTurnOrderNum(u32 battler) +{ + u32 i; for (i = 0; i < gBattlersCount; i++) { if (gBattlerByTurnOrder[i] == battler) @@ -3114,22 +2852,19 @@ u8 GetBattlerTurnOrderNum(u8 battler) static void CheckSetUnburden(u8 battler) { - if (GetBattlerAbility(battler) == ABILITY_UNBURDEN) - { + if (IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_UNBURDEN)) gDisableStructs[battler].unburdenActive = TRUE; - RecordAbilityBattle(battler, ABILITY_UNBURDEN); - } } -// battlerStealer steals the item of battlerItem -void StealTargetItem(u8 battlerStealer, u8 battlerItem) +// battlerStealer steals the item of itemBattler +void StealTargetItem(u8 battlerStealer, u8 itemBattler) { - gLastUsedItem = gBattleMons[battlerItem].item; - gBattleMons[battlerItem].item = ITEM_NONE; + gLastUsedItem = gBattleMons[itemBattler].item; + gBattleMons[itemBattler].item = ITEM_NONE; - if (B_STEAL_WILD_ITEMS >= GEN_9 + if (GetConfig(CONFIG_STEAL_WILD_ITEMS) >= GEN_9 && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE)) - && MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_STEAL_ITEM) + && GetMoveEffect(gCurrentMove) == EFFECT_STEAL_ITEM && battlerStealer == gBattlerAttacker) // ensure that Pickpocket isn't activating this { AddBagItem(gLastUsedItem, 1); @@ -3144,15 +2879,16 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem) MarkBattlerForControllerExec(battlerStealer); } - RecordItemEffectBattle(battlerItem, ITEM_NONE); - CheckSetUnburden(battlerItem); + RecordItemEffectBattle(itemBattler, ITEM_NONE); + CheckSetUnburden(itemBattler); - BtlController_EmitSetMonData(battlerItem, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[battlerItem].item); // remove target item - MarkBattlerForControllerExec(battlerItem); + BtlController_EmitSetMonData(itemBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[itemBattler].item), &gBattleMons[itemBattler].item); // remove target item + MarkBattlerForControllerExec(itemBattler); - gBattleStruct->choicedMove[battlerItem] = 0; + if (GetBattlerAbility(itemBattler) != ABILITY_GORILLA_TACTICS) + gBattleStruct->choicedMove[itemBattler] = MOVE_NONE; - TrySaveExchangedItem(battlerItem, gLastUsedItem); + TrySaveExchangedItem(itemBattler, gLastUsedItem); } static inline bool32 TrySetReflect(u32 battler) @@ -3161,10 +2897,10 @@ static inline bool32 TrySetReflect(u32 battler) if (!(gSideStatuses[side] & SIDE_STATUS_REFLECT)) { gSideStatuses[side] |= SIDE_STATUS_REFLECT; - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[side].reflectTimer = gBattleTurnCounter + 8; + if (GetBattlerHoldEffect(battler) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[side].reflectTimer = 8; else - gSideTimers[side].reflectTimer = gBattleTurnCounter + 5; + gSideTimers[side].reflectTimer = 5; if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, battler) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; @@ -3182,10 +2918,10 @@ static inline bool32 TrySetLightScreen(u32 battler) if (!(gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN)) { gSideStatuses[side] |= SIDE_STATUS_LIGHTSCREEN; - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[side].lightscreenTimer = gBattleTurnCounter + 8; + if (GetBattlerHoldEffect(battler) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[side].lightscreenTimer = 8; else - gSideTimers[side].lightscreenTimer = gBattleTurnCounter + 5; + gSideTimers[side].lightscreenTimer = 5; if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, battler) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; @@ -3197,8 +2933,10 @@ static inline bool32 TrySetLightScreen(u32 battler) return FALSE; } -void SetNonVolatileStatusCondition(u32 effectBattler, enum MoveEffects effect) +static void SetNonVolatileStatus(u32 effectBattler, enum MoveEffect effect, const u8 *battleScript, enum StatusTrigger trigger) { + gEffectBattler = effectBattler; + if (effect == MOVE_EFFECT_SLEEP || effect == MOVE_EFFECT_FREEZE) { @@ -3208,36 +2946,53 @@ void SetNonVolatileStatusCondition(u32 effectBattler, enum MoveEffects effect) gBattlescriptCurrInstr = cancelMultiTurnMovesResult; } - BattleScriptPush(gBattlescriptCurrInstr + 1); + BattleScriptPush(battleScript); - if (sStatusFlagsForMoveEffects[effect] == STATUS1_SLEEP) + switch (effect) { + case MOVE_EFFECT_SLEEP: if (B_SLEEP_TURNS >= GEN_5) gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 1, 3)); else gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 2, 5)); - TryActivateSleepClause(effectBattler, gBattlerPartyIndexes[effectBattler]); - } - else - { - gBattleMons[effectBattler].status1 |= sStatusFlagsForMoveEffects[effect]; + gBattlescriptCurrInstr = BattleScript_MoveEffectSleep; + break; + case MOVE_EFFECT_POISON: + gBattleMons[effectBattler].status1 |= STATUS1_POISON; + gBattlescriptCurrInstr = BattleScript_MoveEffectPoison; + break; + case MOVE_EFFECT_BURN: + gBattleMons[effectBattler].status1 |= STATUS1_BURN; + gBattlescriptCurrInstr = BattleScript_MoveEffectBurn; + break; + case MOVE_EFFECT_FREEZE: + gBattleMons[effectBattler].status1 |= STATUS1_FREEZE; + gBattlescriptCurrInstr = BattleScript_MoveEffectFreeze; + break; + case MOVE_EFFECT_PARALYSIS: + gBattleMons[effectBattler].status1 |= STATUS1_PARALYSIS; + gBattlescriptCurrInstr = BattleScript_MoveEffectParalysis; + break; + case MOVE_EFFECT_TOXIC: + gBattleMons[effectBattler].status1 |= STATUS1_TOXIC_POISON; + gBattlescriptCurrInstr = BattleScript_MoveEffectToxic; + break; + case MOVE_EFFECT_FROSTBITE: + gBattleMons[effectBattler].status1 |= STATUS1_FROSTBITE; + gBattlescriptCurrInstr = BattleScript_MoveEffectFrostbite; + break; + default: + break; } - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[effect]; - BtlController_EmitSetMonData(effectBattler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[effectBattler].status1), &gBattleMons[effectBattler].status1); MarkBattlerForControllerExec(effectBattler); - if (gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) - { + if (trigger == TRIGGER_ON_ABILITY) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUSED_BY_ABILITY; - gHitMarker &= ~HITMARKER_STATUS_ABILITY_EFFECT; - } else - { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUSED; - } gBattleScripting.moveEffect = MOVE_EFFECT_NONE; @@ -3246,1252 +3001,1129 @@ void SetNonVolatileStatusCondition(u32 effectBattler, enum MoveEffects effect) || effect == MOVE_EFFECT_TOXIC || effect == MOVE_EFFECT_PARALYSIS || effect == MOVE_EFFECT_BURN) - { gBattleStruct->synchronizeMoveEffect = effect; - gHitMarker |= HITMARKER_SYNCHRONIZE_EFFECT; - } if (effect == MOVE_EFFECT_POISON || effect == MOVE_EFFECT_TOXIC) gBattleStruct->poisonPuppeteerConfusion = TRUE; } -#define INCREMENT_RESET_RETURN \ -{ \ - gBattlescriptCurrInstr++; \ - gBattleScripting.moveEffect = 0; \ - return; \ -} - -void SetMoveEffect(bool32 primary, bool32 certain) +// To avoid confusion the arguments are naned battler/effectBattler since they can be different from gBattlerAttacker/gBattlerTarget +void SetMoveEffect(u32 battler, u32 effectBattler, enum MoveEffect moveEffect, const u8 *battleScript, enum SetMoveEffectFlags effectFlags) { - s32 i, affectsUser = 0; - bool32 statusChanged = FALSE; + s32 i; + bool32 primary = effectFlags & EFFECT_PRIMARY; + bool32 certain = effectFlags & EFFECT_CERTAIN; + bool32 affectsUser = (battler == effectBattler); bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR); - u32 flags = 0; + union StatChangeFlags flags = {0}; u32 battlerAbility; bool32 activateAfterFaint = FALSE; // NULL move effect - if (gBattleScripting.moveEffect == 0) + if (moveEffect == MOVE_EFFECT_NONE) return; if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && IsBattlerAlive(gBattlerTarget) - && IsFinalStrikeEffect(gBattleScripting.moveEffect)) + && IsFinalStrikeEffect(moveEffect)) { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = battleScript; return; } - switch (gBattleScripting.moveEffect) // Set move effects which happen later on + switch (moveEffect) // Set move effects which happen later on { case MOVE_EFFECT_STEALTH_ROCK: - case MOVE_EFFECT_SPIKES: case MOVE_EFFECT_PAYDAY: case MOVE_EFFECT_BUG_BITE: - case MOVE_EFFECT_STEAL_ITEM: activateAfterFaint = TRUE; break; + default: + break; } - if (gBattleScripting.moveEffect & MOVE_EFFECT_AFFECTS_USER) - { - gEffectBattler = gBattlerAttacker; // battler that effects get applied on - gBattleScripting.moveEffect &= ~MOVE_EFFECT_AFFECTS_USER; - affectsUser = MOVE_EFFECT_AFFECTS_USER; - gBattleScripting.battler = gBattlerTarget; // theoretically the attacker - } - else - { - gEffectBattler = gBattlerTarget; - gBattleScripting.battler = gBattlerAttacker; - } - + gBattleScripting.battler = battler; + gEffectBattler = effectBattler; battlerAbility = GetBattlerAbility(gEffectBattler); - // Just in case this flag is still set - gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; + if (!primary && !affectsUser && IsMoveEffectBlockedByTarget(battlerAbility)) + moveEffect = MOVE_EFFECT_NONE; + else if (!primary + && IsSheerForceAffected(gCurrentMove, GetBattlerAbility(battler)) + && !(GetMoveEffect(gCurrentMove) == EFFECT_ORDER_UP && gBattleStruct->battlerState[gBattlerAttacker].commanderSpecies != SPECIES_NONE)) + moveEffect = MOVE_EFFECT_NONE; + else if (!IsBattlerAlive(gEffectBattler) && !activateAfterFaint) + moveEffect = MOVE_EFFECT_NONE; + else if (DoesSubstituteBlockMove(gBattlerAttacker, gEffectBattler, gCurrentMove) && !affectsUser) + moveEffect = MOVE_EFFECT_NONE; - if (!primary && affectsUser != MOVE_EFFECT_AFFECTS_USER - && !(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) - && IsMoveEffectBlockedByTarget(battlerAbility)) - INCREMENT_RESET_RETURN + gBattleScripting.moveEffect = moveEffect; // ChangeStatBuffs still needs the global moveEffect - if (gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) - && !primary && gBattleScripting.moveEffect <= MOVE_EFFECT_CONFUSION) - INCREMENT_RESET_RETURN - - if (!(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) - && TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove) - && !(GetMoveEffect(gCurrentMove) == EFFECT_ORDER_UP && gBattleStruct->commanderActive[gBattlerAttacker]) - && !primary - && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) - INCREMENT_RESET_RETURN - - if (!IsBattlerAlive(gEffectBattler) && !activateAfterFaint) - INCREMENT_RESET_RETURN - - if (DoesSubstituteBlockMove(gBattlerAttacker, gEffectBattler, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) - INCREMENT_RESET_RETURN - - if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) // status change + switch (moveEffect) { - if (!(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT)) // Calcs already done + case MOVE_EFFECT_NONE: + gBattlescriptCurrInstr = battleScript; + break; + case MOVE_EFFECT_SLEEP: + case MOVE_EFFECT_POISON: + case MOVE_EFFECT_BURN: + case MOVE_EFFECT_FREEZE: + case MOVE_EFFECT_PARALYSIS: + case MOVE_EFFECT_TOXIC: + case MOVE_EFFECT_FROSTBITE: + if (gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !primary) + gBattlescriptCurrInstr = battleScript; + else if (CanSetNonVolatileStatus( + gBattlerAttacker, + gEffectBattler, + GetBattlerAbility(gBattlerAttacker), + battlerAbility, + moveEffect, + CHECK_TRIGGER)) + SetNonVolatileStatus(gEffectBattler, moveEffect, battleScript, TRIGGER_ON_MOVE); + break; + case MOVE_EFFECT_CONFUSION: + if (!CanBeConfused(gEffectBattler) + || gBattleMons[gEffectBattler].volatiles.confusionTurns + || (gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !primary)) { - statusChanged = CanSetNonVolatileStatus(gBattlerAttacker, - gEffectBattler, - GetBattlerAbility(gBattlerAttacker), - battlerAbility, - gBattleScripting.moveEffect, - STATUS_CHECK_TRIGGER); + gBattlescriptCurrInstr = battleScript; } + else + { + gBattleMons[gEffectBattler].volatiles.confusionTurns = ((Random()) % 4) + 2; // 2-5 turns - if (statusChanged || gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) + // If the confusion is activating due to being released from Sky Drop, go to "confused due to fatigue" script. + // Otherwise, do normal confusion script. + if (GetMoveEffect(gCurrentMove) == EFFECT_SKY_DROP) + { + gBattleMons[gEffectBattler].volatiles.lockConfusionTurns = 0; + gBattlerAttacker = gEffectBattler; + gBattlescriptCurrInstr = BattleScript_ThrashConfuses; + } + else + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectConfusion; + } + } + break; + case MOVE_EFFECT_FLINCH: + if (battlerAbility == ABILITY_INNER_FOCUS) { - SetNonVolatileStatusCondition(gEffectBattler, gBattleScripting.moveEffect); + // Inner Focus ALWAYS prevents flinching but only activates + // on a move that's supposed to flinch, like Fake Out + if (primary || certain) + { + gLastUsedAbility = ABILITY_INNER_FOCUS; + gBattlerAbility = gEffectBattler; + RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_FlinchPrevention; + } + else + { + gBattlescriptCurrInstr = battleScript; + } } - else + else if (gBattleMons[gEffectBattler].volatiles.flinched) { - gBattleScripting.moveEffect = 0; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = battleScript; } - return; - } - else - { - if (gBattleMons[gEffectBattler].status2 & sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]) + else if (!HasBattlerActedThisTurn(gEffectBattler) + && GetActiveGimmick(gEffectBattler) != GIMMICK_DYNAMAX) { - gBattlescriptCurrInstr++; + gBattleMons[gEffectBattler].volatiles.flinched = TRUE; + gBattlescriptCurrInstr = battleScript; } else { - switch (gBattleScripting.moveEffect) - { - case MOVE_EFFECT_CONFUSION: - if (!CanBeConfused(gEffectBattler)) - { - gBattlescriptCurrInstr++; - } - else - { - gBattleMons[gEffectBattler].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); // 2-5 turns + gBattlescriptCurrInstr = battleScript; + } + break; + case MOVE_EFFECT_UPROAR: + if (!gBattleMons[gEffectBattler].volatiles.uproarTurns) + { + gBattleMons[gEffectBattler].volatiles.multipleTurns = TRUE; + gLockedMoves[gEffectBattler] = gCurrentMove; + gBattleMons[gEffectBattler].volatiles.uproarTurns = B_UPROAR_TURNS >= GEN_5 ? 3 : (Random() & 3) + 2; - // If the confusion is activating due to being released from Sky Drop, go to "confused due to fatigue" script. - // Otherwise, do normal confusion script. - if (GetMoveEffect(gCurrentMove) == EFFECT_SKY_DROP) - { - gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE); - gBattlerAttacker = gEffectBattler; - gBattlescriptCurrInstr = BattleScript_ThrashConfuses; - } - else - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; - } - } - break; - case MOVE_EFFECT_FLINCH: - if (battlerAbility == ABILITY_INNER_FOCUS) - { - // Inner Focus ALWAYS prevents flinching but only activates - // on a move that's supposed to flinch, like Fake Out - if (primary == TRUE || certain == TRUE) - { - gLastUsedAbility = ABILITY_INNER_FOCUS; - gBattlerAbility = gEffectBattler; - RecordAbilityBattle(gEffectBattler, ABILITY_INNER_FOCUS); - gBattlescriptCurrInstr = BattleScript_FlinchPrevention; - } - else - { - gBattlescriptCurrInstr++; - } - } - else if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber - && !(GetActiveGimmick(gEffectBattler) == GIMMICK_DYNAMAX)) - { - gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; - gBattlescriptCurrInstr++; - } - else - { - gBattlescriptCurrInstr++; - } - break; - case MOVE_EFFECT_UPROAR: - if (!(gBattleMons[gEffectBattler].status2 & STATUS2_UPROAR)) - { - gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; - gLockedMoves[gEffectBattler] = gCurrentMove; - gBattleMons[gEffectBattler].status2 |= STATUS2_UPROAR_TURN(B_UPROAR_TURNS >= GEN_5 ? 3 : (Random() & 3) + 2); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectUproar; + } + else + { + gBattlescriptCurrInstr = battleScript; + } + break; + case MOVE_EFFECT_PAYDAY: + // Don't scatter coins on the second hit of Parental Bond + if (IsOnPlayerSide(gBattlerAttacker) && gSpecialStatuses[gBattlerAttacker].parentalBondState!= PARENTAL_BOND_2ND_HIT) + { + u16 payday = gPaydayMoney; + u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 5); + if (payday > gPaydayMoney) + gPaydayMoney = 0xFFFF; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; - } - else - { - gBattlescriptCurrInstr++; - } - break; - case MOVE_EFFECT_PAYDAY: - // Don't scatter coins on the second hit of Parental Bond - if (IsOnPlayerSide(gBattlerAttacker) && gSpecialStatuses[gBattlerAttacker].parentalBondState!= PARENTAL_BOND_2ND_HIT) - { - u16 payday = gPaydayMoney; - u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); - gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 5); - if (payday > gPaydayMoney) - gPaydayMoney = 0xFFFF; - - // For a move that hits multiple targets (i.e. Make it Rain) - // we only want to print the message on the final hit - if (!(NumAffectedSpreadMoveTargets() > 1 && GetNextTarget(moveTarget, TRUE) != MAX_BATTLERS_COUNT)) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectPayDay; - } - else - gBattlescriptCurrInstr++; - } - else - { - gBattlescriptCurrInstr++; - } - break; - case MOVE_EFFECT_HAPPY_HOUR: - if (IsOnPlayerSide(gBattlerAttacker) && !gBattleStruct->moneyMultiplierMove) - { - gBattleStruct->moneyMultiplier *= 2; - gBattleStruct->moneyMultiplierMove = 1; - } - gBattlescriptCurrInstr++; - break; - case MOVE_EFFECT_TRI_ATTACK: - if (gBattleMons[gEffectBattler].status1) - { - gBattlescriptCurrInstr++; - } - else - { - static const u8 sTriAttackEffects[] = - { - MOVE_EFFECT_BURN, - MOVE_EFFECT_FREEZE_OR_FROSTBITE, - MOVE_EFFECT_PARALYSIS - }; - gBattleScripting.moveEffect = RandomElement(RNG_TRI_ATTACK, sTriAttackEffects); - SetMoveEffect(primary, certain); - } - break; - case MOVE_EFFECT_CHARGING: - gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; - gLockedMoves[gEffectBattler] = gCurrentMove; - gProtectStructs[gEffectBattler].chargingTurn = TRUE; - gBattlescriptCurrInstr++; - break; - case MOVE_EFFECT_WRAP: - if (gBattleMons[gEffectBattler].status2 & STATUS2_WRAPPED) - { - gBattlescriptCurrInstr++; - } - else - { - gBattleMons[gEffectBattler].status2 |= STATUS2_WRAPPED; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_GRIP_CLAW) - gDisableStructs[gEffectBattler].wrapTurns = B_BINDING_TURNS >= GEN_5 ? 7 : 5; - else - gDisableStructs[gEffectBattler].wrapTurns = B_BINDING_TURNS >= GEN_5 ? (Random() % 2) + 4 : (Random() % 4) + 2; + // For a move that hits multiple targets (i.e. Make it Rain) + // we only want to print the message on the final hit + if (!(NumAffectedSpreadMoveTargets() > 1 && GetNextTarget(moveTarget, TRUE) != MAX_BATTLERS_COUNT)) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectPayDay; + } + else + gBattlescriptCurrInstr = battleScript; + } + else + { + gBattlescriptCurrInstr = battleScript; + } + break; + case MOVE_EFFECT_HAPPY_HOUR: + if (IsOnPlayerSide(gBattlerAttacker) && !gBattleStruct->moneyMultiplierMove) + { + gBattleStruct->moneyMultiplier *= 2; + gBattleStruct->moneyMultiplierMove = 1; + } + gBattlescriptCurrInstr = battleScript; + break; + case MOVE_EFFECT_TRI_ATTACK: + if (gBattleMons[gEffectBattler].status1) + { + gBattlescriptCurrInstr = battleScript; + } + else + { + static const u8 sTriAttackEffects[] = + { + MOVE_EFFECT_BURN, + MOVE_EFFECT_FREEZE_OR_FROSTBITE, + MOVE_EFFECT_PARALYSIS + }; + SetMoveEffect(battler, effectBattler, RandomElement(RNG_TRI_ATTACK, sTriAttackEffects), battleScript, effectFlags); + } + break; + case MOVE_EFFECT_WRAP: + if (gBattleMons[gEffectBattler].volatiles.wrapped) + { + gBattlescriptCurrInstr = battleScript; + } + else + { + if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_GRIP_CLAW) + gDisableStructs[gEffectBattler].wrapTurns = B_BINDING_TURNS >= GEN_5 ? 7 : 5; + else + gDisableStructs[gEffectBattler].wrapTurns = B_BINDING_TURNS >= GEN_5 ? RandomUniform(RNG_WRAP, 4, 5) : RandomUniform(RNG_WRAP, 2, 5); + gBattleMons[gEffectBattler].volatiles.wrapped = TRUE; + gBattleMons[gEffectBattler].volatiles.wrappedMove = gCurrentMove; + gBattleMons[gEffectBattler].volatiles.wrappedBy = gBattlerAttacker; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectWrap; + } + break; + case MOVE_EFFECT_ATK_PLUS_1: + case MOVE_EFFECT_DEF_PLUS_1: + case MOVE_EFFECT_SPD_PLUS_1: + case MOVE_EFFECT_SP_ATK_PLUS_1: + case MOVE_EFFECT_SP_DEF_PLUS_1: + case MOVE_EFFECT_ACC_PLUS_1: + case MOVE_EFFECT_EVS_PLUS_1: + if (NoAliveMonsForEitherParty() + || ChangeStatBuffs( + effectBattler, + SET_STAT_BUFF_VALUE(1), + moveEffect - MOVE_EFFECT_ATK_PLUS_1 + 1, + STAT_CHANGE_UPDATE_MOVE_EFFECT, + 0, 0) == STAT_CHANGE_DIDNT_WORK) + { + gBattlescriptCurrInstr = battleScript; + } + else + { + gBattleScripting.animArg1 = moveEffect; + gBattleScripting.animArg2 = 0; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_StatUp; + } + break; + case MOVE_EFFECT_ATK_MINUS_1: + case MOVE_EFFECT_DEF_MINUS_1: + case MOVE_EFFECT_SPD_MINUS_1: + case MOVE_EFFECT_SP_ATK_MINUS_1: + case MOVE_EFFECT_SP_DEF_MINUS_1: + case MOVE_EFFECT_ACC_MINUS_1: + case MOVE_EFFECT_EVS_MINUS_1: + flags.certain = affectsUser; + if (mirrorArmorReflected && !affectsUser) + flags.allowPtr = TRUE; + else + flags.updateMoveEffect = TRUE; - gBattleStruct->wrappedMove[gEffectBattler] = gCurrentMove; - gBattleStruct->wrappedBy[gEffectBattler] = gBattlerAttacker; + if (ChangeStatBuffs( + effectBattler, + SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE, + moveEffect - MOVE_EFFECT_ATK_MINUS_1 + 1, + flags, + 0, battleScript) == STAT_CHANGE_DIDNT_WORK) + { + if (!mirrorArmorReflected) + gBattlescriptCurrInstr = battleScript; + } + else + { + gBattleScripting.animArg1 = moveEffect; + gBattleScripting.animArg2 = 0; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_StatDown; + } + break; + case MOVE_EFFECT_ATK_PLUS_2: + case MOVE_EFFECT_DEF_PLUS_2: + case MOVE_EFFECT_SPD_PLUS_2: + case MOVE_EFFECT_SP_ATK_PLUS_2: + case MOVE_EFFECT_SP_DEF_PLUS_2: + case MOVE_EFFECT_ACC_PLUS_2: + case MOVE_EFFECT_EVS_PLUS_2: + if (NoAliveMonsForEitherParty() + || ChangeStatBuffs( + effectBattler, + SET_STAT_BUFF_VALUE(2), + moveEffect - MOVE_EFFECT_ATK_PLUS_2 + 1, + STAT_CHANGE_UPDATE_MOVE_EFFECT, + 0, 0) == STAT_CHANGE_DIDNT_WORK) + { + gBattlescriptCurrInstr = battleScript; + } + else + { + gBattleScripting.animArg1 = moveEffect; + gBattleScripting.animArg2 = 0; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_StatUp; + } + break; + case MOVE_EFFECT_ATK_MINUS_2: + case MOVE_EFFECT_DEF_MINUS_2: + case MOVE_EFFECT_SPD_MINUS_2: + case MOVE_EFFECT_SP_ATK_MINUS_2: + case MOVE_EFFECT_SP_DEF_MINUS_2: + case MOVE_EFFECT_ACC_MINUS_2: + case MOVE_EFFECT_EVS_MINUS_2: + flags.certain = affectsUser; + if (mirrorArmorReflected && !affectsUser) + flags.allowPtr = TRUE; + else + flags.updateMoveEffect = TRUE; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = sMoveEffectBS_Ptrs[gBattleScripting.moveEffect]; + if (ChangeStatBuffs( + effectBattler, + SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE, + moveEffect - MOVE_EFFECT_ATK_MINUS_2 + 1, + flags, + 0, battleScript) == STAT_CHANGE_DIDNT_WORK) + { + if (!mirrorArmorReflected) + gBattlescriptCurrInstr = battleScript; + } + else + { + gBattleScripting.animArg1 = moveEffect; + gBattleScripting.animArg2 = 0; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_StatDown; + } + break; + case MOVE_EFFECT_RECHARGE: + if (B_SKIP_RECHARGE == GEN_1 && !IsBattlerAlive(gBattlerTarget)) // Skip recharge if gen 1 and foe is KO'd + break; - for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattleCommunication[MULTISTRING_CHOOSER] < NUM_TRAPPING_MOVES; gBattleCommunication[MULTISTRING_CHOOSER]++) - { - if (sTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove) - break; - } - } - break; - case MOVE_EFFECT_ATK_PLUS_1: - case MOVE_EFFECT_DEF_PLUS_1: - case MOVE_EFFECT_SPD_PLUS_1: - case MOVE_EFFECT_SP_ATK_PLUS_1: - case MOVE_EFFECT_SP_DEF_PLUS_1: - case MOVE_EFFECT_ACC_PLUS_1: - case MOVE_EFFECT_EVS_PLUS_1: - if (NoAliveMonsForEitherParty() - || ChangeStatBuffs(SET_STAT_BUFF_VALUE(1), - gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_1 + 1, - affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0) == STAT_CHANGE_DIDNT_WORK) - { - gBattlescriptCurrInstr++; - } - else - { - gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - gBattleScripting.animArg2 = 0; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_StatUp; - } + gDisableStructs[gEffectBattler].rechargeTimer = 2; + gLockedMoves[gEffectBattler] = gCurrentMove; + gBattlescriptCurrInstr = battleScript; + break; + case MOVE_EFFECT_RAGE: + gBattleMons[gBattlerAttacker].volatiles.rage = TRUE; + gBattlescriptCurrInstr = battleScript; + break; + case MOVE_EFFECT_PREVENT_ESCAPE: + if (!gBattleMons[gBattlerTarget].volatiles.escapePrevention) // Do we need to check if the status is already set? + { + gBattleMons[gBattlerTarget].volatiles.escapePrevention = TRUE; + gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; + } + gBattlescriptCurrInstr = battleScript; + break; + case MOVE_EFFECT_NIGHTMARE: + gBattleMons[gBattlerTarget].volatiles.nightmare = TRUE; + gBattlescriptCurrInstr = battleScript; + break; + case MOVE_EFFECT_ALL_STATS_UP: + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_AllStatsUp; + } + break; + case MOVE_EFFECT_ATK_DEF_DOWN: // SuperPower + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_AtkDefDown; + } + break; + case MOVE_EFFECT_DEF_SPDEF_DOWN: // Close Combat + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_DefSpDefDown; + } + break; + case MOVE_EFFECT_RECOIL_HP_25: // Struggle + { + s32 recoil = (gBattleMons[gEffectBattler].maxHP) / 4; + if (recoil == 0) + recoil = 1; + if (GetBattlerAbility(gEffectBattler) == ABILITY_PARENTAL_BOND) + recoil *= 2; + SetPassiveDamageAmount(gEffectBattler, recoil); + TryUpdateEvolutionTracker(IF_RECOIL_DAMAGE_GE, gBattleStruct->passiveHpUpdate[gBattlerAttacker], MOVE_NONE); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil; + break; + } + case MOVE_EFFECT_THRASH: + // Petal Dance doesn't lock mons that copy the move with Dancer + if (gSpecialStatuses[gEffectBattler].dancerUsedMove || gBattleMons[gEffectBattler].volatiles.lockConfusionTurns) + { + gBattlescriptCurrInstr = battleScript; + } + else + { + gBattleMons[gEffectBattler].volatiles.multipleTurns = TRUE; + gLockedMoves[gEffectBattler] = gCurrentMove; + gBattleMons[gEffectBattler].volatiles.lockConfusionTurns = RandomUniform(RNG_RAMPAGE_TURNS, 2, 3); + } + break; + case MOVE_EFFECT_CLEAR_SMOG: + for (i = 0; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[gEffectBattler].statStages[i] != DEFAULT_STAT_STAGE) break; - case MOVE_EFFECT_ATK_MINUS_1: - case MOVE_EFFECT_DEF_MINUS_1: - case MOVE_EFFECT_SPD_MINUS_1: - case MOVE_EFFECT_SP_ATK_MINUS_1: - case MOVE_EFFECT_SP_DEF_MINUS_1: - case MOVE_EFFECT_ACC_MINUS_1: - case MOVE_EFFECT_EVS_MINUS_1: - if (affectsUser == MOVE_EFFECT_AFFECTS_USER) - flags = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN; - else - flags = 0; - if (mirrorArmorReflected && !affectsUser) - flags |= STAT_CHANGE_ALLOW_PTR; - else - flags |= STAT_CHANGE_UPDATE_MOVE_EFFECT; + } + if (IsBattlerTurnDamaged(gEffectBattler) && i != NUM_BATTLE_STATS) + { + for (i = 0; i < NUM_BATTLE_STATS; i++) + gBattleMons[gEffectBattler].statStages[i] = DEFAULT_STAT_STAGE; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectClearSmog; + } + break; + case MOVE_EFFECT_FLAME_BURST: + if (IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) + && !IsSemiInvulnerable(BATTLE_PARTNER(gBattlerTarget), CHECK_ALL) + && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD) + { + u32 partnerTarget = BATTLE_PARTNER(gBattlerTarget); + gBattleScripting.battler = partnerTarget; + SetPassiveDamageAmount(partnerTarget, gBattleMons[partnerTarget].maxHP / 16); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectFlameBurst; + } + break; + case MOVE_EFFECT_FEINT: + i = FALSE; // Remove Protect if any + if (gProtectStructs[gBattlerTarget].protected != PROTECT_NONE + && gProtectStructs[gBattlerTarget].protected != PROTECT_MAX_GUARD) + { + gProtectStructs[gBattlerTarget].protected = PROTECT_NONE; + i = TRUE; + } + if (GetProtectType(gProtectStructs[BATTLE_PARTNER(gBattlerTarget)].protected) == PROTECT_TYPE_SIDE) + { + gProtectStructs[BATTLE_PARTNER(gBattlerTarget)].protected = PROTECT_NONE; + i = TRUE; + } + if (i) + { + BattleScriptPush(battleScript); + if (gCurrentMove == MOVE_HYPERSPACE_FURY) + gBattlescriptCurrInstr = BattleScript_HyperspaceFuryRemoveProtect; + else + gBattlescriptCurrInstr = BattleScript_MoveEffectFeint; + } + break; + case MOVE_EFFECT_V_CREATE: + if (!NoAliveMonsForEitherParty()) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_VCreateStatLoss; + } + break; + case MOVE_EFFECT_CORE_ENFORCER: + if (HasBattlerActedThisTurn(gBattlerTarget) + && !NoAliveMonsForEitherParty()) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectCoreEnforcer; + } + break; + case MOVE_EFFECT_THROAT_CHOP: + gDisableStructs[gEffectBattler].throatChopTimer = 2; + gBattlescriptCurrInstr = battleScript; + break; + case MOVE_EFFECT_INCINERATE: + if ((gBattleMons[gEffectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[gEffectBattler].item <= LAST_BERRY_INDEX) + || (B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(gEffectBattler) == HOLD_EFFECT_GEMS)) + { + gLastUsedItem = gBattleMons[gEffectBattler].item; + gBattleMons[gEffectBattler].item = 0; + CheckSetUnburden(gEffectBattler); - if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE, - gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_1 + 1, - flags, gBattlescriptCurrInstr + 1) == STAT_CHANGE_DIDNT_WORK) - { - if (!mirrorArmorReflected) - gBattlescriptCurrInstr++; - } - else - { - gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - gBattleScripting.animArg2 = 0; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_StatDown; - } - break; - case MOVE_EFFECT_ATK_PLUS_2: - case MOVE_EFFECT_DEF_PLUS_2: - case MOVE_EFFECT_SPD_PLUS_2: - case MOVE_EFFECT_SP_ATK_PLUS_2: - case MOVE_EFFECT_SP_DEF_PLUS_2: - case MOVE_EFFECT_ACC_PLUS_2: - case MOVE_EFFECT_EVS_PLUS_2: - if (NoAliveMonsForEitherParty() - || ChangeStatBuffs(SET_STAT_BUFF_VALUE(2), - gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_2 + 1, - affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0) == STAT_CHANGE_DIDNT_WORK) - { - gBattlescriptCurrInstr++; - } - else - { - gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - gBattleScripting.animArg2 = 0; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_StatUp; - } - break; - case MOVE_EFFECT_ATK_MINUS_2: - case MOVE_EFFECT_DEF_MINUS_2: - case MOVE_EFFECT_SPD_MINUS_2: - case MOVE_EFFECT_SP_ATK_MINUS_2: - case MOVE_EFFECT_SP_DEF_MINUS_2: - case MOVE_EFFECT_ACC_MINUS_2: - case MOVE_EFFECT_EVS_MINUS_2: - if (affectsUser == MOVE_EFFECT_AFFECTS_USER) - flags = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN; - else - flags = 0; - if (mirrorArmorReflected && !affectsUser) - flags |= STAT_CHANGE_ALLOW_PTR; - else - flags |= STAT_CHANGE_UPDATE_MOVE_EFFECT; + BtlController_EmitSetMonData(gEffectBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item); + MarkBattlerForControllerExec(gEffectBattler); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectIncinerate; + } + break; + case MOVE_EFFECT_BUG_BITE: + if (GetBattlerHoldEffect(gEffectBattler) == HOLD_EFFECT_JABOCA_BERRY) + { + // jaboca berry triggers instead of being stolen + gBattlescriptCurrInstr = battleScript; + } + else if (GetItemPocket(gBattleMons[gEffectBattler].item) == POCKET_BERRIES + && battlerAbility != ABILITY_STICKY_HOLD) + { + // target loses their berry + gLastUsedItem = gBattleMons[gEffectBattler].item; + gBattleMons[gEffectBattler].item = 0; + CheckSetUnburden(gEffectBattler); - if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE, - gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_2 + 1, - flags, gBattlescriptCurrInstr + 1) == STAT_CHANGE_DIDNT_WORK) - { - if (!mirrorArmorReflected) - gBattlescriptCurrInstr++; - } - else - { - gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - gBattleScripting.animArg2 = 0; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_StatDown; - } - break; - case MOVE_EFFECT_RECHARGE: - if (B_SKIP_RECHARGE == GEN_1 && !IsBattlerAlive(gBattlerTarget)) // Skip recharge if gen 1 and foe is KO'd - break; + BtlController_EmitSetMonData(gEffectBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item); + MarkBattlerForControllerExec(gEffectBattler); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite; + } + break; + case MOVE_EFFECT_TRAP_BOTH: + if (!(gBattleMons[gBattlerTarget].volatiles.escapePrevention || gBattleMons[gBattlerAttacker].volatiles.escapePrevention)) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_BothCanNoLongerEscape; + } + if (!gBattleMons[gBattlerTarget].volatiles.escapePrevention) + gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; + + if (!gBattleMons[gBattlerAttacker].volatiles.escapePrevention) + gDisableStructs[gBattlerAttacker].battlerPreventingEscape = gBattlerTarget; - gBattleMons[gEffectBattler].status2 |= STATUS2_RECHARGE; - gDisableStructs[gEffectBattler].rechargeTimer = 2; - gLockedMoves[gEffectBattler] = gCurrentMove; - gBattlescriptCurrInstr++; + gBattleMons[gBattlerTarget].volatiles.escapePrevention = TRUE; + gBattleMons[gBattlerAttacker].volatiles.escapePrevention = TRUE; + break; + case MOVE_EFFECT_REMOVE_ARG_TYPE: + { + u32 type = GetMoveArgType(gCurrentMove); + // This seems unnecessary but is done to make it work properly with Parental Bond + BattleScriptPush(battleScript); + switch (type) + { + case TYPE_FIRE: // Burn Up + gBattlescriptCurrInstr = BattleScript_RemoveFireType; break; - case MOVE_EFFECT_RAGE: - gBattleMons[gBattlerAttacker].status2 |= STATUS2_RAGE; - gBattlescriptCurrInstr++; + case TYPE_ELECTRIC: // Double Shot + gBattlescriptCurrInstr = BattleScript_RemoveElectricType; break; - case MOVE_EFFECT_STEAL_ITEM: - if (!CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) - || gBattleMons[gBattlerAttacker].item != ITEM_NONE - || gBattleMons[gBattlerTarget].item == ITEM_NONE) - { - gBattlescriptCurrInstr++; - } - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_NoItemSteal; - - gLastUsedAbility = gBattleMons[gBattlerTarget].ability; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); - } - else - { - StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker steals target item - - if (!(B_STEAL_WILD_ITEMS >= GEN_9 - && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE)))) - { - gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS) - gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later - } - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_ItemSteal; - } + default: + gBattlescriptCurrInstr = BattleScript_RemoveGenericType; break; - case MOVE_EFFECT_PREVENT_ESCAPE: - gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION; - gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; - gBattlescriptCurrInstr++; + } + RemoveBattlerType(gEffectBattler, type); + break; + } + case MOVE_EFFECT_ROUND: + TryUpdateRoundTurnOrder(); // If another PokΓ©mon uses Round before the user this turn, the user will use Round directly after it + gBattlescriptCurrInstr = battleScript; + break; + case MOVE_EFFECT_DIRE_CLAW: + if (!gBattleMons[gEffectBattler].status1) + { + static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; + SetMoveEffect(battler, effectBattler, RandomElement(RNG_DIRE_CLAW, sDireClawEffects), battleScript, effectFlags); + } + break; + case MOVE_EFFECT_STEALTH_ROCK: + if (!IsHazardOnSide(GetBattlerSide(gEffectBattler), HAZARDS_STEALTH_ROCK)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_POINTEDSTONESFLOAT; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_StealthRockActivates; + } + break; + case MOVE_EFFECT_SYRUP_BOMB: + if (!gBattleMons[gEffectBattler].volatiles.syrupBomb) + { + struct Pokemon *mon = GetBattlerMon(gBattlerAttacker); + + gBattleMons[gEffectBattler].volatiles.syrupBomb = TRUE; + gBattleMons[gEffectBattler].volatiles.stickySyrupedBy = gBattlerAttacker; + gDisableStructs[gEffectBattler].syrupBombTimer = 3; + gDisableStructs[gEffectBattler].syrupBombIsShiny = IsMonShiny(mon); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_SyrupBombActivates; + } + break; + case MOVE_EFFECT_SECRET_POWER: + if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + case STATUS_FIELD_MISTY_TERRAIN: + moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1; break; - case MOVE_EFFECT_NIGHTMARE: - gBattleMons[gBattlerTarget].status2 |= STATUS2_NIGHTMARE; - gBattlescriptCurrInstr++; + case STATUS_FIELD_GRASSY_TERRAIN: + moveEffect = MOVE_EFFECT_SLEEP; break; - case MOVE_EFFECT_ALL_STATS_UP: - if (!NoAliveMonsForEitherParty()) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_AllStatsUp; - } + case STATUS_FIELD_ELECTRIC_TERRAIN: + moveEffect = MOVE_EFFECT_PARALYSIS; break; - case MOVE_EFFECT_ATK_DEF_DOWN: // SuperPower - if (!NoAliveMonsForEitherParty()) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_AtkDefDown; - } + case STATUS_FIELD_PSYCHIC_TERRAIN: + moveEffect = MOVE_EFFECT_SPD_MINUS_1; break; - case MOVE_EFFECT_DEF_SPDEF_DOWN: // Close Combat - if (!NoAliveMonsForEitherParty()) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_DefSpDefDown; - } + default: + moveEffect = MOVE_EFFECT_PARALYSIS; break; - case MOVE_EFFECT_RECOIL_HP_25: // Struggle - gBattleStruct->moveDamage[gEffectBattler] = (gBattleMons[gEffectBattler].maxHP) / 4; - if (gBattleStruct->moveDamage[gEffectBattler] == 0) - gBattleStruct->moveDamage[gEffectBattler] = 1; - if (GetBattlerAbility(gEffectBattler) == ABILITY_PARENTAL_BOND) - gBattleStruct->moveDamage[gEffectBattler] *= 2; - - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil; + } + } + else + SetMoveEffect(battler, effectBattler, gBattleEnvironmentInfo[gBattleEnvironment].secretPowerEffect, battleScript, effectFlags); + break; + case MOVE_EFFECT_PSYCHIC_NOISE: + battlerAbility = IsAbilityOnSide(gEffectBattler, ABILITY_AROMA_VEIL); + + if (battlerAbility) + { + gBattlerAbility = battlerAbility - 1; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_AromaVeilProtectsRet; + } + else if (!gBattleMons[gEffectBattler].volatiles.healBlock) + { + gBattleMons[gEffectBattler].volatiles.healBlock = TRUE; + gDisableStructs[gEffectBattler].healBlockTimer = 2; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectPsychicNoise; + } + break; + case MOVE_EFFECT_TERA_BLAST: + if (GetActiveGimmick(gEffectBattler) == GIMMICK_TERA + && GetBattlerTeraType(gEffectBattler) == TYPE_STELLAR + && !NoAliveMonsForEitherParty()) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_LowerAtkSpAtk; + } + break; + case MOVE_EFFECT_ORDER_UP: + { + enum Stat stat = 0; + bool32 commanderAffected = TRUE; + switch (gBattleStruct->battlerState[gEffectBattler].commanderSpecies) + { + case SPECIES_TATSUGIRI_CURLY: + stat = STAT_ATK; break; - case MOVE_EFFECT_THRASH: - // Petal Dance doesn't lock mons that copy the move with Dancer - if (gSpecialStatuses[gEffectBattler].dancerUsedMove) - { - gBattlescriptCurrInstr++; - } - else - { - gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; - gLockedMoves[gEffectBattler] = gCurrentMove; - gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN(RandomUniform(RNG_RAMPAGE_TURNS, 2, 3)); - } + case SPECIES_TATSUGIRI_DROOPY: + stat = STAT_DEF; break; - case MOVE_EFFECT_CLEAR_SMOG: - for (i = 0; i < NUM_BATTLE_STATS; i++) - { - if (gBattleMons[gEffectBattler].statStages[i] != DEFAULT_STAT_STAGE) - break; - } - if ((gSpecialStatuses[gEffectBattler].physicalDmg || gSpecialStatuses[gEffectBattler].specialDmg) && i != NUM_BATTLE_STATS) - { - for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[gEffectBattler].statStages[i] = DEFAULT_STAT_STAGE; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectClearSmog; - } + case SPECIES_TATSUGIRI_STRETCHY: + stat = STAT_SPEED; break; - case MOVE_EFFECT_FLAME_BURST: - if (IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) - && !(gStatuses3[BATTLE_PARTNER(gBattlerTarget)] & STATUS3_SEMI_INVULNERABLE) - && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD) - { - i = BATTLE_PARTNER(gBattlerTarget); - gBattleScripting.savedBattler = i; - gBattleStruct->moveDamage[i] = gBattleMons[i].maxHP / 16; - if (gBattleStruct->moveDamage[i] == 0) - gBattleStruct->moveDamage[i] = 1; - gBattlescriptCurrInstr = BattleScript_MoveEffectFlameBurst; - } + default: + commanderAffected = FALSE; break; - case MOVE_EFFECT_FEINT: - i = FALSE; // Remove Protect if any - if (gProtectStructs[gBattlerTarget].protected != PROTECT_NONE - && gProtectStructs[gBattlerTarget].protected != PROTECT_MAX_GUARD) - { - gProtectStructs[gBattlerTarget].protected = PROTECT_NONE; - i = TRUE; - } - if (GetProtectType(gProtectStructs[BATTLE_PARTNER(gBattlerTarget)].protected) == PROTECT_TYPE_SIDE) - { - gProtectStructs[BATTLE_PARTNER(gBattlerTarget)].protected = PROTECT_NONE; - i = TRUE; - } - if (i) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - if (gCurrentMove == MOVE_HYPERSPACE_FURY) - gBattlescriptCurrInstr = BattleScript_HyperspaceFuryRemoveProtect; - else - gBattlescriptCurrInstr = BattleScript_MoveEffectFeint; - } - break; - case MOVE_EFFECT_V_CREATE: - if (!NoAliveMonsForEitherParty()) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_VCreateStatLoss; - } - break; - case MOVE_EFFECT_CORE_ENFORCER: - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) - && !NoAliveMonsForEitherParty()) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectCoreEnforcer; - } - break; - case MOVE_EFFECT_THROAT_CHOP: - gDisableStructs[gEffectBattler].throatChopTimer = gBattleTurnCounter + 2; - gBattlescriptCurrInstr++; - break; - case MOVE_EFFECT_INCINERATE: - if ((gBattleMons[gEffectBattler].item >= FIRST_BERRY_INDEX && gBattleMons[gEffectBattler].item <= LAST_BERRY_INDEX) - || (B_INCINERATE_GEMS >= GEN_6 && GetBattlerHoldEffect(gEffectBattler, FALSE) == HOLD_EFFECT_GEMS)) - { - gLastUsedItem = gBattleMons[gEffectBattler].item; - gBattleMons[gEffectBattler].item = 0; - CheckSetUnburden(gEffectBattler); - - BtlController_EmitSetMonData(gEffectBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item); - MarkBattlerForControllerExec(gEffectBattler); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectIncinerate; - } - break; - case MOVE_EFFECT_BUG_BITE: - if (GetItemPocket(gBattleMons[gEffectBattler].item) == POCKET_BERRIES - && battlerAbility != ABILITY_STICKY_HOLD) - { - // target loses their berry - gLastUsedItem = gBattleMons[gEffectBattler].item; - gBattleMons[gEffectBattler].item = 0; - CheckSetUnburden(gEffectBattler); - - BtlController_EmitSetMonData(gEffectBattler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gEffectBattler].item), &gBattleMons[gEffectBattler].item); - MarkBattlerForControllerExec(gEffectBattler); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectBugBite; - } - break; - case MOVE_EFFECT_TRAP_BOTH: - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION)) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_BothCanNoLongerEscape; - } - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)) - gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; - - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION)) - gDisableStructs[gBattlerAttacker].battlerPreventingEscape = gBattlerTarget; + } + if (!commanderAffected + || NoAliveMonsForEitherParty() + || ChangeStatBuffs( + effectBattler, + SET_STAT_BUFF_VALUE(1), + stat, + STAT_CHANGE_UPDATE_MOVE_EFFECT, + 0, + 0) == STAT_CHANGE_DIDNT_WORK) + { + gBattlescriptCurrInstr = battleScript; + } + else + { + gBattleScripting.animArg1 = moveEffect; + gBattleScripting.animArg2 = 0; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_StatUp; + } + } + break; + case MOVE_EFFECT_ION_DELUGE: + if (!(gFieldStatuses & STATUS_FIELD_ION_DELUGE)) + { + gFieldStatuses |= STATUS_FIELD_ION_DELUGE; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectIonDeluge; + } + break; + case MOVE_EFFECT_HAZE: + for (i = 0; i < gBattlersCount; i++) + TryResetBattlerStatChanges(i); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectHaze; + break; + case MOVE_EFFECT_LEECH_SEED: + if (!IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) && !gBattleMons[gBattlerTarget].volatiles.leechSeed) + { + gBattleMons[gBattlerTarget].volatiles.leechSeed = LEECHSEEDED_BY(gBattlerAttacker); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectLeechSeed; + } + break; + case MOVE_EFFECT_REFLECT: + if (TrySetReflect(gBattlerAttacker)) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectReflect; + } + break; + case MOVE_EFFECT_LIGHT_SCREEN: + if (TrySetLightScreen(gBattlerAttacker)) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectLightScreen; + } + break; + case MOVE_EFFECT_SALT_CURE: + if (!gBattleMons[gBattlerTarget].volatiles.saltCure) + { + gBattleMons[gBattlerTarget].volatiles.saltCure = TRUE; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectSaltCure; + } + break; + case MOVE_EFFECT_EERIE_SPELL: + if (gLastMoves[gBattlerTarget] != MOVE_NONE && gLastMoves[gBattlerTarget] != 0xFFFF) + { + u32 i; - gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION; - gBattleMons[gBattlerAttacker].status2 |= STATUS2_ESCAPE_PREVENTION; - break; - case MOVE_EFFECT_REMOVE_ARG_TYPE: + for (i = 0; i < MAX_MON_MOVES; i++) { - u32 type = GetMoveArgType(gCurrentMove); - // This seems unnecessary but is done to make it work properly with Parental Bond - BattleScriptPush(gBattlescriptCurrInstr + 1); - switch (type) - { - case TYPE_FIRE: // Burn Up - gBattlescriptCurrInstr = BattleScript_RemoveFireType; - break; - case TYPE_ELECTRIC: // Double Shot - gBattlescriptCurrInstr = BattleScript_RemoveElectricType; - break; - default: - gBattlescriptCurrInstr = BattleScript_RemoveGenericType; - break; - } - RemoveBattlerType(gEffectBattler, type); - break; + if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) + break; } - case MOVE_EFFECT_ROUND: - TryUpdateRoundTurnOrder(); // If another PokΓ©mon uses Round before the user this turn, the user will use Round directly after it - gBattlescriptCurrInstr++; - break; - case MOVE_EFFECT_DIRE_CLAW: - if (!gBattleMons[gEffectBattler].status1) - { - static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; - gBattleScripting.moveEffect = RandomElement(RNG_DIRE_CLAW, sDireClawEffects); - SetMoveEffect(primary, certain); - } - break; - case MOVE_EFFECT_STEALTH_ROCK: - if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_POINTEDSTONESFLOAT; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_StealthRockActivates; - } - break; - case MOVE_EFFECT_SPIKES: - if (gSideTimers[GetBattlerSide(gEffectBattler)].spikesAmount < 3) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; - BattleScriptPush(gBattlescriptCurrInstr + 1); - if (gBattleStruct->isSkyBattle) - gBattlescriptCurrInstr++; - else - gBattlescriptCurrInstr = BattleScript_SpikesActivates; - } - break; - case MOVE_EFFECT_SYRUP_BOMB: - if (!(gStatuses4[gEffectBattler] & STATUS4_SYRUP_BOMB)) - { - struct Pokemon *mon = GetBattlerMon(gBattlerAttacker); - - gStatuses4[gEffectBattler] |= STATUS4_SYRUP_BOMB; - gDisableStructs[gEffectBattler].syrupBombTimer = 3; - gDisableStructs[gEffectBattler].syrupBombIsShiny = IsMonShiny(mon); - gBattleStruct->stickySyrupdBy[gEffectBattler] = gBattlerAttacker; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_SyrupBombActivates; - } - break; - case MOVE_EFFECT_SECRET_POWER: - if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - { - switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - { - case STATUS_FIELD_MISTY_TERRAIN: - gBattleScripting.moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1; - break; - case STATUS_FIELD_GRASSY_TERRAIN: - gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP; - break; - case STATUS_FIELD_ELECTRIC_TERRAIN: - gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS; - break; - case STATUS_FIELD_PSYCHIC_TERRAIN: - gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1; - break; - default: - gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS; - break; - } - } - else - { - switch (gBattleEnvironment) - { - case BATTLE_ENVIRONMENT_GRASS: - gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_SLEEP : MOVE_EFFECT_POISON); - break; - case BATTLE_ENVIRONMENT_UNDERWATER: - gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_6 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_DEF_MINUS_1); - break; - case BATTLE_ENVIRONMENT_POND: - gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_SPD_MINUS_1); - break; - case BATTLE_ENVIRONMENT_MOUNTAIN: - if (B_SECRET_POWER_EFFECT >= GEN_5) - gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1; - else if (B_SECRET_POWER_EFFECT >= GEN_4) - gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH; - else - gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION; - break; - case BATTLE_ENVIRONMENT_PUDDLE: - gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_5 ? MOVE_EFFECT_SPD_MINUS_1 : MOVE_EFFECT_ACC_MINUS_1); - break; - case BATTLE_ENVIRONMENT_LONG_GRASS: - gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP; - break; - case BATTLE_ENVIRONMENT_SAND: - gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1; - break; - case BATTLE_ENVIRONMENT_WATER: - gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1; - break; - case BATTLE_ENVIRONMENT_CAVE: - case BATTLE_ENVIRONMENT_BURIAL_GROUND: - case BATTLE_ENVIRONMENT_SPACE: - gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH; - break; - case BATTLE_ENVIRONMENT_SOARING: - case BATTLE_ENVIRONMENT_SKY_PILLAR: - case BATTLE_ENVIRONMENT_MARSH: - case BATTLE_ENVIRONMENT_SWAMP: - gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1; - break; - case BATTLE_ENVIRONMENT_SNOW: - case BATTLE_ENVIRONMENT_ICE: - gBattleScripting.moveEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE; - break; - case BATTLE_ENVIRONMENT_VOLCANO: - gBattleScripting.moveEffect = MOVE_EFFECT_BURN; - break; - case BATTLE_ENVIRONMENT_ULTRA_SPACE: - gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_1; - break; - default: - gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS; - break; - } - } - SetMoveEffect(primary, certain); - break; - case MOVE_EFFECT_PSYCHIC_NOISE: - battlerAbility = IsAbilityOnSide(gEffectBattler, ABILITY_AROMA_VEIL); + if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) + { + u32 ppToDeduct = 3; - if (battlerAbility) - { - gBattlerAbility = battlerAbility - 1; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_AromaVeilProtectsRet; - } - else if (!(gStatuses3[gEffectBattler] & STATUS3_HEAL_BLOCK)) - { - gStatuses3[gEffectBattler] |= STATUS3_HEAL_BLOCK; - gDisableStructs[gEffectBattler].healBlockTimer = gBattleTurnCounter + 2; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectPsychicNoise; - } - break; - case MOVE_EFFECT_TERA_BLAST: - if (GetActiveGimmick(gEffectBattler) == GIMMICK_TERA - && GetBattlerTeraType(gEffectBattler) == TYPE_STELLAR - && !NoAliveMonsForEitherParty()) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_LowerAtkSpAtk; - } - break; - case MOVE_EFFECT_ORDER_UP: - { - u32 stat = 0; - bool32 commanderAffected = TRUE; - switch (gBattleStruct->commanderActive[gEffectBattler]) - { - case SPECIES_TATSUGIRI_CURLY: - stat = STAT_ATK; - break; - case SPECIES_TATSUGIRI_DROOPY: - stat = STAT_DEF; - break; - case SPECIES_TATSUGIRI_STRETCHY: - stat = STAT_SPEED; - break; - default: - commanderAffected = FALSE; - break; - } - if (!commanderAffected - || NoAliveMonsForEitherParty() - || ChangeStatBuffs(SET_STAT_BUFF_VALUE(1), - stat, - affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, - 0) == STAT_CHANGE_DIDNT_WORK) - { - gBattlescriptCurrInstr++; - } - else - { - gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - gBattleScripting.animArg2 = 0; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_StatUp; - } - } - break; - case MOVE_EFFECT_ION_DELUGE: - if (!(gFieldStatuses & STATUS_FIELD_ION_DELUGE)) - { - gFieldStatuses |= STATUS_FIELD_ION_DELUGE; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectIonDeluge; - } - break; - case MOVE_EFFECT_HAZE: - for (i = 0; i < gBattlersCount; i++) - TryResetBattlerStatChanges(i); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectHaze; - break; - case MOVE_EFFECT_LEECH_SEED: - if (!IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) && !(gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED)) - { - gStatuses3[gBattlerTarget] |= gBattlerAttacker; - gStatuses3[gBattlerTarget] |= STATUS3_LEECHSEED; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectLeechSeed; - } - break; - case MOVE_EFFECT_REFLECT: - if (TrySetReflect(gBattlerAttacker)) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectReflect; - } - break; - case MOVE_EFFECT_LIGHT_SCREEN: - if (TrySetLightScreen(gBattlerAttacker)) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectLightScreen; - } - break; - case MOVE_EFFECT_SALT_CURE: - if (!(gStatuses4[gBattlerTarget] & STATUS4_SALT_CURE)) + if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct) + ppToDeduct = gBattleMons[gBattlerTarget].pp[i]; + + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) + ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) + gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct; + if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i)) + && !(gBattleMons[gBattlerTarget].volatiles.transformed)) { - gStatuses4[gBattlerTarget] |= STATUS4_SALT_CURE; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectSaltCure; + BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]); + MarkBattlerForControllerExec(gBattlerTarget); } - break; - case MOVE_EFFECT_EERIE_SPELL: - if (gLastMoves[gBattlerTarget] != MOVE_NONE && gLastMoves[gBattlerTarget] != 0xFFFF) - { - u32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) - break; - } - - if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) - { - u32 ppToDeduct = 3; - - if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct) - ppToDeduct = gBattleMons[gBattlerTarget].pp[i]; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) - ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); - PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) - gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct; - if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i)) - && !(gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED)) - { - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]); - MarkBattlerForControllerExec(gBattlerTarget); - } + if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == SKY_DROP_NO_TARGET) + CancelMultiTurnMoves(gBattlerTarget, SKY_DROP_IGNORE); - if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == SKY_DROP_NO_TARGET) - CancelMultiTurnMoves(gBattlerTarget, SKY_DROP_IGNORE); - - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_MoveEffectEerieSpell; - } - } - break; - case MOVE_EFFECT_RAISE_TEAM_ATTACK: - if (!NoAliveMonsForEitherParty()) - { - // Max Effects are ordered by stat ID. - SET_STATCHANGER(STAT_ATK, 1, FALSE); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; - } - break; - case MOVE_EFFECT_RAISE_TEAM_DEFENSE: - if (!NoAliveMonsForEitherParty()) - { - // Max Effects are ordered by stat ID. - SET_STATCHANGER(STAT_DEF, 1, FALSE); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; - } - break; - case MOVE_EFFECT_RAISE_TEAM_SPEED: - if (!NoAliveMonsForEitherParty()) - { - // Max Effects are ordered by stat ID. - SET_STATCHANGER(STAT_SPEED, 1, FALSE); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; - } - break; - case MOVE_EFFECT_RAISE_TEAM_SP_ATK: - if (!NoAliveMonsForEitherParty()) - { - // Max Effects are ordered by stat ID. - SET_STATCHANGER(STAT_SPATK, 1, FALSE); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; - } - break; - case MOVE_EFFECT_RAISE_TEAM_SP_DEF: - if (!NoAliveMonsForEitherParty()) - { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectEerieSpell; + } + } + break; + case MOVE_EFFECT_RAISE_TEAM_ATTACK: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_RAISE_TEAM_DEFENSE: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_DEF, 1, FALSE); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_RAISE_TEAM_SPEED: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_SPEED, 1, FALSE); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_RAISE_TEAM_SP_ATK: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_RAISE_TEAM_SP_DEF: + if (!NoAliveMonsForEitherParty()) + { + // Max Effects are ordered by stat ID. + SET_STATCHANGER(STAT_SPDEF, 1, FALSE); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; + } + break; + case MOVE_EFFECT_LOWER_ATTACK_SIDE: + case MOVE_EFFECT_LOWER_DEFENSE_SIDE: + case MOVE_EFFECT_LOWER_SPEED_SIDE: + case MOVE_EFFECT_LOWER_SP_ATK_SIDE: + case MOVE_EFFECT_LOWER_SP_DEF_SIDE: + case MOVE_EFFECT_LOWER_SPEED_2_SIDE: + case MOVE_EFFECT_LOWER_EVASIVENESS_SIDE: + if (!NoAliveMonsForEitherParty()) + { + enum Stat statId = 0; + u32 stage = 1; + switch (moveEffect) + { + case MOVE_EFFECT_LOWER_SPEED_2_SIDE: + statId = STAT_SPEED; + stage = 2; + break; + case MOVE_EFFECT_LOWER_EVASIVENESS_SIDE: + statId = STAT_EVASION; + break; + default: // Max Effects are ordered by stat ID. - SET_STATCHANGER(STAT_SPDEF, 1, FALSE); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRaiseStatAllies; - } - break; - case MOVE_EFFECT_LOWER_ATTACK_SIDE: - case MOVE_EFFECT_LOWER_DEFENSE_SIDE: - case MOVE_EFFECT_LOWER_SPEED_SIDE: - case MOVE_EFFECT_LOWER_SP_ATK_SIDE: - case MOVE_EFFECT_LOWER_SP_DEF_SIDE: - case MOVE_EFFECT_LOWER_SPEED_2_SIDE: - case MOVE_EFFECT_LOWER_EVASIVENESS_SIDE: - if (!NoAliveMonsForEitherParty()) - { - u32 statId = 0; - u32 stage = 1; - switch (gBattleScripting.moveEffect) - { - case MOVE_EFFECT_LOWER_SPEED_2_SIDE: - statId = STAT_SPEED; - stage = 2; - break; - case MOVE_EFFECT_LOWER_EVASIVENESS_SIDE: - statId = STAT_EVASION; - break; - default: - // Max Effects are ordered by stat ID. - statId = gBattleScripting.moveEffect - MOVE_EFFECT_LOWER_ATTACK_SIDE + 1; - break; - } - SET_STATCHANGER(statId, stage, TRUE); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectLowerStatFoes; - } - break; + statId = moveEffect - MOVE_EFFECT_LOWER_ATTACK_SIDE + 1; + break; + } + SET_STATCHANGER(statId, stage, TRUE); + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectLowerStatFoes; + } + break; + case MOVE_EFFECT_SUN: + case MOVE_EFFECT_RAIN: + case MOVE_EFFECT_SANDSTORM: + case MOVE_EFFECT_HAIL: + { + u8 weather = 0, msg = 0; + switch (moveEffect) + { case MOVE_EFFECT_SUN: + weather = BATTLE_WEATHER_SUN; + msg = B_MSG_STARTED_SUNLIGHT; + break; case MOVE_EFFECT_RAIN: + weather = BATTLE_WEATHER_RAIN; + msg = B_MSG_STARTED_RAIN; + break; case MOVE_EFFECT_SANDSTORM: + weather = BATTLE_WEATHER_SANDSTORM; + msg = B_MSG_STARTED_SANDSTORM; + break; case MOVE_EFFECT_HAIL: - { - u8 weather = 0, msg = 0; - switch (gBattleScripting.moveEffect) + if (B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW) { - case MOVE_EFFECT_SUN: - weather = BATTLE_WEATHER_SUN; - msg = B_MSG_STARTED_SUNLIGHT; - break; - case MOVE_EFFECT_RAIN: - weather = BATTLE_WEATHER_RAIN; - msg = B_MSG_STARTED_RAIN; - break; - case MOVE_EFFECT_SANDSTORM: - weather = BATTLE_WEATHER_SANDSTORM; - msg = B_MSG_STARTED_SANDSTORM; - break; - case MOVE_EFFECT_HAIL: - if (B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW) - { - weather = BATTLE_WEATHER_SNOW; - msg = B_MSG_STARTED_SNOW; - } - else - { - weather = BATTLE_WEATHER_HAIL; - msg = B_MSG_STARTED_HAIL; - } - break; + weather = BATTLE_WEATHER_SNOW; + msg = B_MSG_STARTED_SNOW; } - if (TryChangeBattleWeather(gBattlerAttacker, weather, FALSE)) + else { - gBattleCommunication[MULTISTRING_CHOOSER] = msg; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectSetWeather; + weather = BATTLE_WEATHER_HAIL; + msg = B_MSG_STARTED_HAIL; } break; - } + default: + break; + } + if (TryChangeBattleWeather(gBattlerAttacker, weather, ABILITY_NONE)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = msg; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectSetWeather; + } + break; + } + case MOVE_EFFECT_MISTY_TERRAIN: + case MOVE_EFFECT_GRASSY_TERRAIN: + case MOVE_EFFECT_ELECTRIC_TERRAIN: + case MOVE_EFFECT_PSYCHIC_TERRAIN: + { + u32 statusFlag = 0; + switch (moveEffect) + { case MOVE_EFFECT_MISTY_TERRAIN: + statusFlag = STATUS_FIELD_MISTY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; + break; case MOVE_EFFECT_GRASSY_TERRAIN: + statusFlag = STATUS_FIELD_GRASSY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; + break; case MOVE_EFFECT_ELECTRIC_TERRAIN: + statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; + break; case MOVE_EFFECT_PSYCHIC_TERRAIN: - { - u32 statusFlag = 0; - switch (gBattleScripting.moveEffect) - { - case MOVE_EFFECT_MISTY_TERRAIN: - statusFlag = STATUS_FIELD_MISTY_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; - break; - case MOVE_EFFECT_GRASSY_TERRAIN: - statusFlag = STATUS_FIELD_GRASSY_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; - break; - case MOVE_EFFECT_ELECTRIC_TERRAIN: - statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; - break; - case MOVE_EFFECT_PSYCHIC_TERRAIN: - statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; - break; - } - if (!(gFieldStatuses & statusFlag) && statusFlag != 0) - { - gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; - gFieldStatuses |= statusFlag; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) - gFieldTimers.terrainTimer = gBattleTurnCounter + 8; - else - gFieldTimers.terrainTimer = gBattleTurnCounter + 5; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectSetTerrain; - } + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; break; - } - case MOVE_EFFECT_VINE_LASH: - case MOVE_EFFECT_CANNONADE: - case MOVE_EFFECT_WILDFIRE: - case MOVE_EFFECT_VOLCALITH: - { - u8 side = GetBattlerSide(gBattlerTarget); - if (!(gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES)) - { - u32 moveType = GetMoveType(gCurrentMove); - gSideStatuses[side] |= SIDE_STATUS_DAMAGE_NON_TYPES; - gSideTimers[side].damageNonTypesTimer = gBattleTurnCounter + 5; // damage is dealt for 4 turns, ends on 5th - gSideTimers[side].damageNonTypesType = moveType; - BattleScriptPush(gBattlescriptCurrInstr + 1); - ChooseDamageNonTypesString(moveType); - gBattlescriptCurrInstr = BattleScript_DamageNonTypesStarts; - } - break; - } - case MOVE_EFFECT_STEELSURGE: - if (!(gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_STEELSURGE)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SHARPSTEELFLOATS; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectSteelsurge; - } - break; - case MOVE_EFFECT_DEFOG: - if (gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_SCREEN_ANY - || gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_HAZARDS_ANY - || gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_HAZARDS_ANY - || gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_DefogTryHazards; - } - break; - case MOVE_EFFECT_AURORA_VEIL: - if (!(gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_AURORA_VEIL)) - { - gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_AURORA_VEIL; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = gBattleTurnCounter + 8; - else - gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = gBattleTurnCounter + 5; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectAuroraVeilSuccess; - } - break; - case MOVE_EFFECT_GRAVITY: - if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) - { - gFieldStatuses |= STATUS_FIELD_GRAVITY; - gFieldTimers.gravityTimer = gBattleTurnCounter + 5; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectGravitySuccess; - } + default: break; - case MOVE_EFFECT_SANDBLAST_SIDE: - case MOVE_EFFECT_FIRE_SPIN_SIDE: + } + if (!(gFieldStatuses & statusFlag) && statusFlag != 0) + { + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; + gFieldStatuses |= statusFlag; + if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_TERRAIN_EXTENDER) + gFieldTimers.terrainTimer = 8; + else + gFieldTimers.terrainTimer = 5; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectSetTerrain; + } + break; + } + case MOVE_EFFECT_VINE_LASH: + case MOVE_EFFECT_CANNONADE: + case MOVE_EFFECT_WILDFIRE: + case MOVE_EFFECT_VOLCALITH: + { + u8 side = GetBattlerSide(gBattlerTarget); + if (!(gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES)) + { + u32 moveType = GetMoveType(gCurrentMove); + gSideStatuses[side] |= SIDE_STATUS_DAMAGE_NON_TYPES; + gSideTimers[side].damageNonTypesTimer = 5; + gSideTimers[side].damageNonTypesType = moveType; + BattleScriptPush(battleScript); + ChooseDamageNonTypesString(moveType); + gBattlescriptCurrInstr = BattleScript_DamageNonTypesStarts; + } + break; + } + case MOVE_EFFECT_STEELSURGE: + if (!IsHazardOnSide(GetBattlerSide(gBattlerTarget), HAZARDS_STEELSURGE)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SHARPSTEELFLOATS; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectSteelsurge; + } + break; + case MOVE_EFFECT_DEFOG: + if (gSideStatuses[GetBattlerSide(gBattlerTarget)] & SIDE_STATUS_SCREEN_ANY + || AreAnyHazardsOnSide(GetBattlerSide(gBattlerTarget)) + || AreAnyHazardsOnSide(GetBattlerSide(gBattlerAttacker)) + || gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectDefog; + } + break; + case MOVE_EFFECT_AURORA_VEIL: + if (!(gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_AURORA_VEIL)) + { + gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_AURORA_VEIL; + if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = 8; + else + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectAuroraVeil; + } + break; + case MOVE_EFFECT_GRAVITY: + if (!(gFieldStatuses & STATUS_FIELD_GRAVITY)) + { + gFieldStatuses |= STATUS_FIELD_GRAVITY; + gFieldTimers.gravityTimer = 5; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectGravitySuccess; + } + break; + case MOVE_EFFECT_SANDBLAST_SIDE: + case MOVE_EFFECT_FIRE_SPIN_SIDE: + { + // Affects both opponents, but doesn't print strings so we can handle it here. + u8 battler; + for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler) + { + if (!IsBattlerAlly(battler, gBattlerTarget)) + continue; + if (!gBattleMons[battler].volatiles.wrapped) { - // Affects both opponents, but doesn't print strings so we can handle it here. - u8 battler; - for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler) - { - if (!IsBattlerAlly(battler, gBattlerTarget)) - continue; - if (!(gBattleMons[battler].status2 & STATUS2_WRAPPED)) - { - gBattleMons[battler].status2 |= STATUS2_WRAPPED; - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_GRIP_CLAW) - gDisableStructs[battler].wrapTurns = (B_BINDING_TURNS >= GEN_5) ? 7 : 5; - else - gDisableStructs[battler].wrapTurns = (Random() % 2) + 4; - // The Wrap effect does not expire when the user switches, so here's some cheese. - gBattleStruct->wrappedBy[battler] = gBattlerTarget; - if (gBattleScripting.moveEffect == MOVE_EFFECT_SANDBLAST_SIDE) - gBattleStruct->wrappedMove[battler] = MOVE_SAND_TOMB; - else - gBattleStruct->wrappedMove[battler] = MOVE_FIRE_SPIN; - } - } - break; + gBattleMons[battler].volatiles.wrapped = TRUE; + if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_GRIP_CLAW) + gDisableStructs[battler].wrapTurns = (B_BINDING_TURNS >= GEN_5) ? 7 : 5; + else + gDisableStructs[battler].wrapTurns = (Random() % 2) + 4; + // The Wrap effect does not expire when the user switches, so here's some cheese. + gBattleMons[battler].volatiles.wrappedBy = gBattlerTarget; + if (moveEffect == MOVE_EFFECT_SANDBLAST_SIDE) + gBattleMons[battler].volatiles.wrappedMove = MOVE_SAND_TOMB; + else + gBattleMons[battler].volatiles.wrappedMove = MOVE_FIRE_SPIN; } - case MOVE_EFFECT_YAWN_FOE: + } + break; + } + case MOVE_EFFECT_YAWN_FOE: + { + if (gBattleMons[gBattlerTarget].volatiles.yawn == 0 + && CanBeSlept(gBattlerTarget, gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE) + && RandomPercentage(RNG_G_MAX_SNOOZE, 50)) + { + gBattleMons[gBattlerTarget].volatiles.yawn = 2; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectYawnSide; + } + break; + } + case MOVE_EFFECT_SPITE: + if (gLastMoves[gBattlerTarget] != MOVE_NONE + && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectTryReducePP; + } + break; + case MOVE_EFFECT_PARALYZE_SIDE: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectParalyzeSide; + break; + case MOVE_EFFECT_POISON_SIDE: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectPoisonSide; + break; + case MOVE_EFFECT_POISON_PARALYZE_SIDE: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectPoisonParalyzeSide; + break; + case MOVE_EFFECT_EFFECT_SPORE_SIDE: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectEffectSporeSide; + break; + case MOVE_EFFECT_CONFUSE_PAY_DAY_SIDE: + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + u32 payday = gPaydayMoney; + gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 100); + if (payday > gPaydayMoney) + gPaydayMoney = 0xFFFF; + gBattleCommunication[CURSOR_POSITION] = 1; // add "Coins scattered." message + } + // fall through + case MOVE_EFFECT_CONFUSE_SIDE: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectConfuseSide; + break; + case MOVE_EFFECT_INFATUATE_SIDE: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectInfatuateSide; + break; + case MOVE_EFFECT_TORMENT_SIDE: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectTormentSide; + break; + case MOVE_EFFECT_PREVENT_ESCAPE_SIDE: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectMeanLookSide; + break; + case MOVE_EFFECT_CRIT_PLUS_SIDE: + if (gBattleMons[gBattlerAttacker].volatiles.bonusCritStages < 3) + gBattleMons[gBattlerAttacker].volatiles.bonusCritStages++; + if (gBattleMons[BATTLE_PARTNER(gBattlerAttacker)].volatiles.bonusCritStages < 3) + gBattleMons[BATTLE_PARTNER(gBattlerAttacker)].volatiles.bonusCritStages++; + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectRaiseCritAlliesAnim; + break; + case MOVE_EFFECT_HEAL_TEAM: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectHealOneSixthAllies; + break; + case MOVE_EFFECT_AROMATHERAPY: + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_MoveEffectAromatherapy; + break; + case MOVE_EFFECT_RECYCLE_BERRIES: + if (RandomPercentage(RNG_G_MAX_REPLENISH, 50)) + { + BattleScriptPush(battleScript); + gBattlescriptCurrInstr = BattleScript_EffectRecycleBerriesAllies; + } + break; + case MOVE_EFFECT_REMOVE_STATUS: + { + u32 argStatus = GetMoveEffectArg_Status(gCurrentMove); + if ((gBattleMons[gEffectBattler].status1 & argStatus) + && (NumAffectedSpreadMoveTargets() > 1 || !IsMoveEffectBlockedByTarget(GetBattlerAbility(gEffectBattler)))) + { + gBattleMons[gEffectBattler].status1 &= ~(argStatus); + BtlController_EmitSetMonData(gEffectBattler, 0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBattler].status1); + MarkBattlerForControllerExec(gEffectBattler); + BattleScriptPush(battleScript); + + switch (argStatus) { - if (!(gStatuses3[gBattlerTarget] & STATUS3_YAWN) - && CanBeSlept(gBattlerTarget, gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE) - && RandomPercentage(RNG_G_MAX_SNOOZE, 50)) - { - gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectYawnSuccess; - } - break; - } - case MOVE_EFFECT_SPITE: - if (gLastMoves[gBattlerTarget] != MOVE_NONE - && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectTryReducePP; - } - break; - case MOVE_EFFECT_PARALYZE_SIDE: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectParalyzeSide; - break; - case MOVE_EFFECT_POISON_SIDE: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectPoisonSide; - break; - case MOVE_EFFECT_POISON_PARALYZE_SIDE: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectPoisonParalyzeSide; + case STATUS1_PARALYSIS: + gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal; break; - case MOVE_EFFECT_EFFECT_SPORE_SIDE: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectEffectSporeSide; + case STATUS1_SLEEP: + TryDeactivateSleepClause(GetBattlerSide(gEffectBattler), gBattlerPartyIndexes[gBattlerTarget]); + gBattlescriptCurrInstr = BattleScript_TargetWokeUp; break; - case MOVE_EFFECT_CONFUSE_PAY_DAY_SIDE: - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - u32 payday = gPaydayMoney; - gPaydayMoney += (gBattleMons[gBattlerAttacker].level * 100); - if (payday > gPaydayMoney) - gPaydayMoney = 0xFFFF; - gBattleCommunication[CURSOR_POSITION] = 1; // add "Coins scattered." message - } - // fall through - case MOVE_EFFECT_CONFUSE_SIDE: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectConfuseSide; - break; - case MOVE_EFFECT_INFATUATE_SIDE: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectInfatuateSide; - break; - case MOVE_EFFECT_TORMENT_SIDE: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectTormentSide; + case STATUS1_BURN: + gBattlescriptCurrInstr = BattleScript_TargetBurnHeal; break; - case MOVE_EFFECT_PREVENT_ESCAPE_SIDE: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectMeanLookSide; - break; - case MOVE_EFFECT_CRIT_PLUS_SIDE: - gBattleStruct->bonusCritStages[gBattlerAttacker]++; - gBattleStruct->bonusCritStages[BATTLE_PARTNER(gBattlerAttacker)]++; - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRaiseCritAlliesAnim; - break; - case MOVE_EFFECT_HEAL_TEAM: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectHealOneSixthAllies; - break; - case MOVE_EFFECT_AROMATHERAPY: - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectHealBell_FromHeal; + case STATUS1_FREEZE: + gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; break; - case MOVE_EFFECT_RECYCLE_BERRIES: - { - if (RandomPercentage(RNG_G_MAX_REPLENISH, 50)) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_EffectRecycleBerriesAllies; - } + case STATUS1_FROSTBITE: + gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove; break; - } - case MOVE_EFFECT_REMOVE_STATUS: - { - u32 argStatus = GetMoveEffectArg_Status(gCurrentMove); - if ((gBattleMons[gEffectBattler].status1 & argStatus) - && (NumAffectedSpreadMoveTargets() > 1 || !IsMoveEffectBlockedByTarget(GetBattlerAbility(gEffectBattler)))) - { - gBattleMons[gEffectBattler].status1 &= ~(argStatus); - BtlController_EmitSetMonData(gEffectBattler, 0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBattler].status1); - MarkBattlerForControllerExec(gEffectBattler); - BattleScriptPush(gBattlescriptCurrInstr + 1); - - switch (argStatus) - { - case STATUS1_PARALYSIS: - gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal; - break; - case STATUS1_SLEEP: - TryDeactivateSleepClause(GetBattlerSide(gEffectBattler), gBattlerPartyIndexes[gBattlerTarget]); - gBattlescriptCurrInstr = BattleScript_TargetWokeUp; - break; - case STATUS1_BURN: - gBattlescriptCurrInstr = BattleScript_TargetBurnHeal; - break; - case STATUS1_FREEZE: - gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; - break; - case STATUS1_FROSTBITE: - gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove; - break; - case STATUS1_POISON: - case STATUS1_TOXIC_POISON: - case STATUS1_PSN_ANY: - gBattlescriptCurrInstr = BattleScript_TargetPoisonHealed; - break; - } - } + case STATUS1_POISON: + case STATUS1_TOXIC_POISON: + case STATUS1_PSN_ANY: + gBattlescriptCurrInstr = BattleScript_TargetPoisonHealed; break; } - } } + break; + } + default: + break; } - gBattleScripting.moveEffect = 0; + gBattleScripting.moveEffect = MOVE_EFFECT_NONE; } static bool32 CanApplyAdditionalEffect(const struct AdditionalEffect *additionalEffect) { + // If Toxic Chain will activate it blocks all other non volatile effects + if (gBattleStruct->toxicChainPriority && additionalEffect->moveEffect <= MOVE_EFFECT_FROSTBITE) + return FALSE; + if (additionalEffect->self && NumAffectedSpreadMoveTargets() > 1 && GetNextTarget(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove), TRUE) != MAX_BATTLERS_COUNT) @@ -4508,6 +4140,20 @@ static bool32 CanApplyAdditionalEffect(const struct AdditionalEffect *additional return TRUE; } +static void SetToxicChainPriority(void) +{ + if (gBattleStruct->toxicChainPriority) + return; + + enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); + if (abilityAtk == ABILITY_TOXIC_CHAIN + && IsBattlerAlive(gBattlerTarget) + && CanBePoisoned(gBattlerAttacker, gBattlerTarget, abilityAtk, GetBattlerAbility(gBattlerTarget)) + && IsBattlerTurnDamaged(gBattlerTarget) + && RandomWeighted(RNG_TOXIC_CHAIN, 7, 3)) + gBattleStruct->toxicChainPriority = TRUE; +} + static void Cmd_setadditionaleffects(void) { CMD_ARGS(); @@ -4515,6 +4161,7 @@ static void Cmd_setadditionaleffects(void) if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) { u32 numAdditionalEffects = GetMoveAdditionalEffectCount(gCurrentMove); + SetToxicChainPriority(); if (numAdditionalEffects > gBattleStruct->additionalEffectsCounter) { u32 percentChance; @@ -4529,11 +4176,18 @@ static void Cmd_setadditionaleffects(void) // Activate effect if it's primary (chance == 0) or if RNGesus says so if ((percentChance == 0) || RandomPercentage(RNG_SECONDARY_EFFECT + gBattleStruct->additionalEffectsCounter, percentChance)) { - gBattleScripting.moveEffect = additionalEffect->moveEffect | (MOVE_EFFECT_AFFECTS_USER * (additionalEffect->self)); + gBattleCommunication[MULTISTRING_CHOOSER] = *((u8 *) &additionalEffect->multistring); + + enum SetMoveEffectFlags flags = NO_FLAGS; + if (percentChance == 0) flags |= EFFECT_PRIMARY; + if (percentChance >= 100) flags |= EFFECT_CERTAIN; SetMoveEffect( - percentChance == 0, // a primary effect - percentChance >= 100 // certain to happen + gBattlerAttacker, + additionalEffect->self ? gBattlerAttacker : gBattlerTarget, + additionalEffect->moveEffect, + cmd->nextInstr, + flags ); } } @@ -4560,48 +4214,43 @@ static void Cmd_setadditionaleffects(void) gBattleScripting.moveEffect = 0; gBattlescriptCurrInstr = cmd->nextInstr; } - - gBattleScripting.multihitMoveEffect = 0; } static void Cmd_seteffectprimary(void) { - CMD_ARGS(); + CMD_ARGS(u8 battler, u8 effectBattler); - SetMoveEffect(TRUE, FALSE); + u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 effectBattler = GetBattlerForBattleScript(cmd->effectBattler); + SetMoveEffect(battler, effectBattler, gBattleScripting.moveEffect, cmd->nextInstr, EFFECT_PRIMARY); } static void Cmd_seteffectsecondary(void) { - CMD_ARGS(); + CMD_ARGS(u8 battler, u8 effectBattler); - SetMoveEffect(FALSE, FALSE); + u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 effectBattler = GetBattlerForBattleScript(cmd->effectBattler); + SetMoveEffect(battler, effectBattler, gBattleScripting.moveEffect, cmd->nextInstr, EFFECT_PRIMARY); } -static void Cmd_clearstatusfromeffect(void) +static void Cmd_clearvolatile(void) { - CMD_ARGS(u8 battler); + CMD_ARGS(u8 battler, u8 _volatile); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) - gBattleMons[battler].status1 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]); - else - { - gBattleMons[battler].status2 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]); - if (gBattleScripting.moveEffect == MOVE_EFFECT_CHARGING) - gProtectStructs[battler].chargingTurn = FALSE; - } + SetMonVolatile(battler, cmd->_volatile, 0); + if (cmd->_volatile == VOLATILE_MULTIPLETURNS) + gProtectStructs[battler].chargingTurn = FALSE; - gBattleScripting.moveEffect = 0; gBattlescriptCurrInstr = cmd->nextInstr; - gBattleScripting.multihitMoveEffect = 0; } static void Cmd_tryfaintmon(void) { CMD_ARGS(u8 battler, bool8 isSpikes, const u8 *instr); - u32 battler, destinyBondBattler; + u32 battler; const u8 *faintScript; battler = GetBattlerForBattleScript(cmd->battler); @@ -4619,25 +4268,24 @@ static void Cmd_tryfaintmon(void) } else { - if (gBattleMons[battler].ability == ABILITY_NEUTRALIZING_GAS + if (gDisableStructs[battler].neutralizingGas && !(gAbsentBattlerFlags & (1u << battler)) && !IsBattlerAlive(battler)) { - gBattleMons[battler].ability = ABILITY_NONE; - BattleScriptPush(gBattlescriptCurrInstr); - gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; - return; + gDisableStructs[battler].neutralizingGas = FALSE; + if (!IsNeutralizingGasOnField()) + { + BattleScriptPush(gBattlescriptCurrInstr); + gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; + return; + } } + if (cmd->battler == BS_ATTACKER) - { - destinyBondBattler = gBattlerTarget; - faintScript = BattleScript_FaintAttacker; - } - else - { - destinyBondBattler = gBattlerAttacker; - faintScript = BattleScript_FaintTarget; - } + TryUpdateEvolutionTracker(IF_DEFEAT_X_WITH_ITEMS, 1, MOVE_NONE); + + gBattlerFainted = battler; + faintScript = BattleScript_FaintBattler; if (!(gAbsentBattlerFlags & (1u << battler)) && !IsBattlerAlive(battler)) { @@ -4659,30 +4307,11 @@ static void Cmd_tryfaintmon(void) gBattleResults.lastOpponentSpecies = GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES, NULL); gSideTimers[B_SIDE_OPPONENT].retaliateTimer = 2; } - if ((gHitMarker & HITMARKER_DESTINYBOND) && IsBattlerAlive(gBattlerAttacker) - && !(GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)) - { - gHitMarker &= ~HITMARKER_DESTINYBOND; - BattleScriptPush(gBattlescriptCurrInstr); - gBattleStruct->moveDamage[destinyBondBattler] = gBattleMons[destinyBondBattler].hp; - gBattlescriptCurrInstr = BattleScript_DestinyBondTakesLife; - } - if ((gStatuses3[gBattlerTarget] & STATUS3_GRUDGE) - && !(gHitMarker & HITMARKER_GRUDGE) - && !IsBattlerAlly(gBattlerAttacker, gBattlerTarget) - && IsBattlerAlive(gBattlerAttacker) - && gCurrentMove != MOVE_STRUGGLE) - { - u8 moveIndex = gBattleStruct->chosenMovePositions[gBattlerAttacker]; - - gBattleMons[gBattlerAttacker].pp[moveIndex] = 0; - BattleScriptPush(gBattlescriptCurrInstr); - gBattlescriptCurrInstr = BattleScript_GrudgeTakesPp; - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, moveIndex + REQUEST_PPMOVE1_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].pp[moveIndex]), &gBattleMons[gBattlerAttacker].pp[moveIndex]); - MarkBattlerForControllerExec(gBattlerAttacker); - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].moves[moveIndex]) - } + if (gBattleMons[gBattlerTarget].volatiles.destinyBond) + gBattleStruct->tryDestinyBond = TRUE; + if (gBattleMons[gBattlerTarget].volatiles.grudge) + gBattleStruct->tryGrudge = TRUE; TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); } @@ -4704,10 +4333,9 @@ static void Cmd_dofaintanimation(void) if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) { - BattleScriptPushCursor(); UndoDynamax(battler); gBattleScripting.battler = battler; - gBattlescriptCurrInstr = BattleScript_DynamaxEnds_Ret; + BattleScriptCall(BattleScript_DynamaxEnds_Ret); return; } @@ -4753,15 +4381,14 @@ static void Cmd_jumpifstatus(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_jumpifstatus2(void) +static void Cmd_jumpifvolatile(void) { - CMD_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + CMD_ARGS(u8 battler, u8 _volatile, const u8 *jumpInstr); u8 battler = GetBattlerForBattleScript(cmd->battler); - u32 flags = cmd->flags; const u8 *jumpInstr = cmd->jumpInstr; - if (gBattleMons[battler].status2 & flags && IsBattlerAlive(battler)) + if (GetBattlerVolatile(battler, cmd->_volatile) != 0 && IsBattlerAlive(battler)) gBattlescriptCurrInstr = jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; @@ -4769,11 +4396,11 @@ static void Cmd_jumpifstatus2(void) static void Cmd_jumpifability(void) { - CMD_ARGS(u8 battler, u16 ability, const u8 *jumpInstr); + CMD_ARGS(u8 battler, enum Ability ability, const u8 *jumpInstr); u32 battler; bool32 hasAbility = FALSE; - u32 ability = cmd->ability; + enum Ability ability = cmd->ability; switch (cmd->battler) { @@ -4835,7 +4462,7 @@ static void Cmd_jumpifstat(void) u8 value = cmd->value; u8 comparison = cmd->comparison; - ret = CompareStat(battler, stat, value, comparison); + ret = CompareStat(battler, stat, value, comparison, GetBattlerAbility(battler)); if (ret) gBattlescriptCurrInstr = cmd->jumpInstr; @@ -4843,25 +4470,22 @@ static void Cmd_jumpifstat(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_jumpifstatus3condition(void) +static void Cmd_jumpifstatignorecontrary(void) { - CMD_ARGS(u8 battler, u32 flags, bool8 jumpIfTrue, const u8 *jumpInstr); + CMD_ARGS(u8 battler, u8 comparison, u8 stat, u8 value, const u8 *jumpInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); - if (cmd->jumpIfTrue) - { - if ((gStatuses3[battler] & cmd->flags) != 0) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->jumpInstr; - } + bool32 ret = 0; + u8 battler = GetBattlerForBattleScript(cmd->battler); + u8 stat = cmd->stat; + u8 value = cmd->value; + u8 comparison = cmd->comparison; + + ret = CompareStat(battler, stat, value, comparison, ABILITY_NONE); + + if (ret) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - if ((gStatuses3[battler] & cmd->flags) != 0) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - } + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpbasedontype(void) @@ -4911,7 +4535,7 @@ static bool32 BattleTypeAllowsExp(void) static u32 GetMonHoldEffect(struct Pokemon *mon) { - enum ItemHoldEffect holdEffect; + enum HoldEffect holdEffect; u32 item = GetMonData(mon, MON_DATA_HELD_ITEM); if (item == ITEM_ENIGMA_BERRY_E_READER) @@ -4930,7 +4554,7 @@ static void Cmd_getexp(void) { CMD_ARGS(u8 battler); - enum ItemHoldEffect holdEffect; + enum HoldEffect holdEffect; s32 i; // also used as stringId u8 *expMonId = &gBattleStruct->expGetterMonId; u32 currLvl; @@ -5059,7 +4683,7 @@ static void Cmd_getexp(void) if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && (gBattleMons[0].hp || (IsDoubleBattle() && gBattleMons[2].hp)) && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) - && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) + && (!IsDoubleBattle() || !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) && !gBattleStruct->wildVictorySong) { BattleStopLowHpSound(); @@ -5084,7 +4708,7 @@ static void Cmd_getexp(void) if (B_EXP_CAP_TYPE == EXP_CAP_HARD && gBattleStruct->battlerExpReward != 0) { - u32 growthRate = gSpeciesInfo[GetMonData(&gPlayerParty[*expMonId], MON_DATA_SPECIES)].growthRate; + enum GrowthRate growthRate = gSpeciesInfo[GetMonData(&gPlayerParty[*expMonId], MON_DATA_SPECIES)].growthRate; u32 currentExp = GetMonData(&gPlayerParty[*expMonId], MON_DATA_EXP); u32 levelCap = GetCurrentLevelCap(); @@ -5179,9 +4803,8 @@ static void Cmd_getexp(void) PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, expBattler, *expMonId); PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[*expMonId], MON_DATA_LEVEL)); - BattleScriptPushCursor(); gLeveledUpInBattle |= 1 << *expMonId; - gBattlescriptCurrInstr = BattleScript_LevelUp; + BattleScriptCall(BattleScript_LevelUp); gBattleStruct->battlerExpReward = T1_READ_32(&gBattleResources->bufferB[expBattler][2]); AdjustFriendship(&gPlayerParty[*expMonId], FRIENDSHIP_EVENT_GROW_LEVEL); @@ -5193,8 +4816,16 @@ static void Cmd_getexp(void) if (battler != 0xFF) { - CopyMonLevelAndBaseStatsToBattleMon(battler, &gPlayerParty[*expMonId]); - if (gStatuses3[battler] & STATUS3_POWER_TRICK) + if (gBattleMons[battler].volatiles.transformed) + { + gBattleMons[battler].level = GetMonData(&gPlayerParty[*expMonId], MON_DATA_LEVEL); + gBattleMons[battler].hp = GetMonData(&gPlayerParty[*expMonId], MON_DATA_HP); + } + else + { + CopyMonLevelAndBaseStatsToBattleMon(battler, &gPlayerParty[*expMonId]); + } + if (gBattleMons[battler].volatiles.powerTrick) SWAP(gBattleMons[battler].attack, gBattleMons[battler].defense, temp); } @@ -5232,8 +4863,6 @@ static void Cmd_getexp(void) // not sure why gf clears the item and ability here gBattleStruct->expOrderId = 0; gBattleStruct->teamGotExpMsgPrinted = FALSE; - gBattleMons[gBattlerFainted].item = ITEM_NONE; - gBattleMons[gBattlerFainted].ability = ABILITY_NONE; gBattlescriptCurrInstr = cmd->nextInstr; } break; @@ -5279,22 +4908,20 @@ bool32 NoAliveMonsForPlayer(void) { HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); } - // Get the number of fainted mons or eggs (not empty slots) in the first three party slots. if (i < 3 && ((GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_HP)) || GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))) ineligibleMonsCount++; } - // Get the number of inelligible slots in the saved player party. if (B_MULTI_BATTLE_WHITEOUT > GEN_3 && gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER) - && !(gBattleTypeFlags & BATTLE_TYPE_ARENA)) + && !(gBattleTypeFlags & BATTLE_TYPE_ARENA) && !(IsMultibattleTest())) // Multibattle tests appear to not save the player party data for the check below. { for (i = 0; i < PARTY_SIZE; i++) { - if (!GetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_SPECIES) - || !GetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_HP) - || GetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_IS_EGG)) + if (!GetMonData(GetSavedPlayerPartyMon(i), MON_DATA_SPECIES) + || !GetMonData(GetSavedPlayerPartyMon(i), MON_DATA_HP) + || GetMonData(GetSavedPlayerPartyMon(i), MON_DATA_IS_EGG)) ineligibleMonsCount++; } @@ -5341,7 +4968,6 @@ static void Cmd_checkteamslost(void) if (NoAliveMonsForPlayer()) gBattleOutcome |= B_OUTCOME_LOST; - if (NoAliveMonsForOpponent()) gBattleOutcome |= B_OUTCOME_WON; @@ -5356,14 +4982,14 @@ static void Cmd_checkteamslost(void) for (emptyPlayerSpots = 0, i = 0; i < gBattlersCount; i += 2) { - if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].faintedHasReplacement)) + if ((gHitMarker & HITMARKER_FAINTED(i)) && (!gSpecialStatuses[i].faintedHasReplacement)) emptyPlayerSpots++; } emptyOpponentSpots = 0; for (i = 1; i < gBattlersCount; i += 2) { - if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].faintedHasReplacement)) + if ((gHitMarker & HITMARKER_FAINTED(i)) && (!gSpecialStatuses[i].faintedHasReplacement)) emptyOpponentSpots++; } @@ -5395,11 +5021,11 @@ static void Cmd_checkteamslost(void) static void MoveValuesCleanUp(void) { - gBattleScripting.moveEffect = 0; + gBattleScripting.moveEffect = MOVE_EFFECT_NONE; + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_NONE; gBattleCommunication[MISS_TYPE] = 0; - if (!gMultiHitCounter) - gHitMarker &= ~HITMARKER_DESTINYBOND; - gHitMarker &= ~HITMARKER_SYNCHRONIZE_EFFECT; + gBattleStruct->tryDestinyBond = FALSE; + gBattleStruct->tryGrudge = FALSE; } static void Cmd_movevaluescleanup(void) @@ -5749,21 +5375,29 @@ static void Cmd_waitstate(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_absorb(void) +static void Cmd_isdmgblockedbydisguise(void) { - CMD_ARGS(u8 battler); + CMD_ARGS(); - if (gBattleControllerExecFlags) + if (!IsMimikyuDisguised(gBattlerAttacker) + || gBattleMons[gBattlerAttacker].volatiles.transformed + || !IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_DISGUISE)) + { + gBattlescriptCurrInstr = cmd->nextInstr; return; + } - u32 battler = GetBattlerForBattleScript(cmd->battler); - BtlController_EmitHealthBarUpdate(battler, B_COMM_TO_CONTROLLER, gBattleStruct->moveDamage[battler]); - MarkBattlerForControllerExec(battler); - - if (IsOnPlayerSide(battler) && gBattleStruct->moveDamage[battler] > 0) - gBattleResults.playerMonWasDamaged = TRUE; - - gBattlescriptCurrInstr = cmd->nextInstr; + gBattleScripting.battler = gBattlerAttacker; + if (GetBattlerPartyState(gBattlerAttacker)->changedSpecies == SPECIES_NONE) + GetBattlerPartyState(gBattlerAttacker)->changedSpecies = gBattleMons[gBattlerAttacker].species; + if (gBattleMons[gBattlerAttacker].species == SPECIES_MIMIKYU_TOTEM_DISGUISED) + gBattleMons[gBattlerAttacker].species = SPECIES_MIMIKYU_BUSTED_TOTEM; + else + gBattleMons[gBattlerAttacker].species = SPECIES_MIMIKYU_BUSTED; + if (GetConfig(CONFIG_DISGUISE_HP_LOSS) >= GEN_8) + SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 8); + BattleScriptPush(BattleScript_MoveEnd); + gBattlescriptCurrInstr = BattleScript_TargetFormChange; } static void Cmd_return(void) @@ -5812,18 +5446,15 @@ static void Cmd_setroost(void) CMD_ARGS(); gDisableStructs[gBattlerAttacker].roostActive = TRUE; - gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].types[0]; - gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].types[1]; - gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifabilitypresent(void) { - CMD_ARGS(u16 ability, const u8 *jumpInstr); + CMD_ARGS(enum Ability ability, const u8 *jumpInstr); - u16 ability = cmd->ability; - u32 abilityBattler = IsAbilityOnField(ability); + enum Ability ability = cmd->ability; + enum Ability abilityBattler = IsAbilityOnField(ability); if (abilityBattler) { gBattlerAbility = abilityBattler - 1; @@ -5838,8 +5469,7 @@ static void Cmd_jumpifabilitypresent(void) static void Cmd_endselectionscript(void) { CMD_ARGS(); - - *(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE; + gBattleStruct->battlerState[gBattlerAttacker].selectionScriptFinished = TRUE; } static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *nextInstr) @@ -5882,7 +5512,7 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = nextInstr; } - else if (gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE) + else if (IsSemiInvulnerable(battler, CHECK_ALL)) { gBattlescriptCurrInstr = nextInstr; } @@ -5911,220 +5541,41 @@ static void Cmd_playanimation_var(void) PlayAnimation(battler, *(cmd->animIdPtr), cmd->argPtr, cmd->nextInstr); } -static void Cmd_setgraphicalstatchangevalues(void) +static void Cmd_jumpfifsemiinvulnerable(void) { - CMD_ARGS(); - - u8 value = GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger); + CMD_ARGS(u8 battler, u8 state, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); - switch (value) - { - case SET_STAT_BUFF_VALUE(1): // +1 - value = STAT_ANIM_PLUS1 + 1; - break; - case SET_STAT_BUFF_VALUE(2): // +2 - value = STAT_ANIM_PLUS2 + 1; - break; - case SET_STAT_BUFF_VALUE(3): // +3 - value = STAT_ANIM_PLUS2 + 1; - break; - case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1 - value = STAT_ANIM_MINUS1 + 1; - break; - case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2 - value = STAT_ANIM_MINUS2 + 1; - break; - case SET_STAT_BUFF_VALUE(3) | STAT_BUFF_NEGATIVE: // -3 - value = STAT_ANIM_MINUS2 + 1; - break; - default: // <-12,-4> and <4, 12> - if (value & STAT_BUFF_NEGATIVE) - value = STAT_ANIM_MINUS2 + 1; - else - value = STAT_ANIM_PLUS2 + 1; - break; - } - gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; - gBattleScripting.animArg2 = 0; - gBattlescriptCurrInstr = cmd->nextInstr; + if (gBattleMons[battler].volatiles.semiInvulnerable == cmd->state) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_playstatchangeanimation(void) +static void Cmd_unused_0x48(void) { - CMD_ARGS(u8 battler, u8 stats, u8 flags); +} - u32 currStat = 0; - u32 statAnimId = 0; - u32 changeableStatsCount = 0; - u32 startingStatAnimId = 0; - u32 flags = cmd->flags; - u32 battler = GetBattlerForBattleScript(cmd->battler); - u32 ability = GetBattlerAbility(battler); - u32 stats = cmd->stats; - - // Handle Contrary and Simple - if (ability == ABILITY_CONTRARY) - { - flags ^= STAT_CHANGE_NEGATIVE; - RecordAbilityBattle(battler, ability); - } - else if (ability == ABILITY_SIMPLE) - { - flags |= STAT_CHANGE_BY_TWO; - RecordAbilityBattle(battler, ability); - } - - if (flags & STAT_CHANGE_NEGATIVE) // goes down - { - if (flags & STAT_CHANGE_BY_TWO) - startingStatAnimId = STAT_ANIM_MINUS2; - else - startingStatAnimId = STAT_ANIM_MINUS1; - - while (stats != 0) - { - if (stats & 1) - { - if (flags & STAT_CHANGE_CANT_PREVENT) - { - if (gBattleMons[battler].statStages[currStat] > MIN_STAT_STAGE) - { - statAnimId = startingStatAnimId + currStat; - changeableStatsCount++; - } - } - else if (!gSideTimers[GetBattlerSide(battler)].mistTimer - && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_CLEAR_AMULET - && ability != ABILITY_CLEAR_BODY - && ability != ABILITY_FULL_METAL_BODY - && ability != ABILITY_WHITE_SMOKE - && !((ability == ABILITY_KEEN_EYE || ability == ABILITY_MINDS_EYE) && currStat == STAT_ACC) - && !(B_ILLUMINATE_EFFECT >= GEN_9 && ability == ABILITY_ILLUMINATE && currStat == STAT_ACC) - && !(ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK) - && !(ability == ABILITY_BIG_PECKS && currStat == STAT_DEF)) - { - if (gBattleMons[battler].statStages[currStat] > MIN_STAT_STAGE) - { - statAnimId = startingStatAnimId + currStat; - changeableStatsCount++; - } - } - } - stats >>= 1, currStat++; - } - - if (changeableStatsCount > 1) // more than one stat, so the color is gray - { - if (flags & STAT_CHANGE_BY_TWO) - statAnimId = STAT_ANIM_MULTIPLE_MINUS2; - else - statAnimId = STAT_ANIM_MULTIPLE_MINUS1; - } - } - else // goes up - { - if (flags & STAT_CHANGE_BY_TWO) - startingStatAnimId = STAT_ANIM_PLUS2; - else - startingStatAnimId = STAT_ANIM_PLUS1; - - while (stats != 0) - { - if (stats & 1 && gBattleMons[battler].statStages[currStat] < MAX_STAT_STAGE) - { - statAnimId = startingStatAnimId + currStat; - changeableStatsCount++; - } - stats >>= 1, currStat++; - } - - if (changeableStatsCount > 1) // more than one stat, so the color is gray - { - if (flags & STAT_CHANGE_BY_TWO) - statAnimId = STAT_ANIM_MULTIPLE_PLUS2; - else - statAnimId = STAT_ANIM_MULTIPLE_PLUS1; - } - } - - if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount < 2) - { - gBattlescriptCurrInstr = cmd->nextInstr; - } - else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed) - { - BtlController_EmitBattleAnimation(battler, B_COMM_TO_CONTROLLER, B_ANIM_STATS_CHANGE, &gDisableStructs[battler], statAnimId); - MarkBattlerForControllerExec(battler); - if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1) - gBattleScripting.statAnimPlayed = TRUE; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->nextInstr; - } -} - -static bool32 TryKnockOffBattleScript(u32 battlerDef) -{ - if (gBattleMons[battlerDef].item != 0 - && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item) - && !NoAliveMonsForEitherParty()) - { - if (GetBattlerAbility(battlerDef) == ABILITY_STICKY_HOLD && IsBattlerAlive(battlerDef)) - { - gBattlerAbility = battlerDef; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_StickyHoldActivates; - } - else - { - u32 side = GetBattlerSide(battlerDef); - - gLastUsedItem = gBattleMons[battlerDef].item; - gBattleMons[battlerDef].item = 0; - if (gBattleMons[battlerDef].ability != ABILITY_GORILLA_TACTICS) - gBattleStruct->choicedMove[battlerDef] = 0; - CheckSetUnburden(battlerDef); - - // In Gen 5+, Knock Off removes the target's item rather than rendering it unusable. - if (B_KNOCK_OFF_REMOVAL >= GEN_5) - { - BtlController_EmitSetMonData(battlerDef, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerDef].item), &gBattleMons[battlerDef].item); - MarkBattlerForControllerExec(battlerDef); - } - else - { - gWishFutureKnock.knockedOffMons[side] |= 1u << gBattlerPartyIndexes[battlerDef]; - } - - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_KnockedOff; - } - return TRUE; - } - return FALSE; -} - -static inline bool32 TryTriggerSymbiosis(u32 battler, u32 ally) -{ - return GetBattlerAbility(ally) == ABILITY_SYMBIOSIS - && gBattleMons[battler].item == ITEM_NONE - && gBattleMons[ally].item != ITEM_NONE - && CanBattlerGetOrLoseItem(battler, gBattleMons[ally].item) - && CanBattlerGetOrLoseItem(ally, gBattleMons[ally].item) - && IsBattlerAlive(battler) - && IsBattlerAlive(ally); -} +static inline bool32 TryTriggerSymbiosis(u32 battler, u32 ally) +{ + return GetBattlerAbility(ally) == ABILITY_SYMBIOSIS + && gBattleMons[battler].item == ITEM_NONE + && gBattleMons[ally].item != ITEM_NONE + && CanBattlerGetOrLoseItem(battler, gBattleMons[ally].item) + && CanBattlerGetOrLoseItem(ally, gBattleMons[ally].item) + && IsBattlerAlive(battler) + && IsBattlerAlive(ally); +} static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent) { u32 battler; for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) { - if (battler != gBattlerAttacker - && !(excludeCurrent && battler == gBattlerTarget) - && IsBattlerAlive(battler) + if (battler == gBattlerAttacker || !IsBattlerAlive(battler)) + continue; + + if (!(excludeCurrent && battler == gBattlerTarget) && !gBattleStruct->battlerState[gBattlerAttacker].targetsDone[battler] && (!IsBattlerAlly(battler, gBattlerAttacker) || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) break; @@ -6132,7 +5583,7 @@ static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent) return battler; } -static inline bool32 IsProtectivePadsProtected(u32 battler, enum ItemHoldEffect holdEffect) +static inline bool32 IsProtectivePadsProtected(u32 battler, enum HoldEffect holdEffect) { if (holdEffect != HOLD_EFFECT_PROTECTIVE_PADS) return FALSE; @@ -6141,31 +5592,9 @@ static inline bool32 IsProtectivePadsProtected(u32 battler, enum ItemHoldEffect return TRUE; } -static inline bool32 IsProtectEffectAffected(u32 battler, u32 move) -{ - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - if (IsProtectivePadsProtected(battler, holdEffect)) - return TRUE; - - if (holdEffect == HOLD_EFFECT_CLEAR_AMULET) - { - RecordItemEffectBattle(battler, holdEffect); - return TRUE; - } - - u32 ability = GetBattlerAbility(gBattlerAttacker); - if (CanAbilityPreventStatLoss(ability)) - { - RecordAbilityBattle(battler, ability); - return TRUE; - } - - return FALSE; -} - static inline bool32 CanEjectButtonTrigger(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect) { - if (GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_EJECT_BUTTON + if (GetBattlerHoldEffect(battlerDef) == HOLD_EFFECT_EJECT_BUTTON && battlerAtk != battlerDef && IsBattlerTurnDamaged(battlerDef) && IsBattlerAlive(battlerDef) @@ -6178,8 +5607,8 @@ static inline bool32 CanEjectButtonTrigger(u32 battlerAtk, u32 battlerDef, enum static inline bool32 CanEjectPackTrigger(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect) { - if (gProtectStructs[battlerDef].statFell - && GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_EJECT_PACK + if (gDisableStructs[battlerDef].tryEjectPack + && GetBattlerHoldEffect(battlerDef) == HOLD_EFFECT_EJECT_PACK && IsBattlerAlive(battlerDef) && CountUsablePartyMons(battlerDef) > 0 && !gProtectStructs[battlerDef].disableEjectPack @@ -6193,28 +5622,59 @@ static inline bool32 CanEjectPackTrigger(u32 battlerAtk, u32 battlerDef, enum Ba static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move) { bool32 effect = FALSE; - u32 abilityAtk = GetBattlerAbility(battlerAtk); + enum Ability abilityAtk = GetBattlerAbility(battlerAtk); switch (abilityAtk) { case ABILITY_MAGICIAN: - if (move != MOVE_FLING && move != MOVE_NATURAL_GIFT + if (GetMoveEffect(move) != EFFECT_FLING + && GetMoveEffect(move) != EFFECT_NATURAL_GIFT && gBattleMons[battlerAtk].item == ITEM_NONE - && gBattleMons[battlerDef].item != ITEM_NONE && IsBattlerAlive(battlerAtk) - && IsBattlerTurnDamaged(battlerDef) - && CanStealItem(battlerAtk, battlerDef, gBattleMons[battlerDef].item) - && !gSpecialStatuses[battlerAtk].gemBoost // In base game, gems are consumed after magician would activate. - && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(battlerDef)] & (1u << gBattlerPartyIndexes[battlerDef])) - && !DoesSubstituteBlockMove(battlerAtk, battlerDef, move) - && (GetBattlerAbility(battlerDef) != ABILITY_STICKY_HOLD || !IsBattlerAlive(battlerDef))) - { - StealTargetItem(battlerAtk, battlerDef); - gBattleScripting.battler = gBattlerAbility = battlerAtk; - gEffectBattler = battlerDef; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MagicianActivates; - effect = TRUE; + && !gSpecialStatuses[battlerAtk].gemBoost) // In base game, gems are consumed after magician would activate. + { + u32 numMagicianTargets = 0; + u32 magicianTargets = 0; + + for (u32 i = 0; i < gBattlersCount; i++) + { + if (gBattleMons[i].item != ITEM_NONE + && i != battlerAtk + && IsBattlerTurnDamaged(i) + && CanStealItem(battlerAtk, i, gBattleMons[i].item) + && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(i)] & (1u << gBattlerPartyIndexes[i])) + && !DoesSubstituteBlockMove(battlerAtk, i, move) + && (GetBattlerAbility(i) != ABILITY_STICKY_HOLD || !IsBattlerAlive(i))) + { + magicianTargets |= 1u << i; + numMagicianTargets++; + } + } + + if (numMagicianTargets == 0) + { + effect = FALSE; + break; + } + + u8 battlers[4] = {0, 1, 2, 3}; + if (numMagicianTargets > 1) + SortBattlersBySpeed(battlers, FALSE); + + for (u32 i = 0; i < gBattlersCount; i++) + { + u32 battler = battlers[i]; + + if (!(magicianTargets & 1u << battler)) + continue; + + StealTargetItem(battlerAtk, battler); + gBattlerAbility = battlerAtk; + gEffectBattler = battler; + BattleScriptCall(BattleScript_MagicianActivates); + effect = TRUE; + break; // found target to steal from + } } break; case ABILITY_MOXIE: @@ -6227,7 +5687,7 @@ static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move if (!IsBattlerAlive(battlerAtk) || NoAliveMonsForEitherParty()) break; - u32 stat = STAT_ATK; + enum Stat stat = STAT_ATK; u32 numMonsFainted = NumFaintedBattlersByAttacker(battlerAtk); if (abilityAtk == ABILITY_BEAST_BOOST) @@ -6235,7 +5695,7 @@ static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move else if (abilityAtk == ABILITY_GRIM_NEIGH || abilityAtk == ABILITY_AS_ONE_SHADOW_RIDER) stat = STAT_SPATK; - if (numMonsFainted && CompareStat(battlerAtk, stat, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (numMonsFainted && CompareStat(battlerAtk, stat, MAX_STAT_STAGE, CMP_LESS_THAN, abilityAtk)) { gLastUsedAbility = abilityAtk; if (abilityAtk == ABILITY_AS_ONE_ICE_RIDER) @@ -6246,8 +5706,7 @@ static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move SET_STATCHANGER(stat, numMonsFainted, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); gBattleScripting.animArg1 = GET_STAT_BUFF_ID(stat) + (numMonsFainted > 1 ? STAT_ANIM_PLUS2 : STAT_ANIM_PLUS1); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_RaiseStatOnFaintingTarget; + BattleScriptCall(BattleScript_RaiseStatOnFaintingTarget); effect = TRUE; } } @@ -6259,37 +5718,34 @@ static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move || NumFaintedBattlersByAttacker(battlerAtk) == 0) break; - u32 side = GetBattlerSide(battlerAtk); - - if (gBattleStruct->partyState[side][gBattlerPartyIndexes[battlerAtk]].battleBondBoost) + if (GetBattlerPartyState(battlerAtk)->battleBondBoost) break; - if (GetGenConfig(GEN_CONFIG_BATTLE_BOND) < GEN_9 && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_BATTLE_BOND) + if (GetConfig(CONFIG_BATTLE_BOND) < GEN_9 && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_BATTLE_BOND) { // TODO: Convert this to a proper FORM_CHANGE type. gLastUsedAbility = abilityAtk; - gBattleStruct->partyState[side][gBattlerPartyIndexes[battlerAtk]].battleBondBoost = TRUE; + GetBattlerPartyState(battlerAtk)->battleBondBoost = TRUE; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battlerAtk].species); - gBattleStruct->changedSpecies[side][gBattlerPartyIndexes[battlerAtk]] = gBattleMons[battlerAtk].species; + GetBattlerPartyState(battlerAtk)->changedSpecies = gBattleMons[battlerAtk].species; gBattleMons[battlerAtk].species = SPECIES_GRENINJA_ASH; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BattleBondActivatesOnMoveEndAttacker; + BattleScriptCall(BattleScript_BattleBondActivatesOnMoveEndAttacker); effect = TRUE; } else { u32 numStatBuffs = 0; - if (CompareStat(battlerAtk, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (CompareStat(battlerAtk, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, abilityAtk)) { gBattleScripting.animArg1 = GET_STAT_BUFF_ID(STAT_ATK) + STAT_ANIM_PLUS1; numStatBuffs++; } - if (CompareStat(battlerAtk, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (CompareStat(battlerAtk, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN, abilityAtk)) { gBattleScripting.animArg1 = GET_STAT_BUFF_ID(STAT_SPATK) + STAT_ANIM_PLUS1; numStatBuffs++; } - if (CompareStat(battlerAtk, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (CompareStat(battlerAtk, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, abilityAtk)) { gBattleScripting.animArg1 = GET_STAT_BUFF_ID(STAT_SPEED) + STAT_ANIM_PLUS1; numStatBuffs++; @@ -6302,199 +5758,487 @@ static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move gLastUsedAbility = abilityAtk; gBattlerAbility = battlerAtk; - gBattleStruct->partyState[side][gBattlerPartyIndexes[battlerAtk]].battleBondBoost = TRUE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EffectBattleBondStatIncrease; + GetBattlerPartyState(battlerAtk)->battleBondBoost = TRUE; + BattleScriptCall(BattleScript_EffectBattleBondStatIncrease); effect = TRUE; } } } break; + default: + break; } return effect; } -static void Cmd_moveend(void) +static bool32 HandleMoveEndMoveBlock(u32 moveEffect) { - CMD_ARGS(u8 endMode, u8 endState); + if (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + return FALSE; - s32 i; bool32 effect = FALSE; - u32 moveType = 0; - enum ItemHoldEffect holdEffectAtk = HOLD_EFFECT_NONE; - u32 endMode, endState; - u32 originallyUsedMove; - - if (gChosenMove == MOVE_UNAVAILABLE) - originallyUsedMove = MOVE_NONE; - else - originallyUsedMove = gChosenMove; - - endMode = cmd->endMode; - endState = cmd->endState; - - holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - moveType = GetBattleMoveType(gCurrentMove); - - enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); - - do + enum BattleSide side = GetBattlerSide(gBattlerTarget); + switch (moveEffect) { - switch (gBattleScripting.moveendState) + case EFFECT_KNOCK_OFF: + if (gBattleMons[gBattlerTarget].item != ITEM_NONE + && IsBattlerAlive(gBattlerAttacker) + && !(B_KNOCK_OFF_REMOVAL >= GEN_5 && side == B_SIDE_PLAYER && !(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) + && IsBattlerTurnDamaged(gBattlerTarget) + && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove) + && CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerTarget].item) + && !NoAliveMonsForEitherParty()) { - case MOVEEND_SUM_DAMAGE: // Sum and store damage dealt for multi strike recoil - gBattleScripting.savedDmg += gBattleStruct->moveDamage[gBattlerTarget]; - gBattleScripting.moveendState++; - break; - case MOVEEND_PROTECT_LIKE_EFFECT: - if (gProtectStructs[gBattlerAttacker].touchedProtectLike) - { - enum ProtectMethod method = gProtectStructs[gBattlerTarget].protected; - switch (method) - { - case PROTECT_SPIKY_SHIELD: - if (moveEffect != EFFECT_COUNTER - && !IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE)) - && !IsMagicGuardProtected(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))) - { - gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SPIKY_SHIELD); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SpikyShieldEffect; - effect = 1; - } - break; - case PROTECT_KINGS_SHIELD: - if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) - { - gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; - i = gBattlerAttacker; - gBattlerAttacker = gBattlerTarget; - gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable - if (B_KINGS_SHIELD_LOWER_ATK >= GEN_8) - gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1; - else - gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_2; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; - effect = 1; - } - break; - case PROTECT_BANEFUL_BUNKER: - if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) - { - gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; - gBattleScripting.moveEffect = MOVE_EFFECT_POISON | MOVE_EFFECT_AFFECTS_USER; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_BANEFUL_BUNKER); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BanefulBunkerEffect; - effect = 1; - } - break; - case PROTECT_BURNING_BULWARK: - if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) - { - gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; - gBattleScripting.moveEffect = MOVE_EFFECT_BURN | MOVE_EFFECT_AFFECTS_USER; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_BURNING_BULWARK); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BanefulBunkerEffect; - effect = 1; - } - break; - case PROTECT_OBSTRUCT: - if (moveEffect != EFFECT_SUCKER_PUNCH // Why??? - && moveEffect != EFFECT_UPPER_HAND // Why??? - && !IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) - { - gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; - i = gBattlerAttacker; - gBattlerAttacker = gBattlerTarget; - gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable - gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_2; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; - effect = 1; - } - break; - case PROTECT_SILK_TRAP: - if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) - { - gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; - i = gBattlerAttacker; - gBattlerAttacker = gBattlerTarget; - gBattlerTarget = i; // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable - gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; - effect = 1; - } - break; - default: - break; - } + u32 side = GetBattlerSide(gBattlerTarget); - // Not strictly a protect effect, but works the same way - if (gProtectStructs[gBattlerTarget].beakBlastCharge - && CanBeBurned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker)) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) - { - gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; - gBattleMons[gBattlerAttacker].status1 = STATUS1_BURN; - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1); - MarkBattlerForControllerExec(gBattlerAttacker); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BeakBlastBurn; - effect = 1; - } - } - gBattleScripting.moveendState++; - break; - case MOVEEND_ABSORB: - if (moveEffect == EFFECT_ABSORB - && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && !(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK) - && IsBattlerAlive(gBattlerAttacker) - && IsBattlerTurnDamaged(gBattlerTarget)) + if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) { - gBattleStruct->moveDamage[gBattlerAttacker] = max(1, (gBattleStruct->moveDamage[gBattlerTarget] * GetMoveAbsorbPercentage(gCurrentMove) / 100)); - gBattleStruct->moveDamage[gBattlerAttacker] = GetDrainedBigRootHp(gBattlerAttacker, gBattleStruct->moveDamage[gBattlerAttacker]); - gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE; + gBattlerAbility = gBattlerTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StickyHoldActivatesRet; effect = TRUE; - if (GetBattlerAbility(gBattlerTarget) == ABILITY_LIQUID_OOZE) - { - gBattleStruct->moveDamage[gBattlerAttacker] *= -1; - gHitMarker |= HITMARKER_PASSIVE_DAMAGE; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABSORB_OOZE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EffectAbsorbLiquidOoze; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABSORB; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EffectAbsorb; - } + break; } - gBattleScripting.moveendState++; - break; + gLastUsedItem = gBattleMons[gBattlerTarget].item; + gBattleMons[gBattlerTarget].item = 0; + if (gBattleMons[gBattlerTarget].ability != ABILITY_GORILLA_TACTICS) + gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE; + CheckSetUnburden(gBattlerTarget); + + // In Gen 5+, Knock Off removes the target's item rather than rendering it unusable + if (B_KNOCK_OFF_REMOVAL >= GEN_5) + { + BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); + MarkBattlerForControllerExec(gBattlerTarget); + // Mark item as stolen so it will be restored after battle + gBattleStruct->itemLost[side][gBattlerPartyIndexes[gBattlerTarget]].stolen = TRUE; + } + else + { + gWishFutureKnock.knockedOffMons[side] |= 1u << gBattlerPartyIndexes[gBattlerTarget]; + } + + BattleScriptCall(BattleScript_KnockedOff); + effect = TRUE; + } + break; + case EFFECT_STEAL_ITEM: + if (!CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) + || gBattleMons[gBattlerAttacker].item != ITEM_NONE + || gBattleMons[gBattlerTarget].item == ITEM_NONE + || !IsBattlerAlive(gBattlerAttacker) + || !IsBattlerTurnDamaged(gBattlerTarget)) + { + effect = FALSE; + } + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) + { + BattleScriptCall(BattleScript_NoItemSteal); + gLastUsedAbility = gBattleMons[gBattlerTarget].ability; + RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + effect = TRUE; + } + else + { + StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker steals target item + + if (!(GetConfig(CONFIG_STEAL_WILD_ITEMS) >= GEN_9 + && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE)))) + { + gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS) + gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later + } + gEffectBattler = gBattlerTarget; + BattleScriptCall(BattleScript_ItemSteal); + effect = TRUE; + } + break; + case EFFECT_HIT_SWITCH_TARGET: + if (IsBattlerTurnDamaged(gBattlerTarget) + && IsBattlerAlive(gBattlerTarget) + && IsBattlerAlive(gBattlerAttacker) + && gBattleMons[BATTLE_PARTNER(gBattlerTarget)].volatiles.semiInvulnerable != STATE_COMMANDER) + { + u32 targetAbility = GetBattlerAbility(gBattlerTarget); + if (targetAbility == ABILITY_GUARD_DOG) + return FALSE; + + if (targetAbility == ABILITY_SUCTION_CUPS) + { + BattleScriptCall(BattleScript_AbilityPreventsPhasingOutRet); + } + else if (gBattleMons[gBattlerTarget].volatiles.root) + { + BattleScriptCall(BattleScript_PrintMonIsRootedRet); + } + else if (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) + { + BattleScriptCall(BattleScript_HitSwitchTargetDynamaxed); + } + else + { + gBattleScripting.switchCase = B_SWITCH_HIT; + BattleScriptCall(BattleScript_TryHitSwitchTarget); + } + effect = TRUE; + } + break; + case EFFECT_SMACK_DOWN: + if (!IsBattlerGrounded(gBattlerTarget, GetBattlerAbility(gBattlerTarget), GetBattlerHoldEffect(gBattlerTarget)) + && IsBattlerTurnDamaged(gBattlerTarget) + && IsBattlerAlive(gBattlerTarget) + && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + { + gBattleMons[gBattlerTarget].volatiles.smackDown = TRUE; + gBattleMons[gBattlerTarget].volatiles.telekinesis = FALSE; + gBattleMons[gBattlerTarget].volatiles.magnetRise = FALSE; + gBattleMons[gBattlerTarget].volatiles.semiInvulnerable = STATE_NONE; + BattleScriptCall(BattleScript_MoveEffectSmackDown); + effect = TRUE; + } + break; + case EFFECT_RECOIL_IF_MISS: + if (IsBattlerAlive(gBattlerAttacker) + && (!IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + && !gBattleStruct->noTargetPresent) + { + s32 recoil = 0; + if (B_RECOIL_IF_MISS_DMG >= GEN_5 || (B_CRASH_IF_TARGET_IMMUNE == GEN_4 && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_DOESNT_AFFECT_FOE)) + recoil = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + else if (B_RECOIL_IF_MISS_DMG == GEN_4 && (GetNonDynamaxMaxHP(gBattlerTarget) / 2) < gBattleStruct->moveDamage[gBattlerTarget]) + recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + else if (B_RECOIL_IF_MISS_DMG == GEN_3) + recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + else if (B_RECOIL_IF_MISS_DMG == GEN_2) + recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 8; + else + recoil = 1; + SetPassiveDamageAmount(gBattlerAttacker, recoil); + BattleScriptCall(BattleScript_RecoilIfMiss); + effect = TRUE; + } + break; + case EFFECT_RECOIL: + if (IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker) && gBattleStruct->moveDamage[gBattlerTarget] > 0) + { + enum Ability ability = GetBattlerAbility(gBattlerAttacker); + if (IsAbilityAndRecord(gBattlerAttacker, ability, ABILITY_ROCK_HEAD) + || IsAbilityAndRecord(gBattlerAttacker, ability, ABILITY_MAGIC_GUARD)) + break; + + SetPassiveDamageAmount(gBattlerAttacker, gBattleScripting.savedDmg * max(1, GetMoveRecoil(gCurrentMove)) / 100); + TryUpdateEvolutionTracker(IF_RECOIL_DAMAGE_GE, gBattleStruct->passiveHpUpdate[gBattlerAttacker], MOVE_NONE); + BattleScriptCall(BattleScript_MoveEffectRecoil); + effect = TRUE; + } + break; + case EFFECT_EXPLOSION: + case EFFECT_MISTY_EXPLOSION: + if (!IsAbilityOnField(ABILITY_DAMP)) + { + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = 0; + BattleScriptCall(BattleScript_FaintAttackerForExplosion); + effect = TRUE; + } + break; + case EFFECT_MAX_HP_50_RECOIL: + if (IsBattlerAlive(gBattlerAttacker) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_FAILED) + && !IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_MAGIC_GUARD)) + { + s32 recoil = (GetNonDynamaxMaxHP(gBattlerAttacker) + 1) / 2; // Half of Max HP Rounded UP + SetPassiveDamageAmount(gBattlerAttacker, recoil); + TryUpdateEvolutionTracker(IF_RECOIL_DAMAGE_GE, gBattleStruct->passiveHpUpdate[gBattlerAttacker], MOVE_NONE); + BattleScriptCall(BattleScript_MaxHp50Recoil); + effect = TRUE; + } + break; + case EFFECT_CHLOROBLAST: + if (IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker)) + { + enum Ability ability = GetBattlerAbility(gBattlerAttacker); + if (IsAbilityAndRecord(gBattlerAttacker, ability, ABILITY_ROCK_HEAD) + || IsAbilityAndRecord(gBattlerAttacker, ability, ABILITY_MAGIC_GUARD)) + break; + + s32 recoil = (GetNonDynamaxMaxHP(gBattlerAttacker) + 1) / 2; // Half of Max HP Rounded UP + SetPassiveDamageAmount(gBattlerAttacker, recoil); + TryUpdateEvolutionTracker(IF_RECOIL_DAMAGE_GE, gBattleStruct->passiveHpUpdate[gBattlerAttacker], MOVE_NONE); + BattleScriptCall(BattleScript_MoveEffectRecoil); + effect = TRUE; + } + break; + case EFFECT_RAPID_SPIN: + if (IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker)) + { + BattleScriptCall(BattleScript_RapidSpinAway); + effect = TRUE; + } + break; + case EFFECT_FELL_STINGER: + if (IsBattlerAlive(gBattlerAttacker) + && !IsBattlerAlive(gBattlerTarget) + && IsBattlerTurnDamaged(gBattlerTarget) + && !NoAliveMonsForEitherParty() + && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(gBattlerAttacker))) + { + SET_STATCHANGER(STAT_ATK, GetConfig(CONFIG_FELL_STINGER_STAT_RAISE) >= GEN_7 ? 3 : 2, FALSE); + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_FellStingerRaisesStat; + effect = TRUE; + } + break; + case EFFECT_STONE_AXE: + if (!IsHazardOnSide(side, HAZARDS_STEALTH_ROCK) + && IsBattlerTurnDamaged(gBattlerTarget) + && IsBattlerAlive(gBattlerAttacker)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_POINTEDSTONESFLOAT; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_StealthRockActivates; + effect = TRUE; + } + break; + case EFFECT_CEASELESS_EDGE: + if (gSideTimers[side].spikesAmount < 3 + && IsBattlerTurnDamaged(gBattlerTarget) + && IsBattlerAlive(gBattlerAttacker)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; + BattleScriptPush(gBattlescriptCurrInstr + 1); + if (gBattleStruct->isSkyBattle) + { + effect = FALSE; + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SpikesActivates; + effect = TRUE; + } + } + break; + default: + effect = FALSE; + break; + } + + return effect; +} + +static void Cmd_moveend(void) +{ + CMD_ARGS(u8 endMode, u8 endState); + + s32 i; + bool32 effect = FALSE; + u32 moveType = 0; + u32 endMode, endState; + u32 originallyUsedMove; + + if (gChosenMove == MOVE_UNAVAILABLE) + originallyUsedMove = MOVE_NONE; + else + originallyUsedMove = gChosenMove; + + endMode = cmd->endMode; + endState = cmd->endState; + + moveType = GetBattleMoveType(gCurrentMove); + + enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); + + do + { + switch (gBattleScripting.moveendState) + { + case MOVEEND_SET_VALUES: + gBattleScripting.savedDmg += gBattleStruct->moveDamage[gBattlerTarget]; + gBattleStruct->eventState.moveEndBattler = 0; + gBattleScripting.moveendState++; + break; + case MOVEEND_PROTECT_LIKE_EFFECT: + if (gProtectStructs[gBattlerAttacker].touchedProtectLike) + { + enum ProtectMethod method = gProtectStructs[gBattlerTarget].protected; + switch (method) + { + case PROTECT_SPIKY_SHIELD: + if (moveEffect != EFFECT_COUNTER + && !IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker)) + && !IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_MAGIC_GUARD)) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 8); + PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_SPIKY_SHIELD); + BattleScriptCall(BattleScript_SpikyShieldEffect); + effect = 1; + } + break; + case PROTECT_KINGS_SHIELD: + if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable + if (B_KINGS_SHIELD_LOWER_ATK >= GEN_8) + gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1; + else + gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_2; + BattleScriptCall(BattleScript_KingsShieldEffect); + effect = 1; + } + break; + case PROTECT_BANEFUL_BUNKER: + if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker)) + && CanBePoisoned(gBattlerTarget, gBattlerAttacker, gLastUsedAbility, GetBattlerAbility(gBattlerAttacker))) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + gBattleScripting.moveEffect = MOVE_EFFECT_POISON; + BattleScriptCall(BattleScript_BanefulBunkerEffect); + effect = 1; + } + break; + case PROTECT_BURNING_BULWARK: + if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker)) + && CanBeBurned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + gBattleScripting.moveEffect = MOVE_EFFECT_BURN; + BattleScriptCall(BattleScript_BanefulBunkerEffect); + effect = 1; + } + break; + case PROTECT_OBSTRUCT: + if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable + gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_2; + BattleScriptCall(BattleScript_KingsShieldEffect); + effect = 1; + } + break; + case PROTECT_SILK_TRAP: + if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + SWAP(gBattlerAttacker, gBattlerTarget, i); // gBattlerTarget and gBattlerAttacker are swapped in order to activate Defiant, if applicable + gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1; + BattleScriptCall(BattleScript_KingsShieldEffect); + effect = 1; + } + break; + default: + break; + } + + // Not strictly a protect effect, but works the same way + if (IsBattlerUsingBeakBlast(gBattlerTarget) + && CanBeBurned(gBattlerAttacker, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) + { + gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; + gBattleMons[gBattlerAttacker].status1 = STATUS1_BURN; + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1); + MarkBattlerForControllerExec(gBattlerAttacker); + BattleScriptCall(BattleScript_BeakBlastBurn); + effect = 1; + } + } + gBattleScripting.moveendState++; + break; + + case MOVEEND_GRUDGE: + if (gBattleStruct->tryGrudge + && IsBattlerTurnDamaged(gBattlerTarget) + && !IsBattlerAlive(gBattlerTarget) + && IsBattlerAlive(gBattlerAttacker) + && !IsBattlerAlly(gBattlerAttacker, gBattlerTarget) + && !IsZMove(gCurrentMove) + && gCurrentMove != MOVE_STRUGGLE) + { + u32 moveIndex = gBattleStruct->chosenMovePositions[gBattlerAttacker]; + + gBattleStruct->tryGrudge = FALSE; + gBattleMons[gBattlerAttacker].pp[moveIndex] = 0; + BattleScriptCall(BattleScript_GrudgeTakesPp); + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, moveIndex + REQUEST_PPMOVE1_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].pp[moveIndex]), &gBattleMons[gBattlerAttacker].pp[moveIndex]); + MarkBattlerForControllerExec(gBattlerAttacker); + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].moves[moveIndex]) + } + gBattleScripting.moveendState++; + break; + + case MOVEEND_DESTINY_BOND: + if (gBattleStruct->tryDestinyBond + && IsBattlerTurnDamaged(gBattlerTarget) + && !IsBattlerAlive(gBattlerTarget) + && IsBattlerAlive(gBattlerAttacker) + && !(GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) + && !IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) + { + gBattleStruct->tryDestinyBond = FALSE; + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp; + BattleScriptCall(BattleScript_DestinyBondTakesLife); + effect = TRUE; + } + gBattleScripting.moveendState++; + break; + case MOVEEND_ABSORB: + if (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE + || !IsBattlerTurnDamaged(gBattlerTarget)) + { + gBattleScripting.moveendState++; + break; + } + switch (moveEffect) + { + case EFFECT_ABSORB: + case EFFECT_DREAM_EATER: + if (!gBattleMons[gBattlerAttacker].volatiles.healBlock + && gBattleStruct->moveDamage[gBattlerTarget] > 0 + && IsBattlerAlive(gBattlerAttacker)) + { + s32 healAmount = (gBattleStruct->moveDamage[gBattlerTarget] * GetMoveAbsorbPercentage(gCurrentMove) / 100); + healAmount = GetDrainedBigRootHp(gBattlerAttacker, healAmount); + effect = TRUE; + if ((moveEffect == EFFECT_DREAM_EATER && GetConfig(CONFIG_DREAM_EATER_LIQUID_OOZE) < GEN_5) + || GetBattlerAbility(gBattlerTarget) != ABILITY_LIQUID_OOZE) + { + SetHealAmount(gBattlerAttacker, healAmount); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABSORB; + BattleScriptCall(BattleScript_EffectAbsorb); + } + else // Liquid Ooze damage + { + SetPassiveDamageAmount(gBattlerAttacker, healAmount); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABSORB_OOZE; + BattleScriptCall(BattleScript_EffectAbsorbLiquidOoze); + } + } + break; + case EFFECT_FINAL_GAMBIT: + BattleScriptCall(BattleScript_FinalGambit); + effect = TRUE; + break; + default: + break; + } + gBattleScripting.moveendState++; + break; case MOVEEND_RAGE: // rage check - if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE + if (gBattleMons[gBattlerTarget].volatiles.rage && IsBattlerAlive(gBattlerTarget) && gBattlerAttacker != gBattlerTarget && !IsBattlerAlly(gBattlerAttacker, gBattlerTarget) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) && !IsBattleMoveStatus(gCurrentMove) - && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(gBattlerTarget))) { SET_STATCHANGER(STAT_ATK, 1, FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_RageIsBuilding; + BattleScriptCall(BattleScript_RageIsBuilding); effect = TRUE; } gBattleScripting.moveendState++; @@ -6517,9 +6261,12 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_STATUS_IMMUNITY_ABILITIES: // status immunities - if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) - effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers - else + for (u16 battler = 0; battler < gBattlersCount; battler++) + { + if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, battler, 0, 0, 0)) + effect = TRUE; + } + if (!effect) gBattleScripting.moveendState++; break; case MOVEEND_SYNCHRONIZE_ATTACKER: // attacker synchronize @@ -6527,120 +6274,46 @@ static void Cmd_moveend(void) effect = TRUE; gBattleScripting.moveendState++; break; - case MOVEEND_CHOICE_MOVE: // update choice band move - { - u16 *choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker]; - if (gHitMarker & HITMARKER_OBEYS - && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && gChosenMove != MOVE_STRUGGLE - && (*choicedMoveAtk == MOVE_NONE || *choicedMoveAtk == MOVE_UNAVAILABLE) - && (HOLD_EFFECT_CHOICE(holdEffectAtk) || GetBattlerAbility(gBattlerAttacker) == ABILITY_GORILLA_TACTICS)) - { - if ((moveEffect == EFFECT_BATON_PASS || moveEffect == EFFECT_HEALING_WISH) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_FAILED)) - { - gBattleScripting.moveendState++; - break; - } - *choicedMoveAtk = gChosenMove; - } - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk) - break; - } - if (i == MAX_MON_MOVES) - { - *choicedMoveAtk = MOVE_NONE; - } - gBattleScripting.moveendState++; - break; - } case MOVEEND_ITEM_EFFECTS_TARGET: - if (ItemBattleEffects(ITEMEFFECT_TARGET, gBattlerTarget, FALSE)) + { + enum HoldEffect holdEffect = GetBattlerHoldEffect(gBattlerTarget); + if (ItemBattleEffects(gBattlerTarget, gBattlerAttacker, holdEffect, IsOnTargetHitActivation) + || ItemBattleEffects(gBattlerTarget, gBattlerAttacker, holdEffect, IsOnStatusChangeActivation)) effect = TRUE; gBattleScripting.moveendState++; break; - case MOVEEND_FIRST_MOVE_BLOCK: - if ((gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && IsBattlerAlive(gBattlerTarget)) - || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT - || gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - { - gBattleScripting.moveendState++; - break; - } - - switch (moveEffect) + } + case MOVEEND_ITEM_EFFECTS_ATTACKER_1: + { + enum HoldEffect holdEffect = GetBattlerHoldEffect(gBattlerAttacker); + if (ItemBattleEffects(gBattlerAttacker, gBattlerTarget, holdEffect, IsOnAttackerAfterHitActivation) + || ItemBattleEffects(gBattlerAttacker, gBattlerTarget, holdEffect, IsOnStatusChangeActivation) + || ItemBattleEffects(gBattlerAttacker, gBattlerTarget, holdEffect, IsOnHpThresholdActivation)) + effect = TRUE; + gBattleScripting.moveendState++; + break; + } + case MOVEEND_SYMBIOSIS: + for (i = 0; i < gBattlersCount; i++) { - case EFFECT_KNOCK_OFF: - if (!DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) - effect = TryKnockOffBattleScript(gBattlerTarget); - break; - case EFFECT_HIT_SWITCH_TARGET: - if (IsBattlerTurnDamaged(gBattlerTarget) - && IsBattlerAlive(gBattlerTarget) - && IsBattlerAlive(gBattlerAttacker) - && !(gStatuses3[BATTLE_PARTNER(gBattlerTarget)] & STATUS3_COMMANDER)) + if ((gSpecialStatuses[i].berryReduced + || (GetConfig(CONFIG_SYMBIOSIS_GEMS) >= GEN_7 && gSpecialStatuses[i].gemBoost)) + && TryTriggerSymbiosis(i, BATTLE_PARTNER(i))) { - u32 targetAbility = GetBattlerAbility(gBattlerTarget); - if (targetAbility == ABILITY_GUARD_DOG) - { - gBattleScripting.moveendState++; - break; - } - - effect = TRUE; + BestowItem(BATTLE_PARTNER(i), i); + gLastUsedAbility = gBattleMons[BATTLE_PARTNER(i)].ability; + gEffectBattler = i; + gBattleScripting.battler = gBattlerAbility = BATTLE_PARTNER(i); + gBattlerAttacker = i; BattleScriptPushCursor(); - if (targetAbility == ABILITY_SUCTION_CUPS) - { - gBattlescriptCurrInstr = BattleScript_AbilityPreventsPhasingOutRet; - } - else if (gStatuses3[gBattlerTarget] & STATUS3_ROOTED) - { - gBattlescriptCurrInstr = BattleScript_PrintMonIsRootedRet; - } - else if (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) - { - gBattlescriptCurrInstr = BattleScript_HitSwitchTargetDynamaxed; - } - else - { - gBattleScripting.switchCase = B_SWITCH_HIT; - gBattlescriptCurrInstr = BattleScript_TryHitSwitchTarget; - } - } - break; - case EFFECT_SMACK_DOWN: - if (!IsBattlerGrounded(gBattlerTarget) - && IsBattlerAlive(gBattlerTarget) - && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) - { - gStatuses3[gBattlerTarget] |= STATUS3_SMACKED_DOWN; - gStatuses3[gBattlerTarget] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR); + gBattlescriptCurrInstr = BattleScript_SymbiosisActivates; effect = TRUE; - BattleScriptPush(gBattlescriptCurrInstr); - gBattlescriptCurrInstr = BattleScript_MoveEffectSmackDown; } - break; - default: - break; } gBattleScripting.moveendState++; break; - case MOVEEND_ITEM_EFFECTS_ALL: // item effects for all battlers - if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE)) - effect = TRUE; - else - gBattleScripting.moveendState++; - break; - case MOVEEND_KINGSROCK: // King's rock - // These effects will occur at each hit in a multi-strike move - if (ItemBattleEffects(ITEMEFFECT_KINGSROCK, 0, FALSE)) - effect = TRUE; - gBattleScripting.moveendState++; - break; case MOVEEND_ATTACKER_INVISIBLE: // make attacker sprite invisible - if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE) + if (IsSemiInvulnerable(gBattlerAttacker, CHECK_ALL) && gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION)) { BtlController_EmitSpriteInvisibility(gBattlerAttacker, B_COMM_TO_CONTROLLER, TRUE); @@ -6652,12 +6325,12 @@ static void Cmd_moveend(void) break; case MOVEEND_ATTACKER_VISIBLE: // make attacker sprite visible if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT - || !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)) + || !IsSemiInvulnerable(gBattlerAttacker, CHECK_ALL) || WasUnableToUseMove(gBattlerAttacker)) { BtlController_EmitSpriteInvisibility(gBattlerAttacker, B_COMM_TO_CONTROLLER, FALSE); MarkBattlerForControllerExec(gBattlerAttacker); - gStatuses3[gBattlerAttacker] &= ~STATUS3_SEMI_INVULNERABLE; + gBattleMons[gBattlerAttacker].volatiles.semiInvulnerable = STATE_NONE; gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = TRUE; gBattleScripting.moveendState++; return; @@ -6666,11 +6339,11 @@ static void Cmd_moveend(void) break; case MOVEEND_TARGET_VISIBLE: // make target sprite visible if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite && gBattlerTarget < gBattlersCount - && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) + && !IsSemiInvulnerable(gBattlerTarget, CHECK_ALL)) { BtlController_EmitSpriteInvisibility(gBattlerTarget, B_COMM_TO_CONTROLLER, FALSE); MarkBattlerForControllerExec(gBattlerTarget); - gStatuses3[gBattlerTarget] &= ~STATUS3_SEMI_INVULNERABLE; + gBattleMons[gBattlerTarget].volatiles.semiInvulnerable = STATE_NONE; gBattleScripting.moveendState++; return; } @@ -6680,7 +6353,7 @@ static void Cmd_moveend(void) for (i = 0; i < gBattlersCount; i++) { if (gDisableStructs[i].substituteHP == 0) - gBattleMons[i].status2 &= ~STATUS2_SUBSTITUTE; + gBattleMons[i].volatiles.substitute = FALSE; } gBattleScripting.moveendState++; break; @@ -6715,17 +6388,19 @@ static void Cmd_moveend(void) if (!IsOnPlayerSide(gBattlerAttacker)) UpdateStallMons(); if ((gBattleStruct->moveResultFlags[gBattlerTarget] & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE)) - || (gBattleMons[gBattlerAttacker].status2 & (STATUS2_FLINCHED)) + || gBattleMons[gBattlerAttacker].volatiles.flinched + || gBattleStruct->pledgeMove == TRUE // Is the battler that uses the first Pledge move in the combo || gProtectStructs[gBattlerAttacker].nonVolatileStatusImmobility) gBattleStruct->battlerState[gBattlerAttacker].stompingTantrumTimer = 2; // Set ShellTrap to activate after the attacker's turn if target was hit by a physical move. if (GetMoveEffect(gChosenMoveByBattler[gBattlerTarget]) == EFFECT_SHELL_TRAP + && IsBattleMovePhysical(gCurrentMove) + && IsBattlerTurnDamaged(gBattlerTarget) && gBattlerTarget != gBattlerAttacker && !IsBattlerAlly(gBattlerTarget, gBattlerAttacker) - && gProtectStructs[gBattlerTarget].physicalDmg && gProtectStructs[gBattlerTarget].physicalBattlerId == gBattlerAttacker - && !TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) + && !IsSheerForceAffected(gCurrentMove, GetBattlerAbility(gBattlerAttacker))) { gProtectStructs[gBattlerTarget].shellTrap = TRUE; // Change move order in double battles, so the hit mon with shell trap moves immediately after being hit. @@ -6746,18 +6421,12 @@ static void Cmd_moveend(void) { gDisableStructs[gBattlerAttacker].usedMoves |= 1u << gCurrMovePos; gBattleStruct->lastMoveTarget[gBattlerAttacker] = gBattlerTarget; - if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) - { - gLastPrintedMoves[gBattlerAttacker] = gChosenMove; - gLastUsedMove = gCurrentMove; - if (IsMaxMove(gCurrentMove)) - gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker]; - } } enum BattleMoveEffects originalEffect = GetMoveEffect(originallyUsedMove); - if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) - && !gBattleStruct->battlerState[gBattlerAttacker].absent - && originalEffect != EFFECT_BATON_PASS && originalEffect != EFFECT_HEALING_WISH) + if (IsBattlerAlive(gBattlerAttacker) + && originalEffect != EFFECT_BATON_PASS + && originalEffect != EFFECT_HEALING_WISH + && originalEffect != EFFECT_LUNAR_DANCE) { if (gHitMarker & HITMARKER_OBEYS) { @@ -6789,6 +6458,12 @@ static void Cmd_moveend(void) { gLastLandedMoves[gBattlerTarget] = gCurrentMove; gLastHitByType[gBattlerTarget] = GetBattleMoveType(gCurrentMove); + if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) + { + gLastUsedMove = gCurrentMove; + if (IsMaxMove(gCurrentMove)) + gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker]; + } } } else @@ -6800,7 +6475,6 @@ static void Cmd_moveend(void) break; case MOVEEND_MIRROR_MOVE: // mirror move if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) - && !gBattleStruct->battlerState[gBattlerAttacker].absent && !IsMoveMirrorMoveBanned(originallyUsedMove) && gHitMarker & HITMARKER_OBEYS && gBattlerAttacker != gBattlerTarget @@ -6812,6 +6486,35 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; + case MOVEEND_DEFROST: + if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE + && IsBattlerTurnDamaged(gBattlerTarget) + && IsBattlerAlive(gBattlerTarget) + && gBattlerAttacker != gBattlerTarget + && (moveType == TYPE_FIRE || CanBurnHitThaw(gCurrentMove)) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) + { + gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE; + BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gBattlerTarget); + BattleScriptCall(BattleScript_DefrostedViaFireMove); + effect = TRUE; + } + if (gBattleMons[gBattlerTarget].status1 & STATUS1_FROSTBITE + && IsBattlerTurnDamaged(gBattlerTarget) + && IsBattlerAlive(gBattlerTarget) + && gBattlerAttacker != gBattlerTarget + && MoveThawsUser(originallyUsedMove) + && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) + { + gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FROSTBITE; + BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gBattlerTarget); + BattleScriptCall(BattleScript_FrostbiteHealedViaFireMove); + effect = TRUE; + } + gBattleScripting.moveendState++; + break; case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokemon. { u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); @@ -6821,21 +6524,23 @@ static void Cmd_moveend(void) && IsDoubleBattle() && !gProtectStructs[gBattlerAttacker].chargingTurn && (moveTarget == MOVE_TARGET_BOTH - || moveTarget == MOVE_TARGET_FOES_AND_ALLY) - && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) + || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) { u32 nextTarget = GetNextTarget(moveTarget, FALSE); - gHitMarker |= HITMARKER_NO_PPDEDUCT; if (nextTarget != MAX_BATTLERS_COUNT) { gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = nextTarget; // Fix for moxie spread moves gBattleScripting.moveendState = 0; MoveValuesCleanUp(); - gBattleScripting.moveEffect = gBattleScripting.savedMoveEffect; - if (moveEffect == EFFECT_EXPLOSION) - BattleScriptPush(gBattleMoveEffects[EFFECT_HIT].battleScript); // Edge case for Explosion not changing targets + // Edge cases for moves that shouldn't repeat their own script + if (moveEffect == EFFECT_EXPLOSION + || moveEffect == EFFECT_MISTY_EXPLOSION + || moveEffect == EFFECT_MAGNITUDE + || moveEffect == EFFECT_SYNCHRONOISE + || gBattleMoveEffects[moveEffect].battleScript == BattleScript_EffectTwoTurnsAttack) + BattleScriptPush(gBattleMoveEffects[EFFECT_HIT].battleScript); else BattleScriptPush(GetMoveBattleScript(gCurrentMove)); gBattlescriptCurrInstr = BattleScript_FlushMessageBox; @@ -6864,20 +6569,23 @@ static void Cmd_moveend(void) return; } } - - gHitMarker |= HITMARKER_NO_ATTACKSTRING; - gHitMarker &= ~HITMARKER_NO_PPDEDUCT; } RecordLastUsedMoveBy(gBattlerAttacker, gCurrentMove); gBattleScripting.moveendState++; break; } + case MOVEEND_HP_THRESHHOLD_ITEMS_TARGET: + if (gMultiHitCounter + && ItemBattleEffects(gBattlerTarget, gBattlerAttacker, GetBattlerHoldEffect(gBattlerTarget), IsOnHpThresholdActivation)) + effect = TRUE; + gBattleScripting.moveendState++; + break; case MOVEEND_MULTIHIT_MOVE: { if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gMultiHitCounter - && !(moveEffect == EFFECT_PRESENT && gBattleStruct->presentBasePower == 0)) // Silly edge case + && !(moveEffect == EFFECT_PRESENT && gBattleStruct->presentBasePower == 0)) // Parental Bond edge case { gMultiHitCounter--; if (!IsBattlerAlive(gBattlerTarget) && moveEffect != EFFECT_DRAGON_DARTS) @@ -6886,11 +6594,12 @@ static void Cmd_moveend(void) gBattleScripting.multihitString[4]++; if (gMultiHitCounter == 0) { - BattleScriptPushCursor(); - if (GetMoveEffectArg_MoveProperty(gCurrentMove) == MOVE_EFFECT_SCALE_SHOT && !NoAliveMonsForEitherParty()) - gBattlescriptCurrInstr = BattleScript_ScaleShot; + if (moveEffect == EFFECT_MULTI_HIT + && GetMoveEffectArg_MoveProperty(gCurrentMove) == MOVE_EFFECT_SCALE_SHOT + && !NoAliveMonsForEitherParty()) + BattleScriptCall(BattleScript_ScaleShot); else - gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings; + BattleScriptCall(BattleScript_MultiHitPrintStrings); effect = TRUE; } else @@ -6912,7 +6621,6 @@ static void Cmd_moveend(void) if (gSpecialStatuses[gBattlerAttacker].parentalBondState) gSpecialStatuses[gBattlerAttacker].parentalBondState--; - gHitMarker |= (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING); gBattleScripting.animTargetsHit = 0; gBattleScripting.moveendState = 0; gSpecialStatuses[gBattlerAttacker].multiHitOn = TRUE; @@ -6923,8 +6631,7 @@ static void Cmd_moveend(void) } else { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings; + BattleScriptCall(BattleScript_MultiHitPrintStrings); effect = TRUE; } } @@ -6935,143 +6642,102 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; } - case MOVEEND_DEFROST: - if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE - && IsBattlerTurnDamaged(gBattlerTarget) - && IsBattlerAlive(gBattlerTarget) - && gBattlerAttacker != gBattlerTarget - && (moveType == TYPE_FIRE || CanBurnHitThaw(gCurrentMove)) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) - { - gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FREEZE; - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); - MarkBattlerForControllerExec(gBattlerTarget); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; + case MOVEEND_MOVE_BLOCK: + effect = HandleMoveEndMoveBlock(moveEffect); + gBattleScripting.moveendState++; + break; + case MOVEEND_ITEM_EFFECTS_ATTACKER_2: + { + enum HoldEffect holdEffect = GetBattlerHoldEffect(gBattlerAttacker); + if (ItemBattleEffects(gBattlerAttacker, gBattlerTarget, holdEffect, IsOnStatusChangeActivation) + || ItemBattleEffects(gBattlerAttacker, gBattlerTarget, holdEffect, IsOnHpThresholdActivation)) effect = TRUE; - } - if (gBattleMons[gBattlerTarget].status1 & STATUS1_FROSTBITE - && IsBattlerAlive(gBattlerTarget) - && gBattlerAttacker != gBattlerTarget - && MoveThawsUser(originallyUsedMove) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) + gBattleScripting.moveendState++; + break; + } + case MOVEEND_ABILITY_BLOCK: + effect = HandleMoveEndAbilityBlock(gBattlerAttacker, gBattlerTarget, gCurrentMove); + gBattleScripting.moveendState++; + break; + case MOVEEND_SHEER_FORCE: + if (IsSheerForceAffected(gCurrentMove, GetBattlerAbility(gBattlerAttacker))) + gBattleScripting.moveendState = MOVEEND_EJECT_PACK; + else + gBattleScripting.moveendState++; + break; + case MOVEEND_COLOR_CHANGE: + while (gBattleStruct->eventState.moveEndBattler < gBattlersCount) { - gBattleMons[gBattlerTarget].status1 &= ~STATUS1_FROSTBITE; - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); - MarkBattlerForControllerExec(gBattlerTarget); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove; - effect = TRUE; + u32 battler = gBattleStruct->eventState.moveEndBattler++; + if (battler == gBattlerAttacker) + continue; + if (AbilityBattleEffects(ABILITYEFFECT_COLOR_CHANGE, battler, GetBattlerAbility(battler), 0, 0)) + return; } + gBattleStruct->eventState.moveEndBattler = 0; gBattleScripting.moveendState++; break; - case MOVEEND_SECOND_MOVE_BLOCK: - if (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + case MOVEEND_KEE_MARANGA_HP_THRESHOLD_ITEM_TARGET: + while (gBattleStruct->eventState.moveEndBattler < gBattlersCount) { - gBattleScripting.moveendState++; - break; + u32 battlerDef = gBattleStruct->eventState.moveEndBattler++; + if (battlerDef == gBattlerAttacker) + continue; + enum HoldEffect holdEffect = GetBattlerHoldEffect(battlerDef); + if (ItemBattleEffects(battlerDef, gBattlerAttacker, holdEffect, IsKeeMarangaBerryActivation) + || ItemBattleEffects(battlerDef, gBattlerAttacker, holdEffect, IsOnHpThresholdActivation)) + return; } - - switch (moveEffect) + gBattleScripting.moveendState++; + break; + case MOVEEND_RED_CARD: { - case EFFECT_RECOIL_IF_MISS: - if (IsBattlerAlive(gBattlerAttacker) - && (!IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && !gBattleStruct->noTargetPresent) - { - if (B_RECOIL_IF_MISS_DMG >= GEN_5 || (B_CRASH_IF_TARGET_IMMUNE == GEN_4 && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_DOESNT_AFFECT_FOE)) - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - else if (B_RECOIL_IF_MISS_DMG == GEN_4 && (GetNonDynamaxMaxHP(gBattlerTarget) / 2) < gBattleStruct->moveDamage[gBattlerTarget]) - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerTarget) / 2; - else // Fallback if B_RECOIL_IF_MISS_DMG is set to gen3 or lower. - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerTarget) / 2; - - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_RecoilIfMiss; - effect = TRUE; - } - break; - case EFFECT_RECOIL: - if (IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker)) - { - gBattleStruct->moveDamage[gBattlerAttacker] = max(1, gBattleStruct->moveDamage[gBattlerTarget] * max(1, GetMoveRecoil(gCurrentMove)) / 100); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil; - effect = TRUE; - } - break; - case EFFECT_EXPLOSION: - if (!IsAbilityOnField(ABILITY_DAMP)) - { - gBattleStruct->moveDamage[gBattlerAttacker] = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_FaintAttackerForExplosion; - effect = TRUE; - } - break; - case EFFECT_MAX_HP_50_RECOIL: - case EFFECT_MIND_BLOWN: - if (IsBattlerAlive(gBattlerAttacker) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_FAILED) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) - { - gBattleStruct->moveDamage[gBattlerAttacker] = (GetNonDynamaxMaxHP(gBattlerAttacker) + 1) / 2; // Half of Max HP Rounded UP - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MaxHp50Recoil; - effect = TRUE; - } - break; - case EFFECT_CHLOROBLAST: - if (IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker)) - { - gBattleStruct->moveDamage[gBattlerAttacker] = (GetNonDynamaxMaxHP(gBattlerAttacker) + 1) / 2; // Half of Max HP Rounded UP - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil; - effect = TRUE; - } - break; - case EFFECT_RAPID_SPIN: - if (IsBattlerTurnDamaged(gBattlerTarget)) + u32 redCardBattlers = 0, i; + for (i = 0; i < gBattlersCount; i++) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_RapidSpinAway; - effect = TRUE; + if (i == gBattlerAttacker) + continue; + if (GetBattlerHoldEffect(i) == HOLD_EFFECT_RED_CARD) + redCardBattlers |= (1u << i); } - break; - case EFFECT_FELL_STINGER: - if (IsBattlerAlive(gBattlerAttacker) - && !IsBattlerAlive(gBattlerTarget) - && IsBattlerTurnDamaged(gBattlerTarget) - && !NoAliveMonsForEitherParty() - && CompareStat(gBattlerAttacker, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (redCardBattlers && IsBattlerAlive(gBattlerAttacker)) { - SET_STATCHANGER(STAT_ATK, GetGenConfig(GEN_CONFIG_FELL_STINGER_STAT_RAISE) >= GEN_7 ? 3 : 2, FALSE); - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_FellStingerRaisesStat; - effect = TRUE; + // Since we check if battler was damaged, we don't need to check move result. + // In fact, doing so actually prevents multi-target moves from activating red card properly + u8 battlers[4] = {0, 1, 2, 3}; + SortBattlersBySpeed(battlers, FALSE); + for (i = 0; i < gBattlersCount; i++) + { + u32 battler = battlers[i]; + // Search for fastest hit pokemon with a red card + // Attacker is the one to be switched out, battler is one with red card + if (redCardBattlers & (1u << battler) + && IsBattlerAlive(battler) + && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) + && IsBattlerTurnDamaged(battler) + && CanBattlerSwitch(gBattlerAttacker) + && !(moveEffect == EFFECT_HIT_SWITCH_TARGET && CanBattlerSwitch(battler))) + { + effect = TRUE; + gLastUsedItem = gBattleMons[battler].item; + SaveBattlerTarget(battler); // save battler with red card + SaveBattlerAttacker(gBattlerAttacker); + gBattleScripting.battler = battler; + gEffectBattler = gBattlerAttacker; + BattleScriptPushCursor(); + if (gBattleStruct->battlerState[gBattlerAttacker].commanderSpecies != SPECIES_NONE + || GetBattlerAbility(gBattlerAttacker) == ABILITY_GUARD_DOG + || GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) + gBattlescriptCurrInstr = BattleScript_RedCardActivationNoSwitch; + else + gBattlescriptCurrInstr = BattleScript_RedCardActivates; + break; // Only fastest red card activates + } + } } - break; - default: - break; } - gBattleScripting.moveendState++; - break; - case MOVEEND_ITEM_EFFECTS_ATTACKER: - if (ItemBattleEffects(ITEMEFFECT_MOVE_END, gBattlerAttacker, FALSE)) - effect = TRUE; - gBattleScripting.moveendState++; - break; - case MOVEEND_ABILITY_BLOCK: - effect = HandleMoveEndAbilityBlock(gBattlerAttacker, gBattlerTarget, gCurrentMove); - gBattleScripting.moveendState++; - break; - case MOVEEND_SHEER_FORCE: - if (TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) - gBattleScripting.moveendState = MOVEEND_EJECT_PACK; + if (effect) + gBattleScripting.moveendState = MOVEEND_JUMP_TO_HIT_ESCAPE_PLUS_ONE; else gBattleScripting.moveendState++; break; @@ -7096,6 +6762,9 @@ static void Cmd_moveend(void) break; } + for (u32 i = 0; i < gBattlersCount; i++) + gDisableStructs[i].tryEjectPack = FALSE; + u8 battlers[4] = {0, 1, 2, 3}; if (numEjectButtonBattlers > 1) SortBattlersBySpeed(battlers, FALSE); @@ -7111,44 +6780,120 @@ static void Cmd_moveend(void) gLastUsedItem = gBattleMons[battler].item; effect = TRUE; gBattleStruct->battlerState[battler].usedEjectItem = TRUE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EjectButtonActivates; + BattleScriptCall(BattleScript_EjectButtonActivates); gAiLogicData->ejectButtonSwitch = TRUE; break; // Only the fastest Eject Button activates } } if (effect) - gBattleScripting.moveendState = MOVEEND_OPPORTUNIST; + gBattleScripting.moveendState = MOVEEND_JUMP_TO_HIT_ESCAPE_PLUS_ONE; else gBattleScripting.moveendState++; break; - case MOVEEND_EJECT_PACK: + case MOVEEND_LIFE_ORB_SHELL_BELL: + if (ItemBattleEffects(gBattlerAttacker, 0, GetBattlerHoldEffect(gBattlerAttacker), IsLifeOrbShellBellActivation)) + effect = TRUE; + gBattleScripting.moveendState++; + break; + case MOVEEND_FORM_CHANGE: + if (TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_AFTER_MOVE)) { - // Because sorting the battlers by speed takes lots of cycles, it's better to just check if any of the battlers has the Eject items. - u32 ejectPackBattlers = 0; - u32 numEjectPackBattlers = 0; + effect = TRUE; + BattleScriptCall(BattleScript_AttackerFormChangeMoveEffect); + } + gBattleScripting.moveendState++; + break; + case MOVEEND_EMERGENCY_EXIT: // Special case, because moves hitting multiple opponents stop after switching out + { + // Because sorting the battlers by speed takes lots of cycles, + // we check if EE can be activated and count how many. + u32 numEmergencyExitBattlers = 0; + u32 emergencyExitBattlers = 0; for (i = 0; i < gBattlersCount; i++) { - if (CanEjectPackTrigger(gBattlerAttacker, i, moveEffect)) + if (IsBattlerTurnDamaged(i) && EmergencyExitCanBeTriggered(i)) { - ejectPackBattlers |= 1u << i; - numEjectPackBattlers++; + emergencyExitBattlers |= 1u << i; + numEmergencyExitBattlers++; } } - if (numEjectPackBattlers == 0) + if (numEmergencyExitBattlers == 0) { gBattleScripting.moveendState++; break; } + for (u32 i = 0; i < gBattlersCount; i++) + gDisableStructs[i].tryEjectPack = FALSE; + u8 battlers[4] = {0, 1, 2, 3}; - if (numEjectPackBattlers > 1) + if (numEmergencyExitBattlers > 1) + SortBattlersBySpeed(battlers, FALSE); + + for (i = 0; i < gBattlersCount; i++) + { + u32 battler = battlers[i]; + + if (!(emergencyExitBattlers & 1u << battler)) + continue; + + effect = TRUE; + gBattleScripting.battler = battler; + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + BattleScriptCall(BattleScript_EmergencyExit); + else + BattleScriptCall(BattleScript_EmergencyExitWild); + + break; // Only the fastest Emergency Exit / Wimp Out activates + } + } + if (effect) + gBattleScripting.moveendState = MOVEEND_JUMP_TO_HIT_ESCAPE_PLUS_ONE; + else + gBattleScripting.moveendState++; + break; + case MOVEEND_HIT_ESCAPE: + if (moveEffect == EFFECT_HIT_ESCAPE + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && IsBattlerTurnDamaged(gBattlerTarget) + && IsBattlerAlive(gBattlerAttacker) + && !NoAliveMonsForBattlerSide(gBattlerTarget)) + { + effect = TRUE; + BattleScriptCall(BattleScript_EffectHitEscape); + } + gBattleScripting.moveendState++; + break; + case MOVEEND_EJECT_PACK: + { + // Because sorting the battlers by speed takes lots of cycles, it's better to just check if any of the battlers has the Eject items. + u32 ejectPackBattlers = 0; + u32 numEjectPackBattlers = 0; + + for (i = 0; i < gBattlersCount; i++) + { + if (CanEjectPackTrigger(gBattlerAttacker, i, moveEffect)) + { + ejectPackBattlers |= 1u << i; + numEjectPackBattlers++; + } + } + + if (numEjectPackBattlers == 0) + { + gBattleScripting.moveendState++; + break; + } + + u8 battlers[4] = {0, 1, 2, 3}; + if (numEjectPackBattlers > 1) SortBattlersBySpeed(battlers, FALSE); for (i = 0; i < gBattlersCount; i++) - gProtectStructs[i].statFell = FALSE; // restore for every possible eject pack battler + gDisableStructs[i].tryEjectPack = FALSE; for (i = 0; i < gBattlersCount; i++) { @@ -7157,104 +6902,73 @@ static void Cmd_moveend(void) if (!(ejectPackBattlers & 1u << battler)) continue; - // Hit escape moves activate before Eject Pack for user - if (moveEffect == EFFECT_HIT_ESCAPE && gBattlerAttacker == battler) - continue; - gBattleScripting.battler = battler; gLastUsedItem = gBattleMons[battler].item; effect = TRUE; gBattleStruct->battlerState[battler].usedEjectItem = TRUE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EjectPackActivates; + BattleScriptCall(BattleScript_EjectPackActivates); gAiLogicData->ejectPackSwitch = TRUE; break; // Only the fastest Eject item activates } } - if (effect) - gBattleScripting.moveendState = MOVEEND_OPPORTUNIST; - else - gBattleScripting.moveendState++; + gBattleScripting.moveendState++; + break; + + case MOVEEND_ITEMS_EFFECTS_ALL: + while (gBattleStruct->eventState.moveEndBattler < gBattlersCount) + { + u32 battler = gBattleStruct->eventState.moveEndBattler++; + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); + if (ItemBattleEffects(battler, 0, holdEffect, IsOnStatusChangeActivation) + || ItemBattleEffects(battler, 0, holdEffect, IsOnHpThresholdActivation)) + return; + } + gBattleStruct->eventState.moveEndBattler = 0; + gBattleScripting.moveendState++; break; case MOVEEND_WHITE_HERB: - for (i = 0; i < gBattlersCount; i++) + while (gBattleStruct->eventState.moveEndBattler < gBattlersCount) { - if (!IsBattlerAlive(i)) + u32 battler = gBattleStruct->eventState.moveEndBattler++; + if (!IsBattlerAlive(battler)) continue; - if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_WHITE_HERB - && RestoreWhiteHerbStats(i)) - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; - effect = TRUE; - break; - } + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsWhiteHerbActivation)) + return; } - if (!effect) - gBattleScripting.moveendState++; + gBattleStruct->eventState.moveEndBattler = 0; + gBattleScripting.moveendState++; break; - case MOVEEND_RED_CARD: + case MOVEEND_OPPORTUNIST: + while (gBattleStruct->eventState.moveEndBattler < gBattlersCount) { - u32 redCardBattlers = 0, i; - for (i = 0; i < gBattlersCount; i++) - { - if (i == gBattlerAttacker) - continue; - if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_RED_CARD) - redCardBattlers |= (1u << i); - } - if (redCardBattlers && IsBattlerAlive(gBattlerAttacker)) - { - // Since we check if battler was damaged, we don't need to check move result. - // In fact, doing so actually prevents multi-target moves from activating red card properly - u8 battlers[4] = {0, 1, 2, 3}; - SortBattlersBySpeed(battlers, FALSE); - for (i = 0; i < gBattlersCount; i++) - { - u32 battler = battlers[i]; - // Search for fastest hit pokemon with a red card - // Attacker is the one to be switched out, battler is one with red card - if (redCardBattlers & (1u << battler) - && IsBattlerAlive(battler) - && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) - && IsBattlerTurnDamaged(battler) - && CanBattlerSwitch(gBattlerAttacker) - && !(moveEffect == EFFECT_HIT_SWITCH_TARGET && CanBattlerSwitch(battler))) - { - effect = TRUE; - gLastUsedItem = gBattleMons[battler].item; - SaveBattlerTarget(battler); // save battler with red card - SaveBattlerAttacker(gBattlerAttacker); - gBattleScripting.battler = battler; - gEffectBattler = gBattlerAttacker; - BattleScriptPushCursor(); - if (gBattleStruct->commanderActive[gBattlerAttacker] != SPECIES_NONE - || GetBattlerAbility(gBattlerAttacker) == ABILITY_GUARD_DOG - || GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) - gBattlescriptCurrInstr = BattleScript_RedCardActivationNoSwitch; - else - gBattlescriptCurrInstr = BattleScript_RedCardActivates; - break; // Only fastest red card activates - } - } - } + u32 battler = gBattleStruct->eventState.moveEndBattler++; + if (!IsBattlerAlive(battler)) + continue; + if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, GetBattlerAbility(battler), 0, 0)) + return; } - if (effect) - gBattleScripting.moveendState = MOVEEND_OPPORTUNIST; - else - gBattleScripting.moveendState++; + gBattleStruct->eventState.moveEndBattler = 0; + gBattleScripting.moveendState++; break; - case MOVEEND_LIFEORB_SHELLBELL: - if (ItemBattleEffects(ITEMEFFECT_LIFEORB_SHELLBELL, 0, FALSE)) - effect = TRUE; + case MOVEEND_MIRROR_HERB: + while (gBattleStruct->eventState.moveEndBattler < gBattlersCount) + { + u32 battler = gBattleStruct->eventState.moveEndBattler++; + if (!IsBattlerAlive(battler)) + continue; + + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsMirrorHerbActivation)) + return; + } + gBattleStruct->eventState.moveEndBattler = 0; gBattleScripting.moveendState++; break; case MOVEEND_PICKPOCKET: if (IsBattlerAlive(gBattlerAttacker) && gBattleMons[gBattlerAttacker].item != ITEM_NONE // Attacker must be holding an item && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker])) // But not knocked off - && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) // Pickpocket requires contact + && IsMoveMakingContact(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), gCurrentMove) // Pickpocket requires contact && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) // Obviously attack needs to have worked { u8 battlers[4] = {0, 1, 2, 3}; @@ -7277,8 +6991,7 @@ static void Cmd_moveend(void) StealTargetItem(gBattlerTarget, gBattlerAttacker); // Target takes attacker's item gEffectBattler = gBattlerAttacker; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_Pickpocket; // Includes sticky hold check to print separate string + BattleScriptCall(BattleScript_Pickpocket); // Includes sticky hold check to print separate string effect = TRUE; break; // Pickpocket activates on fastest mon, so exit loop. } @@ -7286,102 +6999,51 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; - case MOVEEND_EMERGENCY_EXIT: // Special case, because moves hitting multiple opponents stop after switching out + case MOVEEND_THIRD_MOVE_BLOCK: + switch (moveEffect) { - // Because sorting the battlers by speed takes lots of cycles, - // we check if EE can be activated and cound how many. - u32 numEmergencyExitBattlers = 0; - u32 emergencyExitBattlers = 0; - - for (i = 0; i < gBattlersCount; i++) - { - if (EmergencyExitCanBeTriggered(i)) - { - emergencyExitBattlers |= 1u << i; - numEmergencyExitBattlers++; - } - } - - if (numEmergencyExitBattlers == 0) + case EFFECT_STEEL_ROLLER: + if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && IsBattlerTurnDamaged(gBattlerTarget)) { - gBattleScripting.moveendState++; - break; + BattleScriptCall(BattleScript_RemoveTerrain); + effect = TRUE; } - - u8 battlers[4] = {0, 1, 2, 3}; - if (numEmergencyExitBattlers > 1) - SortBattlersBySpeed(battlers, FALSE); - - for (i = 0; i < gBattlersCount; i++) + case EFFECT_ICE_SPINNER: + if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY + && gLastPrintedMoves[gBattlerAttacker] == gCurrentMove + && IsBattlerAlive(gBattlerAttacker) + && IsBattlerTurnDamaged(gBattlerTarget)) { - u32 battler = battlers[i]; - - if (!(emergencyExitBattlers & 1u << battler)) - continue; - + BattleScriptCall(BattleScript_RemoveTerrain); effect = TRUE; - gBattleScripting.battler = battler; - BattleScriptPushCursor(); - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || IsOnPlayerSide(battler)) - gBattlescriptCurrInstr = BattleScript_EmergencyExit; - else - gBattlescriptCurrInstr = BattleScript_EmergencyExitWild; - - break; // Only the fastest Emergency Exit / Wimp Out activates } - } - if (effect) - gBattleScripting.moveendState = MOVEEND_OPPORTUNIST; - else - gBattleScripting.moveendState++; - break; - case MOVEEND_HIT_ESCAPE: - if (moveEffect == EFFECT_HIT_ESCAPE - && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && IsBattlerTurnDamaged(gBattlerTarget) - && IsBattlerAlive(gBattlerAttacker) - && !NoAliveMonsForBattlerSide(gBattlerTarget)) - { - effect = TRUE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EffectHitEscape; - } - gBattleScripting.moveendState++; - break; - case MOVEEND_OPPORTUNIST: - if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0)) - effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers - else - gBattleScripting.moveendState++; - break; - case MOVEEND_SYMBIOSIS: - for (i = 0; i < gBattlersCount; i++) - { - if ((gSpecialStatuses[i].berryReduced - || (B_SYMBIOSIS_GEMS >= GEN_7 && gSpecialStatuses[i].gemBoost)) - && TryTriggerSymbiosis(i, BATTLE_PARTNER(i))) + break; + case EFFECT_NATURAL_GIFT: + if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && GetItemPocket(gBattleMons[gBattlerAttacker].item) == POCKET_BERRIES) { - BestowItem(BATTLE_PARTNER(i), i); - gLastUsedAbility = gBattleMons[BATTLE_PARTNER(i)].ability; - gBattleScripting.battler = gBattlerAbility = BATTLE_PARTNER(i); - gBattlerAttacker = i; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SymbiosisActivates; - effect = TRUE; + u32 item = gBattleMons[gBattlerAttacker].item; + gBattleMons[gBattlerAttacker].item = ITEM_NONE; + gBattleStruct->battlerState[gBattlerAttacker].canPickupItem = TRUE; + GetBattlerPartyState(gBattlerAttacker)->usedHeldItem = item; + CheckSetUnburden(gBattlerAttacker); + BtlController_EmitSetMonData( + gBattlerAttacker, + B_COMM_TO_CONTROLLER, + REQUEST_HELDITEM_BATTLE, + 0, + sizeof(gBattleMons[gBattlerAttacker].item), + &gBattleMons[gBattlerAttacker].item); + MarkBattlerForControllerExec(gBattlerAttacker); + ClearBattlerItemEffectHistory(gBattlerAttacker); + + if (!TrySymbiosis(gBattlerAttacker, item, TRUE)) + effect = TRUE; } + default: + break; } gBattleScripting.moveendState++; break; - case MOVEEND_SAME_MOVE_TURNS: - if (gCurrentMove != gLastResultingMoves[gBattlerAttacker] - || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT - || gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - gBattleStruct->sameMoveTurns[gBattlerAttacker] = 0; - else if (gCurrentMove == gLastResultingMoves[gBattlerAttacker] && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) - gBattleStruct->sameMoveTurns[gBattlerAttacker]++; - gBattleScripting.moveendState++; - break; case MOVEEND_CHANGED_ITEMS: for (i = 0; i < gBattlersCount; i++) { @@ -7393,6 +7055,13 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; + case MOVEEND_SAME_MOVE_TURNS: + if (gCurrentMove != gLastResultingMoves[gBattlerAttacker] || (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) || !IsAnyTargetAffected()) + gBattleStruct->metronomeItemCounter[gBattlerAttacker] = 0; + else if (gCurrentMove == gLastResultingMoves[gBattlerAttacker] && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) + gBattleStruct->metronomeItemCounter[gBattlerAttacker]++; + gBattleScripting.moveendState++; + break; case MOVEEND_CLEAR_BITS: // Clear/Set bits for things like using a move for all targets and all hits. if (gSpecialStatuses[gBattlerAttacker].instructedChosenTarget) gBattleStruct->moveTarget[gBattlerAttacker] = gSpecialStatuses[gBattlerAttacker].instructedChosenTarget & 0x3; @@ -7406,45 +7075,32 @@ static void Cmd_moveend(void) if (B_RAMPAGE_CANCELLING >= GEN_5 && MoveHasAdditionalEffectSelf(gCurrentMove, MOVE_EFFECT_THRASH) // If we're rampaging && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT // And it is unusable - && (gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) != STATUS2_LOCK_CONFUSE_TURN(1)) // And won't end this turn + && gBattleMons[gBattlerAttacker].volatiles.lockConfusionTurns != 1) // And won't end this turn CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_IGNORE); // Cancel it - if (gBattleStruct->savedAttackerCount > 0) - { - // #if TESTING - // Test_ExitWithResult(TEST_RESULT_ERROR, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!"); - // #else - DebugPrintfLevel(MGBA_LOG_WARN, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!"); - // #endif - } - if (gBattleStruct->savedTargetCount > 0) - { - // #if TESTING - // Test_ExitWithResult(TEST_RESULT_ERROR, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!"); - // #else - DebugPrintfLevel(MGBA_LOG_WARN, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!"); - // #endif - } + TryClearChargeVolatile(moveType); + ValidateSavedBattlerCounts(); gProtectStructs[gBattlerAttacker].shellTrap = FALSE; - gBattleStruct->ateBoost[gBattlerAttacker] = FALSE; - gSpecialStatuses[gBattlerAttacker].gemBoost = FALSE; - gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; - gSpecialStatuses[gBattlerTarget].distortedTypeMatchups = FALSE; - gBattleScripting.moveEffect = 0; - gBattleStruct->isAtkCancelerForCalledMove = FALSE; + gBattleStruct->battlerState[gBattlerAttacker].ateBoost = FALSE; + gBattleScripting.moveEffect = MOVE_EFFECT_NONE; gBattleStruct->swapDamageCategory = FALSE; gBattleStruct->categoryOverride = FALSE; gBattleStruct->additionalEffectsCounter = 0; gBattleStruct->poisonPuppeteerConfusion = FALSE; gBattleStruct->fickleBeamBoosted = FALSE; + gBattleStruct->tryDestinyBond = FALSE; + gBattleStruct->tryGrudge = FALSE; gBattleStruct->battlerState[gBattlerAttacker].usedMicleBerry = FALSE; gBattleStruct->noTargetPresent = FALSE; + gBattleStruct->toxicChainPriority = FALSE; if (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) gBattleStruct->pledgeMove = FALSE; if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) SetActiveGimmick(gBattlerAttacker, GIMMICK_NONE); - if (B_CHARGE >= GEN_9 && moveType == TYPE_ELECTRIC && (IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) - gStatuses3[gBattlerAttacker] &= ~(STATUS3_CHARGED_UP); + if (gBattleMons[gBattlerAttacker].volatiles.destinyBond > 0) + gBattleMons[gBattlerAttacker].volatiles.destinyBond--; + if (moveEffect == EFFECT_ECHOED_VOICE && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)) + gBattleStruct->incrementEchoedVoice = TRUE; // check if Stellar type boost should be used up if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && GetBattlerTeraType(gBattlerAttacker) == TYPE_STELLAR @@ -7456,24 +7112,21 @@ static void Cmd_moveend(void) for (i = 0; i < gBattlersCount; i++) { gBattleStruct->battlerState[gBattlerAttacker].targetsDone[i] = FALSE; + gDisableStructs[i].tryEjectPack = FALSE; - if (gBattleStruct->commanderActive[i] != SPECIES_NONE && !IsBattlerAlive(i)) + if (gBattleStruct->battlerState[i].commanderSpecies != SPECIES_NONE && !IsBattlerAlive(i)) { u32 partner = BATTLE_PARTNER(i); - gBattleStruct->commanderActive[i] = SPECIES_NONE; + gBattleStruct->battlerState[i].commanderSpecies = SPECIES_NONE; if (IsBattlerAlive(partner)) - gStatuses3[partner] &= ~STATUS3_COMMANDER; + gBattleMons[partner].volatiles.semiInvulnerable = STATE_NONE; } } gBattleScripting.moveendState++; break; case MOVEEND_DANCER: - if (gCurrentMove == MOVE_NONE) - originallyUsedMove = gChosenMove; // Fallback to chosen move in case attacker is switched out in the middle of an attack resolution (eg red card) - else - originallyUsedMove = gCurrentMove; - if (IsDanceMove(originallyUsedMove) && !gBattleStruct->snatchedMoveIsUsed) + if (IsDanceMove(gCurrentMove) && !gBattleStruct->snatchedMoveIsUsed) { u32 battler, nextDancer = 0; bool32 hasDancerTriggered = FALSE; @@ -7488,7 +7141,7 @@ static void Cmd_moveend(void) } } - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE) + if (!(!IsAnyTargetAffected() || (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE && !hasDancerTriggered) || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove && gBattleStruct->bouncedMoveIsUsed))) { // Dance move succeeds @@ -7507,7 +7160,7 @@ static void Cmd_moveend(void) nextDancer = battler | 0x4; } } - if (nextDancer && AbilityBattleEffects(ABILITYEFFECT_MOVE_END_OTHER, nextDancer & 0x3, 0, 0, originallyUsedMove)) + if (nextDancer && AbilityBattleEffects(ABILITYEFFECT_MOVE_END_OTHER, nextDancer & 0x3, 0, 0, gCurrentMove)) effect = TRUE; } } @@ -7556,14 +7209,14 @@ static void Cmd_sethealblock(void) { CMD_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) + if (gBattleMons[gBattlerTarget].volatiles.healBlock) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gStatuses3[gBattlerTarget] |= STATUS3_HEAL_BLOCK; - gDisableStructs[gBattlerTarget].healBlockTimer = gBattleTurnCounter + 5; + gBattleMons[gBattlerTarget].volatiles.healBlock = TRUE; + gDisableStructs[gBattlerTarget].healBlockTimer = 5; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -7588,6 +7241,11 @@ static void Cmd_getswitchedmondata(void) if (gBattleControllerExecFlags) return; + if (TESTING + && gBattlerPartyIndexes[battler] == gBattleStruct->monToSwitchIntoId[battler] + && IsBattlerAlive(battler)) + Test_ExitWithResult(TEST_RESULT_ERROR, 0, ":L:%s:%d: battler is trying to switch to themself", __FILE__, __LINE__); + gBattlerPartyIndexes[battler] = gBattleStruct->monToSwitchIntoId[battler]; BtlController_EmitGetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]); @@ -7643,8 +7301,8 @@ static void Cmd_switchindataupdate(void) } } - gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[0] = GetSpeciesType(gBattleMons[battler].species, 0); + gBattleMons[battler].types[1] = GetSpeciesType(gBattleMons[battler].species, 1); gBattleMons[battler].types[2] = TYPE_MYSTERY; gBattleMons[battler].ability = GetAbilityBySpecies(gBattleMons[battler].species, gBattleMons[battler].abilityNum); #if TESTING @@ -7670,10 +7328,9 @@ static void Cmd_switchindataupdate(void) { gBattleMons[battler].statStages[i] = oldData.statStages[i]; } - gBattleMons[battler].status2 = oldData.status2; } - SwitchInClearSetData(battler); + SwitchInClearSetData(battler, &oldData.volatiles); if (gBattleTypeFlags & BATTLE_TYPE_PALACE && gBattleMons[battler].maxHP / 2 >= gBattleMons[battler].hp @@ -7701,13 +7358,7 @@ static void Cmd_switchinanim(void) battler = GetBattlerForBattleScript(cmd->battler); - if (!IsOnPlayerSide(battler) - && !(gBattleTypeFlags & (BATTLE_TYPE_LINK - | BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_TRAINER_HILL - | BATTLE_TYPE_FRONTIER))) - HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[battler].species), FLAG_SET_SEEN, gBattleMons[battler].personality); + GetBattlerPartyState(battler)->sentOut = TRUE; gAbsentBattlerFlags &= ~(1u << battler); @@ -7868,7 +7519,7 @@ static void Cmd_jumpifcantswitch(void) CMD_ARGS(u8 battler:7, u8 ignoreEscapePrevention:1, const u8 *jumpInstr); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (!cmd->ignoreEscapePrevention && !CanBattlerEscape(battler)) + if (!cmd->ignoreEscapePrevention && !CanBattlerEscape(battler) && GetBattlerHoldEffect(battler) != HOLD_EFFECT_SHED_SHELL) { gBattlescriptCurrInstr = cmd->jumpInstr; } @@ -7890,7 +7541,7 @@ static void ChooseMonToSendOut(u32 battler, u8 slotId) gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; gBattleStruct->field_93 &= ~(1u << battler); - BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); + BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, 0, gBattleStruct->battlerPartyOrders[battler]); MarkBattlerForControllerExec(battler); } @@ -7940,7 +7591,7 @@ static void Cmd_openpartyscreen(void) { if (((1u << i) & hitmarkerFaintBits)) { - u32 skipPartnerCheck = FALSE; + bool32 skipPartnerCheck = FALSE; if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerSide(i) == B_SIDE_OPPONENT && TRAINER_BATTLE_PARAM.opponentB != TRAINER_NONE) @@ -8068,7 +7719,7 @@ static void Cmd_openpartyscreen(void) gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; gBattleStruct->field_93 &= ~(1u << battler); - BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, hitmarkerFaintBits, gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battler)], ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); + BtlController_EmitChoosePokemon(battler, B_COMM_TO_CONTROLLER, hitmarkerFaintBits, gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battler)], ABILITY_NONE, 0, gBattleStruct->battlerPartyOrders[battler]); MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = cmd->nextInstr; @@ -8172,24 +7823,6 @@ static void Cmd_switchhandleorder(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void SetDmgHazardsBattlescript(u8 battler, u8 multistringId) -{ - gBattleMons[battler].status2 &= ~STATUS2_DESTINY_BOND; - gHitMarker &= ~HITMARKER_DESTINYBOND; - gBattleScripting.battler = battler; - gBattleCommunication[MULTISTRING_CHOOSER] = multistringId; - - BattleScriptPushCursor(); - if (gBattlescriptCurrInstr[1] == BS_TARGET) - gBattlescriptCurrInstr = BattleScript_DmgHazardsOnTarget; - else if (gBattlescriptCurrInstr[1] == BS_ATTACKER) - gBattlescriptCurrInstr = BattleScript_DmgHazardsOnAttacker; - else if (gBattlescriptCurrInstr[1] == BS_SCRIPTING) - gBattlescriptCurrInstr = BattleScript_DmgHazardsOnBattlerScripting; - else - gBattlescriptCurrInstr = BattleScript_DmgHazardsOnFaintedBattler; -} - bool32 DoSwitchInAbilities(u32 battler) { return (TryPrimalReversion(battler) @@ -8204,138 +7837,170 @@ static void UpdateSentMonFlags(u32 battler) gHitMarker &= ~HITMARKER_FAINTED(battler); gSpecialStatuses[battler].faintedHasReplacement = FALSE; +} + +static void SetDmgHazardsBattlescript(u8 battler, u8 multistringId) +{ + gBattleScripting.battler = battler; + gBattleCommunication[MULTISTRING_CHOOSER] = multistringId; - if (!BattlerHasAi(battler)) - gBattleStruct->appearedInBattle |= 1u << gBattlerPartyIndexes[battler]; + if (gBattlescriptCurrInstr[1] == BS_TARGET) + BattleScriptCall(BattleScript_DmgHazardsOnTarget); + else if (gBattlescriptCurrInstr[1] == BS_ATTACKER) + BattleScriptCall(BattleScript_DmgHazardsOnAttacker); + else if (gBattlescriptCurrInstr[1] == BS_SCRIPTING) + BattleScriptCall(BattleScript_DmgHazardsOnBattlerScripting); + else + BattleScriptCall(BattleScript_DmgHazardsOnFaintedBattler); } -static bool32 DoSwitchInEffectsForBattler(u32 battler) +void TryHazardsOnSwitchIn(u32 battler, u32 side, enum Hazards hazardType) { - u32 i = 0; - // Neutralizing Gas announces itself before hazards - if (gBattleMons[battler].ability == ABILITY_NEUTRALIZING_GAS && gSpecialStatuses[battler].announceNeutralizingGas == 0) + switch (hazardType) { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS; - gSpecialStatuses[battler].announceNeutralizingGas = TRUE; - gDisableStructs[battler].neutralizingGas = TRUE; - gBattlerAbility = battler; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SwitchInAbilityMsgRet; - } - // Healing Wish activates before hazards. - // Starting from Gen8 - it heals only pokemon which can be healed. In gens 5,6,7 the effect activates anyways. - else if ((gBattleStruct->battlerState[battler].storedHealingWish || gBattleStruct->battlerState[battler].storedLunarDance) - && (gBattleMons[battler].hp != gBattleMons[battler].maxHP || gBattleMons[battler].status1 != 0 || B_HEALING_WISH_SWITCH < GEN_8)) + case HAZARDS_NONE: + break; + case HAZARDS_SPIKES: { - gBattlerAttacker = battler; - if (gBattleStruct->battlerState[battler].storedHealingWish) + enum Ability ability = GetBattlerAbility(battler); + if (ability != ABILITY_MAGIC_GUARD + && IsBattlerAffectedByHazards(battler, FALSE) + && IsBattlerGrounded(battler, ability, GetBattlerHoldEffect(battler))) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_HealingWishActivates; - gBattleStruct->battlerState[battler].storedHealingWish = FALSE; + s32 spikesDmg = GetNonDynamaxMaxHP(battler) / ((5 - gSideTimers[side].spikesAmount) * 2); + SetPassiveDamageAmount(battler, spikesDmg); + SetDmgHazardsBattlescript(battler, B_MSG_PKMNHURTBYSPIKES); } - else // Lunar Dance + break; + } + case HAZARDS_STICKY_WEB: + if (IsBattlerAffectedByHazards(battler, FALSE) && IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler))) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_LunarDanceActivates; - gBattleStruct->battlerState[battler].storedLunarDance = FALSE; + gBattleScripting.battler = battler; + SET_STATCHANGER(STAT_SPEED, 1, TRUE); + BattleScriptCall(BattleScript_StickyWebOnSwitchIn); } - } - else if (!(gDisableStructs[battler].spikesDone) - && (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SPIKES) - && GetBattlerAbility(battler) != ABILITY_MAGIC_GUARD - && IsBattlerAffectedByHazards(battler, FALSE) - && IsBattlerGrounded(battler)) - { - u8 spikesDmg = (5 - gSideTimers[GetBattlerSide(battler)].spikesAmount) * 2; - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (spikesDmg); - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - - gDisableStructs[battler].spikesDone = TRUE; - SetDmgHazardsBattlescript(battler, B_MSG_PKMNHURTBYSPIKES); - } - else if (!(gDisableStructs[battler].stealthRockDone) - && (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_STEALTH_ROCK) - && IsBattlerAffectedByHazards(battler, FALSE) - && GetBattlerAbility(battler) != ABILITY_MAGIC_GUARD) - { - gDisableStructs[battler].stealthRockDone = TRUE; - gBattleStruct->moveDamage[battler] = GetStealthHazardDamage(TYPE_SIDE_HAZARD_POINTED_STONES, battler); + break; + case HAZARDS_TOXIC_SPIKES: + if (!IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler))) + break; - if (gBattleStruct->moveDamage[battler] != 0) - SetDmgHazardsBattlescript(battler, B_MSG_STEALTHROCKDMG); - } - else if (!(gDisableStructs[battler].toxicSpikesDone) - && (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_TOXIC_SPIKES) - && IsBattlerGrounded(battler)) - { - gDisableStructs[battler].toxicSpikesDone = TRUE; if (IS_BATTLER_OF_TYPE(battler, TYPE_POISON)) // Absorb the toxic spikes. { - gSideStatuses[GetBattlerSide(battler)] &= ~SIDE_STATUS_TOXIC_SPIKES; + gBattleStruct->hazardsCounter--; // reduce counter so the next hazard can be applied gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount = 0; - gBattleScripting.battler = battler; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ToxicSpikesAbsorbed; + RemoveHazardFromField(side, HAZARDS_TOXIC_SPIKES); + gEffectBattler = battler; + BattleScriptCall(BattleScript_ToxicSpikesAbsorbed); } - else if (IsBattlerAffectedByHazards(battler, TRUE)) + else if (IsBattlerAffectedByHazards(battler, TRUE) + && CanBePoisoned(battler, battler, GetBattlerAbility(battler), GetBattlerAbility(battler))) { - if (CanBePoisoned(gBattlerAttacker, battler, GetBattlerAbility(gBattlerAttacker), GetBattlerAbility(battler))) + gBattleScripting.battler = battler; + BattleScriptPushCursor(); + if (gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount >= 2) { - gBattleScripting.battler = battler; - BattleScriptPushCursor(); - if (gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount >= 2) - { - gBattlescriptCurrInstr = BattleScript_ToxicSpikesBadlyPoisoned; - gBattleMons[battler].status1 |= STATUS1_TOXIC_POISON; - } - else - { - gBattlescriptCurrInstr = BattleScript_ToxicSpikesPoisoned; - gBattleMons[battler].status1 |= STATUS1_POISON; - } - - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); + gBattlescriptCurrInstr = BattleScript_ToxicSpikesBadlyPoisoned; + gBattleMons[battler].status1 |= STATUS1_TOXIC_POISON; + } + else + { + gBattlescriptCurrInstr = BattleScript_ToxicSpikesPoisoned; + gBattleMons[battler].status1 |= STATUS1_POISON; } + + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1); + MarkBattlerForControllerExec(battler); + } + break; + case HAZARDS_STEALTH_ROCK: + if (IsBattlerAffectedByHazards(battler, FALSE) && GetBattlerAbility(battler) != ABILITY_MAGIC_GUARD) + { + gBattleStruct->passiveHpUpdate[battler] = GetStealthHazardDamage(TYPE_SIDE_HAZARD_POINTED_STONES, battler); + if (gBattleStruct->passiveHpUpdate[battler] != 0) + SetDmgHazardsBattlescript(battler, B_MSG_STEALTHROCKDMG); } + break; + case HAZARDS_STEELSURGE: + if (IsBattlerAffectedByHazards(battler, FALSE) && GetBattlerAbility(battler) != ABILITY_MAGIC_GUARD) + { + gBattleStruct->passiveHpUpdate[battler] = GetStealthHazardDamage(TYPE_SIDE_HAZARD_SHARP_STEEL, battler); + if (gBattleStruct->passiveHpUpdate[battler] != 0) + SetDmgHazardsBattlescript(battler, B_MSG_SHARPSTEELDMG); + } + break; + case HAZARDS_MAX_COUNT: + break; } - else if (!(gDisableStructs[battler].stickyWebDone) - && (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_STICKY_WEB) - && IsBattlerAffectedByHazards(battler, FALSE) - && IsBattlerGrounded(battler)) +} + +static bool32 DoSwitchInEffectsForBattler(u32 battler) +{ + u32 i = 0; + u32 side = GetBattlerSide(battler); + // Neutralizing Gas announces itself before hazards + if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, battler, 0, 0, 0)) { - gDisableStructs[battler].stickyWebDone = TRUE; - gBattleScripting.battler = battler; - SET_STATCHANGER(STAT_SPEED, 1, TRUE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_StickyWebOnSwitchIn; + return TRUE; } - else if (!(gDisableStructs[battler].steelSurgeDone) - && (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_STEELSURGE) - && IsBattlerAffectedByHazards(battler, FALSE) - && GetBattlerAbility(battler) != ABILITY_MAGIC_GUARD) + // Healing Wish and Lunar Dance activate before hazards. + // Starting from Gen8 - it heals only pokemon which can be healed. + // In Gen5-7 the effect activates anyways. + else if ((gBattleStruct->battlerState[battler].storedHealingWish) + && (GetConfig(CONFIG_HEALING_WISH_SWITCH) < GEN_8 + || gBattleMons[battler].hp != gBattleMons[battler].maxHP + || gBattleMons[battler].status1 != 0)) { - gDisableStructs[battler].steelSurgeDone = TRUE; - gBattleStruct->moveDamage[battler] = GetStealthHazardDamage(TYPE_SIDE_HAZARD_SHARP_STEEL, battler); - - if (gBattleStruct->moveDamage[battler] != 0) - SetDmgHazardsBattlescript(battler, B_MSG_SHARPSTEELDMG); + gBattlerAttacker = battler; + BattleScriptCall(BattleScript_HealingWishActivates); + gBattleStruct->battlerState[battler].storedHealingWish = FALSE; + } + else if ((gBattleStruct->battlerState[battler].storedLunarDance) + && (GetConfig(CONFIG_HEALING_WISH_SWITCH) < GEN_8 + || gBattleMons[battler].hp != gBattleMons[battler].maxHP + || gBattleMons[battler].status1 != 0 + || gBattleMons[battler].pp[0] < CalculatePPWithBonus(gBattleMons[battler].moves[0], gBattleMons[battler].ppBonuses, 0) + || gBattleMons[battler].pp[1] < CalculatePPWithBonus(gBattleMons[battler].moves[1], gBattleMons[battler].ppBonuses, 1) + || gBattleMons[battler].pp[2] < CalculatePPWithBonus(gBattleMons[battler].moves[2], gBattleMons[battler].ppBonuses, 2) + || gBattleMons[battler].pp[3] < CalculatePPWithBonus(gBattleMons[battler].moves[3], gBattleMons[battler].ppBonuses, 3))) + { + gBattlerAttacker = battler; + BattleScriptCall(BattleScript_LunarDanceActivates); + gBattleStruct->battlerState[battler].storedLunarDance = FALSE; + } + else if (EmergencyExitCanBeTriggered(battler)) + { + gBattleScripting.battler = gBattlerAbility = battler; + gSpecialStatuses[battler].switchInItemDone = FALSE; + gBattleStruct->battlerState[battler].forcedSwitch = FALSE; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + BattleScriptCall(BattleScript_EmergencyExit); + else + BattleScriptCall(BattleScript_EmergencyExitWild); + } + else if (!gDisableStructs[battler].hazardsDone) + { + TryHazardsOnSwitchIn(battler, side, gBattleStruct->hazardsQueue[side][gBattleStruct->hazardsCounter]); + gBattleStruct->hazardsCounter++; + // Done once we reach the first element without any hazard type or the array is full + if (gBattleStruct->hazardsQueue[side][gBattleStruct->hazardsCounter] == HAZARDS_NONE + || gBattleStruct->hazardsCounter == HAZARDS_MAX_COUNT) + { + gDisableStructs[battler].hazardsDone = TRUE; + gBattleStruct->hazardsCounter = 0; + } } else if (gBattleMons[battler].hp != gBattleMons[battler].maxHP && gBattleStruct->zmove.healReplacement) { gBattleStruct->zmove.healReplacement = FALSE; - gBattleStruct->moveDamage[battler] = -1 * (gBattleMons[battler].maxHP); + SetHealAmount(battler, gBattleMons[battler].maxHP); gBattleScripting.battler = battler; - BattleScriptPushCursor(); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_HP_TRAP; - gBattlescriptCurrInstr = BattleScript_HealReplacementZMove; - return TRUE; + BattleScriptCall(BattleScript_HealReplacementZMove); } else { - u32 battlerAbility = GetBattlerAbility(battler); + enum Ability battlerAbility = GetBattlerAbility(battler); // There is a hack here to ensure the truant counter will be 0 when the battler's next turn starts. // The truant counter is not updated in the case where a mon switches in after a lost judgment in the battle arena. if (battlerAbility == ABILITY_TRUANT @@ -8345,9 +8010,10 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) gDisableStructs[battler].truantSwitchInHack = 0; - if (DoSwitchInAbilities(battler) || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, battler, FALSE)) + if (DoSwitchInAbilities(battler)) return TRUE; - else if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0)) + + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnSwitchInActivation)) return TRUE; for (i = 0; i < gBattlersCount; i++) @@ -8355,29 +8021,42 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) if (i == battler) continue; - switch (GetBattlerAbility(i)) + enum Ability ability = GetBattlerAbility(i); + switch (ability) { case ABILITY_TRACE: case ABILITY_COMMANDER: - if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0)) + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, ability, 0, 0)) return TRUE; break; case ABILITY_FORECAST: case ABILITY_FLOWER_GIFT: case ABILITY_PROTOSYNTHESIS: - if (AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, i, 0, 0, 0)) + if (AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, i, ability, 0, 0)) return TRUE; break; + default: + break; } if (TryClearIllusion(i, ABILITYEFFECT_ON_SWITCHIN)) return TRUE; } - gDisableStructs[battler].stickyWebDone = FALSE; - gDisableStructs[battler].spikesDone = FALSE; - gDisableStructs[battler].toxicSpikesDone = FALSE; - gDisableStructs[battler].stealthRockDone = FALSE; - gDisableStructs[battler].steelSurgeDone = FALSE; + for (i = 0; i < gBattlersCount; i++) + { + if (ItemBattleEffects(i, 0, GetBattlerHoldEffect(i), IsWhiteHerbActivation)) + return TRUE; + } + for (i = 0; i < gBattlersCount; i++) + { + if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, i, GetBattlerAbility(i), 0, 0)) + return TRUE; + } + for (i = 0; i < gBattlersCount; i++) + { + if (ItemBattleEffects(i, 0, GetBattlerHoldEffect(i), IsMirrorHerbActivation)) + return TRUE; + } for (i = 0; i < gBattlersCount; i++) { @@ -8387,7 +8066,9 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp; } + gSpecialStatuses[battler].switchInItemDone = FALSE; gBattleStruct->battlerState[battler].forcedSwitch = FALSE; + gBattleStruct->battlerState[battler].wasAboveHalfHp = FALSE; return FALSE; } @@ -8438,6 +8119,8 @@ static void Cmd_switchineffects(void) return; } } + if (TrySwitchInEjectPack(OTHER)) + return; // All battlers done, end for (i = 0; i < gBattlersCount; i++) gBattleStruct->battlerState[i].multipleSwitchInBattlers = FALSE; @@ -8448,7 +8131,7 @@ static void Cmd_switchineffects(void) break; default: UpdateSentMonFlags(battler); - if (!DoSwitchInEffectsForBattler(battler)) + if (!DoSwitchInEffectsForBattler(battler) && !TrySwitchInEjectPack(OTHER)) gBattlescriptCurrInstr = cmd->nextInstr; break; } @@ -8568,7 +8251,7 @@ static void Cmd_handlelearnnewmove(void) u32 battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); if (gBattlerPartyIndexes[battler] == monId - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + && !(gBattleMons[battler].volatiles.transformed)) { GiveMoveToBattleMon(&gBattleMons[battler], learnMove); } @@ -8576,7 +8259,7 @@ static void Cmd_handlelearnnewmove(void) { battler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); if (gBattlerPartyIndexes[battler] == monId - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + && !(gBattleMons[battler].volatiles.transformed)) { GiveMoveToBattleMon(&gBattleMons[battler], learnMove); } @@ -8659,7 +8342,7 @@ static void Cmd_yesnoboxlearnmove(void) else { u16 move = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MOVE1 + movePosition); - if (IsMoveHM(move)) + if (CannotForgetMove(move)) { PrepareStringBattle(STRINGID_HMMOVESCANTBEFORGOTTEN, B_POSITION_PLAYER_LEFT); gBattleScripting.learnMoveState = 6; @@ -8751,6 +8434,7 @@ static void Cmd_yesnoboxstoplearningmove(void) } } +// TODO: passive damage hit anim for sub static void Cmd_hitanimation(void) { CMD_ARGS(u8 battler); @@ -8761,7 +8445,7 @@ static void Cmd_hitanimation(void) if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)) { - if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) + if (gBattleStruct->passiveHpUpdate[battler] > 0 || !(DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove)) || gDisableStructs[battler].substituteHP == 0) { @@ -8776,11 +8460,10 @@ static void Cmd_hitanimation(void) for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { if (gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT - || gBattleStruct->noResultString[battlerDef]) + || gBattleStruct->noResultString[battlerDef] != CAN_DAMAGE) continue; - if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) - || !(DoesSubstituteBlockMove(gBattlerAttacker, battlerDef, gCurrentMove)) + if (!(DoesSubstituteBlockMove(gBattlerAttacker, battlerDef, gCurrentMove)) || gDisableStructs[battlerDef].substituteHP == 0) { BtlController_EmitHitAnimation(battlerDef, B_COMM_TO_CONTROLLER); @@ -8965,9 +8648,9 @@ static void Cmd_hidepartystatussummary(void) static void ResetValuesForCalledMove(void) { if (gBattlerByTurnOrder[gCurrentTurnActionNumber] != gBattlerAttacker) - gBattleStruct->atkCancellerTracker = 0; + gBattleStruct->eventState.atkCanceler = 0; else - SetAtkCancellerForCalledMove(); + gBattleStruct->eventState.atkCanceler = CANCELER_VOLATILE_BLOCKED; gBattleScripting.animTurn = 0; gBattleScripting.animTargetsHit = 0; SetTypeBeforeUsingMove(gCurrentMove, gBattlerAttacker); @@ -8991,58 +8674,29 @@ static void Cmd_jumptocalledmove(void) static void Cmd_statusanimation(void) { - CMD_ARGS(u8 battler); + CMD_ARGS(u8 battler, u32 status, bool8 isVolatile); if (gBattleControllerExecFlags == 0) { - u32 battler = GetBattlerForBattleScript(cmd->battler); - if (!(gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE) + u32 battler = GetBattlerForBattleScript(cmd->battler), + statusFlag = (cmd->isVolatile || cmd->status) ? cmd->status : gBattleMons[battler].status1; + if (!IsSemiInvulnerable(battler, CHECK_ALL) && gDisableStructs[battler].substituteHP == 0 && !(gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION))) { - BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, FALSE, gBattleMons[battler].status1); + BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, cmd->isVolatile, statusFlag); MarkBattlerForControllerExec(battler); } gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_status2animation(void) +static void Cmd_unused_0x65(void) { - CMD_ARGS(u8 battler, u32 status2); - - if (gBattleControllerExecFlags == 0) - { - u32 battler = GetBattlerForBattleScript(cmd->battler); - u32 status2ToAnim = cmd->status2; - if (!(gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE) - && gDisableStructs[battler].substituteHP == 0 - && !(gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION))) - { - BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, TRUE, gBattleMons[battler].status2 & status2ToAnim); - MarkBattlerForControllerExec(battler); - } - gBattlescriptCurrInstr = cmd->nextInstr; - } } -static void Cmd_chosenstatusanimation(void) +static void Cmd_unused_0x66(void) { - CMD_ARGS(u8 battler, bool8 isStatus2, u32 status); - - if (gBattleControllerExecFlags == 0) - { - u32 battler = GetBattlerForBattleScript(cmd->battler); - u32 wantedStatus = cmd->status; - if (!(gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE) - && gDisableStructs[battler].substituteHP == 0 - && !(gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION))) - { - BtlController_EmitStatusAnimation(battler, B_COMM_TO_CONTROLLER, cmd->isStatus2, wantedStatus); - MarkBattlerForControllerExec(battler); - } - gBattlescriptCurrInstr = cmd->nextInstr; - } } static void Cmd_yesnobox(void) @@ -9113,7 +8767,7 @@ static void Cmd_setgravity(void) else { gFieldStatuses |= STATUS_FIELD_GRAVITY; - gFieldTimers.gravityTimer = gBattleTurnCounter + 5; + gFieldTimers.gravityTimer = 5; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -9122,17 +8776,12 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) { if (GetItemPocket(itemId) == POCKET_BERRIES && GetBattlerAbility(battler) == ABILITY_CHEEK_POUCH - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) - && gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].ateBerry + && !gBattleMons[battler].volatiles.healBlock + && GetBattlerPartyState(battler)->ateBerry && !IsBattlerAtMaxHp(battler)) { - gBattleStruct->cheekPouchActivated = TRUE; - gBattleStruct->savedcheekPouchDamage = gBattleStruct->moveDamage[battler]; - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 3; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; gBattlerAbility = battler; + SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / 3); BattleScriptPush(gBattlescriptCurrInstr + 2); gBattlescriptCurrInstr = BattleScript_CheekPouchActivates; return TRUE; @@ -9140,16 +8789,6 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) return FALSE; } -// When Cheek Pouch activates mid-battle it overwrites the current damage, so restore it -static void TryRestoreDamageAfterCheekPouch(u32 battler) -{ - if (gBattleStruct->cheekPouchActivated) - { - gBattleStruct->moveDamage[battler] = gBattleStruct->savedcheekPouchDamage; - gBattleStruct->cheekPouchActivated = FALSE; - } -} - // Used by Bestow and Symbiosis to take an item from one battler and give to another. static void BestowItem(u32 battlerAtk, u32 battlerDef) { @@ -9167,21 +8806,25 @@ static void BestowItem(u32 battlerAtk, u32 battlerDef) } // Called by Cmd_removeitem. itemId represents the item that was removed, not being given. -static bool32 TrySymbiosis(u32 battler, u32 itemId) +static bool32 TrySymbiosis(u32 battler, u32 itemId, bool32 moveEnd) { if (!gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].stolen && gBattleStruct->changedItems[battler] == ITEM_NONE - && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_BUTTON - && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_EJECT_PACK - && (B_SYMBIOSIS_GEMS < GEN_7 || !(gSpecialStatuses[battler].gemBoost)) - && gCurrentMove != MOVE_FLING //Fling and damage-reducing berries are handled separately. + && GetBattlerHoldEffect(battler) != HOLD_EFFECT_EJECT_BUTTON + && GetBattlerHoldEffect(battler) != HOLD_EFFECT_EJECT_PACK + && (GetConfig(CONFIG_SYMBIOSIS_GEMS) < GEN_7 || !(gSpecialStatuses[battler].gemBoost)) + && GetMoveEffect(gCurrentMove) != EFFECT_FLING //Fling and damage-reducing berries are handled separately. && !gSpecialStatuses[battler].berryReduced && TryTriggerSymbiosis(battler, BATTLE_PARTNER(battler))) { BestowItem(BATTLE_PARTNER(battler), battler); gLastUsedAbility = gBattleMons[BATTLE_PARTNER(battler)].ability; + gEffectBattler = battler; gBattleScripting.battler = gBattlerAbility = BATTLE_PARTNER(battler); - BattleScriptPush(gBattlescriptCurrInstr + 2); + if (moveEnd) + BattleScriptPushCursor(); + else + BattleScriptPush(gBattlescriptCurrInstr + 2); gBattlescriptCurrInstr = BattleScript_SymbiosisActivates; return TRUE; } @@ -9207,9 +8850,9 @@ static void Cmd_removeitem(void) // Popped Air Balloon cannot be restored by any means. // Corroded items cannot be restored either. - if (GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_AIR_BALLOON - && GetMoveEffect(gCurrentMove) != EFFECT_CORROSIVE_GAS) - gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)] = itemId; // Remember if switched out + if (GetBattlerHoldEffect(battler) != HOLD_EFFECT_AIR_BALLOON + && GetMoveEffect(gCurrentMove) != EFFECT_CORROSIVE_GAS) + GetBattlerPartyState(battler)->usedHeldItem = itemId; // Remember if switched out gBattleMons[battler].item = ITEM_NONE; gBattleStruct->battlerState[battler].canPickupItem = TRUE; @@ -9219,7 +8862,7 @@ static void Cmd_removeitem(void) MarkBattlerForControllerExec(battler); ClearBattlerItemEffectHistory(battler); - if (!TryCheekPouch(battler, itemId) && !TrySymbiosis(battler, itemId)) + if (!TryCheekPouch(battler, itemId) && !TrySymbiosis(battler, itemId, FALSE)) gBattlescriptCurrInstr = cmd->nextInstr; } @@ -9636,18 +9279,18 @@ static void Cmd_useitemonopponent(void) bool32 CanUseLastResort(u8 battler) { - u32 i; - u32 knownMovesCount = 0, usedMovesCount = 0; - - for (i = 0; i < 4; i++) + u32 moveIndex; + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (gBattleMons[battler].moves[i] != MOVE_NONE) - knownMovesCount++; - if (i != gCurrMovePos && gDisableStructs[battler].usedMoves & (1u << i)) // Increment used move count for all moves except current Last Resort. - usedMovesCount++; + u32 move = gBattleMons[battler].moves[moveIndex]; + // Assumes that an empty slot cannot have a non-empty slot after it + if (move == MOVE_NONE) + break; + // If not Last Resort and has not been used, can't use Last Resort + if (GetMoveEffect(move) != EFFECT_LAST_RESORT && !(gDisableStructs[battler].usedMoves & (1u << moveIndex))) + return FALSE; } - - return (knownMovesCount >= 2 && usedMovesCount >= knownMovesCount - 1); + return moveIndex >= 2; // At least two usable moves that are either Last Resort or have been used } static void RemoveAllWeather(void) @@ -9708,8 +9351,7 @@ static void RemoveAllTerrains(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);\ *sideStatuses &= ~status; \ sideTimer->structField = 0; \ - BattleScriptPushCursor(); \ - gBattlescriptCurrInstr = battlescript; \ + BattleScriptCall(battlescript); \ } \ else \ { \ @@ -9719,6 +9361,32 @@ static void RemoveAllTerrains(void) } \ } +static bool32 DefogClearHazards(u32 saveBattler, u32 side, bool32 clear) +{ + if (!AreAnyHazardsOnSide(side)) + return FALSE; + + for (u32 hazardType = HAZARDS_NONE + 1; hazardType < HAZARDS_MAX_COUNT; hazardType++) + { + bool32 checkOrClear = clear ? IsHazardOnSideAndClear(side, hazardType) : IsHazardOnSide(side, hazardType); + if (checkOrClear) + { + if (clear) + { + gBattleStruct->numHazards[side]--; + gBattleCommunication[MULTISTRING_CHOOSER] = hazardType; + BattleScriptCall(BattleScript_DefogClearHazards); + } + else + { + gBattlerAttacker = saveBattler; + } + return TRUE; + } + } + return FALSE; +} + static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) { s32 i; @@ -9738,27 +9406,28 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) DEFOG_CLEAR(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, BattleScript_SideStatusWoreOffReturn, MOVE_AURORA_VEIL); DEFOG_CLEAR(SIDE_STATUS_SAFEGUARD, safeguardTimer, BattleScript_SideStatusWoreOffReturn, MOVE_SAFEGUARD); } - if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + if (GetConfig(CONFIG_DEFOG_EFFECT_CLEARING) >= GEN_6) { gBattlerAttacker = i; // For correct battle string. Ally's / Foe's - DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STEELSURGE, steelsurgeAmount, BattleScript_SteelsurgeDefog, 0); + if (DefogClearHazards(saveBattler, i, clear)) + return TRUE; } if (gBattleWeather & B_WEATHER_FOG) { - gBattleWeather &= ~B_WEATHER_FOG; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_FogEnded_Ret; + if (clear) + { + gBattleWeather &= ~B_WEATHER_FOG; + BattleScriptCall(BattleScript_FogEnded_Ret); + } return TRUE; } - if (B_DEFOG_EFFECT_CLEARING >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + if (GetConfig(CONFIG_DEFOG_EFFECT_CLEARING) >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) { - RemoveAllTerrains(); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TerrainEnds_Ret; + if (clear) + { + RemoveAllTerrains(); + BattleScriptCall(BattleScript_TerrainEnds_Ret); + } return TRUE; } } @@ -9775,27 +9444,21 @@ static bool32 TryTidyUpClear(u32 battlerAtk, bool32 clear) for (i = 0; i < NUM_BATTLE_SIDES; i++) { - struct SideTimer *sideTimer = &gSideTimers[i]; - u32 *sideStatuses = &gSideStatuses[i]; - gBattlerAttacker = i; // For correct battle string. Ally's / Foe's - DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebDefog, 0); + if (DefogClearHazards(saveBattler, i, clear)) + return TRUE; } for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (gBattleMons[i].status2 & STATUS2_SUBSTITUTE) + if (gBattleMons[i].volatiles.substitute) { if (clear) { gBattlerTarget = i; gDisableStructs[i].substituteHP = 0; - gBattleMons[i].status2 &= ~STATUS2_SUBSTITUTE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SubstituteFade; + gBattleMons[i].volatiles.substitute = FALSE; + BattleScriptCall(BattleScript_SubstituteFade); } gBattlerAttacker = saveBattler; return TRUE; @@ -9814,7 +9477,7 @@ u32 IsFlowerVeilProtected(u32 battler) return 0; } -u32 IsLeafGuardProtected(u32 battler, u32 ability) +u32 IsLeafGuardProtected(u32 battler, enum Ability ability) { if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) return ability == ABILITY_LEAF_GUARD; @@ -9822,54 +9485,35 @@ u32 IsLeafGuardProtected(u32 battler, u32 ability) return 0; } -bool32 IsShieldsDownProtected(u32 battler, u32 ability) +bool32 IsShieldsDownProtected(u32 battler, enum Ability ability) { return (ability == ABILITY_SHIELDS_DOWN && GetFormIdFromFormSpeciesId(gBattleMons[battler].species) < GetFormIdFromFormSpeciesId(SPECIES_MINIOR_CORE_RED)); // Minior is not in core form } -u32 IsAbilityStatusProtected(u32 battler, u32 ability) +u32 IsAbilityStatusProtected(u32 battler, enum Ability ability) { return IsLeafGuardProtected(battler, ability) || IsShieldsDownProtected(battler, ability) || IsFlowerVeilProtected(battler); } -u32 GetHighestStatId(u32 battler) -{ - u32 i, highestId = STAT_ATK, highestStat = gBattleMons[battler].attack; - - for (i = STAT_DEF; i < NUM_STATS; i++) - { - u16 *statVal = &gBattleMons[battler].attack + (i - 1); - if (*statVal > highestStat && i != STAT_SPEED) - { - highestStat = *statVal; - highestId = i; - } - } - if (gBattleMons[battler].speed > highestStat) - highestId = STAT_SPEED; - - return highestId; -} - static bool32 IsRototillerAffected(u32 battler) { if (!IsBattlerAlive(battler)) return FALSE; - if (!IsBattlerGrounded(battler)) + if (!IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler))) return FALSE; // Only grounded battlers affected if (!IS_BATTLER_OF_TYPE(battler, TYPE_GRASS)) return FALSE; // Only grass types affected - if (gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE) + if (IsSemiInvulnerable(battler, CHECK_ALL)) return FALSE; // Rototiller doesn't affected semi-invulnerable battlers if (BlocksPrankster(MOVE_ROTOTILLER, gBattlerAttacker, battler, FALSE)) return FALSE; return TRUE; } -static bool32 IsElectricAbilityAffected(u32 battler, u32 ability) +static bool32 IsElectricAbilityAffected(u32 battler, enum Ability ability) { u32 moveType; @@ -9881,7 +9525,7 @@ static bool32 IsElectricAbilityAffected(u32 battler, u32 ability) moveType = GetMoveType(gCurrentMove); if (moveType == TYPE_ELECTRIC - && (ability != ABILITY_LIGHTNING_ROD || B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) + && (ability != ABILITY_LIGHTNING_ROD || GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5) && GetBattlerAbility(battler) == ability) return TRUE; else @@ -9892,7 +9536,7 @@ static bool32 IsTeatimeAffected(u32 battler) { if (GetItemPocket(gBattleMons[battler].item) != POCKET_BERRIES) return FALSE; // Only berries - if (gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE) + if (IsSemiInvulnerable(battler, CHECK_ALL)) return FALSE; // Teatime doesn't affected semi-invulnerable battlers return TRUE; } @@ -9935,17 +9579,23 @@ void BS_CourtChangeSwapSideStatuses(void) COURTCHANGE_SWAP(SIDE_STATUS_TAILWIND, tailwindTimer, temp); // Lucky Chant doesn't exist in gen 8, but seems like it should be affected by Court Change COURTCHANGE_SWAP(SIDE_STATUS_LUCKY_CHANT, luckyChantTimer, temp); - COURTCHANGE_SWAP(SIDE_STATUS_SPIKES, spikesAmount, temp); - COURTCHANGE_SWAP(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, temp); - COURTCHANGE_SWAP(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, temp); - COURTCHANGE_SWAP(SIDE_STATUS_STICKY_WEB, stickyWebAmount, temp); - COURTCHANGE_SWAP(SIDE_STATUS_STEELSURGE, steelsurgeAmount, temp); COURTCHANGE_SWAP(SIDE_STATUS_DAMAGE_NON_TYPES, damageNonTypesTimer, temp); // Track Pledge effect side COURTCHANGE_SWAP(SIDE_STATUS_RAINBOW, rainbowTimer, temp); COURTCHANGE_SWAP(SIDE_STATUS_SEA_OF_FIRE, seaOfFireTimer, temp); COURTCHANGE_SWAP(SIDE_STATUS_SWAMP, swampTimer, temp); + // Hazards + u32 tempQueue[HAZARDS_MAX_COUNT] = {HAZARDS_NONE}; + for (u32 i = 0; i < HAZARDS_MAX_COUNT; i++) + tempQueue[i] = gBattleStruct->hazardsQueue[B_SIDE_PLAYER][i]; + for (u32 i = 0; i < HAZARDS_MAX_COUNT; i++) + gBattleStruct->hazardsQueue[B_SIDE_PLAYER][i] = gBattleStruct->hazardsQueue[B_SIDE_OPPONENT][i]; + for (u32 i = 0; i < HAZARDS_MAX_COUNT; i++) + gBattleStruct->hazardsQueue[B_SIDE_OPPONENT][i] = tempQueue[i]; + SWAP(sideTimerPlayer->spikesAmount, sideTimerOpp->spikesAmount, temp); + SWAP(sideTimerPlayer->toxicSpikesAmount, sideTimerOpp->toxicSpikesAmount, temp); + // Change battler IDs of swapped effects. Needed for the correct string when they expire UPDATE_COURTCHANGED_BATTLER(stickyWebBattlerId); @@ -9999,25 +9649,27 @@ static bool32 ChangeOrderTargetAfterAttacker(void) u32 i; u8 data[MAX_BATTLERS_COUNT]; u8 actionsData[MAX_BATTLERS_COUNT]; + u32 attackerTurnOrderNum = GetBattlerTurnOrderNum(gBattlerAttacker); + u32 targetTurnOrderNum = GetBattlerTurnOrderNum(gBattlerTarget); - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) + if (attackerTurnOrderNum > targetTurnOrderNum) return FALSE; - if (GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) - return B_AFTER_YOU_TURN_ORDER >= GEN_8; + if (attackerTurnOrderNum + 1 == targetTurnOrderNum) + return GetConfig(CONFIG_AFTER_YOU_TURN_ORDER) >= GEN_8; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { data[i] = gBattlerByTurnOrder[i]; actionsData[i] = gActionsByTurnOrder[i]; } - if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 2) + if (attackerTurnOrderNum == 0 && targetTurnOrderNum == 2) { gBattlerByTurnOrder[1] = gBattlerTarget; gActionsByTurnOrder[1] = actionsData[2]; gBattlerByTurnOrder[2] = data[1]; gActionsByTurnOrder[2] = actionsData[1]; } - else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3) + else if (attackerTurnOrderNum == 0 && targetTurnOrderNum == 3) { gBattlerByTurnOrder[1] = gBattlerTarget; gActionsByTurnOrder[1] = actionsData[3]; @@ -10026,7 +9678,7 @@ static bool32 ChangeOrderTargetAfterAttacker(void) gBattlerByTurnOrder[3] = data[2]; gActionsByTurnOrder[3] = actionsData[2]; } - else // Attacker == 1, Target == 3 + else // attackerTurnOrderNum == 1, targetTurnOrderNum == 3 { gBattlerByTurnOrder[2] = gBattlerTarget; gActionsByTurnOrder[2] = actionsData[3]; @@ -10036,1963 +9688,1970 @@ static bool32 ChangeOrderTargetAfterAttacker(void) return TRUE; } -static void Cmd_various(void) +static void Cmd_unused_0x78(void) { - CMD_ARGS(u8 battler, u8 id); +} - struct Pokemon *mon; - s32 i; - u8 data[10]; - u32 battler, bits; - enum CmdVarious variousId = cmd->id; +static void TryResetProtectUseCounter(u32 battler) +{ + u32 lastMove = gLastResultingMoves[battler]; + enum BattleMoveEffects lastEffect = GetMoveEffect(lastMove); + if (lastMove == MOVE_UNAVAILABLE + || (!gBattleMoveEffects[lastEffect].usesProtectCounter + && ((GetConfig(CONFIG_ALLY_SWITCH_FAIL_CHANCE) >= GEN_9 && lastEffect != EFFECT_ALLY_SWITCH) + || GetConfig(CONFIG_ALLY_SWITCH_FAIL_CHANCE) < GEN_9))) + gDisableStructs[battler].protectUses = 0; +} - if (gBattleControllerExecFlags) - return; +static void Cmd_setprotectlike(void) +{ + CMD_ARGS(); - battler = GetBattlerForBattleScript(cmd->battler); + bool32 protectFails = TRUE; + bool32 notLastTurn = TRUE; + u32 protectMethod = GetMoveProtectMethod(gCurrentMove); - switch (variousId) - { - // Roar will fail in a double wild battle when used by the player against one of the two alive wild mons. - // Also when an opposing wild mon uses it againt its partner. - // Also when B_FLAG_NO_RUNNING is enabled. - case VARIOUS_JUMP_IF_ROAR_FAILS: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (WILD_DOUBLE_BATTLE - && IsOnPlayerSide(gBattlerAttacker) - && !IsOnPlayerSide(gBattlerTarget) - && IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else if (WILD_DOUBLE_BATTLE - && !IsOnPlayerSide(gBattlerAttacker) - && !IsOnPlayerSide(gBattlerTarget)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else if (FlagGet(B_FLAG_NO_RUNNING)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_JUMP_IF_ABSENT: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (!IsBattlerAlive(battler)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED: + TryResetProtectUseCounter(gBattlerAttacker); + + if (IsLastMonToMove(gBattlerAttacker)) + notLastTurn = FALSE; + + if ((sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] >= RandomUniform(RNG_PROTECT_FAIL, 0, USHRT_MAX) && notLastTurn) + || (protectMethod == PROTECT_WIDE_GUARD && GetConfig(CONFIG_WIDE_GUARD) >= GEN_6) + || (protectMethod == PROTECT_QUICK_GUARD && GetConfig(CONFIG_QUICK_GUARD) >= GEN_6)) { - VARIOUS_ARGS(const u8 *jumpInstr); - if (IsShieldsDownProtected(battler, GetBattlerAbility(battler))) - { - gBattlerAbility = battler; - gBattlescriptCurrInstr = cmd->jumpInstr; - } - else + if (GetMoveEffect(gCurrentMove) == EFFECT_ENDURE) { - gBattlescriptCurrInstr = cmd->nextInstr; + gDisableStructs[gBattlerAttacker].endured = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BRACED_ITSELF; } - return; - } - case VARIOUS_JUMP_IF_HOLD_EFFECT: - { - VARIOUS_ARGS(u8 holdEffect, const u8 *jumpInstr, u8 equal); - if ((GetBattlerHoldEffect(battler, TRUE) == cmd->holdEffect) == cmd->equal) + else if (GetProtectType(protectMethod) == PROTECT_TYPE_SIDE) { - if (cmd->equal) - gLastUsedItem = gBattleMons[battler].item; // For B_LAST_USED_ITEM - gBattlescriptCurrInstr = cmd->jumpInstr; + gProtectStructs[gBattlerAttacker].protected = protectMethod; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM; } else { - if (!cmd->equal) - gLastUsedItem = gBattleMons[battler].item; // For B_LAST_USED_ITEM - gBattlescriptCurrInstr = cmd->nextInstr; + gProtectStructs[gBattlerAttacker].protected = protectMethod; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; } - return; - } - case VARIOUS_JUMP_IF_NO_ALLY: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (!IsBattlerAlive(BATTLE_PARTNER(battler))) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_INFATUATE_WITH_BATTLER: - { - VARIOUS_ARGS(u8 infatuateWith); - gBattleScripting.battler = battler; - gBattleMons[battler].status2 |= STATUS2_INFATUATED_WITH(GetBattlerForBattleScript(cmd->infatuateWith)); - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_SET_LAST_USED_ITEM: - { - VARIOUS_ARGS(); - gLastUsedItem = gBattleMons[battler].item; - break; + + gDisableStructs[gBattlerAttacker].protectUses++; + protectFails = FALSE; } - case VARIOUS_TRY_FAIRY_LOCK: + + if (protectFails) { - VARIOUS_ARGS(const u8 *failInstr); - if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gFieldStatuses |= STATUS_FIELD_FAIRY_LOCK; - gFieldTimers.fairyLockTimer = gBattleTurnCounter + 2; - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; + gDisableStructs[gBattlerAttacker].protectUses = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECT_FAILED; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleStruct->battlerState[gBattlerAttacker].stompingTantrumTimer = 2; } - case VARIOUS_GET_STAT_VALUE: - { - VARIOUS_ARGS(u8 stat); - i = cmd->stat; - gBattleStruct->moveDamage[gBattlerAttacker] = *(u16 *)(&gBattleMons[battler].attack) + (i - 1); - gBattleStruct->moveDamage[gBattlerAttacker] *= gStatStageRatios[gBattleMons[battler].statStages[i]][0]; - gBattleStruct->moveDamage[gBattlerAttacker] /= gStatStageRatios[gBattleMons[battler].statStages[i]][1]; - gBattlescriptCurrInstr = cmd->nextInstr; + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_tryexplosion(void) +{ + CMD_ARGS(); + + if (gBattleControllerExecFlags) return; - } - case VARIOUS_JUMP_IF_FULL_HP: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (IsBattlerAtMaxHp(battler)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp; + BtlController_EmitHealthBarUpdate(gBattlerAttacker, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_setatkhptozero(void) +{ + CMD_ARGS(); + + if (gBattleControllerExecFlags) return; - } - case VARIOUS_TRY_FRISK: - { - VARIOUS_ARGS(); - while (gBattleStruct->friskedBattler < gBattlersCount) - { - gBattlerTarget = gBattleStruct->friskedBattler++; - if (!IsBattlerAlly(battler, gBattlerTarget) - && IsBattlerAlive(gBattlerTarget) - && gBattleMons[gBattlerTarget].item != ITEM_NONE) - { - gLastUsedItem = gBattleMons[gBattlerTarget].item; - RecordItemEffectBattle(gBattlerTarget, GetBattlerHoldEffect(gBattlerTarget, FALSE)); - BattleScriptPushCursor(); - // If Frisk identifies two mons' items, show the pop-up only once. - if (gBattleStruct->friskedAbility) - { - gBattlescriptCurrInstr = BattleScript_FriskMsg; - } - else - { - gBattleStruct->friskedAbility = TRUE; - gBattlescriptCurrInstr = BattleScript_FriskMsgWithPopup; - } - return; - } - } - gBattleStruct->friskedBattler = 0; - gBattleStruct->friskedAbility = FALSE; - break; - } - case VARIOUS_TRACE_ABILITY: - { - VARIOUS_ARGS(); - gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = gBattleStruct->tracedAbility[battler]; - break; - } - case VARIOUS_TRY_ILLUSION_OFF: + + gBattleMons[gBattlerAttacker].hp = 0; + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].hp), &gBattleMons[gBattlerAttacker].hp); + MarkBattlerForControllerExec(gBattlerAttacker); + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_jumpifnexttargetvalid(void) +{ + CMD_ARGS(const u8 *jumpInstr); + + const u8 *jumpInstr = cmd->jumpInstr; + + for (gBattlerTarget++; gBattlerTarget < gBattlersCount; gBattlerTarget++) { - VARIOUS_ARGS(); - if (TryClearIllusion(battler, ABILITYEFFECT_MOVE_END)) - return; - break; + if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) + continue; + if (IsBattlerAlive(gBattlerTarget)) + break; } - case VARIOUS_SET_SPRITEIGNORE0HP: + + if (gBattlerTarget >= gBattlersCount) { - VARIOUS_ARGS(bool8 ignore0HP); - gBattleStruct->spriteIgnore0Hp = cmd->ignore0HP; + gBattlerTarget = gBattlersCount - 1; gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_UPDATE_NICK: - { - VARIOUS_ARGS(); - if (IsOnPlayerSide(battler)) - mon = GetBattlerMon(battler); - else - mon = GetBattlerMon(battler); - UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_NICK); - break; } - case VARIOUS_JUMP_IF_NOT_BERRY: + else { - VARIOUS_ARGS(const u8 *jumpInstr); - if (GetItemPocket(gBattleMons[battler].item) == POCKET_BERRIES) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->jumpInstr; - return; + gBattlescriptCurrInstr = jumpInstr; } - case VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS: - { - VARIOUS_ARGS(const u8 *failInstr); - if ((gStatuses3[battler] & (STATUS3_SEMI_INVULNERABLE | STATUS3_HEAL_BLOCK)) - || IsBattlerAtMaxHp(battler) - || !gBattleMons[battler].hp - || !(IsBattlerGrounded(battler))) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; +} - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; - } - case VARIOUS_GRAVITY_ON_AIRBORNE_MONS: - { - VARIOUS_ARGS(); - // Cancel all multiturn moves of IN_AIR Pokemon except those being targeted by Sky Drop. - if (gStatuses3[battler] & STATUS3_ON_AIR && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) - CancelMultiTurnMoves(battler, SKY_DROP_GRAVITY_ON_AIRBORNE); +static void Cmd_tryhealhalfhealth(void) +{ + CMD_ARGS(u8 battler, const u8 *failInstr); - gStatuses3[battler] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR | STATUS3_SKY_DROPPED); - break; - } - case VARIOUS_SET_POWDER: - { - VARIOUS_ARGS(); - gBattleMons[battler].status2 |= STATUS2_POWDER; - break; - } - case VARIOUS_ACUPRESSURE: - { - VARIOUS_ARGS(const u8 *failInstr); - bits = 0; - for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) - { - if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN)) - bits |= 1u << i; - } - if (bits) - { - u32 statId; - do - { - statId = (Random() % (NUM_BATTLE_STATS - 1)) + 1; - } while (!(bits & (1u << statId))); + const u8 *failInstr = cmd->failInstr; - SET_STATCHANGER(statId, 2, FALSE); - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } + if (cmd->battler == BS_ATTACKER) + gBattlerTarget = gBattlerAttacker; + + SetHealAmount(gBattlerTarget, GetNonDynamaxMaxHP(gBattlerTarget) / 2); + if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) + gBattlescriptCurrInstr = failInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_unused_0x7e(void) +{ +} + +static void Cmd_setfieldweather(void) +{ + CMD_ARGS(u8 weather); + + u8 battleWeatherId = cmd->weather; + + if (!TryChangeBattleWeather(gBattlerAttacker, battleWeatherId, ABILITY_NONE)) + { + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; + gBattlescriptCurrInstr = cmd->nextInstr; return; } - case VARIOUS_CANCEL_MULTI_TURN_MOVES: + + switch (battleWeatherId) { - VARIOUS_ARGS(); - const u8 *result; - result = CancelMultiTurnMoves(battler, SKY_DROP_CANCEL_MULTI_TURN_MOVES); - if (result) - { - gBattlescriptCurrInstr = result; - return; - } + case BATTLE_WEATHER_RAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN; break; - } - case VARIOUS_IS_RUNNING_IMPOSSIBLE: - { - VARIOUS_ARGS(); - gBattleCommunication[0] = IsRunningFromBattleImpossible(battler); + case BATTLE_WEATHER_SUN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT; break; - } - case VARIOUS_GET_MOVE_TARGET: - { - VARIOUS_ARGS(); - gBattlerTarget = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); + case BATTLE_WEATHER_SANDSTORM: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM; break; - } - case VARIOUS_GET_BATTLER_FAINTED: - { - VARIOUS_ARGS(); - if (gHitMarker & HITMARKER_FAINTED(battler)) - gBattleCommunication[0] = TRUE; - else - gBattleCommunication[0] = FALSE; + case BATTLE_WEATHER_HAIL: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL; break; - } - case VARIOUS_RESET_SWITCH_IN_ABILITY_BITS: - { - VARIOUS_ARGS(); - gSpecialStatuses[battler].switchInAbilityDone = FALSE; + case BATTLE_WEATHER_SNOW: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW; break; } - case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP: - { - VARIOUS_ARGS(); - if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) - { - if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId) - battler = 0; - else - battler = 2; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[battler].moves[i] == gBattleStruct->choicedMove[battler]) - break; - } - if (i == MAX_MON_MOVES) - gBattleStruct->choicedMove[battler] = MOVE_NONE; - } - break; - } - case VARIOUS_RESET_PLAYER_FAINTED: - { - VARIOUS_ARGS(); - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE)) - && gBattleTypeFlags & BATTLE_TYPE_TRAINER - && IsBattlerAlive(B_POSITION_PLAYER_LEFT) - && IsBattlerAlive(B_POSITION_OPPONENT_LEFT)) - { - gHitMarker &= ~HITMARKER_PLAYER_FAINTED; - } - break; - } - case VARIOUS_PALACE_FLAVOR_TEXT: + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_setreflect(void) +{ + CMD_ARGS(); + if (!TrySetReflect(gBattlerAttacker)) { - VARIOUS_ARGS(); - // Try and print end-of-turn Battle Palace flavor text (e.g. "A glint appears in mon's eyes") - gBattleCommunication[0] = FALSE; // whether or not msg should be printed - gBattleScripting.battler = battler = gBattleCommunication[1]; - if (!(gBattleStruct->palaceFlags & (1u << battler)) - && gBattleMons[battler].maxHP / 2 >= gBattleMons[battler].hp - && IsBattlerAlive(battler) - && !(gBattleMons[battler].status1 & STATUS1_SLEEP)) - { - gBattleStruct->palaceFlags |= 1u << battler; - gBattleCommunication[0] = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = gNaturesInfo[GetNatureFromPersonality(gBattleMons[battler].personality)].battlePalaceFlavorText; - } - break; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SIDE_STATUS_FAILED; } - case VARIOUS_ARENA_JUDGMENT_WINDOW: - { - VARIOUS_ARGS(); - i = BattleArena_ShowJudgmentWindow(&gBattleCommunication[0]); + gBattlescriptCurrInstr = cmd->nextInstr; +} - // BattleArena_ShowJudgmentWindow's last state was an intermediate step. - // Return without advancing the current instruction so that it will be called again. - if (i == ARENA_RESULT_RUNNING) - return; +static void Cmd_setseeded(void) +{ + CMD_ARGS(); - gBattleCommunication[1] = i; - break; - } - case VARIOUS_ARENA_OPPONENT_MON_LOST: + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || gBattleMons[gBattlerTarget].volatiles.leechSeed) { - VARIOUS_ARGS(); - gBattleMons[1].hp = 0; - gHitMarker |= HITMARKER_FAINTED(1); - gBattleStruct->arenaLostOpponentMons |= 1u << gBattlerPartyIndexes[1]; - gDisableStructs[1].truantSwitchInHack = 1; - break; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_MISS; } - case VARIOUS_ARENA_PLAYER_MON_LOST: + else if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS)) { - VARIOUS_ARGS(); - gBattleMons[0].hp = 0; - gHitMarker |= HITMARKER_FAINTED(0); - gHitMarker |= HITMARKER_PLAYER_FAINTED; - gBattleStruct->arenaLostPlayerMons |= 1u << gBattlerPartyIndexes[0]; - gDisableStructs[0].truantSwitchInHack = 1; - break; - } - case VARIOUS_ARENA_BOTH_MONS_LOST: - { - VARIOUS_ARGS(); - gBattleMons[0].hp = 0; - gBattleMons[1].hp = 0; - gHitMarker |= HITMARKER_FAINTED(0); - gHitMarker |= HITMARKER_FAINTED(1); - gHitMarker |= HITMARKER_PLAYER_FAINTED; - gBattleStruct->arenaLostPlayerMons |= 1u << gBattlerPartyIndexes[0]; - gBattleStruct->arenaLostOpponentMons |= 1u << gBattlerPartyIndexes[1]; - gDisableStructs[0].truantSwitchInHack = 1; - gDisableStructs[1].truantSwitchInHack = 1; - break; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_FAIL; } - case VARIOUS_EMIT_YESNOBOX: + else { - VARIOUS_ARGS(); - BtlController_EmitYesNoBox(battler, B_COMM_TO_CONTROLLER); - MarkBattlerForControllerExec(battler); - break; + gBattleMons[gBattlerTarget].volatiles.leechSeed = LEECHSEEDED_BY(gBattlerAttacker); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_SET; } - case VARIOUS_DRAW_ARENA_REF_TEXT_BOX: + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +// TODO: Needs tests for everything +static void Cmd_manipulatedamage(void) +{ + CMD_ARGS(u8 mode); + + switch (cmd->mode) { - VARIOUS_ARGS(); - DrawArenaRefereeTextBox(); + case DMG_CHANGE_SIGN: + gBattleStruct->passiveHpUpdate[gBattlerAttacker] *= -1; break; - } - case VARIOUS_ERASE_ARENA_REF_TEXT_BOX: - { - VARIOUS_ARGS(); - EraseArenaRefereeTextBox(); + case DMG_1_8_TARGET_HP: + SetPassiveDamageAmount(gBattlerTarget, GetNonDynamaxMaxHP(gBattlerTarget) / 8); break; - } - case VARIOUS_ARENA_JUDGMENT_STRING: - { - CMD_ARGS(u8 id, u8 _); - BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[cmd->id]); - BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGMENT_TEXT); + case DMG_FULL_ATTACKER_HP: + gBattleStruct->passiveHpUpdate[gBattlerTarget] = GetNonDynamaxMaxHP(gBattlerAttacker); break; - } - case VARIOUS_ARENA_WAIT_STRING: - { - VARIOUS_ARGS(); - if (IsTextPrinterActive(ARENA_WIN_JUDGMENT_TEXT)) - return; + case DMG_BIG_ROOT: + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = -1 * GetDrainedBigRootHp(gBattlerAttacker, gBattleStruct->passiveHpUpdate[gBattlerAttacker]); break; } - case VARIOUS_WAIT_CRY: + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_trysetrest(void) +{ + CMD_ARGS(); + + gBattlerTarget = gBattlerAttacker; + SetHealAmount(gBattlerTarget, gBattleMons[gBattlerTarget].maxHP); + enum Ability ability = GetBattlerAbility(gBattlerTarget); + enum HoldEffect holdEffect = GetBattlerHoldEffect(gBattlerTarget); + + if (IsBattlerTerrainAffected(gBattlerTarget, ability, holdEffect, STATUS_FIELD_ELECTRIC_TERRAIN)) { - VARIOUS_ARGS(); - if (!IsCryFinished()) - return; - break; + gBattlescriptCurrInstr = BattleScript_ElectricTerrainPrevents; } - case VARIOUS_RETURN_OPPONENT_MON1: + else if (IsBattlerTerrainAffected(gBattlerTarget, ability, holdEffect, STATUS_FIELD_MISTY_TERRAIN)) { - VARIOUS_ARGS(); - battler = 1; - if (IsBattlerAlive(battler)) - { - BtlController_EmitReturnMonToBall(battler, B_COMM_TO_CONTROLLER, FALSE); - MarkBattlerForControllerExec(battler); - } - break; + gBattlescriptCurrInstr = BattleScript_MistyTerrainPrevents; } - case VARIOUS_RETURN_OPPONENT_MON2: + else { - VARIOUS_ARGS(); - if (gBattlersCount > 3) - { - battler = 3; - if (IsBattlerAlive(battler)) - { - BtlController_EmitReturnMonToBall(battler, B_COMM_TO_CONTROLLER, FALSE); - MarkBattlerForControllerExec(battler); - } - } - break; + if (gBattleMons[gBattlerTarget].status1 & ((u8)(~STATUS1_SLEEP))) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_REST_STATUSED; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_REST; + + gBattleMons[gBattlerTarget].status1 = STATUS1_SLEEP_TURN(3); + BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gBattlerTarget); + gBattlescriptCurrInstr = cmd->nextInstr; } - case VARIOUS_VOLUME_DOWN: +} + +static void Cmd_unused_0x82(void) +{ +} + +static void Cmd_unused_0x83(void) +{ +} + +bool8 UproarWakeUpCheck(u8 battler) +{ + s32 i; + bool32 hasSoundproof = (B_UPROAR_IGNORE_SOUNDPROOF < GEN_5 && GetBattlerAbility(battler) == ABILITY_SOUNDPROOF); + + for (i = 0; i < gBattlersCount; i++) { - VARIOUS_ARGS(); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x55); + if (!(gBattleMons[i].volatiles.uproarTurns) || hasSoundproof) + continue; + + gBattleScripting.battler = i; + + if (gBattlerTarget == 0xFF) + gBattlerTarget = i; + else if (gBattlerTarget == i) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_SLEEP_UPROAR; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_KEPT_AWAKE; + break; } - case VARIOUS_VOLUME_UP: + + if (i == gBattlersCount) + return FALSE; + else + return TRUE; +} + +static void Cmd_jumpifuproarwakes(void) +{ + CMD_ARGS(const u8 *jumpInstr); + + if (UproarWakeUpCheck(gBattlerTarget)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_stockpile(void) +{ + CMD_ARGS(u8 id); + + switch (cmd->id) { - VARIOUS_ARGS(); - m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); + case 0: + gDisableStructs[gBattlerAttacker].stockpileCounter++; + gDisableStructs[gBattlerAttacker].stockpileBeforeDef = gBattleMons[gBattlerAttacker].statStages[STAT_DEF]; + gDisableStructs[gBattlerAttacker].stockpileBeforeSpDef = gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF]; + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gBattlerAttacker].stockpileCounter); break; - } - case VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT: - { - VARIOUS_ARGS(); - gBattleStruct->battlerState[battler].alreadyStatusedMoveAttempt = TRUE; + case 1: // Save def/sp def stats. + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) + { + gDisableStructs[gBattlerAttacker].stockpileDef += gBattleMons[gBattlerAttacker].statStages[STAT_DEF] - gDisableStructs[gBattlerAttacker].stockpileBeforeDef; + gDisableStructs[gBattlerAttacker].stockpileSpDef += gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] - gDisableStructs[gBattlerAttacker].stockpileBeforeSpDef; + } break; } - case VARIOUS_PALACE_TRY_ESCAPE_STATUS: + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_stockpiletobasedamage(void) +{ + CMD_ARGS(); + + if (gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED) + gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_stockpiletohpheal(void) +{ + CMD_ARGS(const u8 *failInstr); + + const u8 *failInstr = cmd->failInstr; + + if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp) { - VARIOUS_ARGS(); - if (BattlePalace_TryEscapeStatus(battler)) - return; - break; + gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + gBattlescriptCurrInstr = failInstr; + gBattlerTarget = gBattlerAttacker; } - case VARIOUS_SET_TELEPORT_OUTCOME: + else { - VARIOUS_ARGS(); - // Don't end the battle if one of the wild mons teleported from the wild double battle - // and its partner is still alive. - if (!IsOnPlayerSide(battler) && IsBattlerAlive(BATTLE_PARTNER(battler))) + if (gDisableStructs[gBattlerAttacker].stockpileCounter > 0) { - gAbsentBattlerFlags |= 1u << battler; - gHitMarker |= HITMARKER_FAINTED(battler); - gBattleMons[battler].hp = 0; - SetMonData(GetBattlerMon(battler), MON_DATA_HP, &gBattleMons[battler].hp); - SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]); - FaintClearSetData(battler); - } - else if (IsOnPlayerSide(battler)) - { - gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; + SetHealAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter))); + gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; } - else + else // Snatched move { - gBattleOutcome = B_OUTCOME_MON_TELEPORTED; + SetHealAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 4); + gBattleScripting.animTurn = 1; } - break; - } - case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC: - { - VARIOUS_ARGS(); - BtlController_EmitPlayFanfareOrBGM(battler, B_COMM_TO_CONTROLLER, MUS_VICTORY_TRAINER, TRUE); - MarkBattlerForControllerExec(battler); - break; - } - case VARIOUS_STAT_TEXT_BUFFER: - { - VARIOUS_ARGS(); - PREPARE_STAT_BUFFER(gBattleTextBuff1, gBattleCommunication[0]); - break; + + gBattlescriptCurrInstr = cmd->nextInstr; + gBattlerTarget = gBattlerAttacker; } - case VARIOUS_SWITCHIN_ABILITIES: +} + +void BS_RemoveStockpileCounters(void) +{ + NATIVE_ARGS(); + + if (GetMoveEffect(gCurrentMove) == EFFECT_SPIT_UP + && gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT + && IsBattlerAlive(gBattlerTarget)) { - VARIOUS_ARGS(); gBattlescriptCurrInstr = cmd->nextInstr; - AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, battler, 0, 0, 0); - AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battler, 0, 0, 0); - AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0); - return; } - case VARIOUS_INSTANT_HP_DROP: + else { - VARIOUS_ARGS(); - BtlController_EmitHealthBarUpdate(battler, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP); - MarkBattlerForControllerExec(battler); - break; + gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_MoveEffectStockpileWoreOff; } - case VARIOUS_CLEAR_STATUS: +} + +static void Cmd_unused_0x88(void) +{ +} + +static u16 ReverseStatChangeMoveEffect(u16 moveEffect) +{ + switch (moveEffect) { - VARIOUS_ARGS(); - gBattleMons[battler].status1 = 0; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - break; + // +1 + case MOVE_EFFECT_ATK_PLUS_1: + return MOVE_EFFECT_ATK_MINUS_1; + case MOVE_EFFECT_DEF_PLUS_1: + return MOVE_EFFECT_DEF_MINUS_1; + case MOVE_EFFECT_SPD_PLUS_1: + return MOVE_EFFECT_SPD_MINUS_1; + case MOVE_EFFECT_SP_ATK_PLUS_1: + return MOVE_EFFECT_SP_ATK_MINUS_1; + case MOVE_EFFECT_SP_DEF_PLUS_1: + return MOVE_EFFECT_SP_DEF_MINUS_1; + case MOVE_EFFECT_ACC_PLUS_1: + return MOVE_EFFECT_ACC_MINUS_1; + case MOVE_EFFECT_EVS_PLUS_1: + return MOVE_EFFECT_EVS_MINUS_1; + // -1 + case MOVE_EFFECT_ATK_MINUS_1: + return MOVE_EFFECT_ATK_PLUS_1; + case MOVE_EFFECT_DEF_MINUS_1: + return MOVE_EFFECT_DEF_PLUS_1; + case MOVE_EFFECT_SPD_MINUS_1: + return MOVE_EFFECT_SPD_PLUS_1; + case MOVE_EFFECT_SP_ATK_MINUS_1: + return MOVE_EFFECT_SP_ATK_PLUS_1; + case MOVE_EFFECT_SP_DEF_MINUS_1: + return MOVE_EFFECT_SP_DEF_PLUS_1; + case MOVE_EFFECT_ACC_MINUS_1: + return MOVE_EFFECT_ACC_PLUS_1; + case MOVE_EFFECT_EVS_MINUS_1: + // +2 + case MOVE_EFFECT_ATK_PLUS_2: + return MOVE_EFFECT_ATK_MINUS_2; + case MOVE_EFFECT_DEF_PLUS_2: + return MOVE_EFFECT_DEF_MINUS_2; + case MOVE_EFFECT_SPD_PLUS_2: + return MOVE_EFFECT_SPD_MINUS_2; + case MOVE_EFFECT_SP_ATK_PLUS_2: + return MOVE_EFFECT_SP_ATK_MINUS_2; + case MOVE_EFFECT_SP_DEF_PLUS_2: + return MOVE_EFFECT_SP_DEF_MINUS_2; + case MOVE_EFFECT_ACC_PLUS_2: + return MOVE_EFFECT_ACC_MINUS_2; + case MOVE_EFFECT_EVS_PLUS_2: + return MOVE_EFFECT_EVS_MINUS_2; + // -2 + case MOVE_EFFECT_ATK_MINUS_2: + return MOVE_EFFECT_ATK_PLUS_2; + case MOVE_EFFECT_DEF_MINUS_2: + return MOVE_EFFECT_DEF_PLUS_2; + case MOVE_EFFECT_SPD_MINUS_2: + return MOVE_EFFECT_SPD_PLUS_2; + case MOVE_EFFECT_SP_ATK_MINUS_2: + return MOVE_EFFECT_SP_ATK_PLUS_2; + case MOVE_EFFECT_SP_DEF_MINUS_2: + return MOVE_EFFECT_SP_DEF_PLUS_2; + case MOVE_EFFECT_ACC_MINUS_2: + return MOVE_EFFECT_ACC_PLUS_2; + case MOVE_EFFECT_EVS_MINUS_2: + return MOVE_EFFECT_EVS_PLUS_2; + default: + return 0; } - case VARIOUS_RESTORE_PP: +} + +static void TryPlayStatChangeAnimation(u32 battler, enum Ability ability, u32 stats, s32 statValue, u32 statId, bool32 certain) +{ + enum Stat currStat = 0; + u32 changeableStatsCount = 1; // current stat is counted automatically + u32 statAnimId = statId; + bool32 statChangeByTwo = statValue > 1 || statValue < -1; + + if (statValue <= -1) // goes down { - VARIOUS_ARGS(); - for (i = 0; i < 4; i++) + if (statChangeByTwo) + statAnimId += STAT_ANIM_MINUS2; + else + statAnimId += STAT_ANIM_MINUS1; + + while (stats != 0) { - gBattleMons[battler].pp[i] = CalculatePPWithBonus(gBattleMons[battler].moves[i], gBattleMons[battler].ppBonuses, i); - data[i] = gBattleMons[battler].pp[i]; + if (stats & 1) + { + if (certain) + { + if (gBattleMons[battler].statStages[currStat] > MIN_STAT_STAGE) + { + changeableStatsCount++; + break; + } + } + else if (!((ability == ABILITY_KEEN_EYE || ability == ABILITY_MINDS_EYE) && currStat == STAT_ACC) + && !(GetConfig(CONFIG_ILLUMINATE_EFFECT) >= GEN_9 && ability == ABILITY_ILLUMINATE && currStat == STAT_ACC) + && !(ability == ABILITY_HYPER_CUTTER && currStat == STAT_ATK) + && !(ability == ABILITY_BIG_PECKS && currStat == STAT_DEF)) + { + if (gBattleMons[battler].statStages[currStat] > MIN_STAT_STAGE) + { + changeableStatsCount++; + break; + } + } + } + stats >>= 1, currStat++; } - data[i] = gBattleMons[battler].ppBonuses; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_PP_DATA_BATTLE, 0, 5, data); - MarkBattlerForControllerExec(battler); - break; - } - case VARIOUS_TRY_ACTIVATE_RECEIVER: // Partner gets fainted's ally ability - { - VARIOUS_ARGS(); - gBattlerAbility = BATTLE_PARTNER(battler); - i = GetBattlerAbility(gBattlerAbility); - if (IsBattlerAlive(gBattlerAbility) - && (i == ABILITY_RECEIVER || i == ABILITY_POWER_OF_ALCHEMY) - && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD - && !gAbilitiesInfo[gBattleMons[battler].ability].cantBeCopied) + + if (changeableStatsCount > 1) // more than one stat, so the color is gray { - gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[battler].ability; // re-using the variable for trace - gBattleScripting.battler = battler; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_ReceiverActivates; - return; + if (statChangeByTwo) + statAnimId = STAT_ANIM_MULTIPLE_MINUS2; + else + statAnimId = STAT_ANIM_MULTIPLE_MINUS1; } - break; } - case VARIOUS_TRY_ACTIVATE_SOULHEART: + else // goes up { - VARIOUS_ARGS(); - while (gBattleStruct->soulheartBattlerId < gBattlersCount) + if (statChangeByTwo) + statAnimId += STAT_ANIM_PLUS2; + else + statAnimId += STAT_ANIM_PLUS1; + + while (stats != 0) { - gBattleScripting.battler = gBattleStruct->soulheartBattlerId++; - if (GetBattlerAbility(gBattleScripting.battler) == ABILITY_SOUL_HEART - && IsBattlerAlive(gBattleScripting.battler) - && !NoAliveMonsForEitherParty() - && CompareStat(gBattleScripting.battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (stats & 1 && gBattleMons[battler].statStages[currStat] < MAX_STAT_STAGE) { - SET_STATCHANGER(STAT_SPATK, 1, FALSE); - PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ScriptingAbilityStatRaise; - return; + changeableStatsCount++; + break; } + stats >>= 1, currStat++; + } + + if (changeableStatsCount > 1) // more than one stat, so the color is gray + { + if (statChangeByTwo) + statAnimId = STAT_ANIM_MULTIPLE_PLUS2; + else + statAnimId = STAT_ANIM_MULTIPLE_PLUS1; } - gBattleStruct->soulheartBattlerId = 0; - break; } - case VARIOUS_PLAY_MOVE_ANIMATION: + + if (!gBattleScripting.statAnimPlayed) { - VARIOUS_ARGS(u16 move); - BtlController_EmitMoveAnimation(battler, B_COMM_TO_CONTROLLER, cmd->move, gBattleScripting.animTurn, 0, 0, gBattleMons[battler].friendship, &gDisableStructs[battler], gMultiHitCounter); + BtlController_EmitBattleAnimation(battler, B_COMM_TO_CONTROLLER, B_ANIM_STATS_CHANGE, &gDisableStructs[battler], statAnimId); MarkBattlerForControllerExec(battler); - gBattlescriptCurrInstr = cmd->nextInstr; - return; + if (changeableStatsCount > 1) + gBattleScripting.statAnimPlayed = TRUE; } - case VARIOUS_SET_LUCKY_CHANT: + else if (changeableStatsCount == 1) // final stat that can be changed { - VARIOUS_ARGS(const u8 *failInstr); - if (!(gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_LUCKY_CHANT)) - { - gSideStatuses[GetBattlerSide(battler)] |= SIDE_STATUS_LUCKY_CHANT; - gSideTimers[GetBattlerSide(battler)].luckyChantTimer = gBattleTurnCounter + 5; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } - return; - } - case VARIOUS_SUCKER_PUNCH_CHECK: - { - VARIOUS_ARGS(const u8 *failInstr); - if (gProtectStructs[gBattlerTarget].protected == PROTECT_OBSTRUCT) - gBattlescriptCurrInstr = cmd->failInstr; - else if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - gBattlescriptCurrInstr = cmd->failInstr; - else if (IsBattleMoveStatus(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]]) && !gProtectStructs[gBattlerTarget].noValidMoves) - gBattlescriptCurrInstr = cmd->failInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; + gBattleScripting.statAnimPlayed = FALSE; } - case VARIOUS_SET_SIMPLE_BEAM: +} + +static u32 ChangeStatBuffs(u32 battler, s8 statValue, enum Stat statId, union StatChangeFlags flags, u32 stats, const u8 *BS_ptr) +{ + u32 index, battlerAbility; + enum HoldEffect battlerHoldEffect; + battlerAbility = GetBattlerAbility(battler); + battlerHoldEffect = GetBattlerHoldEffect(battler); + gSpecialStatuses[battler].changedStatsBattlerId = gBattlerAttacker; + + if (battlerAbility == ABILITY_CONTRARY) { - VARIOUS_ARGS(const u8 *failInstr); - if (gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeOverwritten - || gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE) - { - RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) - { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = cmd->failInstr; - } - else + statValue ^= STAT_BUFF_NEGATIVE; + if (!flags.onlyChecking) { - if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS) - gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; - - gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability; - gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = ABILITY_SIMPLE; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattleScripting.statChanger ^= STAT_BUFF_NEGATIVE; + RecordAbilityBattle(battler, battlerAbility); + if (flags.updateMoveEffect) + gBattleScripting.moveEffect = ReverseStatChangeMoveEffect(gBattleScripting.moveEffect); } - return; } - case VARIOUS_TRY_ENTRAINMENT: + else if (battlerAbility == ABILITY_SIMPLE && !flags.onlyChecking) + { + statValue = (SET_STAT_BUFF_VALUE(GET_STAT_BUFF_VALUE(statValue) * 2)) | ((statValue <= -1) ? STAT_BUFF_NEGATIVE : 0); + RecordAbilityBattle(battler, battlerAbility); + } + + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); + + if (statValue <= -1) // Stat decrease. { - VARIOUS_ARGS(const u8 *failInstr); - if (gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeCopied - || gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeOverwritten) + if (gSideTimers[GetBattlerSide(battler)].mistTimer + && !flags.certain && gCurrentMove != MOVE_CURSE + && !(battler == gBattlerTarget && GetBattlerAbility(gBattlerAttacker) == ABILITY_INFILTRATOR)) { - RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); - gBattlescriptCurrInstr = cmd->failInstr; + if (flags.allowPtr) + { + if (gSpecialStatuses[battler].statLowered) + { + gBattlescriptCurrInstr = BS_ptr; + } + else + { + BattleScriptPush(BS_ptr); + gBattleScripting.battler = battler; + gBattlescriptCurrInstr = BattleScript_MistProtected; + gSpecialStatuses[battler].statLowered = TRUE; + } + } + return STAT_CHANGE_DIDNT_WORK; } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + else if (gCurrentMove != MOVE_CURSE + && !flags.notProtectAffected && JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE, BattleScript_ButItFailed)) { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = cmd->failInstr; + return STAT_CHANGE_DIDNT_WORK; } - else + else if ((battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET || CanAbilityPreventStatLoss(battlerAbility)) + && (flags.statDropPrevention || gBattlerAttacker != gBattlerTarget || flags.mirrorArmored) && !flags.certain && gCurrentMove != MOVE_CURSE) { - if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability - || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) + if (flags.allowPtr) { - gBattlescriptCurrInstr = cmd->failInstr; + if (gSpecialStatuses[battler].statLowered) + { + gBattlescriptCurrInstr = BS_ptr; + } + else + { + gBattleScripting.battler = battler; + if (battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET) + { + gLastUsedItem = gBattleMons[battler].item; + BattleScriptPush(BS_ptr); + gBattlescriptCurrInstr = BattleScript_ItemNoStatLoss; + RecordItemEffectBattle(battler, HOLD_EFFECT_CLEAR_AMULET); + } + else + { + gBattlerAbility = battler; + BattleScriptPush(BS_ptr); + gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; + gLastUsedAbility = battlerAbility; + RecordAbilityBattle(battler, gLastUsedAbility); + } + gSpecialStatuses[battler].statLowered = TRUE; + } } - else + return STAT_CHANGE_DIDNT_WORK; + } + else if ((index = IsFlowerVeilProtected(battler)) && !flags.certain) + { + if (flags.allowPtr) { - gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = gBattleMons[gBattlerAttacker].ability; - gBattlescriptCurrInstr = cmd->nextInstr; + if (gSpecialStatuses[battler].statLowered) + { + gBattlescriptCurrInstr = BS_ptr; + } + else + { + BattleScriptPush(BS_ptr); + gBattleScripting.battler = battler; + gBattlerAbility = index - 1; + gBattlescriptCurrInstr = BattleScript_FlowerVeilProtectsRet; + gLastUsedAbility = ABILITY_FLOWER_VEIL; + gSpecialStatuses[battler].statLowered = TRUE; + } } + return STAT_CHANGE_DIDNT_WORK; } - return; - } - case VARIOUS_SET_LAST_USED_ABILITY: - { - VARIOUS_ARGS(); - gLastUsedAbility = gBattleMons[battler].ability; - break; - } - case VARIOUS_INVERT_STAT_STAGES: - { - VARIOUS_ARGS(); - for (i = 0; i < NUM_BATTLE_STATS; i++) + else if (!flags.certain + && (((battlerAbility == ABILITY_KEEN_EYE || battlerAbility == ABILITY_MINDS_EYE) && statId == STAT_ACC) + || (GetConfig(CONFIG_ILLUMINATE_EFFECT) >= GEN_9 && battlerAbility == ABILITY_ILLUMINATE && statId == STAT_ACC) + || (battlerAbility == ABILITY_HYPER_CUTTER && statId == STAT_ATK) + || (battlerAbility == ABILITY_BIG_PECKS && statId == STAT_DEF))) { - if (gBattleMons[battler].statStages[i] < DEFAULT_STAT_STAGE) // Negative becomes positive. - gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE + (DEFAULT_STAT_STAGE - gBattleMons[battler].statStages[i]); - else if (gBattleMons[battler].statStages[i] > DEFAULT_STAT_STAGE) // Positive becomes negative. - gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE - (gBattleMons[battler].statStages[i] - DEFAULT_STAT_STAGE); + if (flags.allowPtr) + { + BattleScriptPush(BS_ptr); + gBattleScripting.battler = battler; + gBattlerAbility = battler; + gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; + gLastUsedAbility = battlerAbility; + RecordAbilityBattle(battler, gLastUsedAbility); + } + return STAT_CHANGE_DIDNT_WORK; } - break; - } - case VARIOUS_TRY_ME_FIRST: - { - VARIOUS_ARGS(const u8 *failInstr); - u16 move = gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]]; - if (IsBattleMoveStatus(move) || IsMoveMeFirstBanned(move) - || GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - gBattlescriptCurrInstr = cmd->failInstr; - else + else if (battlerAbility == ABILITY_MIRROR_ARMOR && !flags.mirrorArmored && gBattlerAttacker != gBattlerTarget && battler == gBattlerTarget) + { + if (flags.allowPtr) + { + SET_STATCHANGER(statId, GET_STAT_BUFF_VALUE(statValue) | STAT_BUFF_NEGATIVE, TRUE); + BattleScriptPush(BS_ptr); + gBattleScripting.battler = battler; + gBattlerAbility = battler; + gBattlescriptCurrInstr = BattleScript_MirrorArmorReflect; + RecordAbilityBattle(battler, gBattleMons[battler].ability); + } + return STAT_CHANGE_DIDNT_WORK; + } + else // try to decrease { - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IsBattleMoveStatus(move)) + statValue = -GET_STAT_BUFF_VALUE(statValue); + if (gBattleMons[battler].statStages[statId] == 1) + statValue = -1; + else if (gBattleMons[battler].statStages[statId] == 2 && statValue < -2) + statValue = -2; + + if (statValue == -2) + { + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATHARSHLY); + } + else if (statValue <= -3) { - gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move; - gCalledMove = GetTypeBasedZMove(move); + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_SEVERELY); } else { - gCalledMove = move; + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_EMPTYSTRING3); + } + + gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == battler); // B_MSG_ATTACKER_STAT_CHANGED or B_MSG_DEFENDER_STAT_CHANGED + + if (gBattleMons[battler].statStages[statId] == MIN_STAT_STAGE) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_WONT_CHANGE; + gBattleScripting.statChanger |= STAT_BUFF_NEGATIVE; + } + else if (!flags.onlyChecking) + { + gDisableStructs[battler].tryEjectPack = TRUE; + gProtectStructs[battler].lashOutAffected = TRUE; + gBattleScripting.statChanger |= STAT_BUFF_NEGATIVE; } - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gBattlerTarget = GetBattleMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; - } - case VARIOUS_JUMP_IF_BATTLE_END: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (NoAliveMonsForEitherParty()) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_TRY_ELECTRIFY: - { - VARIOUS_ARGS(const u8 *failInstr); - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gStatuses4[gBattlerTarget] |= STATUS4_ELECTRIFIED; - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; - } - case VARIOUS_TRY_SOAK: - { - VARIOUS_ARGS(const u8 *failInstr); - u32 types[3]; - GetBattlerTypes(gBattlerTarget, FALSE, types); - u32 moveType = GetMoveType(gCurrentMove); - if ((types[0] == moveType && types[1] == moveType) - || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - SET_BATTLER_TYPE(gBattlerTarget, moveType); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - gBattlescriptCurrInstr = cmd->nextInstr; } - return; } - case VARIOUS_HANDLE_FORM_CHANGE: + else // stat increase { - VARIOUS_ARGS(u8 case_); - mon = GetBattlerMon(battler); + statValue = GET_STAT_BUFF_VALUE(statValue); + if (gBattleMons[battler].statStages[statId] == 11) + statValue = 1; + else if (gBattleMons[battler].statStages[statId] == 10 && statValue > 2) + statValue = 2; - // Change species. - if (cmd->case_ == 0) - { - /* What was the idea here? - if (!gBattleTextBuff1) - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battler].species); - */ - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); - MarkBattlerForControllerExec(battler); - } - // Change stats. - else if (cmd->case_ == 1) - { - RecalcBattlerStats(battler, mon, FALSE); - } - // Update healthbox. - else + if (statValue == 2) { - UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_ALL); + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATSHARPLY); } - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_TRY_LAST_RESORT: - { - VARIOUS_ARGS(const u8 *failInstr); - if (CanUseLastResort(battler)) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->failInstr; - return; - } - case VARIOUS_TRY_AUTOTOMIZE: - { - VARIOUS_ARGS(const u8 *failInstr); - if (GetBattlerWeight(battler) > 1) + else if (statValue >= 3) { - gDisableStructs[battler].autotomizeCount++; - gBattlescriptCurrInstr = cmd->nextInstr; + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_DRASTICALLY); } else { - gBattlescriptCurrInstr = cmd->failInstr; + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_EMPTYSTRING3); } - return; - } - case VARIOUS_TRY_INSTRUCT: - { - VARIOUS_ARGS(const u8 *failInstr); - u16 move = gLastPrintedMoves[gBattlerTarget]; - if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || MoveHasAdditionalEffectSelf(move, MOVE_EFFECT_RECHARGE) - || IsMoveInstructBanned(move) - || gBattleMoveEffects[GetMoveEffect(move)].twoTurnEffect - || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) - || IsZMove(move) - || IsMaxMove(move)) + + gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == battler); // B_MSG_ATTACKER_STAT_CHANGED or B_MSG_DEFENDER_STAT_CHANGED + + if (gBattleMons[battler].statStages[statId] == MAX_STAT_STAGE) { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_WONT_CHANGE; + gBattleScripting.statChanger &= ~STAT_BUFF_NEGATIVE; } - else + else if (!flags.onlyChecking) { - gSpecialStatuses[gBattlerTarget].instructedChosenTarget = gBattleStruct->moveTarget[gBattlerTarget] | 0x4; - gCalledMove = move; - for (i = 0; i < MAX_MON_MOVES; i++) + u32 statIncrease; + if ((statValue + gBattleMons[battler].statStages[statId]) > MAX_STAT_STAGE) + statIncrease = MAX_STAT_STAGE - gBattleMons[battler].statStages[statId]; + else + statIncrease = statValue; + + gProtectStructs[battler].statRaised = TRUE; + gBattleScripting.statChanger &= ~STAT_BUFF_NEGATIVE; + + if (statIncrease) { - if (gBattleMons[gBattlerTarget].moves[i] == gCalledMove) + // Check Mirror Herb / Opportunist + for (index = 0; index < gBattlersCount; index++) { - gCurrMovePos = i; - i = 4; - break; + if (IsBattlerAlly(index, battler)) + continue; // Only triggers on opposing side + + if (GetBattlerAbility(index) == ABILITY_OPPORTUNIST + && gProtectStructs[battler].activateOpportunist == 0) // don't activate opportunist on other mon's opportunist raises + { + gProtectStructs[index].activateOpportunist = 2; // set stats to copy + } + if (GetBattlerHoldEffect(index) == HOLD_EFFECT_MIRROR_HERB) + { + gProtectStructs[index].eatMirrorHerb = 1; + } + + if (gProtectStructs[index].activateOpportunist == 2 || gProtectStructs[index].eatMirrorHerb == 1) + { + gQueuedStatBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk + gQueuedStatBoosts[index].statChanges[statId - 1] += statIncrease; + } } } - if (i != 4 || gBattleMons[gBattlerTarget].pp[gCurrMovePos] == 0) - gBattlescriptCurrInstr = cmd->failInstr; - else - { - gEffectBattler = gBattleStruct->lastMoveTarget[gBattlerTarget]; - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, battler, gBattlerPartyIndexes[battler]); - gBattlescriptCurrInstr = cmd->nextInstr; - } } - return; } - case VARIOUS_ABILITY_POPUP: - { - VARIOUS_ARGS(); - CreateAbilityPopUp(battler, gBattleMons[battler].ability, (IsDoubleBattle()) != 0); - break; - } - case VARIOUS_UPDATE_ABILITY_POPUP: - { - VARIOUS_ARGS(); - UpdateAbilityPopup(battler); - break; - } - case VARIOUS_JUMP_IF_TARGET_ALLY: + + if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_CHANGE) // at max or min { - VARIOUS_ARGS(const u8 *jumpInstr); - if (!IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->jumpInstr; - return; + if (!flags.allowPtr) + return STAT_CHANGE_DIDNT_WORK; + return STAT_CHANGE_WORKED; } - case VARIOUS_TRY_SYNCHRONOISE: - { - VARIOUS_ARGS(const u8 *failInstr); - if (!DoBattlersShareType(gBattlerAttacker, gBattlerTarget)) - gBattlescriptCurrInstr = cmd->failInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_LOSE_TYPE: - { - VARIOUS_ARGS(u8 type); - RemoveBattlerType(battler, cmd->type); + + if (flags.onlyChecking) + return STAT_CHANGE_WORKED; + + gBattleMons[battler].statStages[statId] += statValue; + if (gBattleMons[battler].statStages[statId] < MIN_STAT_STAGE) + gBattleMons[battler].statStages[statId] = MIN_STAT_STAGE; + if (gBattleMons[battler].statStages[statId] > MAX_STAT_STAGE) + gBattleMons[battler].statStages[statId] = MAX_STAT_STAGE; + + if (ShouldDefiantCompetitiveActivate(battler, battlerAbility)) + stats = 0; // use single stat animations when Defiant/Competitive activate + else + stats &= ~(1u << statId); + + TryPlayStatChangeAnimation(battler, battlerAbility, stats, statValue, statId, flags.certain); + + return STAT_CHANGE_WORKED; +} + +static void Cmd_statbuffchange(void) +{ + CMD_ARGS(u8 battler, u16 flags, const u8 *failInstr, u8 stats); + + u16 flags = cmd->flags; + u32 stats = cmd->stats; + const u8 *ptrBefore = gBattlescriptCurrInstr; + const u8 *failInstr = cmd->failInstr; + + if (ChangeStatBuffs( + GetBattlerForBattleScript(cmd->battler), + GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), + GET_STAT_BUFF_ID(gBattleScripting.statChanger), + flags, + stats, + failInstr) == STAT_CHANGE_WORKED) gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_PSYCHO_SHIFT: - { - VARIOUS_ARGS(const u8 *failInstr, const u8 *sleepClauseFailInstr); - u32 targetAbility = GetBattlerAbility(gBattlerTarget); - // Psycho shift works - if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), targetAbility)) - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_TOXIC_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), targetAbility)) - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_BURN) && CanBeBurned(gBattlerAttacker, gBattlerTarget, targetAbility)) - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && CanBeParalyzed(gBattlerAttacker, gBattlerTarget, targetAbility)) - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) && CanBeSlept(gBattlerAttacker, gBattlerTarget, targetAbility, BLOCKED_BY_SLEEP_CLAUSE)) - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) && CanBeFrozen(gBattlerAttacker, gBattlerTarget, targetAbility)) - gBattleCommunication[MULTISTRING_CHOOSER] = 5; - else if (IsSleepClauseActiveForSide(GetBattlerSide(battler))) - { - gBattlescriptCurrInstr = cmd->sleepClauseFailInstr; - return; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - return; - } - gBattleMons[gBattlerTarget].status1 = gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY; - battler = gBattlerTarget; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - gBattlescriptCurrInstr = cmd->nextInstr; - TryActivateSleepClause(battler, gBattlerPartyIndexes[battler]); - return; - } - case VARIOUS_CURE_STATUS: - { - VARIOUS_ARGS(); + else if (gBattlescriptCurrInstr == ptrBefore) // Prevent infinite looping. + gBattlescriptCurrInstr = failInstr; +} - if (gBattleMons[battler].status1 & STATUS1_SLEEP) - TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); +bool32 TryResetBattlerStatChanges(u8 battler) +{ + u32 j; + bool32 ret = FALSE; - gBattleMons[battler].status1 = 0; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - break; - } - case VARIOUS_POWER_TRICK: + gDisableStructs[battler].stockpileDef = 0; + gDisableStructs[battler].stockpileSpDef = 0; + for (j = 0; j < NUM_BATTLE_STATS; j++) { - VARIOUS_ARGS(); - gStatuses3[battler] ^= STATUS3_POWER_TRICK; - SWAP(gBattleMons[battler].attack, gBattleMons[battler].defense, i); - break; + if (gBattleMons[battler].statStages[j] != DEFAULT_STAT_STAGE) + ret = TRUE; // returns TRUE if any stat was reset + + gBattleMons[battler].statStages[j] = DEFAULT_STAT_STAGE; } - case VARIOUS_AFTER_YOU: + + return ret; +} + +// Haze +static void Cmd_normalisebuffs(void) +{ + CMD_ARGS(); + + s32 i; + + for (i = 0; i < gBattlersCount; i++) + TryResetBattlerStatChanges(i); + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_setbide(void) +{ + CMD_ARGS(); + + gBattleMons[gBattlerAttacker].volatiles.multipleTurns = TRUE; + gLockedMoves[gBattlerAttacker] = gCurrentMove; + gBideDmg[gBattlerAttacker] = 0; + gBattleMons[gBattlerAttacker].volatiles.bideTurns = 2; + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_twoturnmoveschargestringandanimation(void) +{ + CMD_ARGS(const u8 *animationThenStringPtr); + + gBattleScripting.savedStringId = GetMoveTwoTurnAttackStringId(gCurrentMove); + if (B_UPDATED_MOVE_DATA < GEN_5 || MoveHasChargeTurnAdditionalEffect(gCurrentMove)) + gBattlescriptCurrInstr = cmd->animationThenStringPtr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_trynonvolatilestatus(void) +{ + CMD_ARGS(); + bool32 canInflictStatus = TRUE; + + if (!CanSetNonVolatileStatus( + gBattlerAttacker, + gBattlerTarget, + GetBattlerAbility(gBattlerAttacker), + GetBattlerAbility(gBattlerTarget), + GetMoveNonVolatileStatus(gCurrentMove), + RUN_SCRIPT)) + canInflictStatus = FALSE; + + if (canInflictStatus && DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) { - VARIOUS_ARGS(const u8 *failInstr); - if (ChangeOrderTargetAfterAttacker()) - { - gSpecialStatuses[gBattlerTarget].afterYou = 1; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } - return; + canInflictStatus = FALSE; + gBattlescriptCurrInstr = BattleScript_ButItFailed; } - case VARIOUS_BESTOW: + + if (canInflictStatus) + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_initmultihitstring(void) +{ + CMD_ARGS(); + + PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_forcerandomswitch(void) +{ + CMD_ARGS(const u8 *failInstr); + + s32 battler1PartyId = 0; + s32 battler2PartyId = 0; + + s32 firstMonId; + s32 lastMonId = 0; // + 1 + struct Pokemon *party = NULL; + u8 validMons[PARTY_SIZE]; + s32 validMonsCount = 0; + + bool32 redCardForcedSwitch = FALSE; + + // Red card checks against wild pokemon. If we have reached here, the player has a mon to switch into + // Red card swaps attacker with target to get the animation correct, so here we check attacker which is really the target. Thanks GF... + if (gBattleScripting.switchCase == B_SWITCH_RED_CARD + && !(gBattleTypeFlags & BATTLE_TYPE_TRAINER) + && !IsOnPlayerSide(gBattlerAttacker)) // Check opponent's red card activating { - VARIOUS_ARGS(const u8 *failInstr); - if (gBattleMons[gBattlerAttacker].item == ITEM_NONE - || gBattleMons[gBattlerTarget].item != ITEM_NONE - || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) - || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item) - || gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget])) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else + if (!WILD_DOUBLE_BATTLE) { - BestowItem(gBattlerAttacker, gBattlerTarget); - gBattlescriptCurrInstr = cmd->nextInstr; + // Wild mon with red card will end single battle + gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle; + return; } - return; - } - case VARIOUS_JUMP_IF_NOT_GROUNDED: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (!IsBattlerGrounded(battler)) - gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_HANDLE_TRAINER_SLIDE_MSG: - { - VARIOUS_ARGS(u8 case_); - if (cmd->case_ == PRINT_SLIDE_MESSAGE) - { - BtlController_EmitPrintString(battler, B_COMM_TO_CONTROLLER, STRINGID_TRAINERSLIDE); - MarkBattlerForControllerExec(battler); - } - else if (cmd->case_ == RESTORE_BATTLER_SLIDE_CONTROL) { - if (IsBattlerAlive(battler)) + // Wild double battle, wild mon red card activation on player + if (IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) { - SetBattlerShadowSpriteCallback(battler, gBattleMons[battler].species); - BattleLoadMonSpriteGfx(GetBattlerMon(battler), battler); + // Both player's battlers are alive + redCardForcedSwitch = FALSE; } - i = BATTLE_PARTNER(battler); - if (IsBattlerAlive(i)) + else { - SetBattlerShadowSpriteCallback(i, gBattleMons[i].species); - BattleLoadMonSpriteGfx(GetBattlerMon(i), i); + // Player has only one mon alive -> force red card switch before manually switching to other mon + redCardForcedSwitch = TRUE; } } - gBattlescriptCurrInstr = cmd->nextInstr; - return; } - case VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF: + + // Swapping pokemon happens in: + // trainer battles + // wild double battles when an opposing pokemon uses it against one of the two alive player mons + // wild double battle when a player pokemon uses it against its partner + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) + || (WILD_DOUBLE_BATTLE + && !IsOnPlayerSide(gBattlerAttacker) + && IsOnPlayerSide(gBattlerTarget) + && IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) + || (WILD_DOUBLE_BATTLE + && IsOnPlayerSide(gBattlerAttacker) + && IsOnPlayerSide(gBattlerTarget)) + || redCardForcedSwitch + ) { - VARIOUS_ARGS(); - if ((i = ShouldDoTrainerSlide(battler, TRAINER_SLIDE_PLAYER_LANDS_FIRST_DOWN))) + party = GetBattlerParty(gBattlerTarget); + + if (BATTLE_TWO_VS_ONE_OPPONENT && !IsOnPlayerSide(gBattlerTarget)) { - gBattleScripting.battler = battler; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = (i == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); - return; + firstMonId = 0; + lastMonId = 6; + battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; + battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } - break; - } - case VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON: - { - VARIOUS_ARGS(); - if ((i = ShouldDoTrainerSlide(battler, TRAINER_SLIDE_LAST_SWITCHIN))) + else if ((gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_LINK) + || (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) + || (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)) { - gBattleScripting.battler = battler; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = (i == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); - return; + if ((gBattlerTarget & BIT_FLANK) != B_FLANK_LEFT) + { + firstMonId = PARTY_SIZE / 2; + lastMonId = PARTY_SIZE; + } + else + { + firstMonId = 0; + lastMonId = PARTY_SIZE / 2; + } + battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; + battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } - break; - } - case VARIOUS_SET_AURORA_VEIL: - { - VARIOUS_ARGS(); - if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_AURORA_VEIL - || !(HasWeatherEffect() && gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))) + else if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) + || (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)) { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == B_FLANK_RIGHT) + { + firstMonId = PARTY_SIZE / 2; + lastMonId = PARTY_SIZE; + } + else + { + firstMonId = 0; + lastMonId = PARTY_SIZE / 2; + } + battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; + battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } - else + else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - gSideStatuses[GetBattlerSide(battler)] |= SIDE_STATUS_AURORA_VEIL; - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_LIGHT_CLAY) - gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = gBattleTurnCounter + 8; + if (IsOnPlayerSide(gBattlerTarget)) + { + firstMonId = 0; + lastMonId = PARTY_SIZE; + } else - gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = gBattleTurnCounter + 5; - - if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) - gBattleCommunication[MULTISTRING_CHOOSER] = 5; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 5; + { + if ((gBattlerTarget & BIT_FLANK) != B_FLANK_LEFT) + { + firstMonId = PARTY_SIZE / 2; + lastMonId = PARTY_SIZE; + } + else + { + firstMonId = 0; + lastMonId = PARTY_SIZE / 2; + } + } + battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; + battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } - break; - } - case VARIOUS_TRY_THIRD_TYPE: - { - VARIOUS_ARGS(const u8 *failInstr); - u32 type = GetMoveArgType(gCurrentMove); - if (IS_BATTLER_OF_TYPE(battler, type) || GetActiveGimmick(battler) == GIMMICK_TERA) + else if (IsDoubleBattle()) { - gBattlescriptCurrInstr = cmd->failInstr; + firstMonId = 0; + lastMonId = PARTY_SIZE; + battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; + battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } else { - gBattleMons[battler].types[2] = type; - PREPARE_TYPE_BUFFER(gBattleTextBuff1, type); - gBattlescriptCurrInstr = cmd->nextInstr; + firstMonId = 0; + lastMonId = PARTY_SIZE; + battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one PokΓ©mon out in single battles + battler1PartyId = gBattlerPartyIndexes[gBattlerTarget]; } - return; - } - case VARIOUS_DESTROY_ABILITY_POPUP: - { - VARIOUS_ARGS(); - DestroyAbilityPopUp(battler); - break; - } - case VARIOUS_TOTEM_BOOST: - { - VARIOUS_ARGS(const u8 *jumpInstr); - battler = gBattlerAttacker; - if (gQueuedStatBoosts[battler].stats == 0) + + for (u32 i = firstMonId; i < lastMonId; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[i], MON_DATA_IS_EGG) + && GetMonData(&party[i], MON_DATA_HP) != 0 + && i != battler1PartyId + && i != battler2PartyId) + { + validMons[validMonsCount++] = i; + } + } + + if (validMonsCount == 0) { - gBattlescriptCurrInstr = cmd->nextInstr; // stats done, exit + gBattlescriptCurrInstr = cmd->failInstr; } else { - for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) - { - if (gQueuedStatBoosts[battler].stats & (1 << i)) - { - if (gQueuedStatBoosts[battler].statChanges[i] <= -1) - SET_STATCHANGER(i + 1, abs(gQueuedStatBoosts[battler].statChanges[i]), TRUE); - else - SET_STATCHANGER(i + 1, gQueuedStatBoosts[battler].statChanges[i], FALSE); + gBattleStruct->battlerPartyIndexes[gBattlerTarget] = gBattlerPartyIndexes[gBattlerTarget]; + gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; + gBattleStruct->battlerState[gBattlerTarget].forcedSwitch = TRUE; + gBattleStruct->monToSwitchIntoId[gBattlerTarget] = validMons[RandomUniform(RNG_FORCE_RANDOM_SWITCH, 0, validMonsCount - 1)]; - gQueuedStatBoosts[battler].stats &= ~(1 << i); - gBattleScripting.battler = battler; - gBattlerTarget = battler; - if (gQueuedStatBoosts[battler].stats & 0x80) - { - gQueuedStatBoosts[battler].stats &= ~0x80; // set 'aura flared to life' flag - gBattlescriptCurrInstr = BattleScript_TotemFlaredToLife; - } - else - { - gBattlescriptCurrInstr = cmd->jumpInstr; // do boost - } - return; - } + if (!IsMultiBattle()) + SwitchPartyOrder(gBattlerTarget); + + if ((gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + || (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI) + || (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + || (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + SwitchPartyOrderLinkMulti(gBattlerTarget, gBattleStruct->monToSwitchIntoId[gBattlerTarget], 0); + SwitchPartyOrderLinkMulti(BATTLE_PARTNER(gBattlerTarget), gBattleStruct->monToSwitchIntoId[gBattlerTarget], 1); } - gBattlescriptCurrInstr = cmd->nextInstr; // exit if loop failed (failsafe) + + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + SwitchPartyOrderInGameMulti(gBattlerTarget, gBattleStruct->monToSwitchIntoId[gBattlerTarget]); } - return; - } - case VARIOUS_MOVEEND_ITEM_EFFECTS: - { - VARIOUS_ARGS(); - if (ItemBattleEffects(ITEMEFFECT_NORMAL, battler, FALSE)) - return; - break; } - case VARIOUS_ROOM_SERVICE: + else { - VARIOUS_ARGS(const u8 *failInstr); - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_ROOM_SERVICE && TryRoomService(battler)) - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; - } + // In normal wild doubles, Roar will always fail if the user's level is less than the target's. + if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) + gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle; else - { gBattlescriptCurrInstr = cmd->failInstr; - } - return; } - case VARIOUS_TERRAIN_SEED: - { - VARIOUS_ARGS(const u8 *failInstr); - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_SEEDS) - { - enum ItemEffect effect = ITEM_NO_EFFECT; - u16 item = gBattleMons[battler].item; - switch (GetBattlerHoldEffectParam(battler)) - { - case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_PARAM_GRASSY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_PARAM_MISTY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, ITEMEFFECT_NONE); - break; - } +} - if (effect != ITEM_NO_EFFECT) - return; - } +static void Cmd_tryconversiontypechange(void) +{ + CMD_ARGS(const u8 *failInstr); + + u8 validMoves = 0; + u8 moveChecked = 0; + u8 moveType = 0; + + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) + { gBattlescriptCurrInstr = cmd->failInstr; return; } - case VARIOUS_MAKE_INVISIBLE: - { - VARIOUS_ARGS(); - if (gBattleControllerExecFlags) - break; - BtlController_EmitSpriteInvisibility(battler, B_COMM_TO_CONTROLLER, TRUE); - MarkBattlerForControllerExec(battler); - break; - } - case VARIOUS_JUMP_IF_TEAM_HEALTHY: + if (B_UPDATED_CONVERSION >= GEN_6) { - VARIOUS_ARGS(const u8 *jumpInstr); - if ((IsDoubleBattle()) && IsBattlerAlive(BATTLE_PARTNER(battler))) + // Changes user's type to its first move's type + for (moveChecked = 0; moveChecked < MAX_MON_MOVES; moveChecked++) { - u8 partner = BATTLE_PARTNER(battler); - if ((gBattleMons[battler].hp == gBattleMons[battler].maxHP && !(gBattleMons[battler].status1 & STATUS1_ANY)) - && (gBattleMons[partner].hp == gBattleMons[partner].maxHP && !(gBattleMons[partner].status1 & STATUS1_ANY))) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + if (gBattleMons[gBattlerAttacker].moves[moveChecked] != MOVE_NONE) + { + moveType = GetMoveType(gBattleMons[gBattlerAttacker].moves[moveChecked]); + break; + } } - else // single battle + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) { - if (gBattleMons[battler].hp == gBattleMons[battler].maxHP && !(gBattleMons[battler].status1 & STATUS1_ANY)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; - } - case VARIOUS_TRY_HEAL_QUARTER_HP: - { - VARIOUS_ARGS(const u8 *failInstr); - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 4; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; - - if (gBattleMons[battler].hp == gBattleMons[battler].maxHP) - gBattlescriptCurrInstr = cmd->failInstr; // fail - else - gBattlescriptCurrInstr = cmd->nextInstr; // can heal - return; - } - case VARIOUS_JUMP_IF_UNDER_200: - { - VARIOUS_ARGS(const u8 *jumpInstr); - // If the Pokemon is less than 200 kg, or weighing less than 441 lbs, then Sky Drop will work. Otherwise, it will fail. - if (GetBattlerWeight(gBattlerTarget) < 2000) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_SET_SKY_DROP: - { - VARIOUS_ARGS(); - gStatuses3[gBattlerTarget] |= (STATUS3_SKY_DROPPED | STATUS3_ON_AIR); - /* skyDropTargets holds the information of who is in a particular instance of Sky Drop. - This is needed in the case that multiple Pokemon use Sky Drop in the same turn or if - the target of a Sky Drop faints while in the air.*/ - gBattleStruct->skyDropTargets[gBattlerAttacker] = gBattlerTarget; - gBattleStruct->skyDropTargets[gBattlerTarget] = gBattlerAttacker; - - // End any multiturn effects caused by the target except STATUS2_LOCK_CONFUSE - gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_MULTIPLETURNS); - gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_UPROAR); - gBattleMons[gBattlerTarget].status2 &= ~(STATUS2_BIDE); - gDisableStructs[gBattlerTarget].rolloutTimer = 0; - gDisableStructs[gBattlerTarget].furyCutterCounter = 0; - - // End any Follow Me/Rage Powder effects caused by the target - if (gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer != 0 && gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget == gBattlerTarget) - gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 0; - - break; - } - case VARIOUS_CLEAR_SKY_DROP: - { - VARIOUS_ARGS(const u8 *failInstr); - // Check to see if the initial target of this Sky Drop fainted before the 2nd turn of Sky Drop. - // If so, make the move fail. If not, clear all of the statuses and continue the move. - if (gBattleStruct->skyDropTargets[gBattlerAttacker] == SKY_DROP_NO_TARGET) gBattlescriptCurrInstr = cmd->failInstr; + } else { - gBattleStruct->skyDropTargets[gBattlerAttacker] = SKY_DROP_NO_TARGET; - gBattleStruct->skyDropTargets[gBattlerTarget] = SKY_DROP_NO_TARGET; - gStatuses3[gBattlerTarget] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR); + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); gBattlescriptCurrInstr = cmd->nextInstr; } - - // Confuse target if they were in the middle of Petal Dance/Outrage/Thrash when targeted. - if (gBattleMons[gBattlerTarget].status2 & STATUS2_LOCK_CONFUSE) - gBattleScripting.moveEffect = (MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN); - return; } - case VARIOUS_SKY_DROP_YAWN: // If the mon that's sleeping due to Yawn was holding a Pokemon in Sky Drop, release the target and clear Sky Drop data. + else { - VARIOUS_ARGS(); - if (gBattleStruct->skyDropTargets[gEffectBattler] != SKY_DROP_NO_TARGET && !(gStatuses3[gEffectBattler] & STATUS3_SKY_DROPPED)) + // Randomly changes user's type to one of its moves' type + while (validMoves < MAX_MON_MOVES) { - // Set the target of Sky Drop as gEffectBattler - gEffectBattler = gBattleStruct->skyDropTargets[gEffectBattler]; + if (gBattleMons[gBattlerAttacker].moves[validMoves] == MOVE_NONE) + break; + + validMoves++; + } - // Clear skyDropTargets data - gBattleStruct->skyDropTargets[gBattleStruct->skyDropTargets[gEffectBattler]] = SKY_DROP_NO_TARGET; - gBattleStruct->skyDropTargets[gEffectBattler] = SKY_DROP_NO_TARGET; + for (moveChecked = 0; moveChecked < validMoves; moveChecked++) + { + moveType = GetMoveType(gBattleMons[gBattlerAttacker].moves[moveChecked]); - // If the target was in the middle of Outrage/Thrash/etc. when targeted by Sky Drop, confuse them on release and do proper animation - if (gBattleMons[gEffectBattler].status2 & STATUS2_LOCK_CONFUSE && CanBeConfused(gEffectBattler)) + if (moveType == TYPE_MYSTERY) { - gBattleMons[gEffectBattler].status2 &= ~(STATUS2_LOCK_CONFUSE); - gBattlerAttacker = gEffectBattler; - gBattleMons[gBattlerTarget].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); - gBattlescriptCurrInstr = BattleScript_ThrashConfuses; - return; + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) + moveType = TYPE_GHOST; + else + moveType = TYPE_NORMAL; + } + if (moveType != gBattleMons[gBattlerAttacker].types[0] + && moveType != gBattleMons[gBattlerAttacker].types[1] + && moveType != gBattleMons[gBattlerAttacker].types[2]) + { + break; } } - break; - } - case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (BlocksPrankster(gCurrentMove, gBattlerAttacker, battler, TRUE)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER: - { - bool8 shouldNotClear = FALSE; - for (i = 0; i < gBattlersCount; i++) - { - u32 ability = GetBattlerAbility(i); - if (((ability == ABILITY_DESOLATE_LAND && gBattleWeather & B_WEATHER_SUN_PRIMAL) - || (ability == ABILITY_PRIMORDIAL_SEA && gBattleWeather & B_WEATHER_RAIN_PRIMAL) - || (ability == ABILITY_DELTA_STREAM && gBattleWeather & B_WEATHER_STRONG_WINDS)) - && IsBattlerAlive(i)) - shouldNotClear = TRUE; - } - if (gBattleWeather & B_WEATHER_SUN_PRIMAL && !shouldNotClear) - { - gBattleWeather &= ~B_WEATHER_SUN_PRIMAL; - PrepareStringBattle(STRINGID_EXTREMESUNLIGHTFADED, battler); - gBattleCommunication[MSG_DISPLAY] = 1; - } - else if (gBattleWeather & B_WEATHER_RAIN_PRIMAL && !shouldNotClear) - { - gBattleWeather &= ~B_WEATHER_RAIN_PRIMAL; - PrepareStringBattle(STRINGID_HEAVYRAINLIFTED, battler); - gBattleCommunication[MSG_DISPLAY] = 1; - } - else if (gBattleWeather & B_WEATHER_STRONG_WINDS && !shouldNotClear) - { - gBattleWeather &= ~B_WEATHER_STRONG_WINDS; - PrepareStringBattle(STRINGID_STRONGWINDSDISSIPATED, battler); - gBattleCommunication[MSG_DISPLAY] = 1; - } - break; - } - case VARIOUS_TRY_END_NEUTRALIZING_GAS: - { - VARIOUS_ARGS(); - if (gSpecialStatuses[battler].neutralizingGasRemoved) + if (moveChecked == validMoves) { - gSpecialStatuses[battler].neutralizingGasRemoved = FALSE; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; - return; + gBattlescriptCurrInstr = cmd->failInstr; } - break; - } - case VARIOUS_GET_ROTOTILLER_TARGETS: - { - VARIOUS_ARGS(const u8 *failInstr); - // Gets the battlers to be affected by rototiller. If there are none, print 'But it failed!' + else { - u32 count = 0; - for (i = 0; i < gBattlersCount; i++) + do { - gSpecialStatuses[i].rototillerAffected = FALSE; - if (IsRototillerAffected(i)) + while ((moveChecked = MOD(Random(), MAX_MON_MOVES)) >= validMoves); + + moveType = GetMoveType(gBattleMons[gBattlerAttacker].moves[moveChecked]); + + if (moveType == TYPE_MYSTERY) { - gSpecialStatuses[i].rototillerAffected = TRUE; - count++; + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) + moveType = TYPE_GHOST; + else + moveType = TYPE_NORMAL; } } + while (moveType == gBattleMons[gBattlerAttacker].types[0] || moveType == gBattleMons[gBattlerAttacker].types[1] || moveType == gBattleMons[gBattlerAttacker].types[2]); + + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - if (count == 0) - gBattlescriptCurrInstr = cmd->failInstr; // Rototiller fails - else - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; - } - case VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (gSpecialStatuses[battler].rototillerAffected) - { - gSpecialStatuses[battler].rototillerAffected = FALSE; gBattlescriptCurrInstr = cmd->nextInstr; } - else - { - gBattlescriptCurrInstr = cmd->jumpInstr; // Unaffected by rototiller - print STRINGID_NOEFFECTONTARGET - } - return; } - case VARIOUS_CONSUME_BERRY: - { - VARIOUS_ARGS(bool8 fromBattler); - if (gBattleScripting.overrideBerryRequirements == 2) - { - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } +} - if (cmd->fromBattler) - gLastUsedItem = gBattleMons[battler].item; +static void Cmd_givepaydaymoney(void) +{ + CMD_ARGS(); - gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].ateBerry = TRUE; - gBattleScripting.battler = gEffectBattler = gBattlerTarget = battler; // Cover all berry effect battler cases. e.g. ChangeStatBuffs uses target ID - if (ItemBattleEffects(ITEMEFFECT_USE_LAST_ITEM, battler, FALSE)) - return; + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) && gPaydayMoney != 0) + { + u32 bonusMoney = gPaydayMoney * gBattleStruct->moneyMultiplier; + AddMoney(&gSaveBlock1Ptr->money, bonusMoney); + + PREPARE_HWORD_NUMBER_BUFFER(gBattleTextBuff1, 5, bonusMoney) + + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_PrintPayDayMoneyString; + } + else + { gBattlescriptCurrInstr = cmd->nextInstr; - return; } - case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL: +} + +static void Cmd_setlightscreen(void) +{ + CMD_ARGS(); + + if (!TrySetLightScreen(gBattlerAttacker)) { - VARIOUS_ARGS(const u8 *jumpInstr); - if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) == gBattleMons[battler].species) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SIDE_STATUS_FAILED; } - case VARIOUS_JUMP_IF_WEATHER_AFFECTED: - { - VARIOUS_ARGS(u32 flags, const u8 *jumpInstr); - u32 flags = cmd->flags; - if (IsBattlerWeatherAffected(battler, flags)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_JUMP_IF_SPECIES: + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +// for var lands +#define NO_HIT 0 +#define CALC_ACC 1 +#define SURE_HIT 2 +// for var endured +#define NOT_ENDURED 0 +#define FOCUS_SASHED 1 +#define FOCUS_BANDED 2 +#define AFFECTION_ENDURED 3 +static void Cmd_tryKO(void) +{ + CMD_ARGS(const u8 *failInstr); + + enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); + enum HoldEffect holdEffect = GetBattlerHoldEffect(gBattlerTarget); + enum Ability targetAbility = GetBattlerAbility(gBattlerTarget); + u32 rand = Random() % 100; + u32 affectionScore = GetBattlerAffectionHearts(gBattlerTarget); + u32 endured = NOT_ENDURED; + + // Dynamaxed Pokemon cannot be hit by OHKO moves. + if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { - VARIOUS_ARGS(u16 species, const u8 *jumpInstr); - if (gBattleMons[battler].species == cmd->species) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED; + gBattlescriptCurrInstr = cmd->failInstr; return; } - case VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED: + + gPotentialItemEffectBattler = gBattlerTarget; + if (holdEffect == HOLD_EFFECT_FOCUS_BAND + && (Random() % 100) < GetBattlerHoldEffectParam(gBattlerTarget)) + { + endured = FOCUS_BANDED; + RecordItemEffectBattle(gBattlerTarget, holdEffect); + } + else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && IsBattlerAtMaxHp(gBattlerTarget)) { - VARIOUS_ARGS(const u8 *jumpInstr); - if (IsLeafGuardProtected(battler, GetBattlerAbility(battler))) - { - gBattlerAbility = battler; - gBattlescriptCurrInstr = cmd->jumpInstr; - } - else - { - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; + endured = FOCUS_SASHED; + RecordItemEffectBattle(gBattlerTarget, holdEffect); } - case VARIOUS_SET_ATTACKER_STICKY_WEB_USER: + else if (B_AFFECTION_MECHANICS == TRUE && IsOnPlayerSide(gBattlerTarget) && affectionScore >= AFFECTION_THREE_HEARTS) { - VARIOUS_ARGS(); - // For Mirror Armor: "If the PokΓ©mon with this Ability is affected by Sticky Web, the effect is reflected back to the PokΓ©mon which set it up. - // If PokΓ©mon which set up Sticky Web is not on the field, no PokΓ©mon have their Speed lowered." - gBattlerAttacker = gBattlerTarget; // Initialize 'fail' condition - SET_STATCHANGER(STAT_SPEED, 1, TRUE); - if (gSideTimers[GetBattlerSide(battler)].stickyWebBattlerId != 0xFF) - gBattlerAttacker = gSideTimers[GetBattlerSide(battler)].stickyWebBattlerId; - break; + if ((affectionScore == AFFECTION_FIVE_HEARTS && rand < 20) + || (affectionScore == AFFECTION_FOUR_HEARTS && rand < 15) + || (affectionScore == AFFECTION_THREE_HEARTS && rand < 10)) + endured = AFFECTION_ENDURED; } - case VARIOUS_CUT_1_3_HP_RAISE_STATS: - { - VARIOUS_ARGS(const u8 *failInstr); - bool8 atLeastOneStatBoosted = FALSE; - u16 hpFraction = max(1, GetNonDynamaxMaxHP(gBattlerAttacker) / 3); + if (targetAbility == ABILITY_STURDY) + { + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gLastUsedAbility = ABILITY_STURDY; + gBattlescriptCurrInstr = BattleScript_SturdyPreventsOHKO; + gBattlerAbility = gBattlerTarget; + } + else + { + u32 lands = NO_HIT; + if (gBattleMons[gBattlerTarget].level > gBattleMons[gBattlerAttacker].level) + lands = NO_HIT; + else if ((gBattleMons[gBattlerTarget].volatiles.lockOn && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) + || IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_NO_GUARD) + || IsAbilityAndRecord(gBattlerTarget, targetAbility, ABILITY_NO_GUARD)) + lands = SURE_HIT; + else if (IsSemiInvulnerable(gBattlerTarget, CHECK_ALL)) + lands = NO_HIT; + else if (!JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE, cmd->failInstr)) + lands = CALC_ACC; + + if (lands == CALC_ACC) + { + u16 odds = GetMoveAccuracy(gCurrentMove) + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level); + if (B_SHEER_COLD_ACC >= GEN_7 && effect == EFFECT_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) + odds -= 10; + if (RandomPercentage(RNG_ACCURACY, odds) && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) + lands = SURE_HIT; + } - for (i = 1; i < NUM_STATS; i++) + if (lands == SURE_HIT) + { + if (gDisableStructs[gBattlerTarget].endured) { - if (CompareStat(gBattlerAttacker, i, MAX_STAT_STAGE, CMP_LESS_THAN)) - { - atLeastOneStatBoosted = TRUE; - break; - } + gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].hp - 1; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FOE_ENDURED; } - if (atLeastOneStatBoosted && gBattleMons[gBattlerAttacker].hp > hpFraction) + else if (endured == FOCUS_BANDED || endured == FOCUS_SASHED) { - gBattleStruct->moveDamage[gBattlerAttacker] = hpFraction; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].hp - 1; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FOE_HUNG_ON; + gLastUsedItem = gBattleMons[gBattlerTarget].item; + } + else if (endured == AFFECTION_ENDURED) + { + gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].hp - 1; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FOE_ENDURED_AFFECTION; } else { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].hp; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_ONE_HIT_KO; } - return; - } - case VARIOUS_CHECK_POLTERGEIST: - { - VARIOUS_ARGS(const u8 *failInstr); - if (gBattleMons[battler].item == ITEM_NONE - || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM - || GetBattlerAbility(battler) == ABILITY_KLUTZ) - { - gBattlescriptCurrInstr = cmd->failInstr; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[battler].item); - gLastUsedItem = gBattleMons[battler].item; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_MISS; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED; + gBattlescriptCurrInstr = cmd->failInstr; } - return; } - case VARIOUS_TRY_NO_RETREAT: +} +#undef NO_HIT +#undef CALC_ACC +#undef SURE_HIT +#undef NOT_ENDURED +#undef FOCUS_SASHED +#undef FOCUS_BANDED +#undef AFFECTION_ENDURED + +static void Cmd_checknonvolatiletrigger(void) +{ + CMD_ARGS(u16 nonVolatile, const u8 *failInstr); + + if (!CanSetNonVolatileStatus( + gBattlerAttacker, + gBattlerTarget, + GetBattlerAbility(gBattlerAttacker), + GetBattlerAbility(gBattlerTarget), + cmd->nonVolatile, + CHECK_TRIGGER)) + gBattlescriptCurrInstr = cmd->failInstr; + else if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + gBattlescriptCurrInstr = cmd->failInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_copybidedmg(void) +{ + CMD_ARGS(); + gBattleStruct->moveDamage[gBattlerTarget] = gBideDmg[gBattlerAttacker] * 2; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_animatewildpokemonafterfailedpokeball(void) +{ + CMD_ARGS(u8 battler); + u8 battler = GetBattlerForBattleScript(cmd->battler); + AnimateMonAfterPokeBallFail(battler); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_tryinfatuating(void) +{ + CMD_ARGS(const u8 *failInstr); + + if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) + { + gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; + gLastUsedAbility = ABILITY_OBLIVIOUS; + RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS); + } + else { - VARIOUS_ARGS(const u8 *failInstr); - if (gDisableStructs[battler].noRetreat) + if (gBattleMons[gBattlerTarget].volatiles.infatuation + || !AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) { gBattlescriptCurrInstr = cmd->failInstr; } else { - if (!(gBattleMons[battler].status2 & STATUS2_ESCAPE_PREVENTION)) - gDisableStructs[battler].noRetreat = TRUE; + gBattleMons[gBattlerTarget].volatiles.infatuation = INFATUATED_WITH(gBattlerAttacker); gBattlescriptCurrInstr = cmd->nextInstr; } - return; } - case VARIOUS_CURE_CERTAIN_STATUSES: +} + +static void Cmd_updatestatusicon(void) +{ + CMD_ARGS(u8 battler); + u32 battler; + + if (gBattleControllerExecFlags) + return; + + if (cmd->battler == BS_PLAYER2) { - VARIOUS_ARGS(); - // Check infatuation - if (gBattleMons[battler].status2 & STATUS2_INFATUATION) - { - gBattleMons[battler].status2 &= ~(STATUS2_INFATUATION); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_INFATUATION; // STRINGID_TARGETGOTOVERINFATUATION - StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - } - // Check taunt - if (gDisableStructs[battler].tauntTimer != 0) - { - gDisableStructs[battler].tauntTimer = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); - } - // Check encore - if (gDisableStructs[battler].encoreTimer != 0) - { - gDisableStructs[battler].encoredMove = 0; - gDisableStructs[battler].encoreTimer = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED - } - // Check torment - if (gBattleMons[battler].status2 & STATUS2_TORMENT) + for (battler = gBattleControllerExecFlags; battler < gBattlersCount; battler++) { - gBattleMons[battler].status2 &= ~(STATUS2_TORMENT); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT; + if (!(gAbsentBattlerFlags & (1u << battler))) + { + BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1); + MarkBattlerForControllerExec(battler); + } } - // Check heal block - if (gStatuses3[battler] & STATUS3_HEAL_BLOCK) + gBattlescriptCurrInstr = cmd->nextInstr; + } + else if (cmd->battler == BS_ATTACKER_WITH_PARTNER) + { + battler = gBattlerAttacker; + if (!(gAbsentBattlerFlags & (1u << battler))) { - gStatuses3[battler] &= ~(STATUS3_HEAL_BLOCK); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; + BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1); + MarkBattlerForControllerExec(battler); } - // Check disable - if (gDisableStructs[battler].disableTimer != 0) + if ((IsDoubleBattle())) { - gDisableStructs[battler].disableTimer = 0; - gDisableStructs[battler].disabledMove = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; + battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); + if (!(gAbsentBattlerFlags & (1u << battler))) + { + BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1); + MarkBattlerForControllerExec(battler); + } } gBattlescriptCurrInstr = cmd->nextInstr; - return; } - case VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES: + else { - VARIOUS_ARGS(); - battler = gBattlerTarget; - for (i = 0; i < NUM_BATTLE_STATS; i++) - if (gBattleMons[battler].statStages[i] < DEFAULT_STAT_STAGE) - gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; + battler = GetBattlerForBattleScript(cmd->battler); + BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1); + MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = cmd->nextInstr; - return; } - case VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY: +} + +static void Cmd_setmist(void) +{ + CMD_ARGS(); + + if (gSideTimers[GetBattlerSide(gBattlerAttacker)].mistTimer) { - VARIOUS_ARGS(const u8 *jumpInstr); - if (GetItemPocket(gLastUsedItem) == POCKET_BERRIES) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MIST_FAILED; } - case VARIOUS_SAVE_BATTLER_ITEM: + else { - VARIOUS_ARGS(); - gBattleHistory->heldItems[battler] = gBattleMons[battler].item; - break; + gSideTimers[GetBattlerSide(gBattlerAttacker)].mistTimer = 5; + gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_MIST; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_MIST; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_setfocusenergy(void) +{ + CMD_ARGS(u8 battler); + u8 battler = GetBattlerForBattleScript(cmd->battler); + enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); + + if ((effect == EFFECT_DRAGON_CHEER && (!(IsDoubleBattle()) || (gAbsentBattlerFlags & (1u << battler)))) + || gBattleMons[battler].volatiles.dragonCheer || gBattleMons[battler].volatiles.focusEnergy) + { + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FOCUS_ENERGY_FAILED; } - case VARIOUS_RESTORE_BATTLER_ITEM: + else if (effect == EFFECT_DRAGON_CHEER && !IS_BATTLER_OF_TYPE(battler, TYPE_DRAGON)) { - VARIOUS_ARGS(); - gBattleMons[battler].item = gBattleHistory->heldItems[battler]; - break; + gBattleMons[battler].volatiles.dragonCheer = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_GETTING_PUMPED; } - case VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM: + else { - VARIOUS_ARGS(); - gBattleMons[battler].item = gLastUsedItem; - break; + if (GetConfig(CONFIG_FOCUS_ENERGY_CRIT_RATIO) >= GEN_3 + || GetConfig(CONFIG_CRIT_CHANCE) == GEN_1) + gBattleMons[battler].volatiles.focusEnergy = TRUE; + else + gBattleMons[battler].volatiles.dragonCheer = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_GETTING_PUMPED; } - } // End of switch (cmd->id) - gBattlescriptCurrInstr = cmd->nextInstr; } -static void TryResetProtectUseCounter(u32 battler) +static void Cmd_transformdataexecution(void) { - u32 lastMove = gLastResultingMoves[battler]; - enum BattleMoveEffects lastEffect = GetMoveEffect(lastMove); - if (lastMove == MOVE_UNAVAILABLE - || (!gBattleMoveEffects[lastEffect].usesProtectCounter - && ((B_ALLY_SWITCH_FAIL_CHANCE >= GEN_9 && lastEffect != EFFECT_ALLY_SWITCH) - || B_ALLY_SWITCH_FAIL_CHANCE < GEN_9))) - gDisableStructs[battler].protectUses = 0; + CMD_ARGS(); + + gChosenMove = MOVE_UNAVAILABLE; + gBattlescriptCurrInstr = cmd->nextInstr; + if (gBattleMons[gBattlerTarget].volatiles.transformed + || gBattleStruct->illusion[gBattlerTarget].state == ILLUSION_ON + || IsSemiInvulnerable(gBattlerTarget, EXCLUDE_COMMANDER)) + { + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FAILED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TRANSFORM_FAILED; + } + else + { + s32 i; + u8 *battleMonAttacker, *battleMonTarget; + u8 timesGotHit; + + gBattleMons[gBattlerAttacker].volatiles.transformed = TRUE; + gDisableStructs[gBattlerAttacker].disabledMove = MOVE_NONE; + gDisableStructs[gBattlerAttacker].disableTimer = 0; + gDisableStructs[gBattlerAttacker].transformedMonPersonality = gBattleMons[gBattlerTarget].personality; + if (B_TRANSFORM_SHINY >= GEN_4) + gDisableStructs[gBattlerAttacker].transformedMonShininess = gBattleMons[gBattlerTarget].isShiny; + else + gDisableStructs[gBattlerAttacker].transformedMonShininess = gBattleMons[gBattlerAttacker].isShiny; + gDisableStructs[gBattlerAttacker].mimickedMoves = 0; + gDisableStructs[gBattlerAttacker].usedMoves = 0; + + timesGotHit = GetBattlerPartyState(gBattlerTarget)->timesGotHit; + GetBattlerPartyState(gBattlerAttacker)->timesGotHit = timesGotHit; + + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].species) + + battleMonAttacker = (u8 *)(&gBattleMons[gBattlerAttacker]); + battleMonTarget = (u8 *)(&gBattleMons[gBattlerTarget]); + + for (i = 0; i < offsetof(struct BattlePokemon, pp); i++) + battleMonAttacker[i] = battleMonTarget[i]; + + gDisableStructs[gBattlerAttacker].overwrittenAbility = GetBattlerAbility(gBattlerTarget); + for (i = 0; i < MAX_MON_MOVES; i++) + { + u32 pp = GetMovePP(gBattleMons[gBattlerAttacker].moves[i]); + if (pp < 5) + gBattleMons[gBattlerAttacker].pp[i] = pp; + else + gBattleMons[gBattlerAttacker].pp[i] = 5; + } + + // update AI knowledge + RecordAllMoves(gBattlerAttacker); + RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability); + + BtlController_EmitResetActionMoveSelection(gBattlerAttacker, B_COMM_TO_CONTROLLER, RESET_MOVE_SELECTION); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TRANSFORMED; + } } -static void Cmd_setprotectlike(void) +static void Cmd_setsubstitute(void) { CMD_ARGS(); - bool32 protectFails = TRUE; - bool32 notLastTurn = TRUE; - u32 protectMethod = GetMoveProtectMethod(gCurrentMove); + u32 factor = GetMoveEffect(gCurrentMove) == EFFECT_SHED_TAIL ? 2 : 4; + s32 hp = 0; - TryResetProtectUseCounter(gBattlerAttacker); + if (factor == 2) + hp = (GetNonDynamaxMaxHP(gBattlerAttacker)+1) / factor; // shed tail rounds up + else + hp = GetNonDynamaxMaxHP(gBattlerAttacker) / factor; // one bit value will only work for PokΓ©mon which max hp can go to 1020(which is more than possible in games) - if (gCurrentTurnActionNumber == (gBattlersCount - 1)) - notLastTurn = FALSE; + if (hp == 0) + hp = 1; - if ((sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] >= Random() && notLastTurn) - || (protectMethod == PROTECT_WIDE_GUARD && B_WIDE_GUARD != GEN_5) - || (protectMethod == PROTECT_QUICK_GUARD && B_QUICK_GUARD != GEN_5)) + if (gBattleMons[gBattlerAttacker].hp <= hp) { - if (GetMoveEffect(gCurrentMove) == EFFECT_ENDURE) + hp = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SUBSTITUTE_FAILED; + } + else + { + gBattleMons[gBattlerAttacker].volatiles.substitute = TRUE; + gBattleMons[gBattlerAttacker].volatiles.wrapped = FALSE; + // gDisableStructs[gBattlerAttacker].substituteHP = (factor == 2) ? (hp / 2) : hp; + if (factor == 2) + gDisableStructs[gBattlerAttacker].substituteHP = hp / 2; + else + gDisableStructs[gBattlerAttacker].substituteHP = hp; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SUBSTITUTE; + } + + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = hp; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_mimicattackcopy(void) +{ + CMD_ARGS(const u8 *failInstr); + + if ((IsMoveMimicBanned(gLastMoves[gBattlerTarget])) + || (gBattleMons[gBattlerAttacker].volatiles.transformed) + || gLastMoves[gBattlerTarget] == MOVE_NONE + || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + int i; + + for (i = 0; i < MAX_MON_MOVES; i++) { - gProtectStructs[gBattlerAttacker].endured = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BRACED_ITSELF; + if (gBattleMons[gBattlerAttacker].moves[i] == gLastMoves[gBattlerTarget]) + break; } - else if (GetProtectType(protectMethod) == PROTECT_TYPE_SIDE) + + if (i == MAX_MON_MOVES) { - gProtectStructs[gBattlerAttacker].protected = protectMethod; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_TEAM; + gChosenMove = 0xFFFF; + gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastMoves[gBattlerTarget]; + u32 pp = GetMovePP(gLastMoves[gBattlerTarget]); + if (pp < 5) + gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = pp; + else + gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 5; + + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) + + gDisableStructs[gBattlerAttacker].mimickedMoves |= 1u << gCurrMovePos; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gProtectStructs[gBattlerAttacker].protected = protectMethod; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECTED_ITSELF; + gBattlescriptCurrInstr = cmd->failInstr; } - - gDisableStructs[gBattlerAttacker].protectUses++; - protectFails = FALSE; - } - - if (protectFails) - { - gDisableStructs[gBattlerAttacker].protectUses = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECT_FAILED; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; } - - gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_tryexplosion(void) +static void Cmd_setcalledmove(void) { CMD_ARGS(); - - if (gBattleControllerExecFlags) - return; - - gBattleStruct->moveDamage[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp; - BtlController_EmitHealthBarUpdate(gBattlerAttacker, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP); - MarkBattlerForControllerExec(gBattlerAttacker); + gCurrentMove = gCalledMove; gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setatkhptozero(void) +static void Cmd_unused_0x9f(void) { - CMD_ARGS(); - - if (gBattleControllerExecFlags) - return; +} - gBattleMons[gBattlerAttacker].hp = 0; - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].hp), &gBattleMons[gBattlerAttacker].hp); - MarkBattlerForControllerExec(gBattlerAttacker); +static void Cmd_unused_0xA0(void) +{ +} - gBattlescriptCurrInstr = cmd->nextInstr; +static void CalcReflectBackDamage(u32 baseDamage, u32 percentMult) +{ + s32 damage = (baseDamage - 1) * percentMult / 100; + damage = max(damage, 1); + gBattleStruct->moveDamage[gBattlerTarget] = damage; } -static void Cmd_jumpifnexttargetvalid(void) +static void Cmd_counterdamagecalculator(void) { - CMD_ARGS(const u8 *jumpInstr); + CMD_ARGS(const u8 *failInstr); - const u8 *jumpInstr = cmd->jumpInstr; + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); + u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId); - for (gBattlerTarget++; gBattlerTarget < gBattlersCount; gBattlerTarget++) + if (gProtectStructs[gBattlerAttacker].physicalDmg + && sideAttacker != sideTarget + && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp) { - if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) - continue; - if (IsBattlerAlive(gBattlerTarget)) - break; - } + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) + gBattlerTarget = gSideTimers[sideTarget].followmeTarget; + else + gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; - if (gBattlerTarget >= gBattlersCount) - { - gBattlerTarget = gBattlersCount - 1; + CalcReflectBackDamage(gProtectStructs[gBattlerAttacker].physicalDmg, 200); gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = jumpInstr; + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_tryhealhalfhealth(void) +// A copy of Cmd with the physical -> special field changes +static void Cmd_mirrorcoatdamagecalculator(void) { - CMD_ARGS(const u8 *failInstr, u8 battler); + CMD_ARGS(const u8 *failInstr); - const u8 *failInstr = cmd->failInstr; + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); + u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId); - if (cmd->battler == BS_ATTACKER) - gBattlerTarget = gBattlerAttacker; + if (gProtectStructs[gBattlerAttacker].specialDmg + && sideAttacker != sideTarget + && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) + { - gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxMaxHP(gBattlerTarget) / 2; - if (gBattleStruct->moveDamage[gBattlerTarget] == 0) - gBattleStruct->moveDamage[gBattlerTarget] = 1; - gBattleStruct->moveDamage[gBattlerTarget] *= -1; + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) + gBattlerTarget = gSideTimers[sideTarget].followmeTarget; + else + gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; - if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) - gBattlescriptCurrInstr = failInstr; - else + CalcReflectBackDamage(gProtectStructs[gBattlerAttacker].specialDmg, 200); gBattlescriptCurrInstr = cmd->nextInstr; -} - -static void SetMoveForMirrorMove(u32 move) -{ - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - // Edge case, we used Z Mirror Move, got the stat boost and now need to use the Z-move - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IsBattleMoveStatus(move)) - { - gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move; - gCurrentMove = GetTypeBasedZMove(move); } else { - gCurrentMove = move; + gBattlescriptCurrInstr = cmd->failInstr; } - - gBattlerTarget = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); - ResetValuesForCalledMove(); - gBattlescriptCurrInstr = GetMoveBattleScript(gCurrentMove); } -static void Cmd_trymirrormove(void) +static void Cmd_disablelastusedattack(void) { - CMD_ARGS(); - - s32 i, validMovesCount; - u16 move; - u16 validMoves[MAX_BATTLERS_COUNT] = {0}; + CMD_ARGS(const u8 *failInstr); - for (validMovesCount = 0, i = 0; i < gBattlersCount; i++) - { - if (i != gBattlerAttacker) - { - move = gBattleStruct->lastTakenMoveFrom[gBattlerAttacker][i]; - if (move != MOVE_NONE && move != MOVE_UNAVAILABLE) - { - validMoves[validMovesCount] = move; - validMovesCount++; - } - } - } + s32 i; - move = gBattleStruct->lastTakenMove[gBattlerAttacker]; - if (move != MOVE_NONE && move != MOVE_UNAVAILABLE) + for (i = 0; i < MAX_MON_MOVES; i++) { - SetMoveForMirrorMove(move); + if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) + break; } - else if (validMovesCount != 0) + if (gDisableStructs[gBattlerTarget].disabledMove == MOVE_NONE + && i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) { - SetMoveForMirrorMove(validMoves[Random() % validMovesCount]); + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].moves[i]) + + gDisableStructs[gBattlerTarget].disabledMove = gBattleMons[gBattlerTarget].moves[i]; + if (B_DISABLE_TURNS >= GEN_5) + gDisableStructs[gBattlerTarget].disableTimer = 4; + else if (B_DISABLE_TURNS >= GEN_4) + gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 4; // 4-7 turns + else + gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2; // 2-5 turns + gBattlescriptCurrInstr = cmd->nextInstr; } - else // no valid moves found + else { - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_setfieldweather(void) +static void Cmd_trysetencore(void) { - CMD_ARGS(u8 weather); + CMD_ARGS(const u8 *failInstr); - u8 battleWeatherId = cmd->weather; + s32 i; - if (!TryChangeBattleWeather(gBattlerAttacker, battleWeatherId, FALSE)) + if (IsMaxMove(gLastMoves[gBattlerTarget]) && !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; - gBattlescriptCurrInstr = cmd->nextInstr; - return; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBattlerTarget].moves[i] == gBattleStruct->dynamax.baseMoves[gBattlerTarget]) + break; + } } - - switch (battleWeatherId) + else { - case BATTLE_WEATHER_RAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN; - break; - case BATTLE_WEATHER_SUN: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT; - break; - case BATTLE_WEATHER_SANDSTORM: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM; - break; - case BATTLE_WEATHER_HAIL: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL; - break; - case BATTLE_WEATHER_SNOW: - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW; - break; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) + break; + } } - gBattlescriptCurrInstr = cmd->nextInstr; -} - -static void Cmd_setreflect(void) -{ - CMD_ARGS(); - if (!TrySetReflect(gBattlerAttacker)) + if ((IsMoveEncoreBanned(gLastMoves[gBattlerTarget])) + || i == MAX_MON_MOVES + || gLastMoves[gBattlerTarget] == MOVE_NONE + || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE + || gBattleMons[gBattlerTarget].pp[i] == 0 + || gDisableStructs[gBattlerTarget].encoredMove != MOVE_NONE + || GetMoveEffect(gChosenMoveByBattler[gBattlerTarget]) == EFFECT_SHELL_TRAP) { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SIDE_STATUS_FAILED; + gBattlescriptCurrInstr = cmd->failInstr; } + else + { + gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i]; + gDisableStructs[gBattlerTarget].encoredMovePos = i; - gBattlescriptCurrInstr = cmd->nextInstr; + // If the target's selected move is not the same as the move being Encored into, + // the target will select a random opposing target + // Redirection such as Follow Me is already covered in HandleAction_UseMove of battle_util.c + if (gDisableStructs[gBattlerTarget].encoredMove != GetChosenMoveFromPosition(gBattlerTarget)) + gBattleStruct->moveTarget[gBattlerTarget] = SetRandomTarget(gBattlerTarget); + + // Encore always lasts 3 turns, but we need to account for a scenario where Encore changes the move during the same turn. + if (HasBattlerActedThisTurn(gBattlerTarget)) + gDisableStructs[gBattlerTarget].encoreTimer = 4; + else + gDisableStructs[gBattlerTarget].encoreTimer = 3; + gBattlescriptCurrInstr = cmd->nextInstr; + } } -static void Cmd_setseeded(void) +static void Cmd_painsplitdmgcalc(void) { - CMD_ARGS(); + CMD_ARGS(const u8 *failInstr); - if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED) - { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_MISS; - } - else if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS)) + if (!(DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_FAIL; + s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + GetNonDynamaxHP(gBattlerTarget)) / 2; + + gBattleStruct->passiveHpUpdate[gBattlerTarget] = GetNonDynamaxHP(gBattlerTarget) - hpDiff; + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp - hpDiff; + + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gStatuses3[gBattlerTarget] |= gBattlerAttacker; - gStatuses3[gBattlerTarget] |= STATUS3_LEECHSEED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_SET; + gBattlescriptCurrInstr = cmd->failInstr; } - - gBattlescriptCurrInstr = cmd->nextInstr; } -// TODO: Needs tests for everything -static void Cmd_manipulatedamage(void) +// Conversion 2 +static void Cmd_settypetorandomresistance(void) { - CMD_ARGS(u8 mode); + CMD_ARGS(const u8 *failInstr); - switch (cmd->mode) + // Before Gen 5 Conversion 2 only worked on a move the attacker was actually hit by. + // This changed later to the last move used by the selected target. + u32 moveToCheck; + u32 typeToCheck; + + if (GetConfig(CONFIG_UPDATED_CONVERSION_2) < GEN_5) { - case DMG_CHANGE_SIGN: - gBattleStruct->moveDamage[gBattlerAttacker] *= -1; - break; - case DMG_DOUBLED: - gBattleStruct->moveDamage[gBattlerTarget] *= 2; - break; - case DMG_1_8_TARGET_HP: - gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxMaxHP(gBattlerTarget) / 8; - if (gBattleStruct->moveDamage[gBattlerTarget] == 0) - gBattleStruct->moveDamage[gBattlerTarget] = 1; - break; - case DMG_FULL_ATTACKER_HP: - gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxMaxHP(gBattlerAttacker); - break; - case DMG_BIG_ROOT: - gBattleStruct->moveDamage[gBattlerAttacker] = GetDrainedBigRootHp(gBattlerAttacker, gBattleStruct->moveDamage[gBattlerAttacker]); - break; - case DMG_CURR_ATTACKER_HP: - gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxHP(gBattlerAttacker); - break; + moveToCheck = gLastLandedMoves[gBattlerAttacker]; + if (GetMoveEffect(moveToCheck) == EFFECT_STRUGGLE) + typeToCheck = TYPE_NORMAL; + else + typeToCheck = gLastHitByType[gBattlerAttacker]; + } + else + { + moveToCheck = gLastResultingMoves[gBattlerTarget]; + typeToCheck = gLastUsedMoveType[gBattlerTarget]; } - gBattlescriptCurrInstr = cmd->nextInstr; -} - -static void Cmd_trysetrest(void) -{ - CMD_ARGS(const u8 *failInstr); - - const u8 *failInstr = cmd->failInstr; - gBattlerTarget = gBattlerAttacker; - gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].maxHP * (-1); - - if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) + if (moveToCheck == MOVE_NONE + || moveToCheck == MOVE_UNAVAILABLE) { - gBattlescriptCurrInstr = failInstr; + gBattlescriptCurrInstr = cmd->failInstr; } - else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) + else if (!BreaksThroughSemiInvulnerablity(gBattlerTarget, moveToCheck)) { - gBattlescriptCurrInstr = BattleScript_ElectricTerrainPrevents; + gBattlescriptCurrInstr = cmd->failInstr; } - else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_MISTY_TERRAIN)) + else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) { - gBattlescriptCurrInstr = BattleScript_MistyTerrainPrevents; + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (typeToCheck == TYPE_NONE || typeToCheck == TYPE_STELLAR || typeToCheck == TYPE_MYSTERY) + { + gBattlescriptCurrInstr = cmd->failInstr; } else { - if (gBattleMons[gBattlerTarget].status1 & ((u8)(~STATUS1_SLEEP))) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_REST_STATUSED; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_REST; + u32 i, resistTypes = 0; - gBattleMons[gBattlerTarget].status1 = STATUS1_SLEEP_TURN(3); - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); - MarkBattlerForControllerExec(gBattlerTarget); - gBattlescriptCurrInstr = cmd->nextInstr; + for (i = 0; i < NUMBER_OF_MON_TYPES; i++) // Find all types that resist. + { + switch (GetTypeModifier(typeToCheck, i)) + { + case UQ_4_12(0): + case UQ_4_12(0.5): + resistTypes |= 1u << i; + break; + } + } + + while (resistTypes != 0) + { + i = Random() % NUMBER_OF_MON_TYPES; + if (resistTypes & 1u << i) + { + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) + { + resistTypes &= ~(1u << i); // Type resists, but the user is already of this type. + } + else + { + SET_BATTLER_TYPE(gBattlerAttacker, i); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + } + } + + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_jumpifnotfirstturn(void) +static void Cmd_setalwayshitflag(void) { - CMD_ARGS(const u8 *jumpInstr); - - const u8 *jumpInstr = cmd->jumpInstr; - - if (gDisableStructs[gBattlerAttacker].isFirstTurn && !(gSpecialStatuses[gBattlerAttacker].instructedChosenTarget)) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = jumpInstr; + CMD_ARGS(); + gBattleMons[gBattlerTarget].volatiles.lockOn = 2; + gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker; + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setmiracleeye(void) +// Sketch +static void Cmd_copymovepermanently(void) { CMD_ARGS(const u8 *failInstr); - if (!(gStatuses3[gBattlerTarget] & STATUS3_MIRACLE_EYED)) + gChosenMove = MOVE_UNAVAILABLE; + + if (!(gBattleMons[gBattlerAttacker].volatiles.transformed) + && gLastPrintedMoves[gBattlerTarget] != MOVE_UNAVAILABLE + && !IsMoveSketchBanned(gLastPrintedMoves[gBattlerTarget])) { - gStatuses3[gBattlerTarget] |= STATUS3_MIRACLE_EYED; - gBattlescriptCurrInstr = cmd->nextInstr; + s32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMoveEffect(gBattleMons[gBattlerAttacker].moves[i]) == EFFECT_SKETCH) + continue; + if (gBattleMons[gBattlerAttacker].moves[i] == gLastPrintedMoves[gBattlerTarget]) + break; + } + + if (i != MAX_MON_MOVES) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else // sketch worked + { + struct MovePpInfo movePpData; + + gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastPrintedMoves[gBattlerTarget]; + gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = GetMovePP(gLastPrintedMoves[gBattlerTarget]); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + movePpData.moves[i] = gBattleMons[gBattlerAttacker].moves[i]; + movePpData.pp[i] = gBattleMons[gBattlerAttacker].pp[i]; + } + movePpData.ppBonuses = gBattleMons[gBattlerAttacker].ppBonuses; + + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_MOVES_PP_BATTLE, 0, sizeof(movePpData), &movePpData); + MarkBattlerForControllerExec(gBattlerAttacker); + + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBattlerTarget]) + + gBattlescriptCurrInstr = cmd->nextInstr; + } } else { @@ -12000,1441 +11659,1173 @@ static void Cmd_setmiracleeye(void) } } -bool8 UproarWakeUpCheck(u8 battler) +static void Cmd_unused_0xA9(void) { - s32 i; - bool32 hasSoundproof = (B_UPROAR_IGNORE_SOUNDPROOF < GEN_5 && GetBattlerAbility(battler) == ABILITY_SOUNDPROOF); +} - for (i = 0; i < gBattlersCount; i++) +static inline bool32 IsDanamaxMonPresent(void) +{ + for (u32 battler = 0; battler < gBattlersCount; battler++) { - if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || hasSoundproof) + if (battler == gBattlerAttacker) continue; - gBattleScripting.battler = i; - - if (gBattlerTarget == 0xFF) - gBattlerTarget = i; - else if (gBattlerTarget == i) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_SLEEP_UPROAR; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_UPROAR_KEPT_AWAKE; - - break; + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) + return TRUE; } - if (i == gBattlersCount) - return FALSE; - else - return TRUE; + return FALSE; } -static void Cmd_jumpifuproarwakes(void) +static void Cmd_unused_AA(void) { - CMD_ARGS(const u8 *jumpInstr); - - if (UproarWakeUpCheck(gBattlerTarget)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_stockpile(void) +static void Cmd_unused_0xab(void) { - CMD_ARGS(u8 id); - - switch (cmd->id) - { - case 0: - if (gDisableStructs[gBattlerAttacker].stockpileCounter >= 3) - { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_STOCKPILE; - } - else - { - gDisableStructs[gBattlerAttacker].stockpileCounter++; - gDisableStructs[gBattlerAttacker].stockpileBeforeDef = gBattleMons[gBattlerAttacker].statStages[STAT_DEF]; - gDisableStructs[gBattlerAttacker].stockpileBeforeSpDef = gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF]; - PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[gBattlerAttacker].stockpileCounter); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STOCKPILED; - } - break; - case 1: // Save def/sp def stats. - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) - { - gDisableStructs[gBattlerAttacker].stockpileDef += gBattleMons[gBattlerAttacker].statStages[STAT_DEF] - gDisableStructs[gBattlerAttacker].stockpileBeforeDef; - gDisableStructs[gBattlerAttacker].stockpileSpDef += gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] - gDisableStructs[gBattlerAttacker].stockpileBeforeSpDef; - } - break; - } - - gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_stockpiletobasedamage(void) +static void Cmd_settailwind(void) { CMD_ARGS(const u8 *failInstr); - const u8 *failInstr = cmd->failInstr; - if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) + u8 side = GetBattlerSide(gBattlerAttacker); + + if (!(gSideStatuses[side] & SIDE_STATUS_TAILWIND)) { - gBattlescriptCurrInstr = failInstr; + gSideStatuses[side] |= SIDE_STATUS_TAILWIND; + gSideTimers[side].tailwindTimer = (GetConfig(CONFIG_TAILWIND_TURNS) >= GEN_5 ? 4 : 3); + gBattlescriptCurrInstr = cmd->nextInstr; } else { - if (gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED) - gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; - - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_stockpiletohpheal(void) +static void Cmd_tryspiteppreduce(void) { CMD_ARGS(const u8 *failInstr); - const u8 *failInstr = cmd->failInstr; - - if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0 && !gBattleStruct->snatchedMoveIsUsed) - { - gBattlescriptCurrInstr = failInstr; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FAILED; - } - else + if (gLastMoves[gBattlerTarget] != MOVE_NONE + && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) { - if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp) + s32 i; + + // Get move slot to reduce PP. + if (IsMaxMove(gLastMoves[gBattlerTarget])) { - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr = failInstr; - gBattlerTarget = gBattlerAttacker; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FULL_HP; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleStruct->dynamax.baseMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) + break; + } } else { - if (gDisableStructs[gBattlerAttacker].stockpileCounter > 0) + for (i = 0; i < MAX_MON_MOVES; i++) { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter)); - gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; + if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) + break; } - else // Snatched move + } + + if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > (B_CAN_SPITE_FAIL >= GEN_4 ? 0 : 1)) + { + s32 ppToDeduct = B_PP_REDUCED_BY_SPITE >= GEN_4 ? 4 : (Random() & 3) + 2; + // G-Max Depletion only deducts 2 PP. + if (IsMaxMove(gCurrentMove) && MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_SPITE)) + ppToDeduct = 2; + + if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct) + ppToDeduct = gBattleMons[gBattlerTarget].pp[i]; + + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) + + ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); + + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) + + gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct; + + // if (MOVE_IS_PERMANENT(gBattlerTarget, i)), but backwards + if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i)) + && !(gBattleMons[gBattlerTarget].volatiles.transformed)) { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; - gBattleScripting.animTurn = 1; + BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]); + MarkBattlerForControllerExec(gBattlerTarget); } - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - gBattleStruct->moveDamage[gBattlerAttacker] *= -1; - gBattlescriptCurrInstr = cmd->nextInstr; - gBattlerTarget = gBattlerAttacker; + + // Don't cut off Sky Drop if pp is brought to zero. + if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == SKY_DROP_NO_TARGET) + CancelMultiTurnMoves(gBattlerTarget, SKY_DROP_IGNORE); + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; } } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } } -void BS_RemoveStockpileCounters(void) +static void Cmd_healpartystatus(void) { - NATIVE_ARGS(); + CMD_ARGS(); - if (GetMoveEffect(gCurrentMove) == EFFECT_SWALLOW - && gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT - && IsBattlerAlive(gBattlerTarget)) + u32 i = 0; + u32 zero = 0; + u32 toHeal = 0; + u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); + bool32 isSoundMove = IsSoundMove(gCurrentMove); + + if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + || GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 + || !(isSoundMove && GetBattlerAbility(gBattlerAttacker) == ABILITY_SOUNDPROOF)) { - gBattlescriptCurrInstr = cmd->nextInstr; + if (isSoundMove) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOOTHING_AROMA; + gBattleMons[gBattlerAttacker].status1 = 0; + gBattleMons[gBattlerAttacker].volatiles.nightmare = FALSE; } else { - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_MoveEffectStockpileWoreOff; + RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL_SOUNDPROOF_ATTACKER; } -} -// Sign change for drained HP handled in GetDrainedBigRootHp -static void Cmd_setdrainedhp(void) -{ - CMD_ARGS(); + gBattleScripting.battler = partner; + + if (IsBattlerAlive(partner)) + { + if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + || !(isSoundMove && GetBattlerAbility(partner) == ABILITY_SOUNDPROOF)) + { + gBattleMons[partner].status1 = 0; + gBattleMons[partner].volatiles.nightmare = FALSE; + } + else + { + RecordAbilityBattle(partner, gBattleMons[partner].ability); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL_SOUNDPROOF_PARTNER; + } + } + + // Because the above MULTISTRING_CHOOSER are ORd, if both are set then it will be B_MSG_BELL_BOTH_SOUNDPROOF + + for (i = 0; i < PARTY_SIZE; i++) + { + u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); + + if (species != SPECIES_NONE && species != SPECIES_EGG) + { + enum Ability ability; + bool32 isAttacker = gBattlerPartyIndexes[gBattlerAttacker] == i; + bool32 isDoublesPartner = gBattlerPartyIndexes[partner] == i && IsBattlerAlive(partner); + + if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 + || (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 && isAttacker)) + ability = ABILITY_NONE; + else if (GetConfig(CONFIG_HEAL_BELL_SOUNDPROOF) > GEN_5 && !isAttacker && !isDoublesPartner) + ability = ABILITY_NONE; + else if (isAttacker) + ability = GetBattlerAbility(gBattlerAttacker); + else if (isDoublesPartner) + ability = GetBattlerAbility(partner); + else + { + ability = GetAbilityBySpecies(species, abilityNum); + #if TESTING + if (gTestRunnerEnabled) + { + u32 side = GetBattlerSide(gBattlerAttacker); + if (TestRunner_Battle_GetForcedAbility(side, i)) + ability = TestRunner_Battle_GetForcedAbility(side, i); + } + #endif + } - gBattleStruct->moveDamage[gBattlerAttacker] = (gBattleStruct->moveDamage[gBattlerTarget] * GetMoveAbsorbPercentage(gCurrentMove) / 100); + if (!(isSoundMove && ability == ABILITY_SOUNDPROOF)) + { + toHeal |= (1 << i); + TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), i); + } + } + } - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; + if (toHeal) + { + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, toHeal, sizeof(zero), &zero); + MarkBattlerForControllerExec(gBattlerAttacker); + } gBattlescriptCurrInstr = cmd->nextInstr; } -static u16 ReverseStatChangeMoveEffect(u16 moveEffect) +static void Cmd_cursetarget(void) { - switch (moveEffect) + CMD_ARGS(const u8 *failInstr); + + if (gBattleMons[gBattlerTarget].volatiles.cursed) { - // +1 - case MOVE_EFFECT_ATK_PLUS_1: - return MOVE_EFFECT_ATK_MINUS_1; - case MOVE_EFFECT_DEF_PLUS_1: - return MOVE_EFFECT_DEF_MINUS_1; - case MOVE_EFFECT_SPD_PLUS_1: - return MOVE_EFFECT_SPD_MINUS_1; - case MOVE_EFFECT_SP_ATK_PLUS_1: - return MOVE_EFFECT_SP_ATK_MINUS_1; - case MOVE_EFFECT_SP_DEF_PLUS_1: - return MOVE_EFFECT_SP_DEF_MINUS_1; - case MOVE_EFFECT_ACC_PLUS_1: - return MOVE_EFFECT_ACC_MINUS_1; - case MOVE_EFFECT_EVS_PLUS_1: - return MOVE_EFFECT_EVS_MINUS_1; - // -1 - case MOVE_EFFECT_ATK_MINUS_1: - return MOVE_EFFECT_ATK_PLUS_1; - case MOVE_EFFECT_DEF_MINUS_1: - return MOVE_EFFECT_DEF_PLUS_1; - case MOVE_EFFECT_SPD_MINUS_1: - return MOVE_EFFECT_SPD_PLUS_1; - case MOVE_EFFECT_SP_ATK_MINUS_1: - return MOVE_EFFECT_SP_ATK_PLUS_1; - case MOVE_EFFECT_SP_DEF_MINUS_1: - return MOVE_EFFECT_SP_DEF_PLUS_1; - case MOVE_EFFECT_ACC_MINUS_1: - return MOVE_EFFECT_ACC_PLUS_1; - case MOVE_EFFECT_EVS_MINUS_1: - // +2 - case MOVE_EFFECT_ATK_PLUS_2: - return MOVE_EFFECT_ATK_MINUS_2; - case MOVE_EFFECT_DEF_PLUS_2: - return MOVE_EFFECT_DEF_MINUS_2; - case MOVE_EFFECT_SPD_PLUS_2: - return MOVE_EFFECT_SPD_MINUS_2; - case MOVE_EFFECT_SP_ATK_PLUS_2: - return MOVE_EFFECT_SP_ATK_MINUS_2; - case MOVE_EFFECT_SP_DEF_PLUS_2: - return MOVE_EFFECT_SP_DEF_MINUS_2; - case MOVE_EFFECT_ACC_PLUS_2: - return MOVE_EFFECT_ACC_MINUS_2; - case MOVE_EFFECT_EVS_PLUS_2: - return MOVE_EFFECT_EVS_MINUS_2; - // -2 - case MOVE_EFFECT_ATK_MINUS_2: - return MOVE_EFFECT_ATK_PLUS_2; - case MOVE_EFFECT_DEF_MINUS_2: - return MOVE_EFFECT_DEF_PLUS_2; - case MOVE_EFFECT_SPD_MINUS_2: - return MOVE_EFFECT_SPD_PLUS_2; - case MOVE_EFFECT_SP_ATK_MINUS_2: - return MOVE_EFFECT_SP_ATK_PLUS_2; - case MOVE_EFFECT_SP_DEF_MINUS_2: - return MOVE_EFFECT_SP_DEF_PLUS_2; - case MOVE_EFFECT_ACC_MINUS_2: - return MOVE_EFFECT_ACC_PLUS_2; - case MOVE_EFFECT_EVS_MINUS_2: - return MOVE_EFFECT_EVS_PLUS_2; - default: - return 0; + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gBattleMons[gBattlerTarget].volatiles.cursed = TRUE; + SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 2); + gBattlescriptCurrInstr = cmd->nextInstr; } } -static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr) +static void Cmd_trysetspikes(void) { - bool32 certain = FALSE; - bool32 notProtectAffected = FALSE; - u32 index, battler, battlerAbility; - enum ItemHoldEffect battlerHoldEffect; - bool32 affectsUser = (flags & MOVE_EFFECT_AFFECTS_USER); - bool32 mirrorArmored = (flags & STAT_CHANGE_MIRROR_ARMOR); + CMD_ARGS(const u8 *failInstr); - if (affectsUser) - battler = gBattlerAttacker; - else - battler = gBattlerTarget; + u8 targetSide = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); - battlerAbility = GetBattlerAbility(battler); - battlerHoldEffect = GetBattlerHoldEffect(battler, TRUE); + if (gSideTimers[targetSide].spikesAmount == 3) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + if (gSideTimers[targetSide].spikesAmount == 0) // Add only once to the queue + PushHazardTypeToQueue(targetSide, HAZARDS_SPIKES); + gSideTimers[targetSide].spikesAmount++; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} - gSpecialStatuses[battler].changedStatsBattlerId = gBattlerAttacker; +static void Cmd_setvolatile(void) +{ + CMD_ARGS(u8 battler, u8 _volatile, u8 value); - flags &= ~(MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_MIRROR_ARMOR); + SetMonVolatile(GetBattlerForBattleScript(cmd->battler), cmd->_volatile, cmd->value); + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (flags & MOVE_EFFECT_CERTAIN) - certain = TRUE; - flags &= ~MOVE_EFFECT_CERTAIN; +static void Cmd_trysetperishsong(void) +{ + CMD_ARGS(const u8 *failInstr); - if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED) - notProtectAffected++; - flags &= ~STAT_CHANGE_NOT_PROTECT_AFFECTED; + s32 i; + s32 notAffectedCount = 0; - if (battlerAbility == ABILITY_CONTRARY) + for (i = 0; i < gBattlersCount; i++) { - statValue ^= STAT_BUFF_NEGATIVE; - gBattleScripting.statChanger ^= STAT_BUFF_NEGATIVE; - RecordAbilityBattle(battler, battlerAbility); - if (flags & STAT_CHANGE_UPDATE_MOVE_EFFECT) + if (gBattleMons[i].volatiles.perishSong + || GetBattlerAbility(i) == ABILITY_SOUNDPROOF + || BlocksPrankster(gCurrentMove, gBattlerAttacker, i, TRUE) + || gBattleMons[i].volatiles.semiInvulnerable == STATE_COMMANDER) { - flags &= ~STAT_CHANGE_UPDATE_MOVE_EFFECT; - gBattleScripting.moveEffect = ReverseStatChangeMoveEffect(gBattleScripting.moveEffect); + notAffectedCount++; + } + else + { + gBattleMons[i].volatiles.perishSong = TRUE; + gDisableStructs[i].perishSongTimer = 3; } - } - else if (battlerAbility == ABILITY_SIMPLE) - { - statValue = (SET_STAT_BUFF_VALUE(GET_STAT_BUFF_VALUE(statValue) * 2)) | ((statValue <= -1) ? STAT_BUFF_NEGATIVE : 0); } - PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); + if (notAffectedCount == gBattlersCount) + gBattlescriptCurrInstr = cmd->failInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (statValue <= -1) // Stat decrease. - { - if (gSideTimers[GetBattlerSide(battler)].mistTimer - && !certain && gCurrentMove != MOVE_CURSE - && !(battler == gBattlerTarget && GetBattlerAbility(gBattlerAttacker) == ABILITY_INFILTRATOR)) - { - if (flags == STAT_CHANGE_ALLOW_PTR) - { - if (gSpecialStatuses[battler].statLowered) - { - gBattlescriptCurrInstr = BS_ptr; - } - else - { - BattleScriptPush(BS_ptr); - gBattleScripting.battler = battler; - gBattlescriptCurrInstr = BattleScript_MistProtected; - gSpecialStatuses[battler].statLowered = TRUE; - } - } - return STAT_CHANGE_DIDNT_WORK; - } - else if (gCurrentMove != MOVE_CURSE - && notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(gCurrentMove, gBattlerTarget, TRUE, BattleScript_ButItFailed)) - { - return STAT_CHANGE_DIDNT_WORK; - } - else if ((battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET || CanAbilityPreventStatLoss(battlerAbility)) - && (!affectsUser || mirrorArmored) && !certain && gCurrentMove != MOVE_CURSE) - { - if (flags == STAT_CHANGE_ALLOW_PTR) - { - if (gSpecialStatuses[battler].statLowered) - { - gBattlescriptCurrInstr = BS_ptr; - } - else - { - gBattleScripting.battler = battler; - if (battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET) - { - gLastUsedItem = gBattleMons[battler].item; - BattleScriptPush(BS_ptr); - gBattlescriptCurrInstr = BattleScript_ItemNoStatLoss; - RecordItemEffectBattle(battler, HOLD_EFFECT_CLEAR_AMULET); - } - else - { - gBattlerAbility = battler; - BattleScriptPush(BS_ptr); - gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; - gLastUsedAbility = battlerAbility; - RecordAbilityBattle(battler, gLastUsedAbility); - } - gSpecialStatuses[battler].statLowered = TRUE; - } - } - return STAT_CHANGE_DIDNT_WORK; - } - else if ((index = IsFlowerVeilProtected(battler)) && !certain) - { - if (flags == STAT_CHANGE_ALLOW_PTR) - { - if (gSpecialStatuses[battler].statLowered) - { - gBattlescriptCurrInstr = BS_ptr; - } - else - { - BattleScriptPush(BS_ptr); - gBattleScripting.battler = battler; - gBattlerAbility = index - 1; - gBattlescriptCurrInstr = BattleScript_FlowerVeilProtectsRet; - gLastUsedAbility = ABILITY_FLOWER_VEIL; - gSpecialStatuses[battler].statLowered = TRUE; - } - } - return STAT_CHANGE_DIDNT_WORK; - } - else if (!certain - && (((battlerAbility == ABILITY_KEEN_EYE || battlerAbility == ABILITY_MINDS_EYE) && statId == STAT_ACC) - || (B_ILLUMINATE_EFFECT >= GEN_9 && battlerAbility == ABILITY_ILLUMINATE && statId == STAT_ACC) - || (battlerAbility == ABILITY_HYPER_CUTTER && statId == STAT_ATK) - || (battlerAbility == ABILITY_BIG_PECKS && statId == STAT_DEF))) - { - if (flags == STAT_CHANGE_ALLOW_PTR) - { - BattleScriptPush(BS_ptr); - gBattleScripting.battler = battler; - gBattlerAbility = battler; - gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; - gLastUsedAbility = battlerAbility; - RecordAbilityBattle(battler, gLastUsedAbility); - } - return STAT_CHANGE_DIDNT_WORK; - } - else if (battlerAbility == ABILITY_MIRROR_ARMOR && !affectsUser && !mirrorArmored && gBattlerAttacker != gBattlerTarget && battler == gBattlerTarget) - { - if (flags == STAT_CHANGE_ALLOW_PTR) - { - SET_STATCHANGER(statId, GET_STAT_BUFF_VALUE(statValue) | STAT_BUFF_NEGATIVE, TRUE); - BattleScriptPush(BS_ptr); - gBattleScripting.battler = battler; - gBattlerAbility = battler; - gBattlescriptCurrInstr = BattleScript_MirrorArmorReflect; - RecordAbilityBattle(battler, gBattleMons[battler].ability); - } - return STAT_CHANGE_DIDNT_WORK; - } - else // try to decrease - { - statValue = -GET_STAT_BUFF_VALUE(statValue); - if (gBattleMons[battler].statStages[statId] == 1) - statValue = -1; - else if (gBattleMons[battler].statStages[statId] == 2 && statValue < -2) - statValue = -2; - gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; - index = 1; - if (statValue == -2) - { - gBattleTextBuff2[1] = B_BUFF_STRING; - gBattleTextBuff2[2] = STRINGID_STATHARSHLY; - gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8; - index = 4; - } - else if (statValue <= -3) - { - gBattleTextBuff2[1] = B_BUFF_STRING; - gBattleTextBuff2[2] = STRINGID_SEVERELY & 0xFF; - gBattleTextBuff2[3] = STRINGID_SEVERELY >> 8; - index = 4; - } - gBattleTextBuff2[index++] = B_BUFF_STRING; - gBattleTextBuff2[index++] = STRINGID_STATFELL; - gBattleTextBuff2[index++] = STRINGID_STATFELL >> 8; - gBattleTextBuff2[index] = B_BUFF_EOS; +static void Cmd_handlerollout(void) +{ + CMD_ARGS(); - if (gBattleMons[battler].statStages[statId] == MIN_STAT_STAGE) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_WONT_DECREASE; - } - else - { - gProtectStructs[battler].statFell = TRUE; - gProtectStructs[battler].lashOutAffected = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == battler); // B_MSG_ATTACKER_STAT_FELL or B_MSG_DEFENDER_STAT_FELL - } - } + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + { + CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_IGNORE); + gBattlescriptCurrInstr = BattleScript_MoveMissedPause; } - else // stat increase + else { - statValue = GET_STAT_BUFF_VALUE(statValue); - if (gBattleMons[battler].statStages[statId] == 11) - statValue = 1; - else if (gBattleMons[battler].statStages[statId] == 10 && statValue > 2) - statValue = 2; - gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; - index = 1; - if (statValue == 2) - { - gBattleTextBuff2[1] = B_BUFF_STRING; - gBattleTextBuff2[2] = STRINGID_STATSHARPLY; - gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8; - index = 4; - } - else if (statValue >= 3) + if (!(gBattleMons[gBattlerAttacker].volatiles.multipleTurns)) // First hit. { - gBattleTextBuff2[1] = B_BUFF_STRING; - gBattleTextBuff2[2] = STRINGID_DRASTICALLY & 0xFF; - gBattleTextBuff2[3] = STRINGID_DRASTICALLY >> 8; - index = 4; + gDisableStructs[gBattlerAttacker].rolloutTimer = 5; + gDisableStructs[gBattlerAttacker].rolloutTimerStartValue = 5; + gBattleMons[gBattlerAttacker].volatiles.multipleTurns = TRUE; + gLockedMoves[gBattlerAttacker] = gCurrentMove; } - gBattleTextBuff2[index++] = B_BUFF_STRING; - gBattleTextBuff2[index++] = STRINGID_STATROSE; - gBattleTextBuff2[index++] = STRINGID_STATROSE >> 8; - gBattleTextBuff2[index] = B_BUFF_EOS; - - if (gBattleMons[battler].statStages[statId] == MAX_STAT_STAGE) + if (--gDisableStructs[gBattlerAttacker].rolloutTimer == 0) // Last hit. { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STAT_WONT_INCREASE; + gBattleMons[gBattlerAttacker].volatiles.multipleTurns = FALSE; } - else - { - u32 statIncrease; - if ((statValue + gBattleMons[battler].statStages[statId]) > MAX_STAT_STAGE) - statIncrease = MAX_STAT_STAGE - gBattleMons[battler].statStages[statId]; - else - statIncrease = statValue; - - gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == battler); - gProtectStructs[battler].statRaised = TRUE; - - // Check Mirror Herb / Opportunist - for (index = 0; index < gBattlersCount; index++) - { - if (IsBattlerAlly(index, battler)) - continue; // Only triggers on opposing side - - if (GetBattlerAbility(index) == ABILITY_OPPORTUNIST - && gProtectStructs[battler].activateOpportunist == 0) // don't activate opportunist on other mon's opportunist raises - { - gProtectStructs[index].activateOpportunist = 2; // set stats to copy - } - if (GetBattlerHoldEffect(index, TRUE) == HOLD_EFFECT_MIRROR_HERB) - { - gProtectStructs[index].eatMirrorHerb = 1; - } - if (gProtectStructs[index].activateOpportunist == 2 || gProtectStructs[index].eatMirrorHerb == 1) - { - gQueuedStatBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk - gQueuedStatBoosts[index].statChanges[statId - 1] += statIncrease; - } - } - } + gBattlescriptCurrInstr = cmd->nextInstr; } - - gBattleMons[battler].statStages[statId] += statValue; - if (gBattleMons[battler].statStages[statId] < MIN_STAT_STAGE) - gBattleMons[battler].statStages[statId] = MIN_STAT_STAGE; - if (gBattleMons[battler].statStages[statId] > MAX_STAT_STAGE) - gBattleMons[battler].statStages[statId] = MAX_STAT_STAGE; - - if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && flags & STAT_CHANGE_ALLOW_PTR) - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - - if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && !(flags & STAT_CHANGE_ALLOW_PTR)) - return STAT_CHANGE_DIDNT_WORK; - - return STAT_CHANGE_WORKED; } -static void Cmd_statbuffchange(void) +static void Cmd_jumpifconfusedandstatmaxed(void) { - CMD_ARGS(u16 flags, const u8 *failInstr); - - u16 flags = cmd->flags; - const u8 *ptrBefore = gBattlescriptCurrInstr; - const u8 *failInstr = cmd->failInstr; + CMD_ARGS(u8 stat, const u8 *jumpInstr); - if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), - GET_STAT_BUFF_ID(gBattleScripting.statChanger), - flags, - failInstr) == STAT_CHANGE_WORKED) + if (gBattleMons[gBattlerTarget].volatiles.confusionTurns > 0 + && !CompareStat(gBattlerTarget, cmd->stat, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(gBattlerTarget))) + gBattlescriptCurrInstr = cmd->jumpInstr; // Fails if we're confused AND stat cannot be raised + else gBattlescriptCurrInstr = cmd->nextInstr; - else if (gBattlescriptCurrInstr == ptrBefore) // Prevent infinite looping. - gBattlescriptCurrInstr = failInstr; } -bool32 TryResetBattlerStatChanges(u8 battler) +static void Cmd_handlefurycutter(void) { - u32 j; - bool32 ret = FALSE; + CMD_ARGS(); - gDisableStructs[battler].stockpileDef = 0; - gDisableStructs[battler].stockpileSpDef = 0; - for (j = 0; j < NUM_BATTLE_STATS; j++) + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) { - if (gBattleMons[battler].statStages[j] != DEFAULT_STAT_STAGE) - ret = TRUE; // returns TRUE if any stat was reset - - gBattleMons[battler].statStages[j] = DEFAULT_STAT_STAGE; + gDisableStructs[gBattlerAttacker].furyCutterCounter = 0; + gBattlescriptCurrInstr = BattleScript_MoveMissedPause; } + else + { + u32 max; - return ret; -} - -// Haze -static void Cmd_normalisebuffs(void) -{ - CMD_ARGS(); - - s32 i; + if (B_UPDATED_MOVE_DATA >= GEN_6) + max = 3; + else if (B_UPDATED_MOVE_DATA == GEN_5) + max = 4; + else + max = 5; - for (i = 0; i < gBattlersCount; i++) - TryResetBattlerStatChanges(i); + if (gDisableStructs[gBattlerAttacker].furyCutterCounter < max + && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_2ND_HIT) // Don't increment counter on second hit + gDisableStructs[gBattlerAttacker].furyCutterCounter++; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->nextInstr; + } } -static void Cmd_setbide(void) +static void Cmd_setembargo(void) { - CMD_ARGS(); - - gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMoves[gBattlerAttacker] = gCurrentMove; - gBideDmg[gBattlerAttacker] = 0; - gBattleMons[gBattlerAttacker].status2 |= STATUS2_BIDE_TURN(2); + CMD_ARGS(const u8 *failInstr); - gBattlescriptCurrInstr = cmd->nextInstr; + if (gBattleMons[gBattlerTarget].volatiles.embargo) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gBattleMons[gBattlerTarget].volatiles.embargo = TRUE; + gDisableStructs[gBattlerTarget].embargoTimer = 5; + gBattlescriptCurrInstr = cmd->nextInstr; + } } -static void Cmd_twoturnmoveschargestringandanimation(void) +static void Cmd_presentdamagecalculation(void) { - CMD_ARGS(const u8 *animationThenStringPtr); + CMD_ARGS(); - gBattleScripting.savedStringId = GetMoveTwoTurnAttackStringId(gCurrentMove); - if (B_UPDATED_MOVE_DATA < GEN_5 || MoveHasChargeTurnAdditionalEffect(gCurrentMove)) - gBattlescriptCurrInstr = cmd->animationThenStringPtr; + u32 rand = RandomUniform(RNG_PRESENT, 0, 0xFF); + + /* Don't reroll present effect/power for the second hit of Parental Bond. + * Not sure if this is the correct behaviour, but bulbapedia states + * that if present heals the foe, it doesn't strike twice, and if it deals + * damage, the second strike will always deal damage too. This is a simple way + * to replicate that effect. + */ + if (gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_2ND_HIT) + { + if (rand < 102) + { + gBattleStruct->presentBasePower = 40; + } + else if (rand < 178) + { + gBattleStruct->presentBasePower = 80; + } + else if (rand < 204) + { + gBattleStruct->presentBasePower = 120; + } + else + { + SetHealAmount(gBattlerTarget, GetNonDynamaxMaxHP(gBattlerTarget) / 4); + gBattleStruct->presentBasePower = 0; + } + } + + if (gBattleStruct->presentBasePower) + { + gBattlescriptCurrInstr = BattleScript_HitFromCritCalc; + } + else if (gBattleMons[gBattlerTarget].maxHP == gBattleMons[gBattlerTarget].hp) + { + gBattlescriptCurrInstr = BattleScript_AlreadyAtFullHp; + } else - gBattlescriptCurrInstr = cmd->nextInstr; + { + gBattleStruct->moveResultFlags[gBattlerTarget] &= ~MOVE_RESULT_DOESNT_AFFECT_FOE; + gBattlescriptCurrInstr = BattleScript_PresentHealTarget; + } } -static void Cmd_trynonvolatilestatus(void) +static void Cmd_setsafeguard(void) { CMD_ARGS(); - bool32 canInflictStatus = TRUE; - - if (!CanSetNonVolatileStatus(gBattlerAttacker, - gBattlerTarget, - GetBattlerAbility(gBattlerAttacker), - GetBattlerAbility(gBattlerTarget), - GetMoveNonVolatileStatus(gCurrentMove), - STATUS_RUN_SCRIPT)) - canInflictStatus = FALSE; - if (canInflictStatus && DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + if (gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_SAFEGUARD) { - canInflictStatus = FALSE; - gBattlescriptCurrInstr = BattleScript_ButItFailed; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SIDE_STATUS_FAILED; + } + else + { + gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_SAFEGUARD; + gSideTimers[GetBattlerSide(gBattlerAttacker)].safeguardTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; } - if (canInflictStatus) - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_initmultihitstring(void) +static void Cmd_magnitudedamagecalculation(void) { CMD_ARGS(); - PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) + u32 magnitude = RandomUniform(RNG_MAGNITUDE, 0, 99); + + if (magnitude < 5) + { + gBattleStruct->magnitudeBasePower = 10; + magnitude = 4; + } + else if (magnitude < 15) + { + gBattleStruct->magnitudeBasePower = 30; + magnitude = 5; + } + else if (magnitude < 35) + { + gBattleStruct->magnitudeBasePower = 50; + magnitude = 6; + } + else if (magnitude < 65) + { + gBattleStruct->magnitudeBasePower = 70; + magnitude = 7; + } + else if (magnitude < 85) + { + gBattleStruct->magnitudeBasePower = 90; + magnitude = 8; + } + else if (magnitude < 95) + { + gBattleStruct->magnitudeBasePower = 110; + magnitude = 9; + } + else + { + gBattleStruct->magnitudeBasePower = 150; + magnitude = 10; + } + + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 2, magnitude) + + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) + { + if (gBattlerTarget == gBattlerAttacker) + continue; + if (!(gAbsentBattlerFlags & (1u << gBattlerTarget))) // A valid target was found. + break; + } gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_forcerandomswitch(void) +static bool32 SetTargetToNextPursuiter(u32 battlerDef) { - CMD_ARGS(const u8 *failInstr); + u32 i; + for (i = gCurrentTurnActionNumber + 1; i < gBattlersCount; i++) + { + u32 battler = gBattlerByTurnOrder[i]; + if (gChosenActionByBattler[battler] == B_ACTION_USE_MOVE + && GetMoveEffect(gChosenMoveByBattler[battler]) == EFFECT_PURSUIT + && IsBattlerAlive(battlerDef) + && IsBattlerAlive(battler) + && !IsBattlerAlly(battler, battlerDef) + && (B_PURSUIT_TARGET >= GEN_4 || gBattleStruct->moveTarget[battler] == battlerDef) + && !IsGimmickSelected(battler, GIMMICK_Z_MOVE) + && !IsGimmickSelected(battler, GIMMICK_DYNAMAX) + && GetActiveGimmick(battler) != GIMMICK_DYNAMAX) + { + gBattlerTarget = battler; + return TRUE; + } + } + return FALSE; +} - s32 battler1PartyId = 0; - s32 battler2PartyId = 0; +static void Cmd_jumpifnopursuitswitchdmg(void) +{ + CMD_ARGS(const u8 *jumpInstr); - s32 firstMonId; - s32 lastMonId = 0; // + 1 - struct Pokemon *party = NULL; - u8 validMons[PARTY_SIZE]; - s32 validMonsCount = 0; + u32 savedTarget = gBattlerTarget; - bool32 redCardForcedSwitch = FALSE; + if (SetTargetToNextPursuiter(gBattlerAttacker)) + { + ChangeOrderTargetAfterAttacker(); + gBattleStruct->battlerState[gBattlerAttacker].pursuitTarget = TRUE; + gBattleStruct->pursuitStoredSwitch = gBattleStruct->monToSwitchIntoId[gBattlerAttacker]; + gBattleStruct->moveTarget[gBattlerTarget] = gBattlerAttacker; + gBattlerTarget = savedTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->jumpInstr; + } +} - // Red card checks against wild pokemon. If we have reached here, the player has a mon to switch into - // Red card swaps attacker with target to get the animation correct, so here we check attacker which is really the target. Thanks GF... - if (gBattleScripting.switchCase == B_SWITCH_RED_CARD - && !(gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && !IsOnPlayerSide(gBattlerAttacker)) // Check opponent's red card activating +static void Cmd_tryactivateitem(void) +{ + CMD_ARGS(u8 battler, u8 flag); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + gBattlescriptCurrInstr = cmd->nextInstr; + + switch ((enum ItemActivationState)cmd->flag) { - if (!WILD_DOUBLE_BATTLE) - { - // Wild mon with red card will end single battle - gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle; + case ACTIVATION_ON_USABLE_AGAIN: + case ACTIVATION_ON_PICK_UP: + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsForceTriggerItemActivation)) return; - } - else + break; + case ACTIVATION_ON_HARVEST: + gLastUsedItem = gBattleMons[battler].item; + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnBerryActivation)) + return; + break; + case ACTIVATION_ON_HP_THRESHOLD: + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnHpThresholdActivation)) + return; + break; + } +} + +// Belly Drum, Fillet Away +static void Cmd_halvehp(void) +{ + CMD_ARGS(const u8 *failInstr); + + u32 halfHp = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + + if (!(GetNonDynamaxMaxHP(gBattlerAttacker) / 2)) + halfHp = 1; + + if (gBattleMons[gBattlerAttacker].hp > halfHp) + { + SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 2); + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +// Psych Up +static void Cmd_copyfoestats(void) +{ + CMD_ARGS(); + + s32 i; + + for (i = 0; i < NUM_BATTLE_STATS; i++) + { + gBattleMons[gBattlerAttacker].statStages[i] = gBattleMons[gBattlerTarget].statStages[i]; + } + gBattleScripting.battler = gBattlerTarget; + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void Cmd_rapidspinfree(void) +{ + CMD_ARGS(); + + u8 atkSide = GetBattlerSide(gBattlerAttacker); + + if (gBattleMons[gBattlerAttacker].volatiles.wrapped) + { + gBattleScripting.battler = gBattlerTarget; + gBattleMons[gBattlerAttacker].volatiles.wrapped = FALSE; + gBattlerTarget = gBattleMons[gBattlerAttacker].volatiles.wrappedBy; + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].volatiles.wrappedMove); + BattleScriptCall(BattleScript_WrapFree); + } + else if (gBattleMons[gBattlerAttacker].volatiles.leechSeed) + { + gBattleMons[gBattlerAttacker].volatiles.leechSeed = 0; + BattleScriptCall(BattleScript_LeechSeedFree); + } + else if (AreAnyHazardsOnSide(atkSide)) + { + for (u32 hazardType = HAZARDS_NONE + 1; hazardType < HAZARDS_MAX_COUNT; hazardType++) { - // Wild double battle, wild mon red card activation on player - if (IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) - { - // Both player's battlers are alive - redCardForcedSwitch = FALSE; - } - else + if (IsHazardOnSideAndClear(atkSide, hazardType)) { - // Player has only one mon alive -> force red card switch before manually switching to other mon - redCardForcedSwitch = TRUE; + gBattleStruct->numHazards[atkSide]--; + gBattleCommunication[MULTISTRING_CHOOSER] = hazardType; + BattleScriptCall(BattleScript_SpinHazardsAway); + return; } } } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } +} - // Swapping pokemon happens in: - // trainer battles - // wild double battles when an opposing pokemon uses it against one of the two alive player mons - // wild double battle when a player pokemon uses it against its partner - if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) - || (WILD_DOUBLE_BATTLE - && !IsOnPlayerSide(gBattlerAttacker) - && IsOnPlayerSide(gBattlerTarget) - && IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) - || (WILD_DOUBLE_BATTLE - && IsOnPlayerSide(gBattlerAttacker) - && IsOnPlayerSide(gBattlerTarget)) - || redCardForcedSwitch - ) - { - party = GetBattlerParty(gBattlerTarget); +static void Cmd_unused_0xBF(void) +{ +} - if (BATTLE_TWO_VS_ONE_OPPONENT && !IsOnPlayerSide(gBattlerTarget)) - { - firstMonId = 0; - lastMonId = 6; - battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; - battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; - } - else if ((gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_LINK) - || (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER && gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) - || (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)) +static void Cmd_recoverbasedonsunlight(void) +{ + CMD_ARGS(const u8 *failInstr); + + gBattlerTarget = gBattlerAttacker; + if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP) + { + s32 recoverAmount = 0; + if (GetMoveEffect(gCurrentMove) == EFFECT_SHORE_UP) { - if ((gBattlerTarget & BIT_FLANK) != B_FLANK_LEFT) - { - firstMonId = PARTY_SIZE / 2; - lastMonId = PARTY_SIZE; - } + if (HasWeatherEffect() && gBattleWeather & B_WEATHER_SANDSTORM) + recoverAmount = 20 * GetNonDynamaxMaxHP(gBattlerAttacker) / 30; else - { - firstMonId = 0; - lastMonId = PARTY_SIZE / 2; - } - battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; - battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; + recoverAmount = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; } - else if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) - || (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)) + else if (GetConfig(CONFIG_TIME_OF_DAY_HEALING_MOVES) != GEN_2) { - if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == B_FLANK_RIGHT) - { - firstMonId = PARTY_SIZE / 2; - lastMonId = PARTY_SIZE; - } - else - { - firstMonId = 0; - lastMonId = PARTY_SIZE / 2; - } - battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; - battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; + if (!(gBattleWeather & B_WEATHER_ANY) || !HasWeatherEffect() || GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_UTILITY_UMBRELLA) + recoverAmount = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + else if (gBattleWeather & B_WEATHER_SUN) + recoverAmount = 20 * GetNonDynamaxMaxHP(gBattlerAttacker) / 30; + else // not sunny weather + recoverAmount = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; } - else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + else // B_TIME_OF_DAY_HEALING_MOVES == GEN_2 { - if (IsOnPlayerSide(gBattlerTarget)) - { - firstMonId = 0; - lastMonId = PARTY_SIZE; - } - else + u32 healingModifier = 1; + u32 time = GetTimeOfDay(); + + switch (GetMoveEffect(gCurrentMove)) { - if ((gBattlerTarget & BIT_FLANK) != B_FLANK_LEFT) - { - firstMonId = PARTY_SIZE / 2; - lastMonId = PARTY_SIZE; - } - else - { - firstMonId = 0; - lastMonId = PARTY_SIZE / 2; - } + case EFFECT_MOONLIGHT: + if (time == TIME_NIGHT || time == TIME_EVENING) + healingModifier = 2; + break; + case EFFECT_MORNING_SUN: + if ((OW_TIMES_OF_DAY == GEN_3 && time == TIME_DAY) // Gen 3 doesn't have morning + || (OW_TIMES_OF_DAY != GEN_3 && time == TIME_MORNING)) + healingModifier = 2; + break; + case EFFECT_SYNTHESIS: + if (time == TIME_DAY) + healingModifier = 2; + break; + default: + healingModifier = 1; + break; } - battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; - battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; - } - else if (IsDoubleBattle()) - { - firstMonId = 0; - lastMonId = PARTY_SIZE; - battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; - battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; - } - else - { - firstMonId = 0; - lastMonId = PARTY_SIZE; - battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one PokΓ©mon out in single battles - battler1PartyId = gBattlerPartyIndexes[gBattlerTarget]; - } - for (u32 i = firstMonId; i < lastMonId; i++) - { - if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE - && !GetMonData(&party[i], MON_DATA_IS_EGG) - && GetMonData(&party[i], MON_DATA_HP) != 0 - && i != battler1PartyId - && i != battler2PartyId) - { - validMons[validMonsCount++] = i; - } - } + if (!(gBattleWeather & B_WEATHER_ANY) || !HasWeatherEffect() || GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_UTILITY_UMBRELLA) + recoverAmount = healingModifier * GetNonDynamaxMaxHP(gBattlerAttacker) / 4; + else if (gBattleWeather & B_WEATHER_SUN) + recoverAmount = healingModifier * GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + else // not sunny weather + recoverAmount = healingModifier * GetNonDynamaxMaxHP(gBattlerAttacker) / 8; - if (validMonsCount == 0) - { - gBattlescriptCurrInstr = cmd->failInstr; } - else - { - gBattleStruct->battlerPartyIndexes[gBattlerTarget] = gBattlerPartyIndexes[gBattlerTarget]; - gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; - gBattleStruct->battlerState[gBattlerTarget].forcedSwitch = TRUE; - gBattleStruct->monToSwitchIntoId[gBattlerTarget] = validMons[RandomUniform(RNG_FORCE_RANDOM_SWITCH, 0, validMonsCount - 1)]; - - if (!IsMultiBattle()) - SwitchPartyOrder(gBattlerTarget); - - if ((gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - || (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI) - || (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - || (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { - SwitchPartyOrderLinkMulti(gBattlerTarget, gBattleStruct->monToSwitchIntoId[gBattlerTarget], 0); - SwitchPartyOrderLinkMulti(BATTLE_PARTNER(gBattlerTarget), gBattleStruct->monToSwitchIntoId[gBattlerTarget], 1); - } - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - SwitchPartyOrderInGameMulti(gBattlerTarget, gBattleStruct->monToSwitchIntoId[gBattlerTarget]); - } + SetHealAmount(gBattlerAttacker, recoverAmount); + gBattlescriptCurrInstr = cmd->nextInstr; } else { - // In normal wild doubles, Roar will always fail if the user's level is less than the target's. - if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) - gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle; - else - gBattlescriptCurrInstr = cmd->failInstr; + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_tryconversiontypechange(void) +static void Cmd_setstickyweb(void) { CMD_ARGS(const u8 *failInstr); - u8 validMoves = 0; - u8 moveChecked = 0; - u8 moveType = 0; + u8 targetSide = GetBattlerSide(gBattlerTarget); - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) + if (IsHazardOnSide(targetSide, HAZARDS_STICKY_WEB)) { gBattlescriptCurrInstr = cmd->failInstr; - return; - } - - if (B_UPDATED_CONVERSION >= GEN_6) - { - // Changes user's type to its first move's type - for (moveChecked = 0; moveChecked < MAX_MON_MOVES; moveChecked++) - { - if (gBattleMons[gBattlerAttacker].moves[moveChecked] != MOVE_NONE) - { - moveType = GetMoveType(gBattleMons[gBattlerAttacker].moves[moveChecked]); - break; - } - } - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - SET_BATTLER_TYPE(gBattlerAttacker, moveType); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - gBattlescriptCurrInstr = cmd->nextInstr; - } } else { - // Randomly changes user's type to one of its moves' type - while (validMoves < MAX_MON_MOVES) - { - if (gBattleMons[gBattlerAttacker].moves[validMoves] == MOVE_NONE) - break; - - validMoves++; - } - - for (moveChecked = 0; moveChecked < validMoves; moveChecked++) - { - moveType = GetMoveType(gBattleMons[gBattlerAttacker].moves[moveChecked]); - - if (moveType == TYPE_MYSTERY) - { - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) - moveType = TYPE_GHOST; - else - moveType = TYPE_NORMAL; - } - if (moveType != gBattleMons[gBattlerAttacker].types[0] - && moveType != gBattleMons[gBattlerAttacker].types[1] - && moveType != gBattleMons[gBattlerAttacker].types[2]) - { - break; - } - } - - if (moveChecked == validMoves) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - do - { - while ((moveChecked = MOD(Random(), MAX_MON_MOVES)) >= validMoves); - - moveType = GetMoveType(gBattleMons[gBattlerAttacker].moves[moveChecked]); - - if (moveType == TYPE_MYSTERY) - { - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) - moveType = TYPE_GHOST; - else - moveType = TYPE_NORMAL; - } - } - while (moveType == gBattleMons[gBattlerAttacker].types[0] || moveType == gBattleMons[gBattlerAttacker].types[1] || moveType == gBattleMons[gBattlerAttacker].types[2]); - - SET_BATTLER_TYPE(gBattlerAttacker, moveType); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - - gBattlescriptCurrInstr = cmd->nextInstr; - } + PushHazardTypeToQueue(targetSide, HAZARDS_STICKY_WEB); + gSideTimers[targetSide].stickyWebBattlerId = gBattlerAttacker; // For Mirror Armor + gSideTimers[targetSide].stickyWebBattlerSide = GetBattlerSide(gBattlerAttacker); // For Court Change/Defiant - set this to the user's side + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_givepaydaymoney(void) +static void Cmd_selectfirstvalidtarget(void) { CMD_ARGS(); - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) && gPaydayMoney != 0) - { - u32 bonusMoney = gPaydayMoney * gBattleStruct->moneyMultiplier; - AddMoney(&gSaveBlock1Ptr->money, bonusMoney); - - PREPARE_HWORD_NUMBER_BUFFER(gBattleTextBuff1, 5, bonusMoney) - - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_PrintPayDayMoneyString; - } - else + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { - gBattlescriptCurrInstr = cmd->nextInstr; + if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) + continue; + if (IsBattlerAlive(gBattlerTarget)) + break; } + if (gBattlerTarget >= gBattlersCount) + gBattlerTarget = 0; + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setlightscreen(void) +static void Cmd_setfutureattack(void) { CMD_ARGS(); - if (!TrySetLightScreen(gBattlerAttacker)) - { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SIDE_STATUS_FAILED; - } + gWishFutureKnock.futureSightMove[gBattlerTarget] = gCurrentMove; + gWishFutureKnock.futureSightBattlerIndex[gBattlerTarget] = gBattlerAttacker; + gWishFutureKnock.futureSightPartyIndex[gBattlerTarget] = gBattlerPartyIndexes[gBattlerAttacker]; + gWishFutureKnock.futureSightCounter[gBattlerTarget] = 3; + + if (gCurrentMove == MOVE_DOOM_DESIRE) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOOM_DESIRE; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FUTURE_SIGHT; gBattlescriptCurrInstr = cmd->nextInstr; } -#define NOT_ENDURED 0 -#define FOCUS_SASHED 1 -#define FOCUS_BANDED 2 -#define AFFECTION_ENDURED 3 -static void Cmd_tryKO(void) +static void Cmd_trydobeatup(void) { - CMD_ARGS(const u8 *failInstr); - - bool32 lands = FALSE; - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(gBattlerTarget, TRUE); - u16 targetAbility = GetBattlerAbility(gBattlerTarget); - u32 rand = Random() % 100; - u32 affectionScore = GetBattlerAffectionHearts(gBattlerTarget); - u32 endured = NOT_ENDURED; - - // Dynamaxed Pokemon cannot be hit by OHKO moves. - if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) - { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED; - gBattlescriptCurrInstr = cmd->failInstr; - return; - } + CMD_ARGS(const u8 *endInstr, const u8 *failInstr); - gPotentialItemEffectBattler = gBattlerTarget; - if (holdEffect == HOLD_EFFECT_FOCUS_BAND - && (Random() % 100) < GetBattlerHoldEffectParam(gBattlerTarget)) + if (!IsBattlerAlive(gBattlerTarget)) { - endured = FOCUS_BANDED; - RecordItemEffectBattle(gBattlerTarget, holdEffect); + gMultiHitCounter = 0; + gBattlescriptCurrInstr = cmd->endInstr; } - else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && IsBattlerAtMaxHp(gBattlerTarget)) + else if (gBattleStruct->beatUpSlot == 0 && gMultiHitCounter == 0) { - endured = FOCUS_SASHED; - RecordItemEffectBattle(gBattlerTarget, holdEffect); + gBattlescriptCurrInstr = cmd->failInstr; } - else if (B_AFFECTION_MECHANICS == TRUE && IsOnPlayerSide(gBattlerTarget) && affectionScore >= AFFECTION_THREE_HEARTS) + else { - if ((affectionScore == AFFECTION_FIVE_HEARTS && rand < 20) - || (affectionScore == AFFECTION_FOUR_HEARTS && rand < 15) - || (affectionScore == AFFECTION_THREE_HEARTS && rand < 10)) - endured = AFFECTION_ENDURED; + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleStruct->beatUpSpecies[gBattleStruct->beatUpSlot]) + gBattlescriptCurrInstr = cmd->nextInstr; } +} - if (targetAbility == ABILITY_STURDY) - { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gLastUsedAbility = ABILITY_STURDY; - gBattlescriptCurrInstr = BattleScript_SturdyPreventsOHKO; - gBattlerAbility = gBattlerTarget; - } - else - { - if ((((gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS) - && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) - || GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD - || targetAbility == ABILITY_NO_GUARD) - && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) - { - lands = TRUE; - } - else - { - u16 odds = GetMoveAccuracy(gCurrentMove) + (gBattleMons[gBattlerAttacker].level - gBattleMons[gBattlerTarget].level); - if (B_SHEER_COLD_ACC >= GEN_7 && gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) - odds -= 10; - if (RandomPercentage(RNG_ACCURACY, odds) && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) - lands = TRUE; - } +static void Cmd_setsemiinvulnerablebit(void) +{ + CMD_ARGS(bool8 clear); - if (lands) - { - if (gProtectStructs[gBattlerTarget].endured) - { - gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].hp - 1; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FOE_ENDURED; - } - else if (endured == FOCUS_BANDED || endured == FOCUS_SASHED) - { - gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].hp - 1; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FOE_HUNG_ON; - gLastUsedItem = gBattleMons[gBattlerTarget].item; - } - else if (endured == AFFECTION_ENDURED) - { - gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].hp - 1; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FOE_ENDURED_AFFECTION; - } - else - { - gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].hp; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_ONE_HIT_KO; - } - gBattlescriptCurrInstr = cmd->nextInstr; - } + if (gBattleMoveEffects[GetMoveEffect(gCurrentMove)].semiInvulnerableEffect == TRUE) + { + u32 semiInvulnerableEffect = GetMoveTwoTurnAttackStatus(gCurrentMove); + if (cmd->clear) + gBattleMons[gBattlerAttacker].volatiles.semiInvulnerable = STATE_NONE; else - { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_MISS; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED; - gBattlescriptCurrInstr = cmd->failInstr; - } + gBattleMons[gBattlerAttacker].volatiles.semiInvulnerable = semiInvulnerableEffect; } + + gBattlescriptCurrInstr = cmd->nextInstr; } -#undef NOT_ENDURED -#undef FOCUS_SASHED -#undef FOCUS_BANDED -#undef AFFECTION_ENDURED -static void Cmd_unused_0x94(void) +static bool32 CheckIfCanFireTwoTurnMoveNow(u8 battler, bool8 checkChargeTurnEffects) { + // Semi-invulnerable moves cannot skip their charge turn (except with Power Herb) + if (gBattleMoveEffects[GetMoveEffect(gCurrentMove)].semiInvulnerableEffect == TRUE) + return FALSE; + + // If this move has charge turn effects, it must charge, activate them, then try to fire + if (checkChargeTurnEffects && MoveHasChargeTurnAdditionalEffect(gCurrentMove)) + return FALSE; + + // Insert custom conditions here + + // Certain two-turn moves may fire on the first turn in the right weather (Solar Beam, Electro Shot) + // By default, all two-turn moves have the option of adding weather to their argument + if (IsBattlerWeatherAffected(battler, GetMoveTwoTurnAttackWeather(gCurrentMove))) + return TRUE; + + return FALSE; } -static void Cmd_copybidedmg(void) +static void Cmd_tryfiretwoturnmovenowbyeffect(void) { - CMD_ARGS(); - gBattleStruct->moveDamage[gBattlerTarget] = gBideDmg[gBattlerAttacker] * 2; - gBattlescriptCurrInstr = cmd->nextInstr; + CMD_ARGS(u8 battler, bool8 checkChargeTurnEffects, const u8 *jumpInstr); + + if (CheckIfCanFireTwoTurnMoveNow(cmd->battler, cmd->checkChargeTurnEffects) == TRUE) + { + gBattleScripting.animTurn = 1; + gBattlescriptCurrInstr = cmd->jumpInstr; + } + else + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_unused_96(void) +static void Cmd_unused_0xC7(void) { } -static void Cmd_tryinfatuating(void) +static void Cmd_unused_c8(void) +{ +} + +static void Cmd_trymemento(void) { CMD_ARGS(const u8 *failInstr); - if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) + if (B_MEMENTO_FAIL >= GEN_4 + && (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED + || IsSemiInvulnerable(gBattlerTarget, CHECK_ALL) + || IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) + || DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) { - gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; - gLastUsedAbility = ABILITY_OBLIVIOUS; - RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS); + // Failed, target was protected. + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (B_MEMENTO_FAIL < GEN_4 + && gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE + && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE + && gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED) + { + // Failed, unprotected target already has minimum Attack and Special Attack. + gBattlescriptCurrInstr = cmd->failInstr; } else { - if (gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION - || !AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker); - gBattlescriptCurrInstr = cmd->nextInstr; - } + // Success, drop user's HP bar to 0 + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp; + BtlController_EmitHealthBarUpdate(gBattlerAttacker, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP); + MarkBattlerForControllerExec(gBattlerAttacker); + + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_updatestatusicon(void) +// Follow Me +static void Cmd_setforcedtarget(void) { - CMD_ARGS(u8 battler); - u32 battler; + CMD_ARGS(); - if (gBattleControllerExecFlags) - return; + gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 1; + gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget = gBattlerTarget; + gSideTimers[GetBattlerSide(gBattlerTarget)].followmePowder = IsPowderMove(gCurrentMove); + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (cmd->battler == BS_PLAYER2) - { - for (battler = gBattleControllerExecFlags; battler < gBattlersCount; battler++) - { - if (!(gAbsentBattlerFlags & (1u << battler))) - { - BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1, gBattleMons[battler].status2); - MarkBattlerForControllerExec(battler); - } - } - gBattlescriptCurrInstr = cmd->nextInstr; - } - else if (cmd->battler == BS_ATTACKER_WITH_PARTNER) +static void Cmd_unused_0xcb(void) +{ +} + +static void Cmd_unused_0xCC(void) +{ +} + +static void Cmd_curestatuswithmove(void) +{ + CMD_ARGS(const u8 *failInstr); + u32 shouldHeal; + + if (GetMoveEffect(gCurrentMove) == EFFECT_REFRESH) + shouldHeal = gBattleMons[gBattlerAttacker].status1 & STATUS1_CAN_MOVE; + else // Take Heart + shouldHeal = gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY; + + if (shouldHeal) { - battler = gBattlerAttacker; - if (!(gAbsentBattlerFlags & (1u << battler))) - { - BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1, gBattleMons[battler].status2); - MarkBattlerForControllerExec(battler); - } - if ((IsDoubleBattle())) - { - battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (!(gAbsentBattlerFlags & (1u << battler))) - { - BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1, gBattleMons[battler].status2); - MarkBattlerForControllerExec(battler); - } - } + if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) + TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), gBattlerPartyIndexes[gBattlerAttacker]); + + gBattleMons[gBattlerAttacker].status1 = 0; gBattlescriptCurrInstr = cmd->nextInstr; + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1); + MarkBattlerForControllerExec(gBattlerAttacker); } else { - battler = GetBattlerForBattleScript(cmd->battler); - BtlController_EmitStatusIconUpdate(battler, B_COMM_TO_CONTROLLER, gBattleMons[battler].status1, gBattleMons[battler].status2); - MarkBattlerForControllerExec(battler); - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_setmist(void) +static void Cmd_settorment(void) { - CMD_ARGS(); + CMD_ARGS(const u8 *failInstr); - if (gSideTimers[GetBattlerSide(gBattlerAttacker)].mistTimer) + if (gBattleMons[gBattlerTarget].volatiles.torment == TRUE + || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FAILED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MIST_FAILED; + gBattlescriptCurrInstr = cmd->failInstr; } else { - gSideTimers[GetBattlerSide(gBattlerAttacker)].mistTimer = gBattleTurnCounter + 5; - gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_MIST; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_MIST; + gBattleMons[gBattlerTarget].volatiles.torment = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; } - gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setfocusenergy(void) +static void Cmd_jumpifnodamage(void) { - CMD_ARGS(u8 battler); - u8 battler = GetBattlerForBattleScript(cmd->battler); - enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); + CMD_ARGS(const u8 *jumpInstr); - if ((effect == EFFECT_DRAGON_CHEER && (!(IsDoubleBattle()) || (gAbsentBattlerFlags & (1u << battler)))) - || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) - { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FAILED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FOCUS_ENERGY_FAILED; - } - else if (effect == EFFECT_DRAGON_CHEER && !IS_BATTLER_OF_TYPE(battler, TYPE_DRAGON)) - { - gBattleMons[battler].status2 |= STATUS2_DRAGON_CHEER; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_GETTING_PUMPED; - } + if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg) + gBattlescriptCurrInstr = cmd->nextInstr; else - { - if (GetGenConfig(GEN_CONFIG_FOCUS_ENERGY_CRIT_RATIO) >= GEN_3) - gBattleMons[battler].status2 |= STATUS2_FOCUS_ENERGY; - else - gBattleMons[battler].status2 |= STATUS2_DRAGON_CHEER; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_GETTING_PUMPED; - } - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->jumpInstr; } -static void Cmd_transformdataexecution(void) +static void Cmd_settaunt(void) { - CMD_ARGS(); + CMD_ARGS(const u8 *failInstr); - gChosenMove = MOVE_UNAVAILABLE; - gBattlescriptCurrInstr = cmd->nextInstr; - if (gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED - || gBattleStruct->illusion[gBattlerTarget].state == ILLUSION_ON - || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE_NO_COMMANDER) + if (GetConfig(CONFIG_OBLIVIOUS_TAUNT) >= GEN_6 && GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_FAILED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TRANSFORM_FAILED; + gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; + gLastUsedAbility = ABILITY_OBLIVIOUS; + RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS); } - else + else if (gDisableStructs[gBattlerTarget].tauntTimer == 0) { - s32 i; - u8 *battleMonAttacker, *battleMonTarget; - u8 timesGotHit; - - gBattleMons[gBattlerAttacker].status2 |= STATUS2_TRANSFORMED; - gDisableStructs[gBattlerAttacker].disabledMove = MOVE_NONE; - gDisableStructs[gBattlerAttacker].disableTimer = 0; - gDisableStructs[gBattlerAttacker].transformedMonPersonality = gBattleMons[gBattlerTarget].personality; - gDisableStructs[gBattlerAttacker].transformedMonShininess = gBattleMons[gBattlerTarget].isShiny; - gDisableStructs[gBattlerAttacker].mimickedMoves = 0; - gDisableStructs[gBattlerAttacker].usedMoves = 0; - - timesGotHit = gBattleStruct->timesGotHit[GetBattlerSide(gBattlerTarget)][gBattlerPartyIndexes[gBattlerTarget]]; - gBattleStruct->timesGotHit[GetBattlerSide(gBattlerAttacker)][gBattlerPartyIndexes[gBattlerAttacker]] = timesGotHit; - - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].species) - - battleMonAttacker = (u8 *)(&gBattleMons[gBattlerAttacker]); - battleMonTarget = (u8 *)(&gBattleMons[gBattlerTarget]); - - for (i = 0; i < offsetof(struct BattlePokemon, pp); i++) - battleMonAttacker[i] = battleMonTarget[i]; - - gDisableStructs[gBattlerAttacker].overwrittenAbility = GetBattlerAbility(gBattlerTarget); - for (i = 0; i < MAX_MON_MOVES; i++) + u8 turns; + if (B_TAUNT_TURNS >= GEN_5) { - u32 pp = GetMovePP(gBattleMons[gBattlerAttacker].moves[i]); - if (pp < 5) - gBattleMons[gBattlerAttacker].pp[i] = pp; - else - gBattleMons[gBattlerAttacker].pp[i] = 5; + turns = 4; + if (!HasBattlerActedThisTurn(gBattlerTarget)) + turns--; // If the target hasn't yet moved this turn, Taunt lasts for only three turns (source: Bulbapedia) + } + else if (B_TAUNT_TURNS >= GEN_4) + { + turns = (Random() & 2) + 3; + } + else + { + turns = 2; } - // update AI knowledge - RecordAllMoves(gBattlerAttacker); - RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability); - - BtlController_EmitResetActionMoveSelection(gBattlerAttacker, B_COMM_TO_CONTROLLER, RESET_MOVE_SELECTION); - MarkBattlerForControllerExec(gBattlerAttacker); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TRANSFORMED; + gDisableStructs[gBattlerTarget].tauntTimer = turns; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_setsubstitute(void) +static void Cmd_trysethelpinghand(void) { - CMD_ARGS(); - - u32 factor = GetMoveEffect(gCurrentMove) == EFFECT_SHED_TAIL ? 2 : 4; - u32 hp; + CMD_ARGS(const u8 *failInstr); - if (factor == 2) - hp = (GetNonDynamaxMaxHP(gBattlerAttacker)+1) / factor; // shed tail rounds up - else - hp = GetNonDynamaxMaxHP(gBattlerAttacker) / factor; // one bit value will only work for PokΓ©mon which max hp can go to 1020(which is more than possible in games) + if (!IsDoubleBattle()) + { + gBattlescriptCurrInstr = cmd->failInstr; + return; + } - if (hp == 0) - hp = 1; + gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (gBattleMons[gBattlerAttacker].hp <= hp) + if (!(gAbsentBattlerFlags & (1u << gBattlerTarget)) + && !HasBattlerActedThisTurn(gBattlerTarget)) { - gBattleStruct->moveDamage[gBattlerAttacker] = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SUBSTITUTE_FAILED; + gProtectStructs[gBattlerTarget].helpingHand++; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattleStruct->moveDamage[gBattlerAttacker] = hp; // one bit value will only work for PokΓ©mon which max hp can go to 1020(which is more than possible in games) - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - - gBattleMons[gBattlerAttacker].status2 |= STATUS2_SUBSTITUTE; - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_WRAPPED; - if (factor == 2) - gDisableStructs[gBattlerAttacker].substituteHP = gBattleStruct->moveDamage[gBattlerAttacker] / 2; - else - gDisableStructs[gBattlerAttacker].substituteHP = gBattleStruct->moveDamage[gBattlerAttacker]; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SUBSTITUTE; - gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE; + gBattlescriptCurrInstr = cmd->failInstr; } - - gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_mimicattackcopy(void) +// Trick +static void Cmd_tryswapitems(void) { CMD_ARGS(const u8 *failInstr); - if ((IsMoveMimicBanned(gLastMoves[gBattlerTarget])) - || (gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) - || gLastMoves[gBattlerTarget] == MOVE_NONE - || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) + // opponent can't swap items with player in regular battles + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL + || (!IsOnPlayerSide(gBattlerAttacker) + && !(gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_SECRET_BASE + | BATTLE_TYPE_RECORDED_LINK + | (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE ? BATTLE_TYPE_TRAINER : 0) + )))) { gBattlescriptCurrInstr = cmd->failInstr; } else { - int i; + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); + u8 sideTarget = GetBattlerSide(gBattlerTarget); - for (i = 0; i < MAX_MON_MOVES; i++) + // You can't swap items if they were knocked off in regular battles + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_SECRET_BASE + | BATTLE_TYPE_RECORDED_LINK)) + && (gWishFutureKnock.knockedOffMons[sideAttacker] & (1u << gBattlerPartyIndexes[gBattlerAttacker]) + || gWishFutureKnock.knockedOffMons[sideTarget] & (1u << gBattlerPartyIndexes[gBattlerTarget]))) { - if (gBattleMons[gBattlerAttacker].moves[i] == gLastMoves[gBattlerTarget]) - break; + gBattlescriptCurrInstr = cmd->failInstr; } - - if (i == MAX_MON_MOVES) + // can't swap if two PokΓ©mon don't have an item + // or if either of them is an enigma berry or a mail + else if ((gBattleMons[gBattlerAttacker].item == ITEM_NONE && gBattleMons[gBattlerTarget].item == ITEM_NONE) + || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) + || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerTarget].item) + || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerTarget].item) + || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item)) { - gChosenMove = 0xFFFF; - gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastMoves[gBattlerTarget]; - u32 pp = GetMovePP(gLastMoves[gBattlerTarget]); - if (pp < 5) - gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = pp; - else - gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 5; - - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) - - gDisableStructs[gBattlerAttacker].mimickedMoves |= 1u << gCurrMovePos; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } - else + // check if ability prevents swapping + else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_STICKY_HOLD) { gBattlescriptCurrInstr = cmd->failInstr; } - } -} + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) + { + gBattlescriptCurrInstr = BattleScript_StickyHoldActivates; + gLastUsedAbility = gBattleMons[gBattlerTarget].ability; + RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + } + // took a while, but all checks passed and items can be safely swapped + else + { + u16 oldItemAtk, *newItemAtk; -static bool32 InvalidMetronomeMove(u32 move) -{ - return GetMoveEffect(move) == EFFECT_PLACEHOLDER - || IsMoveMetronomeBanned(move); -} + newItemAtk = &gBattleStruct->changedItems[gBattlerAttacker]; + oldItemAtk = gBattleMons[gBattlerAttacker].item; + *newItemAtk = gBattleMons[gBattlerTarget].item; -static void Cmd_metronome(void) -{ - CMD_ARGS(); + gBattleMons[gBattlerAttacker].item = ITEM_NONE; + gBattleMons[gBattlerTarget].item = oldItemAtk; -#if B_METRONOME_MOVES >= GEN_9 - u32 moveCount = MOVES_COUNT_GEN9; -#elif B_METRONOME_MOVES >= GEN_8 - u32 moveCount = MOVES_COUNT_GEN8; -#elif B_METRONOME_MOVES >= GEN_7 - u32 moveCount = MOVES_COUNT_GEN7; -#elif B_METRONOME_MOVES >= GEN_6 - u32 moveCount = MOVES_COUNT_GEN6; -#elif B_METRONOME_MOVES >= GEN_5 - u32 moveCount = MOVES_COUNT_GEN5; -#elif B_METRONOME_MOVES >= GEN_4 - u32 moveCount = MOVES_COUNT_GEN4; -#elif B_METRONOME_MOVES >= GEN_3 - u32 moveCount = MOVES_COUNT_GEN3; -#elif B_METRONOME_MOVES >= GEN_2 - u32 moveCount = MOVES_COUNT_GEN2; -#else - u32 moveCount = MOVES_COUNT_GEN1; -#endif + RecordItemEffectBattle(gBattlerAttacker, 0); + RecordItemEffectBattle(gBattlerTarget, GetItemHoldEffect(oldItemAtk)); - gCurrentMove = RandomUniformExcept(RNG_METRONOME, 1, moveCount - 1, InvalidMetronomeMove); - PrepareStringBattle(STRINGID_WAGGLINGAFINGER, gBattlerAttacker); - gBattlescriptCurrInstr = GetMoveBattleScript(gCurrentMove); - gBattlerTarget = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); - ResetValuesForCalledMove(); -} + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(*newItemAtk), newItemAtk); + MarkBattlerForControllerExec(gBattlerAttacker); -static void Cmd_unused_0x9f(void) -{ -} + BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); + MarkBattlerForControllerExec(gBattlerTarget); -static void Cmd_unused_0xA0(void) -{ -} + if (GetBattlerAbility(gBattlerTarget) != ABILITY_GORILLA_TACTICS) + gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE; + if (GetBattlerAbility(gBattlerTarget) != ABILITY_GORILLA_TACTICS) + gBattleStruct->choicedMove[gBattlerAttacker] = MOVE_NONE; -static void Cmd_counterdamagecalculator(void) -{ - CMD_ARGS(const u8 *failInstr); + gBattlescriptCurrInstr = cmd->nextInstr; - u8 sideAttacker = GetBattlerSide(gBattlerAttacker); - u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId); + PREPARE_ITEM_BUFFER(gBattleTextBuff1, *newItemAtk) + PREPARE_ITEM_BUFFER(gBattleTextBuff2, oldItemAtk) - if (gProtectStructs[gBattlerAttacker].physicalDmg - && sideAttacker != sideTarget - && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp) - { - gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].physicalDmg * 2; + if (!(sideAttacker == sideTarget && IsPartnerMonFromSameTrainer(gBattlerAttacker))) + { + // if targeting your own side and you aren't in a multi battle, don't save items as stolen + if (IsOnPlayerSide(gBattlerAttacker)) + TrySaveExchangedItem(gBattlerAttacker, oldItemAtk); + if (IsOnPlayerSide(gBattlerTarget)) + TrySaveExchangedItem(gBattlerTarget, *newItemAtk); + } - if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) - gBattlerTarget = gSideTimers[sideTarget].followmeTarget; - else - gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; + if (oldItemAtk != ITEM_NONE && *newItemAtk != ITEM_NONE) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_BOTH; // attacker's item -> <- target's item + } + else if (oldItemAtk == ITEM_NONE && *newItemAtk != ITEM_NONE) + { + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNBURDEN && gDisableStructs[gBattlerAttacker].unburdenActive) + gDisableStructs[gBattlerAttacker].unburdenActive = FALSE; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_TAKEN; // nothing -> <- target's item + } + else + { + CheckSetUnburden(gBattlerAttacker); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_GIVEN; // attacker's item -> <- nothing + } + } } } -// A copy of Cmd with the physical -> special field changes -static void Cmd_mirrorcoatdamagecalculator(void) +static bool32 CanAbilityShieldActivateForBattler(u32 battler) { - CMD_ARGS(const u8 *failInstr); + if (GetBattlerHoldEffectIgnoreAbility(battler) != HOLD_EFFECT_ABILITY_SHIELD) + return FALSE; - u8 sideAttacker = GetBattlerSide(gBattlerAttacker); - u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId); + RecordItemEffectBattle(battler, HOLD_EFFECT_ABILITY_SHIELD); + gBattlerAbility = battler; + gLastUsedItem = gBattleMons[battler].item; + return TRUE; +} - if (gProtectStructs[gBattlerAttacker].specialDmg - && sideAttacker != sideTarget - && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) - { - gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].specialDmg * 2; +// Role Play, Doodle +static void Cmd_trycopyability(void) +{ + CMD_ARGS(u8 battler, const u8 *failInstr); - if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) - gBattlerTarget = gSideTimers[sideTarget].followmeTarget; - else - gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; + u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 partner = BATTLE_PARTNER(battler); + enum Ability defAbility = gBattleMons[gBattlerTarget].ability; + bool32 shouldConsiderPartner = IsBattlerAlive(partner) && GetMoveEffect(gCurrentMove) == EFFECT_DOODLE; - gBattlescriptCurrInstr = cmd->nextInstr; + if (gBattleMons[battler].ability == defAbility + || defAbility == ABILITY_NONE + || gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed + || (shouldConsiderPartner && gAbilitiesInfo[gBattleMons[partner].ability].cantBeSuppressed) + || gAbilitiesInfo[defAbility].cantBeCopied) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (CanAbilityShieldActivateForBattler(battler) || (shouldConsiderPartner && CanAbilityShieldActivateForBattler(partner))) + { + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); } else { - gBattlescriptCurrInstr = cmd->failInstr; + RemoveAbilityFlags(battler); + gBattleScripting.abilityPopupOverwrite = gBattleMons[battler].ability; + gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = defAbility; + gLastUsedAbility = defAbility; + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_disablelastusedattack(void) +static void Cmd_trywish(void) { CMD_ARGS(const u8 *failInstr); - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) + if (gBattleMons[gBattlerTarget].volatiles.healBlock) { - if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) - break; + gBattlescriptCurrInstr = cmd->failInstr; } - if (gDisableStructs[gBattlerTarget].disabledMove == MOVE_NONE - && i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) + else if (gWishFutureKnock.wishCounter[gBattlerAttacker] == 0) { - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].moves[i]) - - gDisableStructs[gBattlerTarget].disabledMove = gBattleMons[gBattlerTarget].moves[i]; - if (B_DISABLE_TURNS >= GEN_5) - gDisableStructs[gBattlerTarget].disableTimer = 4; - else if (B_DISABLE_TURNS >= GEN_4) - gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 4; // 4-7 turns - else - gDisableStructs[gBattlerTarget].disableTimer = (Random() & 3) + 2; // 2-5 turns + gWishFutureKnock.wishCounter[gBattlerAttacker] = 2; + gWishFutureKnock.wishPartyId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker]; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -13443,3078 +12834,2724 @@ static void Cmd_disablelastusedattack(void) } } -static void Cmd_trysetencore(void) +static void Cmd_settoxicspikes(void) { CMD_ARGS(const u8 *failInstr); - s32 i; - - if (IsMaxMove(gLastMoves[gBattlerTarget]) && !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) + u8 targetSide = GetBattlerSide(gBattlerTarget); + if (gSideTimers[targetSide].toxicSpikesAmount >= 2) { - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBattlerTarget].moves[i] == gBattleStruct->dynamax.baseMoves[gBattlerTarget]) - break; - } + gBattlescriptCurrInstr = cmd->failInstr; } else { - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) - break; - } + if (gSideTimers[targetSide].toxicSpikesAmount == 0) + PushHazardTypeToQueue(targetSide, HAZARDS_TOXIC_SPIKES); + gSideTimers[targetSide].toxicSpikesAmount++; + gBattlescriptCurrInstr = cmd->nextInstr; } +} - if ((IsMoveEncoreBanned(gLastMoves[gBattlerTarget])) - || gLastMoves[gBattlerTarget] == MOVE_NONE - || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) +static void Cmd_setgastroacid(void) +{ + CMD_ARGS(const u8 *failInstr); + + if (gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeSuppressed) { - i = MAX_MON_MOVES; + gBattlescriptCurrInstr = cmd->failInstr; } - - if (gDisableStructs[gBattlerTarget].encoredMove == MOVE_NONE - && i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) + else if (GetBattlerHoldEffectIgnoreAbility(gBattlerTarget) == HOLD_EFFECT_ABILITY_SHIELD) { - gDisableStructs[gBattlerTarget].encoredMove = gBattleMons[gBattlerTarget].moves[i]; - gDisableStructs[gBattlerTarget].encoredMovePos = i; - // Encore always lasts 3 turns, but we need to account for a scenario where Encore changes the move during the same turn. - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - gDisableStructs[gBattlerTarget].encoreTimer = 4; - else - gDisableStructs[gBattlerTarget].encoreTimer = 3; - gBattlescriptCurrInstr = cmd->nextInstr; + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); + gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattlescriptCurrInstr = cmd->failInstr; + if (gDisableStructs[gBattlerTarget].neutralizingGas) + gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; + + gBattleMons[gBattlerTarget].volatiles.gastroAcid = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_painsplitdmgcalc(void) +static void Cmd_setyawn(void) { CMD_ARGS(const u8 *failInstr); + enum Ability ability = GetBattlerAbility(gBattlerTarget); + enum HoldEffect holdEffect = GetBattlerHoldEffect(gBattlerTarget); - if (!(DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) + if (gBattleMons[gBattlerTarget].volatiles.yawn + || gBattleMons[gBattlerTarget].status1 & STATUS1_ANY) { - s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + GetNonDynamaxHP(gBattlerTarget)) / 2; - - gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxHP(gBattlerTarget) - hpDiff; - gBattleStruct->moveDamage[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp - hpDiff; - - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (IsBattlerTerrainAffected(gBattlerTarget, ability, holdEffect, STATUS_FIELD_ELECTRIC_TERRAIN)) + { + // When Yawn is used while Electric Terrain is set and drowsiness is set from Yawn being used against target in the previous turn: + // "But it failed" will display first. + gBattlescriptCurrInstr = BattleScript_ElectricTerrainPrevents; + } + else if (IsBattlerTerrainAffected(gBattlerTarget, ability, holdEffect, STATUS_FIELD_MISTY_TERRAIN)) + { + // When Yawn is used while Misty Terrain is set and drowsiness is set from Yawn being used against target in the previous turn: + // "But it failed" will display first. + gBattlescriptCurrInstr = BattleScript_MistyTerrainPrevents; } else { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleMons[gBattlerTarget].volatiles.yawn = 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } -// Conversion 2 -static void Cmd_settypetorandomresistance(void) +static void Cmd_setdamagetohealthdifference(void) { CMD_ARGS(const u8 *failInstr); - // Before Gen 5 Conversion 2 only worked on a move the attacker was actually hit by. - // This changed later to the last move used by the selected target. - if (B_UPDATED_CONVERSION_2 < GEN_5) + if (GetNonDynamaxHP(gBattlerTarget) <= gBattleMons[gBattlerAttacker].hp) { - if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE - || gLastLandedMoves[gBattlerAttacker] == MOVE_UNAVAILABLE) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (gBattleMoveEffects[GetMoveEffect(gLastLandedMoves[gBattlerAttacker])].twoTurnEffect - && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (gLastHitByType[gBattlerAttacker] == TYPE_STELLAR || gLastHitByType[gBattlerAttacker] == TYPE_MYSTERY) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - u32 i, resistTypes = 0; - u32 hitByType = gLastHitByType[gBattlerAttacker]; - - for (i = 0; i < NUMBER_OF_MON_TYPES; i++) // Find all types that resist. - { - switch (GetTypeModifier(hitByType, i)) - { - case UQ_4_12(0): - case UQ_4_12(0.5): - resistTypes |= 1u << i; - break; - } - } - - while (resistTypes != 0) - { - i = Random() % NUMBER_OF_MON_TYPES; - if (resistTypes & 1u << i) - { - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) - { - resistTypes &= ~(1u << i); // Type resists, but the user is already of this type. - } - else - { - SET_BATTLER_TYPE(gBattlerAttacker, i); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - } - } - - gBattlescriptCurrInstr = cmd->failInstr; - } + gBattlescriptCurrInstr = cmd->failInstr; } else { - if (gLastResultingMoves[gBattlerTarget] == MOVE_NONE - || gLastResultingMoves[gBattlerTarget] == MOVE_UNAVAILABLE - || gLastResultingMoves[gBattlerTarget] == MOVE_STRUGGLE) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (IsSemiInvulnerable(gBattlerTarget, gCurrentMove)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (gLastUsedMoveType[gBattlerTarget] == TYPE_NONE || gLastUsedMoveType[gBattlerTarget] == TYPE_STELLAR || gLastUsedMoveType[gBattlerTarget] == TYPE_MYSTERY) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - u32 i, resistTypes = 0; - - for (i = 0; i < NUMBER_OF_MON_TYPES; i++) // Find all types that resist. - { - switch (GetTypeModifier(gLastUsedMoveType[gBattlerTarget], i)) - { - case UQ_4_12(0): - case UQ_4_12(0.5): - resistTypes |= 1u << i; - break; - } - } - - while (resistTypes != 0) - { - i = Random() % NUMBER_OF_MON_TYPES; - if (resistTypes & 1u << i) - { - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) - { - resistTypes &= ~(1u << i); // Type resists, but the user is already of this type. - } - else - { - SET_BATTLER_TYPE(gBattlerAttacker, i); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - } - } + gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxHP(gBattlerTarget) - gBattleMons[gBattlerAttacker].hp; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} - gBattlescriptCurrInstr = cmd->failInstr; - } +static void HandleRoomMove(u32 statusFlag, u16 *timer, u8 stringId) +{ + if (gFieldStatuses & statusFlag) + { + gFieldStatuses &= ~statusFlag; + gBattleCommunication[MULTISTRING_CHOOSER] = stringId + 1; + } + else + { + gFieldStatuses |= statusFlag; + *timer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = stringId; } } -static void Cmd_setalwayshitflag(void) +static void Cmd_setroom(void) { CMD_ARGS(); - gStatuses3[gBattlerTarget] &= ~STATUS3_ALWAYS_HITS; - gStatuses3[gBattlerTarget] |= STATUS3_ALWAYS_HITS_TURN(2); - gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker; + switch (GetMoveEffect(gCurrentMove)) + { + case EFFECT_TRICK_ROOM: + HandleRoomMove(STATUS_FIELD_TRICK_ROOM, &gFieldTimers.trickRoomTimer, 0); + break; + case EFFECT_WONDER_ROOM: + HandleRoomMove(STATUS_FIELD_WONDER_ROOM, &gFieldTimers.wonderRoomTimer, 2); + break; + case EFFECT_MAGIC_ROOM: + HandleRoomMove(STATUS_FIELD_MAGIC_ROOM, &gFieldTimers.magicRoomTimer, 4); + break; + default: + gBattleCommunication[MULTISTRING_CHOOSER] = 6; + break; + } gBattlescriptCurrInstr = cmd->nextInstr; } -// Sketch -static void Cmd_copymovepermanently(void) +// Skill Swap +static void Cmd_tryswapabilities(void) { CMD_ARGS(const u8 *failInstr); - gChosenMove = MOVE_UNAVAILABLE; - - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) - && gLastPrintedMoves[gBattlerTarget] != MOVE_UNAVAILABLE - && !IsMoveSketchBanned(gLastPrintedMoves[gBattlerTarget])) + if (gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSwapped + || gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeSwapped) { - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (GetMoveEffect(gBattleMons[gBattlerAttacker].moves[i]) == EFFECT_SKETCH) - continue; - if (gBattleMons[gBattlerAttacker].moves[i] == gLastPrintedMoves[gBattlerTarget]) - break; - } - - if (i != MAX_MON_MOVES) + RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (CanAbilityShieldActivateForBattler(gBattlerAttacker) || CanAbilityShieldActivateForBattler(gBattlerTarget)) + { + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); + } + else + { + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) { gBattlescriptCurrInstr = cmd->failInstr; } - else // sketch worked + else { - struct MovePpInfo movePpData; - - gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastPrintedMoves[gBattlerTarget]; - gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = GetMovePP(gLastPrintedMoves[gBattlerTarget]); - - for (i = 0; i < MAX_MON_MOVES; i++) - { - movePpData.moves[i] = gBattleMons[gBattlerAttacker].moves[i]; - movePpData.pp[i] = gBattleMons[gBattlerAttacker].pp[i]; - } - movePpData.ppBonuses = gBattleMons[gBattlerAttacker].ppBonuses; - - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_MOVES_PP_BATTLE, 0, sizeof(movePpData), &movePpData); - MarkBattlerForControllerExec(gBattlerAttacker); - - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBattlerTarget]) + if (!IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) + gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability; + gLastUsedAbility = gBattleMons[gBattlerTarget].ability; + RemoveAbilityFlags(gBattlerTarget); + RemoveAbilityFlags(gBattlerAttacker); + gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = gBattleMons[gBattlerAttacker].ability; + gBattleMons[gBattlerAttacker].ability = gDisableStructs[gBattlerAttacker].overwrittenAbility = gLastUsedAbility; gBattlescriptCurrInstr = cmd->nextInstr; } } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } } -static void Cmd_trychoosesleeptalkmove(void) +static void Cmd_tryimprison(void) { CMD_ARGS(const u8 *failInstr); - u32 i, unusableMovesBits = 0, movePosition; - - for (i = 0; i < MAX_MON_MOVES; i++) + if (gBattleMons[gBattlerAttacker].volatiles.imprison) { - if (IsMoveSleepTalkBanned(gBattleMons[gBattlerAttacker].moves[i]) - || gBattleMoveEffects[GetMoveEffect(gBattleMons[gBattlerAttacker].moves[i])].twoTurnEffect) - { - unusableMovesBits |= (1 << (i)); - } + gBattlescriptCurrInstr = cmd->failInstr; } - - unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP | MOVE_LIMITATION_CHOICE_ITEM)); - if (unusableMovesBits == ALL_MOVES_MASK) // all 4 moves cannot be chosen + else if (B_IMPRISON >= GEN_5) { + gBattleMons[gBattlerAttacker].volatiles.imprison = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; } - else // at least one move can be chosen + else { - // Set Sleep Talk as used move, so it works with Last Resort. - gDisableStructs[gBattlerAttacker].usedMoves |= 1u << gCurrMovePos; - do - { - movePosition = MOD(Random(), MAX_MON_MOVES); - } while ((1u << movePosition) & unusableMovesBits); + u8 battler; - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IsBattleMoveStatus(gBattleMons[gBattlerAttacker].moves[movePosition])) - { - gBattleStruct->zmove.baseMoves[gBattlerAttacker] = gBattleMons[gBattlerAttacker].moves[movePosition]; - gCalledMove = GetTypeBasedZMove(gBattleMons[gBattlerAttacker].moves[movePosition]); - } - else + for (battler = 0; battler < gBattlersCount; battler++) { - gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition]; + if (!IsBattlerAlly(gBattlerAttacker, battler)) + { + s32 attackerMoveId; + for (attackerMoveId = 0; attackerMoveId < MAX_MON_MOVES; attackerMoveId++) + { + s32 i; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gBattleMons[gBattlerAttacker].moves[attackerMoveId] == gBattleMons[battler].moves[i] + && gBattleMons[gBattlerAttacker].moves[attackerMoveId] != MOVE_NONE) + break; + } + if (i != MAX_MON_MOVES) + break; + } + if (attackerMoveId != MAX_MON_MOVES) + { + gBattleMons[gBattlerAttacker].volatiles.imprison = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; + break; + } + } } - gCurrMovePos = movePosition; - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gBattlerTarget = GetBattleMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr = cmd->failInstr; + if (battler == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes. + gBattlescriptCurrInstr = cmd->failInstr; } } -static inline bool32 IsDanamaxMonPresent(void) +static void Cmd_setstealthrock(void) { - for (u32 battler = 0; battler < gBattlersCount; battler++) - { - if (battler == gBattlerAttacker) - continue; + CMD_ARGS(const u8 *failInstr); - if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) - return TRUE; + u8 targetSide = GetBattlerSide(gBattlerTarget); + if (IsHazardOnSide(targetSide, HAZARDS_STEALTH_ROCK)) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + PushHazardTypeToQueue(targetSide, HAZARDS_STEALTH_ROCK); + gBattlescriptCurrInstr = cmd->nextInstr; } - - return FALSE; } -static void Cmd_trysetdestinybond(void) +static void Cmd_trysetvolatile(void) { - CMD_ARGS(const u8 *failInstr); + CMD_ARGS(u8 battler, u8 _volatile, const u8 *failInstr); - if (IsDanamaxMonPresent()) - { - gBattlescriptCurrInstr = BattleScript_MoveBlockedByDynamax; - } - else if (DoesDestinyBondFail(gBattlerAttacker)) + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (GetBattlerVolatile(battler, cmd->_volatile) != 0) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattleMons[gBattlerAttacker].status2 |= STATUS2_DESTINY_BOND; + SetMonVolatile(battler, cmd->_volatile, TRUE); + switch (cmd->_volatile) + { + case VOLATILE_MAGNET_RISE: + gDisableStructs[battler].magnetRiseTimer = 5; + break; + case VOLATILE_LASER_FOCUS: + gDisableStructs[battler].laserFocusTimer = 2; + break; + default: + break; + } gBattlescriptCurrInstr = cmd->nextInstr; } } -static void TrySetDestinyBondToHappen(void) +static void Cmd_unused_0xde(void) { - if (gBattleMons[gBattlerTarget].status2 & STATUS2_DESTINY_BOND - && !IsBattlerAlly(gBattlerAttacker, gBattlerTarget) - && !(gHitMarker & HITMARKER_GRUDGE)) - { - gHitMarker |= HITMARKER_DESTINYBOND; - } } -static void Cmd_trysetdestinybondtohappen(void) +static void Cmd_trysetmagiccoat(void) { - CMD_ARGS(); + CMD_ARGS(const u8 *failInstr); - TrySetDestinyBondToHappen(); - gBattlescriptCurrInstr = cmd->nextInstr; + if (IsLastMonToMove(gBattlerAttacker)) // fails if moving last + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gProtectStructs[gBattlerAttacker].bounceMove = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; + } } -static void Cmd_settailwind(void) +// Snatch +static void Cmd_trysetsnatch(void) { CMD_ARGS(const u8 *failInstr); - u8 side = GetBattlerSide(gBattlerAttacker); - - if (!(gSideStatuses[side] & SIDE_STATUS_TAILWIND)) + if (IsLastMonToMove(gBattlerAttacker)) // fails if moving last { - gSideStatuses[side] |= SIDE_STATUS_TAILWIND; - gSideTimers[side].tailwindTimer = gBattleTurnCounter + (B_TAILWIND_TURNS >= GEN_5 ? 4 : 3); - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattlescriptCurrInstr = cmd->failInstr; + gProtectStructs[gBattlerAttacker].stealMove = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_tryspiteppreduce(void) +static void Cmd_unused2(void) { - CMD_ARGS(const u8 *failInstr); +} - if (gLastMoves[gBattlerTarget] != MOVE_NONE - && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) - { - s32 i; +static void Cmd_switchoutabilities(void) +{ + CMD_ARGS(u8 battler); - // Get move slot to reduce PP. - if (IsMaxMove(gLastMoves[gBattlerTarget])) - { - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleStruct->dynamax.baseMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) - break; - } - } - else + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gDisableStructs[battler].neutralizingGas) + { + gDisableStructs[battler].neutralizingGas = FALSE; + if (!IsNeutralizingGasOnField()) { - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) - break; - } + BattleScriptPush(gBattlescriptCurrInstr); + gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; + return; } + } - if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] > (B_CAN_SPITE_FAIL >= GEN_4 ? 0 : 1)) - { - s32 ppToDeduct = B_PP_REDUCED_BY_SPITE >= GEN_4 ? 4 : (Random() & 3) + 2; - // G-Max Depletion only deducts 2 PP. - if (IsMaxMove(gCurrentMove) && MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_SPITE)) - ppToDeduct = 2; - - if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct) - ppToDeduct = gBattleMons[gBattlerTarget].pp[i]; - - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) - - ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); + switch (GetBattlerAbility(battler)) + { + case ABILITY_NATURAL_CURE: + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); - PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) + gBattleMons[battler].status1 = 0; + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, + 1u << gBattleStruct->battlerPartyIndexes[battler], + sizeof(gBattleMons[battler].status1), + &gBattleMons[battler].status1); + MarkBattlerForControllerExec(battler); + break; + case ABILITY_REGENERATOR: + { + u32 regenerate = GetNonDynamaxMaxHP(battler) / 3; + regenerate += gBattleMons[battler].hp; + if (regenerate > gBattleMons[battler].maxHP) + regenerate = gBattleMons[battler].maxHP; + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, + 1u << gBattleStruct->battlerPartyIndexes[battler], + sizeof(regenerate), + ®enerate); + MarkBattlerForControllerExec(battler); + break; + } + default: + break; + } - gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct; + gBattlescriptCurrInstr = cmd->nextInstr; +} - // if (MOVE_IS_PERMANENT(gBattlerTarget, i)), but backwards - if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i)) - && !(gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED)) - { - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]); - MarkBattlerForControllerExec(gBattlerTarget); - } +static void Cmd_jumpifhasnohp(void) +{ + CMD_ARGS(u8 battler, const u8 *jumpInstr); - gBattlescriptCurrInstr = cmd->nextInstr; + u32 battler = GetBattlerForBattleScript(cmd->battler); - // Don't cut off Sky Drop if pp is brought to zero. - if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == SKY_DROP_NO_TARGET) - CancelMultiTurnMoves(gBattlerTarget, SKY_DROP_IGNORE); - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } - } + if (!IsBattlerAlive(battler)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - gBattlescriptCurrInstr = cmd->failInstr; - } + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_healpartystatus(void) +static void Cmd_unused_0xE4(void) { - CMD_ARGS(); - - u32 i = 0; - u32 zero = 0; - u32 toHeal = 0; - u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - struct Pokemon *party = GetBattlerParty(gBattlerAttacker); - bool32 isSoundMove = IsSoundMove(gCurrentMove); +} - if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 - || GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 - || !(isSoundMove && GetBattlerAbility(gBattlerAttacker) == ABILITY_SOUNDPROOF)) - { - if (isSoundMove) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOOTHING_AROMA; - gBattleMons[gBattlerAttacker].status1 = 0; - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; - } - else - { - RecordAbilityBattle(gBattlerAttacker, gBattleMons[gBattlerAttacker].ability); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL_SOUNDPROOF_ATTACKER; - } +static void Cmd_pickup(void) +{ + CMD_ARGS(); - gBattleScripting.battler = partner; + u32 i, j; + u16 species, heldItem; + u8 lvlDivBy10; + enum Ability ability; - if (IsBattlerAlive(partner)) + if (!InBattlePike()) // No items in Battle Pike. { - if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 - || !(isSoundMove && GetBattlerAbility(partner) == ABILITY_SOUNDPROOF)) - { - gBattleMons[partner].status1 = 0; - gBattleMons[partner].status2 &= ~STATUS2_NIGHTMARE; - } - else + bool32 isInPyramid = CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE; + for (i = 0; i < PARTY_SIZE; i++) { - RecordAbilityBattle(partner, gBattleMons[partner].ability); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL_SOUNDPROOF_PARTNER; - } - } - - // Because the above MULTISTRING_CHOOSER are ORd, if both are set then it will be B_MSG_BELL_BOTH_SOUNDPROOF + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)-1) / 10; //Moving this here makes it easier to add in abilities like Honey Gather. + if (lvlDivBy10 > 9) + lvlDivBy10 = 9; - for (i = 0; i < PARTY_SIZE; i++) - { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); - u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); + ability = GetSpeciesAbility(species, GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)); - if (species != SPECIES_NONE && species != SPECIES_EGG) - { - u16 ability; - bool32 isAttacker = gBattlerPartyIndexes[gBattlerAttacker] == i; - bool32 isDoublesPartner = gBattlerPartyIndexes[partner] == i && IsBattlerAlive(partner); + if (ability == ABILITY_PICKUP + && species != SPECIES_NONE + && species != SPECIES_EGG + && heldItem == ITEM_NONE + && (Random() % 10) == 0) + { + if (isInPyramid) + { + heldItem = GetBattlePyramidPickupItemId(); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + else + { + u32 rand = Random() % 100; + u32 percentTotal = 0; - if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) == GEN_5 - || (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) >= GEN_8 && isAttacker)) - ability = ABILITY_NONE; - else if (GetGenConfig(GEN_CONFIG_HEAL_BELL_SOUNDPROOF) > GEN_5 && !isAttacker && !isDoublesPartner) - ability = ABILITY_NONE; - else if (isAttacker) - ability = GetBattlerAbility(gBattlerAttacker); - else if (isDoublesPartner) - ability = GetBattlerAbility(partner); - else + for (j = 0; j < ARRAY_COUNT(sPickupTable); j++) + { + percentTotal += sPickupTable[j].percentage[lvlDivBy10]; + if (rand < percentTotal) + { + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sPickupTable[j].itemId); + break; + } + } + } + } + else if (ability == ABILITY_HONEY_GATHER + && species != 0 + && species != SPECIES_EGG + && heldItem == ITEM_NONE) { - ability = GetAbilityBySpecies(species, abilityNum); - #if TESTING - if (gTestRunnerEnabled) + if ((lvlDivBy10 + 1 ) * 5 > Random() % 100) { - u32 side = GetBattlerSide(gBattlerAttacker); - if (TestRunner_Battle_GetForcedAbility(side, i)) - ability = TestRunner_Battle_GetForcedAbility(side, i); + heldItem = ITEM_HONEY; + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } - #endif } - - if (!(isSoundMove && ability == ABILITY_SOUNDPROOF)) + else if (P_SHUCKLE_BERRY_JUICE == GEN_2 + && species == SPECIES_SHUCKLE + && heldItem == ITEM_ORAN_BERRY + && (Random() % 16) == 0) { - toHeal |= (1 << i); - TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), i); + heldItem = ITEM_BERRY_JUICE; + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } } } - if (toHeal) - { - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, toHeal, sizeof(zero), &zero); - MarkBattlerForControllerExec(gBattlerAttacker); - } - gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_cursetarget(void) -{ - CMD_ARGS(const u8 *failInstr); - - if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gBattleMons[gBattlerTarget].status2 |= STATUS2_CURSED; - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - - gBattlescriptCurrInstr = cmd->nextInstr; - } -} - -static void Cmd_trysetspikes(void) +static void Cmd_unused_0xE6(void) { - CMD_ARGS(const u8 *failInstr); - - u8 targetSide = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); - - if (gSideTimers[targetSide].spikesAmount == 3) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gSideStatuses[targetSide] |= SIDE_STATUS_SPIKES; - gSideTimers[targetSide].spikesAmount++; - gBattlescriptCurrInstr = cmd->nextInstr; - } } -static void Cmd_setforesight(void) +static void Cmd_unused_0xE7(void) { - CMD_ARGS(); - - gBattleMons[gBattlerTarget].status2 |= STATUS2_FORESIGHT; - gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_trysetperishsong(void) +// Water and Mud Sport +static void Cmd_settypebasedhalvers(void) { CMD_ARGS(const u8 *failInstr); - s32 i; - s32 notAffectedCount = 0; + bool8 worked = FALSE; - for (i = 0; i < gBattlersCount; i++) + if (GetMoveEffect(gCurrentMove) == EFFECT_MUD_SPORT) { - if (gStatuses3[i] & STATUS3_PERISH_SONG - || GetBattlerAbility(i) == ABILITY_SOUNDPROOF - || BlocksPrankster(gCurrentMove, gBattlerAttacker, i, TRUE) - || gStatuses3[i] & STATUS3_COMMANDER) + if (B_SPORT_TURNS >= GEN_6) { - notAffectedCount++; + if (!(gFieldStatuses & STATUS_FIELD_MUDSPORT)) + { + gFieldStatuses |= STATUS_FIELD_MUDSPORT; + gFieldTimers.mudSportTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; + worked = TRUE; + } } else { - gStatuses3[i] |= STATUS3_PERISH_SONG; - gDisableStructs[i].perishSongTimer = 3; + if (!gBattleMons[gBattlerAttacker].volatiles.waterSport) + { + gBattleMons[gBattlerAttacker].volatiles.waterSport = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; + worked = TRUE; + } } } - - if (notAffectedCount == gBattlersCount) - gBattlescriptCurrInstr = cmd->failInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; -} - -static void Cmd_handlerollout(void) -{ - CMD_ARGS(); - - if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - { - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_IGNORE); - gBattlescriptCurrInstr = BattleScript_MoveMissedPause; - } - else + else // Water Sport { - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) // First hit. + if (B_SPORT_TURNS >= GEN_6) { - gDisableStructs[gBattlerAttacker].rolloutTimer = 5; - gDisableStructs[gBattlerAttacker].rolloutTimerStartValue = 5; - gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMoves[gBattlerAttacker] = gCurrentMove; + if (!(gFieldStatuses & STATUS_FIELD_WATERSPORT)) + { + gFieldStatuses |= STATUS_FIELD_WATERSPORT; + gFieldTimers.waterSportTimer = 5; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; + worked = TRUE; + } } - if (--gDisableStructs[gBattlerAttacker].rolloutTimer == 0) // Last hit. + else { - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS; + if (!gBattleMons[gBattlerAttacker].volatiles.mudSport) + { + gBattleMons[gBattlerAttacker].volatiles.mudSport = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; + worked = TRUE; + } } + } + if (worked) gBattlescriptCurrInstr = cmd->nextInstr; - } + else + gBattlescriptCurrInstr = cmd->failInstr; } -static void Cmd_jumpifconfusedandstatmaxed(void) +bool32 DoesSubstituteBlockMove(u32 battlerAtk, u32 battlerDef, u32 move) { - CMD_ARGS(u8 stat, const u8 *jumpInstr); + if (!gBattleMons[battlerDef].volatiles.substitute) + return FALSE; + else if (MoveIgnoresSubstitute(move)) + return FALSE; + else if (IsAbilityAndRecord(battlerAtk, GetBattlerAbility(battlerAtk), ABILITY_INFILTRATOR)) + return FALSE; + else + return TRUE; +} - if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION - && !CompareStat(gBattlerTarget, cmd->stat, MAX_STAT_STAGE, CMP_LESS_THAN)) - gBattlescriptCurrInstr = cmd->jumpInstr; // Fails if we're confused AND stat cannot be raised +bool32 DoesDisguiseBlockMove(u32 battler, u32 move) +{ + if (!IsMimikyuDisguised(battler) + || gBattleMons[battler].volatiles.transformed + || (!gProtectStructs[battler].confusionSelfDmg && IsBattleMoveStatus(move)) + || !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_DISGUISE)) + return FALSE; + else + return TRUE; +} + +static void Cmd_jumpifsubstituteblocks(void) +{ + CMD_ARGS(const u8 *jumpInstr); + + if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_handlefurycutter(void) +static void Cmd_tryrecycleitem(void) { - CMD_ARGS(); + CMD_ARGS(const u8 *failInstr); - if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - { - gDisableStructs[gBattlerAttacker].furyCutterCounter = 0; - gBattlescriptCurrInstr = BattleScript_MoveMissedPause; - } + u16 *usedHeldItem; + + if (gCurrentMove == MOVE_NONE && GetBattlerAbility(gBattlerAttacker) == ABILITY_PICKUP) + usedHeldItem = &GetBattlerPartyState(gBattlerTarget)->usedHeldItem; else + usedHeldItem = &GetBattlerPartyState(gBattlerAttacker)->usedHeldItem; + if (*usedHeldItem != ITEM_NONE && gBattleMons[gBattlerAttacker].item == ITEM_NONE) { - u32 max; - - if (B_UPDATED_MOVE_DATA >= GEN_6) - max = 3; - else if (B_UPDATED_MOVE_DATA == GEN_5) - max = 4; - else - max = 5; + gLastUsedItem = *usedHeldItem; + *usedHeldItem = ITEM_NONE; + gBattleMons[gBattlerAttacker].item = gLastUsedItem; - if (gDisableStructs[gBattlerAttacker].furyCutterCounter < max - && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_2ND_HIT) // Don't increment counter on second hit - gDisableStructs[gBattlerAttacker].furyCutterCounter++; + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].item), &gBattleMons[gBattlerAttacker].item); + MarkBattlerForControllerExec(gBattlerAttacker); gBattlescriptCurrInstr = cmd->nextInstr; } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } } -static void Cmd_setembargo(void) +bool32 CanCamouflage(u8 battler) +{ + if (IS_BATTLER_OF_TYPE(battler, gBattleEnvironmentInfo[gBattleEnvironment].camouflageType)) + return FALSE; + return TRUE; +} + +static void Cmd_settypetoenvironment(void) { CMD_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & STATUS3_EMBARGO) + u8 environmentType; + switch(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) { - gBattlescriptCurrInstr = cmd->failInstr; + case STATUS_FIELD_ELECTRIC_TERRAIN: + environmentType = TYPE_ELECTRIC; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + environmentType = TYPE_GRASS; + break; + case STATUS_FIELD_MISTY_TERRAIN: + environmentType = TYPE_FAIRY; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + environmentType = TYPE_PSYCHIC; + break; + default: + environmentType = gBattleEnvironmentInfo[gBattleEnvironment].camouflageType; + break; } - else + + if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, environmentType) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA) { - gStatuses3[gBattlerTarget] |= STATUS3_EMBARGO; - gDisableStructs[gBattlerTarget].embargoTimer = gBattleTurnCounter + 5; + SET_BATTLER_TYPE(gBattlerAttacker, environmentType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, environmentType); + gBattlescriptCurrInstr = cmd->nextInstr; } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } } -static void Cmd_presentdamagecalculation(void) +// Unused +static void Cmd_pursuitdoubles(void) { - CMD_ARGS(); + CMD_ARGS(const u8 *failInstr); - u32 rand = Random() & 0xFF; - - /* Don't reroll present effect/power for the second hit of Parental Bond. - * Not sure if this is the correct behaviour, but bulbapedia states - * that if present heals the foe, it doesn't strike twice, and if it deals - * damage, the second strike will always deal damage too. This is a simple way - * to replicate that effect. - */ - if (gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_2ND_HIT) - { - if (rand < 102) - { - gBattleStruct->presentBasePower = 40; - } - else if (rand < 178) - { - gBattleStruct->presentBasePower = 80; - } - else if (rand < 204) - { - gBattleStruct->presentBasePower = 120; - } - else - { - // TODO: Check if this is correct - gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxMaxHP(gBattlerTarget) / 4; - if (gBattleStruct->moveDamage[gBattlerTarget] == 0) - gBattleStruct->moveDamage[gBattlerTarget] = 1; - gBattleStruct->moveDamage[gBattlerTarget] *= -1; - gBattleStruct->presentBasePower = 0; - } - } + u32 battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (gBattleStruct->presentBasePower) - { - gBattlescriptCurrInstr = BattleScript_HitFromCritCalc; - } - else if (gBattleMons[gBattlerTarget].maxHP == gBattleMons[gBattlerTarget].hp) + if (IsDoubleBattle() + && !(gAbsentBattlerFlags & (1u << battler)) + && gChosenActionByBattler[battler] == B_ACTION_USE_MOVE + && GetMoveEffect(gChosenMoveByBattler[battler]) == EFFECT_PURSUIT) { - gBattlescriptCurrInstr = BattleScript_AlreadyAtFullHp; + gActionsByTurnOrder[battler] = B_ACTION_TRY_FINISH; + gCurrentMove = gChosenMoveByBattler[battler]; + gBattlescriptCurrInstr = cmd->nextInstr; + gBattleScripting.animTurn = 1; + gBattleScripting.savedBattler = gBattlerAttacker; + gBattlerAttacker = battler; } else { - gBattleStruct->moveResultFlags[gBattlerTarget] &= ~MOVE_RESULT_DOESNT_AFFECT_FOE; - gBattlescriptCurrInstr = BattleScript_PresentHealTarget; + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_setsafeguard(void) +static void Cmd_snatchsetbattlers(void) { CMD_ARGS(); - if (gSideStatuses[GetBattlerSide(gBattlerAttacker)] & SIDE_STATUS_SAFEGUARD) - { - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SIDE_STATUS_FAILED; - } + gEffectBattler = gBattlerAttacker; + + if (gBattlerAttacker == gBattlerTarget) + gBattlerAttacker = gBattlerTarget = gBattleScripting.battler; else - { - gSideStatuses[GetBattlerSide(gBattlerAttacker)] |= SIDE_STATUS_SAFEGUARD; - gSideTimers[GetBattlerSide(gBattlerAttacker)].safeguardTimer = gBattleTurnCounter + 5; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; - } + gBattlerTarget = gBattleScripting.battler; + gBattleScripting.battler = gEffectBattler; gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_magnitudedamagecalculation(void) +static void Cmd_removescreens(void) { CMD_ARGS(); - u32 magnitude = Random() % 100; + u8 side; + bool32 failed; - if (magnitude < 5) - { - gBattleStruct->magnitudeBasePower = 10; - magnitude = 4; - } - else if (magnitude < 15) - { - gBattleStruct->magnitudeBasePower = 30; - magnitude = 5; - } - else if (magnitude < 35) - { - gBattleStruct->magnitudeBasePower = 50; - magnitude = 6; - } - else if (magnitude < 65) - { - gBattleStruct->magnitudeBasePower = 70; - magnitude = 7; - } - else if (magnitude < 85) - { - gBattleStruct->magnitudeBasePower = 90; - magnitude = 8; - } - else if (magnitude < 95) - { - gBattleStruct->magnitudeBasePower = 110; - magnitude = 9; - } + if (B_BRICK_BREAK >= GEN_4) + side = GetBattlerSide(gBattlerTarget); // From Gen 4 onwards, Brick Break can remove screens on the user's side if used on an ally else - { - gBattleStruct->magnitudeBasePower = 150; - magnitude = 10; - } - - PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 2, magnitude) - - for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) - { - if (gBattlerTarget == gBattlerAttacker) - continue; - if (!(gAbsentBattlerFlags & (1u << gBattlerTarget))) // A valid target was found. - break; - } - - gBattlescriptCurrInstr = cmd->nextInstr; -} - -static bool32 SetTargetToNextPursuiter(u32 battlerDef) -{ - u32 i; - for (i = gCurrentTurnActionNumber + 1; i < gBattlersCount; i++) - { - u32 battler = gBattlerByTurnOrder[i]; - if (gChosenActionByBattler[battler] == B_ACTION_USE_MOVE - && GetMoveEffect(gChosenMoveByBattler[battler]) == EFFECT_PURSUIT - && IsBattlerAlive(battlerDef) - && IsBattlerAlive(battler) - && !IsBattlerAlly(battler, battlerDef) - && (B_PURSUIT_TARGET >= GEN_4 || gBattleStruct->moveTarget[battler] == battlerDef) - && !IsGimmickSelected(battler, GIMMICK_Z_MOVE) - && !IsGimmickSelected(battler, GIMMICK_DYNAMAX) - && GetActiveGimmick(battler) != GIMMICK_DYNAMAX) - { - gBattlerTarget = battler; - return TRUE; - } - } - return FALSE; -} - -static void Cmd_jumpifnopursuitswitchdmg(void) -{ - CMD_ARGS(const u8 *jumpInstr); + side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; - u32 savedTarget = gBattlerTarget; + if (B_BRICK_BREAK >= GEN_5) + failed = gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT; + else + failed = FALSE; - if (SetTargetToNextPursuiter(gBattlerAttacker)) + if (!failed && gSideStatuses[side] & SIDE_STATUS_SCREEN_ANY) { - ChangeOrderTargetAfterAttacker(); - gBattleStruct->battlerState[gBattlerAttacker].pursuitTarget = TRUE; - gBattleStruct->pursuitStoredSwitch = gBattleStruct->monToSwitchIntoId[gBattlerAttacker]; - gBattleStruct->moveTarget[gBattlerTarget] = gBattlerAttacker; - gBattlerTarget = savedTarget; - gBattlescriptCurrInstr = cmd->nextInstr; + gSideStatuses[side] &= ~SIDE_STATUS_SCREEN_ANY; + gBattleScripting.animTurn = 1; + gBattleScripting.animTargetsHit = 1; } else { - gBattlescriptCurrInstr = cmd->jumpInstr; + gBattleScripting.animTurn = 0; + gBattleScripting.animTargetsHit = 0; } -} -static void Cmd_tryrestorehpberry(void) -{ - CMD_ARGS(); - if (TryRestoreHPBerries(gBattlerAttacker, ITEMEFFECT_TRY_HEALING)) - return; gBattlescriptCurrInstr = cmd->nextInstr; } -// Belly Drum, Fillet Away -static void Cmd_halvehp(void) +u8 GetCatchingBattler(void) { - CMD_ARGS(const u8 *failInstr); - - u32 halfHp = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - - if (!(GetNonDynamaxMaxHP(gBattlerAttacker) / 2)) - halfHp = 1; - - if (gBattleMons[gBattlerAttacker].hp > halfHp) - { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - - gBattlescriptCurrInstr = cmd->nextInstr; - } + if (IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))) + return GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); else - { - gBattlescriptCurrInstr = cmd->failInstr; - } + return GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } -// Psych Up -static void Cmd_copyfoestats(void) +static void Cmd_handleballthrow(void) { - CMD_ARGS(const u8 *unused); - - s32 i; - - for (i = 0; i < NUM_BATTLE_STATS; i++) - { - gBattleMons[gBattlerAttacker].statStages[i] = gBattleMons[gBattlerTarget].statStages[i]; - } + CMD_ARGS(); - gBattlescriptCurrInstr = cmd->nextInstr; // Has an unused jump ptr(possibly for a failed attempt) parameter. -} + u16 ballMultiplier = 100; + s8 ballAddition = 0; -static void Cmd_rapidspinfree(void) -{ - CMD_ARGS(); + if (gBattleControllerExecFlags) + return; - u8 atkSide = GetBattlerSide(gBattlerAttacker); + gBattlerTarget = GetCatchingBattler(); - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_WRAPPED) - { - gBattleScripting.battler = gBattlerTarget; - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_WRAPPED; - gBattlerTarget = gBattleStruct->wrappedBy[gBattlerAttacker]; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gBattlerAttacker]); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_WrapFree; - } - else if (gStatuses3[gBattlerAttacker] & STATUS3_LEECHSEED) - { - gStatuses3[gBattlerAttacker] &= ~STATUS3_LEECHSEED; - gStatuses3[gBattlerAttacker] &= ~STATUS3_LEECHSEED_BATTLER; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_LeechSeedFree; - } - else if (gSideStatuses[atkSide] & SIDE_STATUS_SPIKES) - { - gSideStatuses[atkSide] &= ~SIDE_STATUS_SPIKES; - gSideTimers[atkSide].spikesAmount = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SpikesFree; - } - else if (gSideStatuses[atkSide] & SIDE_STATUS_TOXIC_SPIKES) - { - gSideStatuses[atkSide] &= ~SIDE_STATUS_TOXIC_SPIKES; - gSideTimers[atkSide].toxicSpikesAmount = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ToxicSpikesFree; - } - else if (gSideStatuses[atkSide] & SIDE_STATUS_STICKY_WEB) - { - gSideStatuses[atkSide] &= ~SIDE_STATUS_STICKY_WEB; - gSideTimers[atkSide].stickyWebAmount = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_StickyWebFree; - } - else if (gSideStatuses[atkSide] & SIDE_STATUS_STEALTH_ROCK) + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - gSideStatuses[atkSide] &= ~SIDE_STATUS_STEALTH_ROCK; - gSideTimers[atkSide].stealthRockAmount = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_StealthRockFree; + BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_TRAINER_BLOCK); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattlescriptCurrInstr = BattleScript_TrainerBallBlock; } - else if (gSideStatuses[atkSide] & SIDE_STATUS_STEELSURGE) + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) { - gSideStatuses[atkSide] &= ~SIDE_STATUS_STEELSURGE; - gSideTimers[atkSide].steelsurgeAmount = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SteelsurgeFree; + BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_3_SHAKES_SUCCESS); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattlescriptCurrInstr = BattleScript_WallyBallThrow; } else { - gBattlescriptCurrInstr = cmd->nextInstr; - } -} - -static void Cmd_setdefensecurlbit(void) -{ - CMD_ARGS(); - - gBattleMons[gBattlerAttacker].status2 |= STATUS2_DEFENSE_CURL; - gBattlescriptCurrInstr = cmd->nextInstr; -} + u32 odds, i; + u32 catchRate; + u32 ballId = ItemIdToBallId(gLastUsedItem); -static void Cmd_recoverbasedonsunlight(void) -{ - CMD_ARGS(const u8 *failInstr); + gBallToDisplay = gLastThrownBall = gLastUsedItem; + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; + else + catchRate = gSpeciesInfo[gBattleMons[gBattlerTarget].species].catchRate; - gBattlerTarget = gBattlerAttacker; - if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP) - { - if (GetMoveEffect(gCurrentMove) == EFFECT_SHORE_UP) + if (gSpeciesInfo[gBattleMons[gBattlerTarget].species].isUltraBeast) { - if (HasWeatherEffect() && gBattleWeather & B_WEATHER_SANDSTORM) - gBattleStruct->moveDamage[gBattlerAttacker] = 20 * GetNonDynamaxMaxHP(gBattlerAttacker) / 30; + if (ballId == BALL_BEAST) + ballMultiplier = 500; else - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + ballMultiplier = 10; } else { - if (!(gBattleWeather & B_WEATHER_ANY) || !HasWeatherEffect() || GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA) - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - else if (gBattleWeather & B_WEATHER_SUN) - gBattleStruct->moveDamage[gBattlerAttacker] = 20 * GetNonDynamaxMaxHP(gBattlerAttacker) / 30; - else // not sunny weather - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; - } - - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - gBattleStruct->moveDamage[gBattlerAttacker] *= -1; - - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } -} - -static void Cmd_setstickyweb(void) -{ - CMD_ARGS(const u8 *failInstr); - - u8 targetSide = GetBattlerSide(gBattlerTarget); - - if (gSideStatuses[targetSide] & SIDE_STATUS_STICKY_WEB) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gSideStatuses[targetSide] |= SIDE_STATUS_STICKY_WEB; - gSideTimers[targetSide].stickyWebBattlerId = gBattlerAttacker; // For Mirror Armor - gSideTimers[targetSide].stickyWebBattlerSide = GetBattlerSide(gBattlerAttacker); // For Court Change/Defiant - set this to the user's side - gSideTimers[targetSide].stickyWebAmount = 1; - gBattlescriptCurrInstr = cmd->nextInstr; - } -} - -static void Cmd_selectfirstvalidtarget(void) -{ - CMD_ARGS(); - - for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) - { - if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) - continue; - if (IsBattlerAlive(gBattlerTarget)) + switch (ballId) + { + case BALL_ULTRA: + ballMultiplier = 200; + break; + case BALL_SPORT: + if (B_SPORT_BALL_MODIFIER <= GEN_7) + ballMultiplier = 150; + break; + case BALL_GREAT: + ballMultiplier = 150; + break; + case BALL_SAFARI: + if (B_SAFARI_BALL_MODIFIER <= GEN_7) + ballMultiplier = 150; + break; + case BALL_NET: + if (IS_BATTLER_ANY_TYPE(gBattlerTarget, TYPE_WATER, TYPE_BUG)) + ballMultiplier = B_NET_BALL_MODIFIER >= GEN_7 ? 350 : 300; + break; + case BALL_DIVE: + if (GetCurrentMapType() == MAP_TYPE_UNDERWATER + || (B_DIVE_BALL_MODIFIER >= GEN_4 && (gIsFishingEncounter || gIsSurfingEncounter))) + ballMultiplier = 350; + break; + case BALL_NEST: + if (B_NEST_BALL_MODIFIER >= GEN_6) + { + //((41 - PokΓ©mon's level) Γ· 10)Γ— if PokΓ©mon's level is between 1 and 29, 1Γ— otherwise. + if (gBattleMons[gBattlerTarget].level < 30) + ballMultiplier = 410 - (gBattleMons[gBattlerTarget].level * 10); + } + else if (B_NEST_BALL_MODIFIER >= GEN_5) + { + //((41 - PokΓ©mon's level) Γ· 10)Γ—, minimum 1Γ— + if (gBattleMons[gBattlerTarget].level < 31) + ballMultiplier = 410 - (gBattleMons[gBattlerTarget].level * 10); + } + else if (gBattleMons[gBattlerTarget].level < 40) + { + //((40 - PokΓ©mon's level) Γ· 10)Γ—, minimum 1Γ— + ballMultiplier = 400 - (gBattleMons[gBattlerTarget].level * 10); + if (ballMultiplier <= 90) + ballMultiplier = 100; + } + break; + case BALL_REPEAT: + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), FLAG_GET_CAUGHT)) + ballMultiplier = (B_REPEAT_BALL_MODIFIER >= GEN_7 ? 350 : 300); + break; + case BALL_TIMER: + ballMultiplier = 100 + (gBattleResults.battleTurnCounter * (B_TIMER_BALL_MODIFIER >= GEN_5 ? 30 : 10)); + if (ballMultiplier > 400) + ballMultiplier = 400; + break; + case BALL_DUSK: + i = GetTimeOfDay(); + if (i == TIME_EVENING || i == TIME_NIGHT || gMapHeader.cave || gMapHeader.mapType == MAP_TYPE_UNDERGROUND) + ballMultiplier = (B_DUSK_BALL_MODIFIER >= GEN_7 ? 300 : 350); + break; + case BALL_QUICK: + if (gBattleResults.battleTurnCounter == 0) + ballMultiplier = (B_QUICK_BALL_MODIFIER >= GEN_5 ? 500 : 400); + break; + case BALL_LEVEL: + if (gBattleMons[gBattlerAttacker].level >= 4 * gBattleMons[gBattlerTarget].level) + ballMultiplier = 800; + else if (gBattleMons[gBattlerAttacker].level > 2 * gBattleMons[gBattlerTarget].level) + ballMultiplier = 400; + else if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level) + ballMultiplier = 200; + break; + case BALL_LURE: + if (gIsFishingEncounter) + { + if (B_LURE_BALL_MODIFIER >= GEN_8) + ballMultiplier = 400; + else if (B_LURE_BALL_MODIFIER >= GEN_7) + ballMultiplier = 500; + else + ballMultiplier = 300; + } + break; + case BALL_MOON: + { + const struct Evolution *evolutions = GetSpeciesEvolutions(gBattleMons[gBattlerTarget].species); + if (evolutions == NULL) + break; + for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) + { + if (evolutions[i].method == EVO_ITEM + && evolutions[i].param == ITEM_MOON_STONE) + ballMultiplier = 400; + } + } break; - } - gBattlescriptCurrInstr = cmd->nextInstr; -} - -static void Cmd_trysetfutureattack(void) -{ - CMD_ARGS(const u8 *failInstr); + case BALL_LOVE: + if (gBattleMons[gBattlerTarget].species == gBattleMons[gBattlerAttacker].species) + { + u8 gender1 = GetMonGender(GetBattlerMon(gBattlerTarget)); + u8 gender2 = GetMonGender(GetBattlerMon(gBattlerAttacker)); - if (gWishFutureKnock.futureSightCounter[gBattlerTarget] > gBattleTurnCounter) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gSideStatuses[GetBattlerSide(gBattlerTarget)] |= SIDE_STATUS_FUTUREATTACK; - gWishFutureKnock.futureSightMove[gBattlerTarget] = gCurrentMove; - gWishFutureKnock.futureSightBattlerIndex[gBattlerTarget] = gBattlerAttacker; - gWishFutureKnock.futureSightPartyIndex[gBattlerTarget] = gBattlerPartyIndexes[gBattlerAttacker]; - gWishFutureKnock.futureSightCounter[gBattlerTarget] = gBattleTurnCounter + 3; + if (gender1 != gender2 && gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS) + ballMultiplier = 800; + } + break; + case BALL_FAST: + if (GetSpeciesBaseSpeed(gBattleMons[gBattlerTarget].species) >= 100) + ballMultiplier = 400; + break; + case BALL_HEAVY: + i = GetSpeciesWeight(gBattleMons[gBattlerTarget].species); + if (B_HEAVY_BALL_MODIFIER >= GEN_7) + { + if (i < 1000) + ballAddition = -20; + else if (i < 2000) + ballAddition = 0; + else if (i < 3000) + ballAddition = 20; + else + ballAddition = 30; + } + else if (B_HEAVY_BALL_MODIFIER >= GEN_4) + { + if (i < 2048) + ballAddition = -20; + else if (i < 3072) + ballAddition = 20; + else if (i < 4096) + ballAddition = 30; + else + ballAddition = 40; + } + else + { + if (i < 1024) + ballAddition = -20; + else if (i < 2048) + ballAddition = 0; + else if (i < 3072) + ballAddition = 20; + else if (i < 4096) + ballAddition = 30; + else + ballAddition = 40; + } + break; + case BALL_DREAM: + if (B_DREAM_BALL_MODIFIER >= GEN_8 && (gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE)) + ballMultiplier = 400; + break; + case BALL_BEAST: + ballMultiplier = 10; + break; + } + } - if (gCurrentMove == MOVE_DOOM_DESIRE) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOOM_DESIRE; + // catchRate is unsigned, which means that it may potentially overflow if sum is applied directly. + if (catchRate < 21 && ballAddition == -20) + catchRate = 1; else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FUTURE_SIGHT; - - gBattlescriptCurrInstr = cmd->nextInstr; - } -} + catchRate = catchRate + ballAddition; -static void Cmd_trydobeatup(void) -{ -#if B_BEAT_UP >= GEN_5 - CMD_ARGS(); + odds = (catchRate * ballMultiplier / 100) + * (gBattleMons[gBattlerTarget].maxHP * 3 - gBattleMons[gBattlerTarget].hp * 2) + / (3 * gBattleMons[gBattlerTarget].maxHP); - gBattleStruct->beatUpSlot++; - gBattlescriptCurrInstr = cmd->nextInstr; -#else - CMD_ARGS(const u8 *endInstr, const u8 *failInstr); - struct Pokemon *party = GetBattlerParty(gBattlerAttacker); + if (gBattleMons[gBattlerTarget].status1 & STATUS1_INCAPACITATED) + odds *= 2; + if (gBattleMons[gBattlerTarget].status1 & STATUS1_CAN_MOVE) + odds = (odds * 15) / 10; - if (!IsBattlerAlive(gBattlerTarget)) - { - gBattlescriptCurrInstr = cmd->endInstr; - } - else - { - u8 beforeLoop = gBattleCommunication[0]; - for (;gBattleCommunication[0] < PARTY_SIZE; gBattleCommunication[0]++) - { - if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP) - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG - && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS)) - break; - } + if (gBattleResults.catchAttempts[ballId] < 255) + gBattleResults.catchAttempts[ballId]++; - if (gBattleCommunication[0] < PARTY_SIZE) + if (odds > 254) // mon caught { - PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleCommunication[0]) - - gBattlescriptCurrInstr = cmd->nextInstr; + BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_3_SHAKES_SUCCESS); + MarkBattlerForControllerExec(gBattlerAttacker); + TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE); + gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; + struct Pokemon *caughtMon = GetBattlerMon(gBattlerTarget); + SetMonData(caughtMon, MON_DATA_POKEBALL, &ballId); - gBattleStruct->moveDamage[gBattlerTarget] = gSpeciesInfo[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; - gBattleStruct->moveDamage[gBattlerTarget] *= GetMovePower(gCurrentMove); - gBattleStruct->moveDamage[gBattlerTarget] *= (GetMonData(&party[gBattleCommunication[0]], MON_DATA_LEVEL) * 2 / 5 + 2); - gBattleStruct->moveDamage[gBattlerTarget] /= gSpeciesInfo[gBattleMons[gBattlerTarget].species].baseDefense; - gBattleStruct->moveDamage[gBattlerTarget] = (gBattleStruct->moveDamage[gBattlerTarget] / 50) + 2; - if (gProtectStructs[gBattlerAttacker].helpingHand) - gBattleStruct->moveDamage[gBattlerTarget] = gBattleStruct->moveDamage[gBattlerTarget] * 15 / 10; + if (CalculatePlayerPartyCount() == PARTY_SIZE) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; - gBattleCommunication[0]++; + if (ballId == BALL_HEAL) + { + MonRestorePP(caughtMon); + HealStatusConditions(caughtMon, STATUS1_ANY, gBattlerTarget); + gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP; + SetMonData(caughtMon, MON_DATA_HP, &gBattleMons[gBattlerTarget].hp); + } + else if (ballId == BALL_FRIEND) + { + u32 friendship = (B_FRIEND_BALL_MODIFIER >= GEN_8 ? 150 : 200); + SetMonData(caughtMon, MON_DATA_FRIENDSHIP, &friendship); + } } - else if (beforeLoop != 0) + else // mon may be caught, calculate shakes { - gBattlescriptCurrInstr = cmd->endInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; + u8 shakes; + u8 maxShakes; + + gBattleSpritesDataPtr->animationData->isCriticalCapture = FALSE; + gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = FALSE; + + if (CriticalCapture(odds)) + { + maxShakes = BALL_1_SHAKE; // critical capture doesn't guarantee capture + gBattleSpritesDataPtr->animationData->isCriticalCapture = TRUE; + } + else + { + maxShakes = BALL_3_SHAKES_SUCCESS; + } + + if (ballId == BALL_MASTER) + { + shakes = maxShakes; + } + else + { + odds = Sqrt(Sqrt(16711680 / odds)); + odds = 1048560 / odds; + for (shakes = 0; shakes < maxShakes; shakes++) + { + if (RandomUniform(RNG_BALLTHROW_SHAKE, 0, MAX_u16) >= odds) + break; + } + } + + BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, shakes); + MarkBattlerForControllerExec(gBattlerAttacker); + + if (shakes == maxShakes) // mon caught, copy of the code above + { + enum NationalDexOrder natDexNo = SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species); + if ((B_CRITICAL_CAPTURE_IF_OWNED >= GEN_9 && GetSetPokedexFlag(natDexNo, FLAG_GET_CAUGHT)) + || IsCriticalCapture()) + { + gBattleSpritesDataPtr->animationData->isCriticalCapture = TRUE; + gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE; + } + TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE); + gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; + struct Pokemon *caughtMon = GetBattlerMon(gBattlerTarget); + SetMonData(caughtMon, MON_DATA_POKEBALL, &ballId); + + if (CalculatePlayerPartyCount() == PARTY_SIZE) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + + if (ballId == BALL_HEAL) + { + MonRestorePP(caughtMon); + HealStatusConditions(caughtMon, STATUS1_ANY, gBattlerTarget); + gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP; + SetMonData(caughtMon, MON_DATA_HP, &gBattleMons[gBattlerTarget].hp); + } + else if (ballId == BALL_FRIEND) + { + u32 friendship = (B_FRIEND_BALL_MODIFIER >= GEN_8 ? 150 : 200); + SetMonData(caughtMon, MON_DATA_FRIENDSHIP, &friendship); + } + } + else // not caught + { + if (!gHasFetchedBall) + gLastUsedBall = gLastUsedItem; + + if (IsCriticalCapture()) + gBattleCommunication[MULTISTRING_CHOOSER] = BALL_3_SHAKES_FAIL; + else + gBattleCommunication[MULTISTRING_CHOOSER] = shakes; + + gBattlescriptCurrInstr = BattleScript_ShakeBallThrow; + } } } -#endif } -static void Cmd_setsemiinvulnerablebit(void) +static void Cmd_givecaughtmon(void) { - CMD_ARGS(bool8 clear); + CMD_ARGS(const u8 *passInstr); + enum GiveCaughtMonStates state = gBattleCommunication[MULTIUSE_STATE]; + // Restore players party in order to handle properly the case when a wild mon is caught. + if (IsNPCFollowerWildBattle()) + LoadPlayerParty(); - if (gBattleMoveEffects[GetMoveEffect(gCurrentMove)].semiInvulnerableEffect == TRUE) + switch (state) { - u32 semiInvulnerableEffect = GetMoveTwoTurnAttackStatus(gCurrentMove); - if (cmd->clear) - gStatuses3[gBattlerAttacker] &= ~semiInvulnerableEffect; + case GIVECAUGHTMON_CHECK_PARTY_SIZE: + if (CalculatePlayerPartyCount() == PARTY_SIZE && B_CATCH_SWAP_INTO_PARTY >= GEN_7) + { + PrepareStringBattle(STRINGID_SENDCAUGHTMONPARTYORBOX, gBattlerAttacker); + gBattleCommunication[MSG_DISPLAY] = 1; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_ASK_ADD_TO_PARTY; + } else - gStatuses3[gBattlerAttacker] |= semiInvulnerableEffect; - } - - gBattlescriptCurrInstr = cmd->nextInstr; -} + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NO_MESSSAGE_SKIP; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + break; + case GIVECAUGHTMON_ASK_ADD_TO_PARTY: + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_HANDLE_INPUT; + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(0); + break; + case GIVECAUGHTMON_HANDLE_INPUT: + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(0); + } + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); + gBattleCommunication[CURSOR_POSITION] = 1; + BattleCreateYesNoCursorAt(1); + } + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + if (gBattleCommunication[CURSOR_POSITION] == 0) + { + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_DO_CHOOSE_MON; + } + else + { + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + break; + case GIVECAUGHTMON_DO_CHOOSE_MON: + if (!gPaletteFade.active) + { + BtlController_EmitChoosePokemon(gBattlerAttacker, B_COMM_TO_CONTROLLER, PARTY_ACTION_SEND_MON_TO_BOX, PARTY_SIZE, ABILITY_NONE, 0, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_HANDLE_CHOSEN_MON; + } + break; + case GIVECAUGHTMON_HANDLE_CHOSEN_MON: + if (gSelectedMonPartyId != PARTY_SIZE) + { + if (gSelectedMonPartyId > PARTY_SIZE) + { + // Choosing Pokemon was cancelled + gSelectedMonPartyId = PARTY_SIZE; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + else + { + //Before sending to PC, we revert battle form + TryRevertPartyMonFormChange(gSelectedMonPartyId); + // Mon chosen, try to put it in the PC + if (CopyMonToPC(&gPlayerParty[gSelectedMonPartyId]) == MON_GIVEN_TO_PC) + { + GetMonNickname(&gPlayerParty[gSelectedMonPartyId], gStringVar2); + StringCopy(gStringVar1, GetBoxNamePtr(GetPCBoxToSendMon())); + ZeroMonData(&gPlayerParty[gSelectedMonPartyId]); + gBattleStruct->itemLost[B_SIDE_PLAYER][gSelectedMonPartyId].originalItem = ITEM_NONE; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWAPPED_INTO_PARTY; + gSelectedMonPartyId = PARTY_SIZE; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + else + { + gSelectedMonPartyId = PARTY_SIZE; + gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; + } + } + } + break; + case GIVECAUGHTMON_GIVE_AND_SHOW_MSG: + { + struct Pokemon *caughtMon = GetBattlerMon(GetCatchingBattler()); + if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9) + { + u16 lostItem = gBattleStruct->itemLost[B_SIDE_OPPONENT][gBattlerPartyIndexes[GetCatchingBattler()]].originalItem; + if (lostItem != ITEM_NONE && GetItemPocket(lostItem) != POCKET_BERRIES) + SetMonData(caughtMon, MON_DATA_HELD_ITEM, &lostItem); // Restore non-berry items + } -static bool32 CheckIfCanFireTwoTurnMoveNow(u8 battler, bool8 checkChargeTurnEffects) -{ - // Semi-invulnerable moves cannot skip their charge turn (except with Power Herb) - if (gBattleMoveEffects[GetMoveEffect(gCurrentMove)].semiInvulnerableEffect == TRUE) - return FALSE; + if (GiveMonToPlayer(caughtMon) != MON_GIVEN_TO_PARTY + && gBattleCommunication[MULTISTRING_CHOOSER] != B_MSG_SWAPPED_INTO_PARTY) + { + if (!ShouldShowBoxWasFullMessage()) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SENT_SOMEONES_PC; + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); + GetMonData(caughtMon, MON_DATA_NICKNAME, gStringVar2); + } + else + { + StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to + GetMonData(caughtMon, MON_DATA_NICKNAME, gStringVar2); + StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); //box the mon was going to be sent to + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOMEONES_BOX_FULL; + } - // If this move has charge turn effects, it must charge, activate them, then try to fire - if (checkChargeTurnEffects && MoveHasChargeTurnAdditionalEffect(gCurrentMove)) - return FALSE; + // Change to B_MSG_SENT_LANETTES_PC or B_MSG_LANETTES_BOX_FULL + if (FlagGet(FLAG_SYS_PC_LANETTE)) + gBattleCommunication[MULTISTRING_CHOOSER]++; + } - // Insert custom conditions here + gBattleResults.caughtMonSpecies = GetMonData(caughtMon, MON_DATA_SPECIES, NULL); + GetMonData(caughtMon, MON_DATA_NICKNAME, gBattleResults.caughtMonNick); + gBattleResults.caughtMonBall = GetMonData(caughtMon, MON_DATA_POKEBALL, NULL); - // Certain two-turn moves may fire on the first turn in the right weather (Solar Beam, Electro Shot) - // By default, all two-turn moves have the option of adding weather to their argument - if (IsBattlerWeatherAffected(battler, GetMoveTwoTurnAttackWeather(gCurrentMove))) - return TRUE; + gSelectedMonPartyId = PARTY_SIZE; + gBattleCommunication[MULTIUSE_STATE] = 0; - return FALSE; + if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_NO_MESSSAGE_SKIP) + gBattlescriptCurrInstr = cmd->passInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + break; + } + } + // Save the player's party again to not interferes with RestorePartyAfterFollowerNPCBattle() called after battle. + if (IsNPCFollowerWildBattle()) + SavePlayerParty(); } -static void Cmd_tryfiretwoturnmovenowbyeffect(void) +static void Cmd_trysetcaughtmondexflags(void) { - CMD_ARGS(u8 battler, bool8 checkChargeTurnEffects, const u8 *jumpInstr); + CMD_ARGS(const u8 *failInstr); - if (CheckIfCanFireTwoTurnMoveNow(cmd->battler, cmd->checkChargeTurnEffects) == TRUE) + struct Pokemon *caughtMon = GetBattlerMon(GetCatchingBattler()); + u32 species = GetMonData(caughtMon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(caughtMon, MON_DATA_PERSONALITY, NULL); + + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) { - gBattleScripting.animTurn = 1; - gBattlescriptCurrInstr = cmd->jumpInstr; + gBattlescriptCurrInstr = cmd->failInstr; } else + { + HandleSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_SET_CAUGHT, personality); gBattlescriptCurrInstr = cmd->nextInstr; + } } -static void Cmd_setminimize(void) +static void Cmd_displaydexinfo(void) { CMD_ARGS(); - if (gHitMarker & HITMARKER_OBEYS) - gStatuses3[gBattlerAttacker] |= STATUS3_MINIMIZED; - - gBattlescriptCurrInstr = cmd->nextInstr; -} - -static void Cmd_unused_c8(void) -{ -} - -static void Cmd_trymemento(void) -{ - CMD_ARGS(const u8 *failInstr); + u32 caughtBattler = GetCatchingBattler(); + struct Pokemon *mon = GetBattlerMon(caughtBattler); + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - if (B_MEMENTO_FAIL >= GEN_4 - && (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED - || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE - || IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) - || DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) + switch (gBattleCommunication[0]) { - // Failed, target was protected. - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (B_MEMENTO_FAIL < GEN_4 - && gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE - && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE - && gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED) + case 0: + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + ClearTemporarySpeciesSpriteData(caughtBattler, FALSE, FALSE); + BattleLoadMonSpriteGfx(mon, caughtBattler); + gBattleCommunication[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + gBattleCommunication[TASK_ID] = DisplayCaughtMonDexPage(species, + GetMonData(mon, MON_DATA_IS_SHINY), + GetMonData(mon, MON_DATA_PERSONALITY)); + gBattleCommunication[0]++; + } + break; + case 2: + if (!gPaletteFade.active + && gMain.callback2 == BattleMainCB2 + && !gTasks[gBattleCommunication[TASK_ID]].isActive) + { + SetVBlankCallback(VBlankCB_Battle); + gBattleCommunication[0]++; + } + break; + case 3: + InitBattleBgsVideo(); + LoadBattleTextboxAndBackground(); + gBattle_BG3_X = 256; + gBattleCommunication[0]++; + break; + case 4: + if (!IsDma3ManagerBusyWithBgCopy()) + { + BeginNormalPaletteFade(PALETTES_BG, 0, 16, 0, RGB_BLACK); + ShowBg(0); + ShowBg(3); + gBattleCommunication[0]++; + } + break; + case 5: + if (!gPaletteFade.active) + { + gBattlescriptCurrInstr = cmd->nextInstr; + } + break; + } +} + +void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags) +{ + s32 destY, destX, bgId; + u16 var = 0; + + for (destY = yStart; destY <= yEnd; destY++) { - // Failed, unprotected target already has minimum Attack and Special Attack. - gBattlescriptCurrInstr = cmd->failInstr; + for (destX = xStart; destX <= xEnd; destX++) + { + if (destY == yStart) + { + if (destX == xStart) + var = 0x1022; + else if (destX == xEnd) + var = 0x1024; + else + var = 0x1023; + } + else if (destY == yEnd) + { + if (destX == xStart) + var = 0x1028; + else if (destX == xEnd) + var = 0x102A; + else + var = 0x1029; + } + else + { + if (destX == xStart) + var = 0x1025; + else if (destX == xEnd) + var = 0x1027; + else + var = 0x1026; + } + + if (flags & WINDOW_CLEAR) + var = 0; + + bgId = (flags & WINDOW_BG1) ? 1 : 0; + CopyToBgTilemapBufferRect_ChangePalette(bgId, &var, destX, destY, 1, 1, 0x11); + } } - else +} + +void BattleCreateYesNoCursorAt(u8 cursorPosition) +{ + u16 src[2]; + src[0] = 1; + src[1] = 2; + + CopyToBgTilemapBufferRect_ChangePalette(0, src, 0x19, 9 + (2 * cursorPosition), 1, 2, 0x11); + CopyBgTilemapBufferToVram(0); +} + +void BattleDestroyYesNoCursorAt(u8 cursorPosition) +{ + u16 src[2]; + src[0] = 0x1016; + src[1] = 0x1016; + + CopyToBgTilemapBufferRect_ChangePalette(0, src, 0x19, 9 + (2 * cursorPosition), 1, 2, 0x11); + CopyBgTilemapBufferToVram(0); +} + +static void Cmd_trygivecaughtmonnick(void) +{ + CMD_ARGS(); + + switch (gBattleCommunication[MULTIUSE_STATE]) { - // Success, drop user's HP bar to 0 - gBattleStruct->moveDamage[gBattlerAttacker] = gBattleMons[gBattlerAttacker].hp; - BtlController_EmitHealthBarUpdate(gBattlerAttacker, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP); - MarkBattlerForControllerExec(gBattlerAttacker); + case 0: + HandleBattleWindow(YESNOBOX_X_Y, 0); + BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); + gBattleCommunication[MULTIUSE_STATE]++; + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(0); + break; + case 1: + if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); + gBattleCommunication[CURSOR_POSITION] = 0; + BattleCreateYesNoCursorAt(0); + } + if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + { + PlaySE(SE_SELECT); + BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); + gBattleCommunication[CURSOR_POSITION] = 1; + BattleCreateYesNoCursorAt(1); + } + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + if (gBattleCommunication[CURSOR_POSITION] == 0) + { + gBattleCommunication[MULTIUSE_STATE]++; + BeginFastPaletteFade(3); + } + else + { + gBattleCommunication[MULTIUSE_STATE] = 4; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + gBattleCommunication[MULTIUSE_STATE] = 4; + } + break; + case 2: + if (!gPaletteFade.active) + { + struct Pokemon *caughtMon = GetBattlerMon(gBattlerTarget); + GetMonData(caughtMon, MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); + FreeAllWindowBuffers(); + MainCallback callback = CalculatePlayerPartyCount() == PARTY_SIZE ? ReshowBlankBattleScreenAfterMenu : BattleMainCB2; + + DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick, + GetMonData(caughtMon, MON_DATA_SPECIES), + GetMonGender(caughtMon), + GetMonData(caughtMon, MON_DATA_PERSONALITY, NULL), + callback); + + gBattleCommunication[MULTIUSE_STATE]++; + } + break; + case 3: + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) + { + SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); + gBattleCommunication[MULTIUSE_STATE]++; + } + break; + case 4: + gBattleCommunication[MULTIUSE_STATE] = 0; gBattlescriptCurrInstr = cmd->nextInstr; + break; } } -// Follow Me -static void Cmd_setforcedtarget(void) +static void Cmd_unused_0xf4(void) +{ +} + +static void Cmd_removeattackerstatus1(void) { CMD_ARGS(); - gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 1; - gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget = gBattlerTarget; - gSideTimers[GetBattlerSide(gBattlerTarget)].followmePowder = IsPowderMove(gCurrentMove); + gBattleMons[gBattlerAttacker].status1 = 0; gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setcharge(void) +// CMD_ARGS is not needed for these functions as they end the script execution. +static void Cmd_finishaction(void) { - CMD_ARGS(u8 battler); + gCurrentActionFuncId = B_ACTION_FINISHED; +} - u8 battler = GetBattlerForBattleScript(cmd->battler); - gStatuses3[battler] |= STATUS3_CHARGED_UP; - if (B_CHARGE < GEN_9) - gDisableStructs[battler].chargeTimer = 2; - else - gDisableStructs[battler].chargeTimer = 0; - gBattlescriptCurrInstr = cmd->nextInstr; +static void Cmd_finishturn(void) +{ + gCurrentActionFuncId = B_ACTION_FINISHED; + gCurrentTurnActionNumber = gBattlersCount; } -// Nature Power -static void Cmd_callenvironmentattack(void) +static void Cmd_trainerslideout(void) { - CMD_ARGS(); + CMD_ARGS(u8 position); + + u32 battler = GetBattlerForBattleScript(cmd->position); + BtlController_EmitTrainerSlideBack(battler, B_COMM_TO_CONTROLLER); + MarkBattlerForControllerExec(battler); - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gCurrentMove = GetNaturePowerMove(gBattlerAttacker); - gBattlerTarget = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); - BattleScriptPush(GetMoveBattleScript(gCurrentMove)); gBattlescriptCurrInstr = cmd->nextInstr; } -u32 GetNaturePowerMove(u32 battler) +static const u16 sTelekinesisBanList[] = +{ + SPECIES_DIGLETT, + SPECIES_DUGTRIO, + SPECIES_DIGLETT_ALOLA, + SPECIES_DUGTRIO_ALOLA, + SPECIES_SANDYGAST, + SPECIES_PALOSSAND, + SPECIES_GENGAR_MEGA, +}; + +bool32 IsTelekinesisBannedSpecies(u16 species) { - u32 move = sNaturePowerMoves[gBattleEnvironment]; - if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) - move = MOVE_MOONBLAST; - else if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) - move = MOVE_THUNDERBOLT; - else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - move = MOVE_ENERGY_BALL; - else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) - move = MOVE_PSYCHIC; - else if (sNaturePowerMoves[gBattleEnvironment] == MOVE_NONE) - move = MOVE_TRI_ATTACK; + u32 i; - if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE) + for (i = 0; i < ARRAY_COUNT(sTelekinesisBanList); i++) { - gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move; - move = GetTypeBasedZMove(move); + if (species == sTelekinesisBanList[i]) + return TRUE; } - - return move; + return FALSE; } -static void Cmd_curestatuswithmove(void) +static void Cmd_settelekinesis(void) { CMD_ARGS(const u8 *failInstr); - u32 shouldHeal; - - if (GetMoveEffect(gCurrentMove) == EFFECT_REFRESH) - shouldHeal = gBattleMons[gBattlerAttacker].status1 & STATUS1_REFRESH; - else // Take Heart - shouldHeal = gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY; - if (shouldHeal) + if (gBattleMons[gBattlerTarget].volatiles.telekinesis + || gBattleMons[gBattlerTarget].volatiles.root + || gBattleMons[gBattlerTarget].volatiles.smackDown + || gFieldStatuses & STATUS_FIELD_GRAVITY + || IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species)) { - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) - TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), gBattlerPartyIndexes[gBattlerAttacker]); - - gBattleMons[gBattlerAttacker].status1 = 0; - gBattlescriptCurrInstr = cmd->nextInstr; - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].status1), &gBattleMons[gBattlerAttacker].status1); - MarkBattlerForControllerExec(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleMons[gBattlerTarget].volatiles.telekinesis = TRUE; + gDisableStructs[gBattlerTarget].telekinesisTimer = 3; + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_settorment(void) +static void Cmd_swapstatstages(void) { - CMD_ARGS(const u8 *failInstr); + CMD_ARGS(u8 stat); - if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT - || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else + u8 stat = cmd->stat; + s8 atkStatStage = gBattleMons[gBattlerAttacker].statStages[stat]; + s8 defStatStage = gBattleMons[gBattlerTarget].statStages[stat]; + + gBattleMons[gBattlerAttacker].statStages[stat] = defStatStage; + gBattleMons[gBattlerTarget].statStages[stat] = atkStatStage; + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static u16 *GetBattlerStat(struct BattlePokemon *battler, enum Stat stat) +{ + switch (stat) { - gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT; - gBattlescriptCurrInstr = cmd->nextInstr; + case STAT_ATK: return &battler->attack; + case STAT_DEF: return &battler->defense; + case STAT_SPATK: return &battler->spAttack; + case STAT_SPDEF: return &battler->spDefense; + default: return NULL; } } -static void Cmd_jumpifnodamage(void) +static void Cmd_averagestats(void) { - CMD_ARGS(const u8 *jumpInstr); + CMD_ARGS(u8 stat); - if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->jumpInstr; + u16 *stat1 = GetBattlerStat(&gBattleMons[gBattlerAttacker], cmd->stat); + u16 *stat2 = GetBattlerStat(&gBattleMons[gBattlerTarget], cmd->stat); + u16 avg = (*stat1 + *stat2) / 2; + *stat1 = *stat2 = avg; + + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_settaunt(void) +static void Cmd_jumpifcaptivateaffected(void) { - CMD_ARGS(const u8 *failInstr); + CMD_ARGS(const u8 *jumpInstr); - if (B_OBLIVIOUS_TAUNT >= GEN_6 && GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) + if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) { gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; gLastUsedAbility = ABILITY_OBLIVIOUS; RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS); } - else if (gDisableStructs[gBattlerTarget].tauntTimer == 0) + else if (AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) { - u8 turns; - if (B_TAUNT_TURNS >= GEN_5) - { - turns = 4; - if (GetBattlerTurnOrderNum(gBattlerTarget) > GetBattlerTurnOrderNum(gBattlerAttacker)) - turns--; // If the target hasn't yet moved this turn, Taunt lasts for only three turns (source: Bulbapedia) - } - else if (B_TAUNT_TURNS >= GEN_4) - { - turns = (Random() & 2) + 3; - } - else - { - turns = 2; - } - - gDisableStructs[gBattlerTarget].tauntTimer = turns; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->jumpInstr; } else { - gBattlescriptCurrInstr = cmd->failInstr; + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_trysethelpinghand(void) +static void Cmd_setnonvolatilestatus(void) { - CMD_ARGS(const u8 *failInstr); - - gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); + CMD_ARGS(u8 trigger); - if (IsDoubleBattle() - && !(gAbsentBattlerFlags & (1u << gBattlerTarget)) - && !gProtectStructs[gBattlerAttacker].helpingHand - && !gProtectStructs[gBattlerTarget].helpingHand) + switch (cmd->trigger) { - gProtectStructs[gBattlerTarget].helpingHand = TRUE; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; + case TRIGGER_ON_ABILITY: + if (gBattleScripting.moveEffect >= MOVE_EFFECT_CONFUSION) + SetMoveEffect(gBattleScripting.battler, gEffectBattler, gBattleScripting.moveEffect, cmd->nextInstr, EFFECT_PRIMARY); + else + SetNonVolatileStatus(gEffectBattler, gBattleScripting.moveEffect, cmd->nextInstr, TRIGGER_ON_ABILITY); + break; + case TRIGGER_ON_MOVE: + SetNonVolatileStatus(gBattlerTarget, GetMoveNonVolatileStatus(gCurrentMove), cmd->nextInstr, TRIGGER_ON_MOVE); + break; + case TRIGGER_ON_PROTECT: + SetNonVolatileStatus(gBattlerAttacker, gBattleScripting.moveEffect, cmd->nextInstr, TRIGGER_ON_PROTECT); + break; } } -// Trick -static void Cmd_tryswapitems(void) +static void Cmd_tryoverwriteability(void) { CMD_ARGS(const u8 *failInstr); - // opponent can't swap items with player in regular battles - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL - || (!IsOnPlayerSide(gBattlerAttacker) - && !(gBattleTypeFlags & (BATTLE_TYPE_LINK - | BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_SECRET_BASE - | BATTLE_TYPE_RECORDED_LINK - | (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE ? BATTLE_TYPE_TRAINER : 0) - )))) + if (gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeOverwritten + || gBattleMons[gBattlerTarget].ability == GetMoveOverwriteAbility(gCurrentMove)) { + RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); gBattlescriptCurrInstr = cmd->failInstr; } + else if (CanAbilityShieldActivateForBattler(gBattlerTarget)) + { + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); + } else { - u8 sideAttacker = GetBattlerSide(gBattlerAttacker); - u8 sideTarget = GetBattlerSide(gBattlerTarget); - - // You can't swap items if they were knocked off in regular battles - if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK - | BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_SECRET_BASE - | BATTLE_TYPE_RECORDED_LINK)) - && (gWishFutureKnock.knockedOffMons[sideAttacker] & (1u << gBattlerPartyIndexes[gBattlerAttacker]) - || gWishFutureKnock.knockedOffMons[sideTarget] & (1u << gBattlerPartyIndexes[gBattlerTarget]))) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - // can't swap if two PokΓ©mon don't have an item - // or if either of them is an enigma berry or a mail - else if ((gBattleMons[gBattlerAttacker].item == ITEM_NONE && gBattleMons[gBattlerTarget].item == ITEM_NONE) - || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) - || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerTarget].item) - || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerTarget].item) - || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - // check if ability prevents swapping - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) - { - gBattlescriptCurrInstr = BattleScript_StickyHoldActivates; - gLastUsedAbility = gBattleMons[gBattlerTarget].ability; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); - } - // took a while, but all checks passed and items can be safely swapped - else - { - u16 oldItemAtk, *newItemAtk; - - newItemAtk = &gBattleStruct->changedItems[gBattlerAttacker]; - oldItemAtk = gBattleMons[gBattlerAttacker].item; - *newItemAtk = gBattleMons[gBattlerTarget].item; - - gBattleMons[gBattlerAttacker].item = ITEM_NONE; - gBattleMons[gBattlerTarget].item = oldItemAtk; - - RecordItemEffectBattle(gBattlerAttacker, 0); - RecordItemEffectBattle(gBattlerTarget, GetItemHoldEffect(oldItemAtk)); - - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(*newItemAtk), newItemAtk); - MarkBattlerForControllerExec(gBattlerAttacker); - - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); - MarkBattlerForControllerExec(gBattlerTarget); - - gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE; - gBattleStruct->choicedMove[gBattlerAttacker] = MOVE_NONE; - - gBattlescriptCurrInstr = cmd->nextInstr; - - PREPARE_ITEM_BUFFER(gBattleTextBuff1, *newItemAtk) - PREPARE_ITEM_BUFFER(gBattleTextBuff2, oldItemAtk) - - if (!(sideAttacker == sideTarget && IsPartnerMonFromSameTrainer(gBattlerAttacker))) - { - // if targeting your own side and you aren't in a multi battle, don't save items as stolen - if (IsOnPlayerSide(gBattlerAttacker)) - TrySaveExchangedItem(gBattlerAttacker, oldItemAtk); - if (IsOnPlayerSide(gBattlerTarget)) - TrySaveExchangedItem(gBattlerTarget, *newItemAtk); - } - - if (oldItemAtk != ITEM_NONE && *newItemAtk != ITEM_NONE) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_BOTH; // attacker's item -> <- target's item - } - else if (oldItemAtk == ITEM_NONE && *newItemAtk != ITEM_NONE) - { - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNBURDEN && gDisableStructs[gBattlerAttacker].unburdenActive) - gDisableStructs[gBattlerAttacker].unburdenActive = FALSE; + if (gDisableStructs[gBattlerTarget].neutralizingGas) + gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_TAKEN; // nothing -> <- target's item - } - else - { - CheckSetUnburden(gBattlerAttacker); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ITEM_SWAP_GIVEN; // attacker's item -> <- nothing - } - } + RemoveAbilityFlags(gBattlerTarget); + gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability; + gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = GetMoveOverwriteAbility(gCurrentMove); + gBattlescriptCurrInstr = cmd->nextInstr; } } -// Role Play, Doodle -static void Cmd_trycopyability(void) +static void Cmd_callnative(void) { - CMD_ARGS(u8 battler, const u8 *failInstr); + CMD_ARGS(void (*func)(void)); + void (*func)(void) = cmd->func; + func(); +} - u32 battler = GetBattlerForBattleScript(cmd->battler); - u16 defAbility = gBattleMons[gBattlerTarget].ability; +// Callnative Funcs - if (gBattleMons[battler].ability == defAbility - || defAbility == ABILITY_NONE - || gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed - || (IsBattlerAlive(BATTLE_PARTNER(battler)) && gAbilitiesInfo[gBattleMons[BATTLE_PARTNER(battler)].ability].cantBeSuppressed && GetMoveEffect(gCurrentMove) == EFFECT_DOODLE) - || gAbilitiesInfo[defAbility].cantBeCopied) - { - gBattlescriptCurrInstr = cmd->failInstr; - } +void SaveBattlerTarget(u32 battler) +{ + if (gBattleStruct->savedTargetCount < NELEMS(gBattleStruct->savedBattlerTarget)) + gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount++] = battler; else - { - gBattleScripting.abilityPopupOverwrite = gBattleMons[battler].ability; - gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = defAbility; - gLastUsedAbility = defAbility; - gBattlescriptCurrInstr = cmd->nextInstr; - } + DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerTarget array size!"); } -static void Cmd_trywish(void) +void SaveBattlerAttacker(u32 battler) { - CMD_ARGS(const u8 *failInstr); - - if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (gWishFutureKnock.wishCounter[gBattlerAttacker] <= gBattleTurnCounter) - { - gWishFutureKnock.wishCounter[gBattlerAttacker] = gBattleTurnCounter + 2; - gWishFutureKnock.wishPartyId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker]; - gBattlescriptCurrInstr = cmd->nextInstr; - } + if (gBattleStruct->savedAttackerCount < NELEMS(gBattleStruct->savedBattlerAttacker)) + gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount++] = battler; else - { - gBattlescriptCurrInstr = cmd->failInstr; - } + DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerAttacker array size!"); } -static void Cmd_settoxicspikes(void) +void BS_SaveTarget(void) { - CMD_ARGS(const u8 *failInstr); + NATIVE_ARGS(); + SaveBattlerTarget(gBattlerTarget); + gBattlescriptCurrInstr = cmd->nextInstr; +} - u8 targetSide = GetBattlerSide(gBattlerTarget); - if (gSideTimers[targetSide].toxicSpikesAmount >= 2) +void BS_RestoreTarget(void) +{ + NATIVE_ARGS(); + if (gBattleStruct->savedTargetCount > 0) { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleStruct->savedTargetCount--; + gBattlerTarget = gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount]; } else { - gSideTimers[targetSide].toxicSpikesAmount++; - gSideStatuses[targetSide] |= SIDE_STATUS_TOXIC_SPIKES; - gBattlescriptCurrInstr = cmd->nextInstr; + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreTarget attempting to restore an empty target!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreTarget attempting to restore an empty target!"); + // #endif } + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setgastroacid(void) +void BS_SaveAttacker(void) { - CMD_ARGS(const u8 *failInstr); + NATIVE_ARGS(); + SaveBattlerAttacker(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeSuppressed) +void BS_RestoreAttacker(void) +{ + NATIVE_ARGS(); + if (gBattleStruct->savedAttackerCount > 0) { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleStruct->savedAttackerCount--; + gBattlerAttacker = gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount]; } else { - if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS) - gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; - - gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID; - gBattlescriptCurrInstr = cmd->nextInstr; + // #if TESTING + // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreAttacker attempting to restore an empty attacker!"); + // #else + DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreAttacker attempting to restore an empty attacker!"); + // #endif } + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setyawn(void) +void BS_CalcMetalBurstDmg(void) { - CMD_ARGS(const u8 *failInstr); + NATIVE_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & STATUS3_YAWN - || gBattleMons[gBattlerTarget].status1 & STATUS1_ANY) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); + u8 sideTarget = 0; + + if (gProtectStructs[gBattlerAttacker].physicalDmg + && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId)) + && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp) { - // When Yawn is used while Electric Terrain is set and drowsiness is set from Yawn being used against target in the previous turn: - // "But it failed" will display first. - gBattlescriptCurrInstr = BattleScript_ElectricTerrainPrevents; + + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) + gBattlerTarget = gSideTimers[sideTarget].followmeTarget; + else + gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; + + CalcReflectBackDamage(gProtectStructs[gBattlerAttacker].physicalDmg, 150); + gBattlescriptCurrInstr = cmd->nextInstr; } - else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_MISTY_TERRAIN)) + else if (gProtectStructs[gBattlerAttacker].specialDmg + && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId)) + && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) { - // When Yawn is used while Misty Terrain is set and drowsiness is set from Yawn being used against target in the previous turn: - // "But it failed" will display first. - gBattlescriptCurrInstr = BattleScript_MistyTerrainPrevents; + + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) + gBattlerTarget = gSideTimers[sideTarget].followmeTarget; + else + gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; + + CalcReflectBackDamage(gProtectStructs[gBattlerAttacker].specialDmg, 150); + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } } -static void Cmd_setdamagetohealthdifference(void) +void BS_JumpIfMoreThanHalfHP(void) { - CMD_ARGS(const u8 *failInstr); + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - if (GetNonDynamaxHP(gBattlerTarget) <= gBattleMons[gBattlerAttacker].hp) - { - gBattlescriptCurrInstr = cmd->failInstr; - } + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gBattleMons[battler].hp > (gBattleMons[battler].maxHP + 1) / 2) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxHP(gBattlerTarget) - gBattleMons[gBattlerAttacker].hp; gBattlescriptCurrInstr = cmd->nextInstr; - } } -static void HandleRoomMove(u32 statusFlag, u16 *timer, u8 stringId) +void BS_DoStockpileStatChangesWearOff(void) { - if (gFieldStatuses & statusFlag) + NATIVE_ARGS(u8 battler, const u8 *statChangeInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gDisableStructs[battler].stockpileDef != 0) { - gFieldStatuses &= ~statusFlag; - gBattleCommunication[MULTISTRING_CHOOSER] = stringId + 1; + SET_STATCHANGER(STAT_DEF, abs(gDisableStructs[battler].stockpileDef), TRUE); + gDisableStructs[battler].stockpileDef = 0; + BattleScriptCall(cmd->statChangeInstr); + } + else if (gDisableStructs[battler].stockpileSpDef) + { + SET_STATCHANGER(STAT_SPDEF, abs(gDisableStructs[battler].stockpileSpDef), TRUE); + gDisableStructs[battler].stockpileSpDef = 0; + BattleScriptCall(cmd->statChangeInstr); } else { - gFieldStatuses |= statusFlag; - *timer = gBattleTurnCounter + 5; - gBattleCommunication[MULTISTRING_CHOOSER] = stringId; + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_setroom(void) +static bool32 CriticalCapture(u32 odds) { - CMD_ARGS(); + u32 numCaught; + u32 totalDexCount; + u32 charmBoost = 1; - switch (GetMoveEffect(gCurrentMove)) - { - case EFFECT_TRICK_ROOM: - HandleRoomMove(STATUS_FIELD_TRICK_ROOM, &gFieldTimers.trickRoomTimer, 0); - break; - case EFFECT_WONDER_ROOM: - HandleRoomMove(STATUS_FIELD_WONDER_ROOM, &gFieldTimers.wonderRoomTimer, 2); - break; - case EFFECT_MAGIC_ROOM: - HandleRoomMove(STATUS_FIELD_MAGIC_ROOM, &gFieldTimers.magicRoomTimer, 4); - break; - default: - gBattleCommunication[MULTISTRING_CHOOSER] = 6; - break; - } - gBattlescriptCurrInstr = cmd->nextInstr; -} + if (B_CRITICAL_CAPTURE == FALSE) + return FALSE; -// Skill Swap -static void Cmd_tryswapabilities(void) -{ - CMD_ARGS(const u8 *failInstr); + if (B_CRITICAL_CAPTURE_LOCAL_DEX == TRUE) + totalDexCount = HOENN_DEX_COUNT; + else + totalDexCount = NATIONAL_DEX_COUNT; - if (gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSwapped - || gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeSwapped) - { - RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) - { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = cmd->failInstr; - } + if (CheckBagHasItem(ITEM_CATCHING_CHARM, 1)) + charmBoost = (100 + B_CATCHING_CHARM_BOOST) / 100; + + numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT); + if (numCaught > (totalDexCount * 600) / 650) + odds = (odds * (250 * charmBoost)) / 100; + else if (numCaught > (totalDexCount * 450) / 650) + odds = (odds * (200 * charmBoost)) / 100; + else if (numCaught > (totalDexCount * 300) / 650) + odds = (odds * (150 * charmBoost)) / 100; + else if (numCaught > (totalDexCount * 150) / 650) + odds = (odds * (100 * charmBoost)) / 100; + else if (numCaught > (totalDexCount * 30) / 650) + odds = (odds * (50 * charmBoost)) / 100; else - { - if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - if (!IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) - gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability; - gLastUsedAbility = gBattleMons[gBattlerTarget].ability; - gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = gBattleMons[gBattlerAttacker].ability; - gBattleMons[gBattlerAttacker].ability = gDisableStructs[gBattlerAttacker].overwrittenAbility = gLastUsedAbility; + return FALSE; - gBattlescriptCurrInstr = cmd->nextInstr; - } - } + if (odds > 255) + odds = 255; + + odds /= 6; + if (RandomUniform(RNG_BALLTHROW_CRITICAL, 0, MAX_u8) < odds) + return TRUE; + + return FALSE; } -static void Cmd_tryimprison(void) +bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) { - CMD_ARGS(const u8 *failInstr); - - if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (B_IMPRISON >= GEN_5) - { - gStatuses3[gBattlerAttacker] |= STATUS3_IMPRISONED_OTHERS; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else + if (move != MOVE_NONE && move != MOVE_UNAVAILABLE && move != MOVE_STRUGGLE + && !IsMoveParentalBondBanned(move) + && GetMoveCategory(move) != DAMAGE_CATEGORY_STATUS + && GetMoveStrikeCount(move) < 2 + && GetMoveEffect(move) != EFFECT_SEMI_INVULNERABLE + && GetMoveEffect(move) != EFFECT_TWO_TURNS_ATTACK + && GetMoveEffect(move) != EFFECT_MULTI_HIT) { - u8 battler; - - for (battler = 0; battler < gBattlersCount; battler++) + if (IsDoubleBattle()) { - if (!IsBattlerAlly(gBattlerAttacker, battler)) + switch (GetBattlerMoveTargetType(battler, move)) { - s32 attackerMoveId; - for (attackerMoveId = 0; attackerMoveId < MAX_MON_MOVES; attackerMoveId++) - { - s32 i; - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gBattleMons[gBattlerAttacker].moves[attackerMoveId] == gBattleMons[battler].moves[i] - && gBattleMons[gBattlerAttacker].moves[attackerMoveId] != MOVE_NONE) - break; - } - if (i != MAX_MON_MOVES) - break; - } - if (attackerMoveId != MAX_MON_MOVES) - { - gStatuses3[gBattlerAttacker] |= STATUS3_IMPRISONED_OTHERS; - gBattlescriptCurrInstr = cmd->nextInstr; - break; - } + // Both foes are alive, spread move strikes once + case MOVE_TARGET_BOTH: + if (CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerTarget) >= 2) + return FALSE; + break; + // Either both foes or one foe and its ally are alive; spread move strikes once + case MOVE_TARGET_FOES_AND_ALLY: + if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, gBattlerAttacker) >= 2) + return FALSE; + break; + default: + break; } } - if (battler == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes. - gBattlescriptCurrInstr = cmd->failInstr; + return TRUE; } + return FALSE; } -static void Cmd_setstealthrock(void) +static bool32 IsFinalStrikeEffect(enum MoveEffect moveEffect) { - CMD_ARGS(const u8 *failInstr); - - u8 targetSide = GetBattlerSide(gBattlerTarget); - if (gSideStatuses[targetSide] & SIDE_STATUS_STEALTH_ROCK) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else + switch (moveEffect) { - gSideStatuses[targetSide] |= SIDE_STATUS_STEALTH_ROCK; - gSideTimers[targetSide].stealthRockAmount = 1; - gBattlescriptCurrInstr = cmd->nextInstr; + case MOVE_EFFECT_REMOVE_ARG_TYPE: + case MOVE_EFFECT_REMOVE_STATUS: + case MOVE_EFFECT_RECOIL_HP_25: + case MOVE_EFFECT_PREVENT_ESCAPE: + case MOVE_EFFECT_WRAP: + return TRUE; + default: + return FALSE; } } -static void Cmd_setuserstatus3(void) +static bool32 CanAbilityPreventStatLoss(enum Ability abilityDef) { - CMD_ARGS(u32 flags, const u8 *failInstr); - - u32 flags = cmd->flags; - - if (gStatuses3[gBattlerAttacker] & flags) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else + switch (abilityDef) { - gStatuses3[gBattlerAttacker] |= flags; - if (flags & STATUS3_MAGNET_RISE) - gDisableStructs[gBattlerAttacker].magnetRiseTimer = gBattleTurnCounter + 5; - if (flags & STATUS3_LASER_FOCUS) - gDisableStructs[gBattlerAttacker].laserFocusTimer = gBattleTurnCounter + 2; - gBattlescriptCurrInstr = cmd->nextInstr; + case ABILITY_CLEAR_BODY: + case ABILITY_FULL_METAL_BODY: + case ABILITY_WHITE_SMOKE: + return TRUE; + default: + break; } + return FALSE; } -static void Cmd_assistattackselect(void) +bool32 CanBurnHitThaw(u16 move) { - CMD_ARGS(const u8 *failInstr); - - s32 chooseableMovesNo = 0; - struct Pokemon *party; - s32 monId, moveId; - u16 *validMoves = Alloc(sizeof(u16) * PARTY_SIZE * MAX_MON_MOVES); + u8 i; - if (validMoves != NULL) + if (GetConfig(CONFIG_BURN_HIT_THAW) >= GEN_6) { - party = GetBattlerParty(gBattlerAttacker); - - for (monId = 0; monId < PARTY_SIZE; monId++) + u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); + for (i = 0; i < numAdditionalEffects; i++) { - if (monId == gBattlerPartyIndexes[gBattlerAttacker]) - continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) - continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) - continue; - - for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) - { - u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); - - if (IsMoveAssistBanned(move)) - continue; - - validMoves[chooseableMovesNo++] = move; - } + const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); + if (additionalEffect->moveEffect == MOVE_EFFECT_BURN) + return TRUE; } } - - if (chooseableMovesNo) - { - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gCalledMove = validMoves[Random() % chooseableMovesNo]; - gBattlerTarget = GetBattleMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } - - TRY_FREE_AND_SET_NULL(validMoves); + return FALSE; } -static void Cmd_trysetmagiccoat(void) +void BS_CheckParentalBondCounter(void) { - CMD_ARGS(const u8 *failInstr); - - if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn - { - gBattlescriptCurrInstr = cmd->failInstr; - } + NATIVE_ARGS(u8 counter, const u8 *jumpInstr); + // Some effects should only happen on the first or second strike of Parental Bond, + // so a way to check this in battle scripts is useful + if (gSpecialStatuses[gBattlerAttacker].parentalBondState == cmd->counter && IsBattlerAlive(gBattlerTarget)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - gProtectStructs[gBattlerAttacker].bounceMove = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; - } } -// Snatch -static void Cmd_trysetsnatch(void) +void BS_JumpIfCantLoseItem(void) { - CMD_ARGS(const u8 *failInstr); + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u8 battler = GetBattlerForBattleScript(cmd->battler); + u16 item = gBattleMons[battler].item; - if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn - { - gBattlescriptCurrInstr = cmd->failInstr; - } + if (item == ITEM_NONE || !CanBattlerGetOrLoseItem(battler, item)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - gProtectStructs[gBattlerAttacker].stealMove = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; - } } -static void Cmd_unused2(void) +void BS_GetBattlerSide(void) { + NATIVE_ARGS(u8 battler); + gBattleCommunication[0] = GetBattlerSide(GetBattlerForBattleScript(cmd->battler)); + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_switchoutabilities(void) +void BS_TrySymbiosis(void) { - CMD_ARGS(u8 battler); - + NATIVE_ARGS(u8 battler); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gBattleMons[battler].ability == ABILITY_NEUTRALIZING_GAS) - { - gBattleMons[battler].ability = ABILITY_NONE; - BattleScriptPush(gBattlescriptCurrInstr); - gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; - } - else + //called by Bestow, Fling, and Bug Bite, which don't work with Cmd_removeitem. + u32 partner = BATTLE_PARTNER(battler); + if (TryTriggerSymbiosis(battler, partner)) { - switch (GetBattlerAbility(battler)) - { - case ABILITY_NATURAL_CURE: - if (gBattleMons[battler].status1 & STATUS1_SLEEP) - TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); - - gBattleMons[battler].status1 = 0; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, - 1u << gBattleStruct->battlerPartyIndexes[battler], - sizeof(gBattleMons[battler].status1), - &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - break; - case ABILITY_REGENERATOR: - { - u32 regenerate = GetNonDynamaxMaxHP(battler) / 3; - regenerate += gBattleMons[battler].hp; - if (regenerate > gBattleMons[battler].maxHP) - regenerate = gBattleMons[battler].maxHP; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, - 1u << gBattleStruct->battlerPartyIndexes[battler], - sizeof(regenerate), - ®enerate); - MarkBattlerForControllerExec(battler); - break; - } - } - - gBattlescriptCurrInstr = cmd->nextInstr; + BestowItem(partner, battler); + gLastUsedAbility = gBattleMons[partner].ability; + gBattleScripting.battler = gBattlerAbility = partner; + gEffectBattler = battler; + BattleScriptCall(BattleScript_SymbiosisActivates); + return; } -} - -static void Cmd_jumpifhasnohp(void) -{ - CMD_ARGS(u8 battler, const u8 *jumpInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); - - if (!IsBattlerAlive(battler)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_jumpifnotcurrentmoveargtype(void) +void BS_SetZEffect(void) { - CMD_ARGS(u8 battler, const u8 *failInstr); - - u8 battler = GetBattlerForBattleScript(cmd->battler); - const u8 *failInstr = cmd->failInstr; - u32 type = GetMoveArgType(gCurrentMove); - - if (!IS_BATTLER_OF_TYPE(battler, type)) - gBattlescriptCurrInstr = failInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + SetZEffect(); // Handles battle script jumping internally } -static void Cmd_pickup(void) +static void TryUpdateRoundTurnOrder(void) { - CMD_ARGS(); - - u32 i, j; - u16 species, heldItem, ability; - u8 lvlDivBy10; - - if (!InBattlePike()) // No items in Battle Pike. + if (IsDoubleBattle()) { - bool32 isInPyramid = InBattlePyramid_(); - for (i = 0; i < PARTY_SIZE; i++) + u32 i; + u32 j = 0; + u32 k = 0; + u32 currRounder = 0; + u8 roundUsers[3] = {0xFF, 0xFF, 0xFF}; + u8 nonRoundUsers[3] = {0xFF, 0xFF, 0xFF}; + for (i = 0; i < gBattlersCount; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)-1) / 10; //Moving this here makes it easier to add in abilities like Honey Gather. - if (lvlDivBy10 > 9) - lvlDivBy10 = 9; - - ability = gSpeciesInfo[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; - - if (ability == ABILITY_PICKUP - && species != SPECIES_NONE - && species != SPECIES_EGG - && heldItem == ITEM_NONE - && (Random() % 10) == 0) - { - if (isInPyramid) - { - heldItem = GetBattlePyramidPickupItemId(); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - else - { - u32 rand = Random() % 100; - u32 percentTotal = 0; - - for (j = 0; j < ARRAY_COUNT(sPickupTable); j++) - { - percentTotal += sPickupTable[j].percentage[lvlDivBy10]; - if (rand < percentTotal) - { - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sPickupTable[j].itemId); - break; - } - } - } - } - else if (ability == ABILITY_HONEY_GATHER - && species != 0 - && species != SPECIES_EGG - && heldItem == ITEM_NONE) - { - if ((lvlDivBy10 + 1 ) * 5 > Random() % 100) - { - heldItem = ITEM_HONEY; - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - } - else if (P_SHUCKLE_BERRY_JUICE == GEN_2 - && species == SPECIES_SHUCKLE - && heldItem == ITEM_ORAN_BERRY - && (Random() % 16) == 0) + if (gBattlerByTurnOrder[i] == gBattlerAttacker) { - heldItem = ITEM_BERRY_JUICE; - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + currRounder = i + 1; // Current battler going after attacker + break; } } - } - gBattlescriptCurrInstr = cmd->nextInstr; -} + // Get battlers after attacker using round + for (i = currRounder; i < gBattlersCount; i++) + { + if (gChosenMoveByBattler[gBattlerByTurnOrder[i]] == MOVE_ROUND) + roundUsers[j++] = gBattlerByTurnOrder[i]; + else + nonRoundUsers[k++] = gBattlerByTurnOrder[i]; + } -static void Cmd_unused_0xE6(void) -{ -} + // update turn order for round users + for (i = 0; i < 3 && roundUsers[i] != 0xFF; i++) + { + gBattlerByTurnOrder[currRounder] = roundUsers[i]; + gProtectStructs[roundUsers[i]].quash = TRUE; // Make it so their turn order can't be changed again + currRounder++; + } -static void Cmd_unused_0xE7(void) -{ + // Update turn order for non-round users + for (i = 0; i < 3 && nonRoundUsers[i] != 0xFF; i++) + { + gBattlerByTurnOrder[currRounder] = nonRoundUsers[i]; + currRounder++; + } + } } -// Water and Mud Sport -static void Cmd_settypebasedhalvers(void) +u8 GetFirstFaintedPartyIndex(u8 battler) { - CMD_ARGS(const u8 *failInstr); - - bool8 worked = FALSE; + u32 i; + u32 start = 0; + u32 end = PARTY_SIZE; + struct Pokemon *party = GetBattlerParty(battler); - if (GetMoveEffect(gCurrentMove) == EFFECT_MUD_SPORT) + // Check whether partner is separate trainer. + if ((IsOnPlayerSide(battler) && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + || (!IsOnPlayerSide(battler) && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) { - if (B_SPORT_TURNS >= GEN_6) + if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT + || GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) { - if (!(gFieldStatuses & STATUS_FIELD_MUDSPORT)) - { - gFieldStatuses |= STATUS_FIELD_MUDSPORT; - gFieldTimers.mudSportTimer = gBattleTurnCounter + 5; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; - worked = TRUE; - } + end = PARTY_SIZE / 2; } else { - if (!(gStatuses4[gBattlerAttacker] & STATUS4_MUD_SPORT)) - { - gStatuses4[gBattlerAttacker] |= STATUS4_MUD_SPORT; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_ELECTRIC; - worked = TRUE; - } + start = PARTY_SIZE / 2; } } - else // Water Sport + + // Loop through to find fainted battler. + for (i = start; i < end; ++i) { - if (B_SPORT_TURNS >= GEN_6) + u32 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + if (species != SPECIES_NONE + && species != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_HP) == 0) { - if (!(gFieldStatuses & STATUS_FIELD_WATERSPORT)) - { - gFieldStatuses |= STATUS_FIELD_WATERSPORT; - gFieldTimers.waterSportTimer = gBattleTurnCounter + 5; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; - worked = TRUE; - } - } - else - { - if (!(gStatuses4[gBattlerAttacker] & STATUS4_WATER_SPORT)) - { - gStatuses4[gBattlerAttacker] |= STATUS4_WATER_SPORT; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEAKEN_FIRE; - worked = TRUE; - } + return i; } } - if (worked) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->failInstr; -} - -bool32 DoesSubstituteBlockMove(u32 battlerAtk, u32 battlerDef, u32 move) -{ - if (!(gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE)) - return FALSE; - else if (MoveIgnoresSubstitute(move)) - return FALSE; - else if (GetBattlerAbility(battlerAtk) == ABILITY_INFILTRATOR) - return FALSE; - else - return TRUE; -} - -bool32 DoesDisguiseBlockMove(u32 battler, u32 move) -{ - if (!(gBattleMons[battler].species == SPECIES_MIMIKYU_DISGUISED || gBattleMons[battler].species == SPECIES_MIMIKYU_TOTEM_DISGUISED) - || gBattleMons[battler].status2 & STATUS2_TRANSFORMED - || (!gProtectStructs[battler].confusionSelfDmg && (IsBattleMoveStatus(move) || gHitMarker & HITMARKER_PASSIVE_DAMAGE)) - || gHitMarker & HITMARKER_IGNORE_DISGUISE - || GetBattlerAbility(battler) != ABILITY_DISGUISE) - return FALSE; - else - return TRUE; -} - -static void Cmd_jumpifsubstituteblocks(void) -{ - CMD_ARGS(const u8 *jumpInstr); - - if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; -} - -static void Cmd_tryrecycleitem(void) -{ - CMD_ARGS(const u8 *failInstr); - - u16 *usedHeldItem; - - if (gCurrentMove == MOVE_NONE && GetBattlerAbility(gBattlerAttacker) == ABILITY_PICKUP) - usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerTarget]][GetBattlerSide(gBattlerTarget)]; - else - usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerAttacker]][GetBattlerSide(gBattlerAttacker)]; - if (*usedHeldItem != ITEM_NONE && gBattleMons[gBattlerAttacker].item == ITEM_NONE) - { - gLastUsedItem = *usedHeldItem; - *usedHeldItem = ITEM_NONE; - gBattleMons[gBattlerAttacker].item = gLastUsedItem; - - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerAttacker].item), &gBattleMons[gBattlerAttacker].item); - MarkBattlerForControllerExec(gBattlerAttacker); - - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } -} - -bool32 CanCamouflage(u8 battler) -{ - if (IS_BATTLER_OF_TYPE(battler, sEnvironmentToType[gBattleEnvironment])) - return FALSE; - return TRUE; -} - -static void Cmd_settypetoenvironment(void) -{ - CMD_ARGS(const u8 *failInstr); - - u8 environmentType; - switch(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - { - case STATUS_FIELD_ELECTRIC_TERRAIN: - environmentType = TYPE_ELECTRIC; - break; - case STATUS_FIELD_GRASSY_TERRAIN: - environmentType = TYPE_GRASS; - break; - case STATUS_FIELD_MISTY_TERRAIN: - environmentType = TYPE_FAIRY; - break; - case STATUS_FIELD_PSYCHIC_TERRAIN: - environmentType = TYPE_PSYCHIC; - break; - default: - environmentType = sEnvironmentToType[gBattleEnvironment]; - break; - } - - if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, environmentType) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA) - { - SET_BATTLER_TYPE(gBattlerAttacker, environmentType); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, environmentType); - - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } -} - -// Unused -static void Cmd_pursuitdoubles(void) -{ - CMD_ARGS(const u8 *failInstr); - - u32 battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - - if (IsDoubleBattle() - && !(gAbsentBattlerFlags & (1u << battler)) - && gChosenActionByBattler[battler] == B_ACTION_USE_MOVE - && GetMoveEffect(gChosenMoveByBattler[battler]) == EFFECT_PURSUIT) - { - gActionsByTurnOrder[battler] = B_ACTION_TRY_FINISH; - gCurrentMove = gChosenMoveByBattler[battler]; - gBattlescriptCurrInstr = cmd->nextInstr; - gBattleScripting.animTurn = 1; - gBattleScripting.savedBattler = gBattlerAttacker; - gBattlerAttacker = battler; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } -} - -static void Cmd_snatchsetbattlers(void) -{ - CMD_ARGS(); - - gEffectBattler = gBattlerAttacker; - - if (gBattlerAttacker == gBattlerTarget) - gBattlerAttacker = gBattlerTarget = gBattleScripting.battler; - else - gBattlerTarget = gBattleScripting.battler; - - gBattleScripting.battler = gEffectBattler; - gBattlescriptCurrInstr = cmd->nextInstr; -} - -static void Cmd_removescreens(void) -{ - CMD_ARGS(); - - u8 side; - bool32 failed; - - if (B_BRICK_BREAK >= GEN_4) - side = GetBattlerSide(gBattlerTarget); // From Gen 4 onwards, Brick Break can remove screens on the user's side if used on an ally - else - side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE; - - if (B_BRICK_BREAK >= GEN_5) - failed = gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT; - else - failed = FALSE; - - if (!failed && gSideStatuses[side] & SIDE_STATUS_SCREEN_ANY) - { - gSideStatuses[side] &= ~SIDE_STATUS_SCREEN_ANY; - gBattleScripting.animTurn = 1; - gBattleScripting.animTargetsHit = 1; - } - else - { - gBattleScripting.animTurn = 0; - gBattleScripting.animTargetsHit = 0; - } - - gBattlescriptCurrInstr = cmd->nextInstr; -} - -u8 GetCatchingBattler(void) -{ - if (IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))) - return GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - else - return GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + // Returns PARTY_SIZE if none found. + return PARTY_SIZE; } -static void Cmd_handleballthrow(void) +void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler) { - CMD_ARGS(); - - u16 ballMultiplier = 100; - s8 ballAddition = 0; - - if (gBattleControllerExecFlags) - return; + enum HoldEffect holdEffect = GetMonHoldEffect(&gPlayerParty[expGetterMonId]); - gBattlerTarget = GetCatchingBattler(); + if (IsTradedMon(&gPlayerParty[expGetterMonId])) + *expAmount = (*expAmount * 150) / 100; + if (holdEffect == HOLD_EFFECT_LUCKY_EGG) + *expAmount = (*expAmount * 150) / 100; + if (B_UNEVOLVED_EXP_MULTIPLIER >= GEN_6 && IsMonPastEvolutionLevel(&gPlayerParty[expGetterMonId])) + *expAmount = (*expAmount * 4915) / 4096; + if (B_AFFECTION_MECHANICS == TRUE && GetMonAffectionHearts(&gPlayerParty[expGetterMonId]) >= AFFECTION_FOUR_HEARTS) + *expAmount = (*expAmount * 4915) / 4096; + if (CheckBagHasItem(ITEM_EXP_CHARM, 1)) //is also for other exp boosting Powers if/when implemented + *expAmount = (*expAmount * 150) / 100; - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { - BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_TRAINER_BLOCK); - MarkBattlerForControllerExec(gBattlerAttacker); - gBattlescriptCurrInstr = BattleScript_TrainerBallBlock; - } - else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) - { - BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_3_SHAKES_SUCCESS); - MarkBattlerForControllerExec(gBattlerAttacker); - gBattlescriptCurrInstr = BattleScript_WallyBallThrow; - } - else + if (B_SCALED_EXP >= GEN_5 && B_SCALED_EXP != GEN_6) { - u32 odds, i; - u32 catchRate; - u32 ballId = ItemIdToBallId(gLastUsedItem); - - gBallToDisplay = gLastThrownBall = gLastUsedItem; - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - catchRate = gBattleStruct->safariCatchFactor * 1275 / 100; - else - catchRate = gSpeciesInfo[gBattleMons[gBattlerTarget].species].catchRate; - - if (gSpeciesInfo[gBattleMons[gBattlerTarget].species].isUltraBeast) - { - if (ballId == BALL_BEAST) - ballMultiplier = 500; - else - ballMultiplier = 10; - } - else - { - switch (ballId) - { - case BALL_ULTRA: - ballMultiplier = 200; - break; - case BALL_SPORT: - if (B_SPORT_BALL_MODIFIER <= GEN_7) - ballMultiplier = 150; - break; - case BALL_GREAT: - ballMultiplier = 150; - break; - case BALL_SAFARI: - if (B_SAFARI_BALL_MODIFIER <= GEN_7) - ballMultiplier = 150; - break; - case BALL_NET: - if (IS_BATTLER_ANY_TYPE(gBattlerTarget, TYPE_WATER, TYPE_BUG)) - ballMultiplier = B_NET_BALL_MODIFIER >= GEN_7 ? 350 : 300; - break; - case BALL_DIVE: - if (GetCurrentMapType() == MAP_TYPE_UNDERWATER - || (B_DIVE_BALL_MODIFIER >= GEN_4 && (gIsFishingEncounter || gIsSurfingEncounter))) - ballMultiplier = 350; - break; - case BALL_NEST: - if (B_NEST_BALL_MODIFIER >= GEN_6) - { - //((41 - PokΓ©mon's level) Γ· 10)Γ— if PokΓ©mon's level is between 1 and 29, 1Γ— otherwise. - if (gBattleMons[gBattlerTarget].level < 30) - ballMultiplier = 410 - (gBattleMons[gBattlerTarget].level * 10); - } - else if (B_NEST_BALL_MODIFIER >= GEN_5) - { - //((41 - PokΓ©mon's level) Γ· 10)Γ—, minimum 1Γ— - if (gBattleMons[gBattlerTarget].level < 31) - ballMultiplier = 410 - (gBattleMons[gBattlerTarget].level * 10); - } - else if (gBattleMons[gBattlerTarget].level < 40) - { - //((40 - PokΓ©mon's level) Γ· 10)Γ—, minimum 1Γ— - ballMultiplier = 400 - (gBattleMons[gBattlerTarget].level * 10); - if (ballMultiplier <= 90) - ballMultiplier = 100; - } - break; - case BALL_REPEAT: - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBattlerTarget].species), FLAG_GET_CAUGHT)) - ballMultiplier = (B_REPEAT_BALL_MODIFIER >= GEN_7 ? 350 : 300); - break; - case BALL_TIMER: - ballMultiplier = 100 + (gBattleResults.battleTurnCounter * (B_TIMER_BALL_MODIFIER >= GEN_5 ? 30 : 10)); - if (ballMultiplier > 400) - ballMultiplier = 400; - break; - case BALL_DUSK: - i = GetTimeOfDay(); - if (i == TIME_EVENING || i == TIME_NIGHT || gMapHeader.cave || gMapHeader.mapType == MAP_TYPE_UNDERGROUND) - ballMultiplier = (B_DUSK_BALL_MODIFIER >= GEN_7 ? 300 : 350); - break; - case BALL_QUICK: - if (gBattleResults.battleTurnCounter == 0) - ballMultiplier = (B_QUICK_BALL_MODIFIER >= GEN_5 ? 500 : 400); - break; - case BALL_LEVEL: - if (gBattleMons[gBattlerAttacker].level >= 4 * gBattleMons[gBattlerTarget].level) - ballMultiplier = 800; - else if (gBattleMons[gBattlerAttacker].level > 2 * gBattleMons[gBattlerTarget].level) - ballMultiplier = 400; - else if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level) - ballMultiplier = 200; - break; - case BALL_LURE: - if (gIsFishingEncounter) - { - if (B_LURE_BALL_MODIFIER >= GEN_8) - ballMultiplier = 400; - else if (B_LURE_BALL_MODIFIER >= GEN_7) - ballMultiplier = 500; - else - ballMultiplier = 300; - } - break; - case BALL_MOON: - { - const struct Evolution *evolutions = GetSpeciesEvolutions(gBattleMons[gBattlerTarget].species); - if (evolutions == NULL) - break; - for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) - { - if (evolutions[i].method == EVO_ITEM - && evolutions[i].param == ITEM_MOON_STONE) - ballMultiplier = 400; - } - } - break; - case BALL_LOVE: - if (gBattleMons[gBattlerTarget].species == gBattleMons[gBattlerAttacker].species) - { - u8 gender1 = GetMonGender(GetBattlerMon(gBattlerTarget)); - u8 gender2 = GetMonGender(GetBattlerMon(gBattlerAttacker)); + // Note: There is an edge case where if a pokemon receives a large amount of exp, it wouldn't be properly calculated + // because of multiplying by scaling factor(the value would simply be larger than an u32 can hold). Hence u64 is needed. + u64 value = *expAmount; + u8 faintedLevel = gBattleMons[faintedBattler].level; + u8 expGetterLevel = GetMonData(&gPlayerParty[expGetterMonId], MON_DATA_LEVEL); - if (gender1 != gender2 && gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS) - ballMultiplier = 800; - } - break; - case BALL_FAST: - if (gSpeciesInfo[gBattleMons[gBattlerTarget].species].baseSpeed >= 100) - ballMultiplier = 400; - break; - case BALL_HEAVY: - i = GetSpeciesWeight(gBattleMons[gBattlerTarget].species); - if (B_HEAVY_BALL_MODIFIER >= GEN_7) - { - if (i < 1000) - ballAddition = -20; - else if (i < 2000) - ballAddition = 0; - else if (i < 3000) - ballAddition = 20; - else - ballAddition = 30; - } - else if (B_HEAVY_BALL_MODIFIER >= GEN_4) - { - if (i < 2048) - ballAddition = -20; - else if (i < 3072) - ballAddition = 20; - else if (i < 4096) - ballAddition = 30; - else - ballAddition = 40; - } - else - { - if (i < 1024) - ballAddition = -20; - else if (i < 2048) - ballAddition = 0; - else if (i < 3072) - ballAddition = 20; - else if (i < 4096) - ballAddition = 30; - else - ballAddition = 40; - } - break; - case BALL_DREAM: - if (B_DREAM_BALL_MODIFIER >= GEN_8 && (gBattleMons[gBattlerTarget].status1 & STATUS1_SLEEP || GetBattlerAbility(gBattlerTarget) == ABILITY_COMATOSE)) - ballMultiplier = 400; - break; - case BALL_BEAST: - ballMultiplier = 10; - break; - } - } + value *= sExperienceScalingFactors[(faintedLevel * 2) + 10]; + value /= sExperienceScalingFactors[faintedLevel + expGetterLevel + 10]; - // catchRate is unsigned, which means that it may potentially overflow if sum is applied directly. - if (catchRate < 21 && ballAddition == -20) - catchRate = 1; - else - catchRate = catchRate + ballAddition; + *expAmount = value + 1; + } +} - odds = (catchRate * ballMultiplier / 100) - * (gBattleMons[gBattlerTarget].maxHP * 3 - gBattleMons[gBattlerTarget].hp * 2) - / (3 * gBattleMons[gBattlerTarget].maxHP); +void BS_ItemRestoreHP(void) +{ + NATIVE_ARGS(const u8 *alreadyMaxHpInstr, const u8 *restoreBattlerInstr); + u16 healAmount; + u32 battler = MAX_BATTLERS_COUNT; + u32 healParam = GetItemEffect(gLastUsedItem)[6]; + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); + u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP); + u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP); + gBattleCommunication[MULTIUSE_STATE] = 0; - if (gBattleMons[gBattlerTarget].status1 & (STATUS1_SLEEP | STATUS1_FREEZE)) - odds *= 2; - if (gBattleMons[gBattlerTarget].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE)) - odds = (odds * 15) / 10; + if (hp == maxHP) + { + gBattlescriptCurrInstr = cmd->alreadyMaxHpInstr; + } + else + { + // Track the number of Revives used in a battle. + if (hp == 0 && IsOnPlayerSide(gBattlerAttacker) && gBattleResults.numRevivesUsed < 255) + gBattleResults.numRevivesUsed++; - if (gBattleResults.catchAttempts[ballId] < 255) - gBattleResults.catchAttempts[ballId]++; + // Check if the recipient is an active battler. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + battler = gBattlerAttacker; + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + battler = BATTLE_PARTNER(gBattlerAttacker); - if (odds > 254) // mon caught + // Get amount to heal. + switch (healParam) { - BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, BALL_3_SHAKES_SUCCESS); - MarkBattlerForControllerExec(gBattlerAttacker); - TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE); - gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; - SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_POKEBALL, &ballId); + case ITEM6_HEAL_HP_FULL: + healAmount = maxHP; + break; + case ITEM6_HEAL_HP_HALF: + healAmount = maxHP / 2; + break; + case ITEM6_HEAL_HP_QUARTER: + healAmount = maxHP / 4; + break; + default: + healAmount = healParam; + break; + } + if (hp + healAmount > maxHP) + healAmount = maxHP - hp; - if (CalculatePlayerPartyCount() == PARTY_SIZE) - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattleScripting.battler = battler; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); - if (ballId == BALL_HEAL) - { - MonRestorePP(GetBattlerMon(gBattlerTarget)); - HealStatusConditions(GetBattlerMon(gBattlerTarget), STATUS1_ANY, gBattlerTarget); - gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP; - SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_HP, &gBattleMons[gBattlerTarget].hp); - } - else if (ballId == BALL_FRIEND) - { - u32 friendship = (B_FRIEND_BALL_MODIFIER >= GEN_8 ? 150 : 200); - SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_FRIENDSHIP, &friendship); - } + // Heal is applied as move damage if battler is active. + if (battler != MAX_BATTLERS_COUNT && hp != 0) + { + gBattleStruct->passiveHpUpdate[battler] = -healAmount; + gBattlescriptCurrInstr = cmd->restoreBattlerInstr; } - else // mon may be caught, calculate shakes + else { - u8 shakes; - u8 maxShakes; - - gBattleSpritesDataPtr->animationData->isCriticalCapture = FALSE; - gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = FALSE; - - if (CriticalCapture(odds)) - { - maxShakes = BALL_1_SHAKE; // critical capture doesn't guarantee capture - gBattleSpritesDataPtr->animationData->isCriticalCapture = TRUE; - } - else - { - maxShakes = BALL_3_SHAKES_SUCCESS; - } + hp += healAmount; + SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); - if (ballId == BALL_MASTER) - { - shakes = maxShakes; - } - else + u32 partner = BATTLE_PARTNER(gBattlerAttacker); + // Absent battlers on the field need to be replaced + if (IsDoubleBattle() && (gAbsentBattlerFlags & (1u << partner))) { - odds = Sqrt(Sqrt(16711680 / odds)); - odds = 1048560 / odds; - for (shakes = 0; shakes < maxShakes && Random() < odds; shakes++); + gAbsentBattlerFlags &= ~(1u << partner); + gBattleCommunication[MULTIUSE_STATE] = TRUE; + gBattleScripting.battler = partner; + BtlController_EmitChosenMonReturnValue(partner, B_COMM_TO_ENGINE, gBattleStruct->itemPartyIndex[gBattlerAttacker], NULL); } + gBattlescriptCurrInstr = cmd->nextInstr; + } + } +} - BtlController_EmitBallThrowAnim(gBattlerAttacker, B_COMM_TO_CONTROLLER, shakes); - MarkBattlerForControllerExec(gBattlerAttacker); - - if (shakes == maxShakes) // mon caught, copy of the code above - { - if (IsCriticalCapture()) - gBattleSpritesDataPtr->animationData->criticalCaptureSuccess = TRUE; - - TryBattleFormChange(gBattlerTarget, FORM_CHANGE_END_BATTLE); - gBattlescriptCurrInstr = BattleScript_SuccessBallThrow; - SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_POKEBALL, &ballId); +void BS_ItemCureStatus(void) +{ + NATIVE_ARGS(const u8 *noStatusInstr, const u8 *restoreBattlerInstr); + u32 targetBattler = MAX_BATTLERS_COUNT; + bool32 statusChanged = FALSE; + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); - if (CalculatePlayerPartyCount() == PARTY_SIZE) - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 1; + // Heal volatile conditions if battler is active. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + { + statusChanged = ItemHealMonVolatile(gBattlerAttacker, gLastUsedItem); + targetBattler = gBattlerAttacker; + } + else if (IsDoubleBattle() + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + { + statusChanged = ItemHealMonVolatile(BATTLE_PARTNER(gBattlerAttacker), gLastUsedItem); + targetBattler = BATTLE_PARTNER(gBattlerAttacker); + } - if (ballId == BALL_HEAL) - { - MonRestorePP(GetBattlerMon(gBattlerTarget)); - HealStatusConditions(GetBattlerMon(gBattlerTarget), STATUS1_ANY, gBattlerTarget); - gBattleMons[gBattlerTarget].hp = gBattleMons[gBattlerTarget].maxHP; - SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_HP, &gBattleMons[gBattlerTarget].hp); - } - else if (ballId == BALL_FRIEND) - { - u32 friendship = (B_FRIEND_BALL_MODIFIER >= GEN_8 ? 150 : 200); - SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_FRIENDSHIP, &friendship); - } - } - else // not caught - { - if (!gHasFetchedBall) - gLastUsedBall = gLastUsedItem; + // Heal Status1 conditions. + if (!HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], GetItemStatus1Mask(gLastUsedItem), targetBattler)) + { + statusChanged = TRUE; + if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) + gBattleMons[targetBattler].volatiles.nightmare = FALSE; + } - if (IsCriticalCapture()) - gBattleCommunication[MULTISTRING_CHOOSER] = BALL_3_SHAKES_FAIL; - else - gBattleCommunication[MULTISTRING_CHOOSER] = shakes; + if (!statusChanged) + { + gBattlescriptCurrInstr = cmd->noStatusInstr; + return; + } - gBattlescriptCurrInstr = BattleScript_ShakeBallThrow; - } - } + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); + if (targetBattler == MAX_BATTLERS_COUNT) + { + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattleScripting.battler = targetBattler; + gBattlescriptCurrInstr = cmd->restoreBattlerInstr; } } -static void Cmd_givecaughtmon(void) +void BS_ItemIncreaseStat(void) { - CMD_ARGS(const u8 *passInstr); - enum GiveCaughtMonStates state = gBattleCommunication[MULTIUSE_STATE]; + NATIVE_ARGS(); + u16 statId = GetItemEffect(gLastUsedItem)[1]; + u16 stages = GetItemHoldEffectParam(gLastUsedItem); + SET_STATCHANGER(statId, stages, FALSE); + gBattlescriptCurrInstr = cmd->nextInstr; +} - switch (state) +void BS_ItemRestorePP(void) +{ + NATIVE_ARGS(); + const u8 *effect = GetItemEffect(gLastUsedItem); + u32 i, pp, maxPP, moveId, loopEnd; + u32 battler = MAX_BATTLERS_COUNT; + struct Pokemon *mon = (IsOnPlayerSide(gBattlerAttacker)) ? &gPlayerParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]] : &gEnemyParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]]; + + // Check whether to apply to all moves. + if (effect[4] & ITEM4_HEAL_PP_ONE) { - case GIVECAUGHTMON_CHECK_PARTY_SIZE: - if (CalculatePlayerPartyCount() == PARTY_SIZE && B_CATCH_SWAP_INTO_PARTY >= GEN_7) - { - PrepareStringBattle(STRINGID_SENDCAUGHTMONPARTYORBOX, gBattlerAttacker); - gBattleCommunication[MSG_DISPLAY] = 1; - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_ASK_ADD_TO_PARTY; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NO_MESSSAGE_SKIP; - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; - } - break; - case GIVECAUGHTMON_ASK_ADD_TO_PARTY: - HandleBattleWindow(YESNOBOX_X_Y, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_HANDLE_INPUT; - gBattleCommunication[CURSOR_POSITION] = 0; - BattleCreateYesNoCursorAt(0); - break; - case GIVECAUGHTMON_HANDLE_INPUT: - if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) - { - PlaySE(SE_SELECT); - BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); - gBattleCommunication[CURSOR_POSITION] = 0; - BattleCreateYesNoCursorAt(0); - } - if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) - { - PlaySE(SE_SELECT); - BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); - gBattleCommunication[CURSOR_POSITION] = 1; - BattleCreateYesNoCursorAt(1); - } - if (JOY_NEW(A_BUTTON)) - { - PlaySE(SE_SELECT); - if (gBattleCommunication[CURSOR_POSITION] == 0) - { - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_DO_CHOOSE_MON; - } - else - { - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; - } - } - else if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_SELECT); - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; - } - break; - case GIVECAUGHTMON_DO_CHOOSE_MON: - if (!gPaletteFade.active) - { - BtlController_EmitChoosePokemon(gBattlerAttacker, B_COMM_TO_CONTROLLER, PARTY_ACTION_SEND_MON_TO_BOX, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); - MarkBattlerForControllerExec(gBattlerAttacker); - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_HANDLE_CHOSEN_MON; - } - break; - case GIVECAUGHTMON_HANDLE_CHOSEN_MON: - if (gSelectedMonPartyId != PARTY_SIZE) + i = gBattleStruct->itemMoveIndex[gBattlerAttacker]; + loopEnd = i + 1; + } + else + { + i = 0; + loopEnd = MAX_MON_MOVES; + } + + // Check if the recipient is an active battler. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + battler = gBattlerAttacker; + else if (IsDoubleBattle() + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + battler = BATTLE_PARTNER(gBattlerAttacker); + + // Heal PP! + for (; i < loopEnd; i++) + { + pp = GetMonData(mon, MON_DATA_PP1 + i, NULL); + moveId = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); + maxPP = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), i); + if (pp != maxPP) { - if (gSelectedMonPartyId > PARTY_SIZE) - { - // Choosing Pokemon was cancelled - gSelectedMonPartyId = PARTY_SIZE; - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; - } - else + pp += effect[6]; + if (pp > maxPP) + pp = maxPP; + SetMonData(mon, MON_DATA_PP1 + i, &pp); + + // Update battler PP if needed. + if (battler != MAX_BATTLERS_COUNT + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[battler] + && MOVE_IS_PERMANENT(battler, i)) { - // Mon chosen, try to put it in the PC - if (CopyMonToPC(&gPlayerParty[gSelectedMonPartyId]) == MON_GIVEN_TO_PC) - { - GetMonNickname(&gPlayerParty[gSelectedMonPartyId], gStringVar2); - StringCopy(gStringVar1, GetBoxNamePtr(GetPCBoxToSendMon())); - ZeroMonData(&gPlayerParty[gSelectedMonPartyId]); - gBattleStruct->itemLost[B_SIDE_PLAYER][gSelectedMonPartyId].originalItem = ITEM_NONE; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWAPPED_INTO_PARTY; - gSelectedMonPartyId = PARTY_SIZE; - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; - } - else - { - gSelectedMonPartyId = PARTY_SIZE; - gBattleCommunication[MULTIUSE_STATE] = GIVECAUGHTMON_GIVE_AND_SHOW_MSG; - } + gBattleMons[battler].pp[i] = pp; } } - break; - case GIVECAUGHTMON_GIVE_AND_SHOW_MSG: - if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9) - { - u16 lostItem = gBattleStruct->itemLost[B_SIDE_OPPONENT][gBattlerPartyIndexes[GetCatchingBattler()]].originalItem; - if (lostItem != ITEM_NONE && GetItemPocket(lostItem) != POCKET_BERRIES) - SetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_HELD_ITEM, &lostItem); // Restore non-berry items - } + } + gBattleScripting.battler = battler; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(mon, MON_DATA_SPECIES)); + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (GiveMonToPlayer(GetBattlerMon(GetCatchingBattler())) != MON_GIVEN_TO_PARTY - && gBattleCommunication[MULTISTRING_CHOOSER] != B_MSG_SWAPPED_INTO_PARTY) - { - if (!ShouldShowBoxWasFullMessage()) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SENT_SOMEONES_PC; - StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); - GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_NICKNAME, gStringVar2); - } - else - { - StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to - GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_NICKNAME, gStringVar2); - StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); //box the mon was going to be sent to - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SOMEONES_BOX_FULL; - } +void BS_TryRevertWeatherForm(void) +{ + NATIVE_ARGS(); + if (IsBattlerAlive(gBattlerTarget) && TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER)) + { + gBattleScripting.battler = gBattlerTarget; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; + return; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} - // Change to B_MSG_SENT_LANETTES_PC or B_MSG_LANETTES_BOX_FULL - if (FlagGet(FLAG_SYS_PC_LANETTE)) - gBattleCommunication[MULTISTRING_CHOOSER]++; - } +void BS_HandleMegaEvolution(void) +{ + NATIVE_ARGS(u8 battler, u8 caseId); - gBattleResults.caughtMonSpecies = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_SPECIES, NULL); - GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_NICKNAME, gBattleResults.caughtMonNick); - gBattleResults.caughtMonBall = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_POKEBALL, NULL); + u8 battler = GetBattlerForBattleScript(cmd->battler); + HandleScriptMegaPrimalBurst(cmd->caseId, battler, HANDLE_TYPE_MEGA_EVOLUTION); + gBattlescriptCurrInstr = cmd->nextInstr; +} - gSelectedMonPartyId = PARTY_SIZE; - gBattleCommunication[MULTIUSE_STATE] = 0; +void BS_HandlePrimalReversion(void) +{ + NATIVE_ARGS(u8 battler, u8 caseId); - if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_NO_MESSSAGE_SKIP) - gBattlescriptCurrInstr = cmd->passInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - break; - } + u8 battler = GetBattlerForBattleScript(cmd->battler); + HandleScriptMegaPrimalBurst(cmd->caseId, battler, HANDLE_TYPE_PRIMAL_REVERSION); + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_trysetcaughtmondexflags(void) +void BS_HandleUltraBurst(void) { - CMD_ARGS(const u8 *failInstr); + NATIVE_ARGS(u8 battler, u8 caseId); - u32 species = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_SPECIES, NULL); - u32 personality = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_PERSONALITY, NULL); + u8 battler = GetBattlerForBattleScript(cmd->battler); + HandleScriptMegaPrimalBurst(cmd->caseId, battler, HANDLE_TYPE_ULTRA_BURST); + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } +void BS_JumpIfShellTrap(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + + u8 battler = GetBattlerForBattleScript(cmd->battler); + if (gProtectStructs[battler].shellTrap) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - HandleSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_SET_CAUGHT, personality); gBattlescriptCurrInstr = cmd->nextInstr; - } } -static void Cmd_displaydexinfo(void) +void BS_JumpIfElectricAbilityAffected(void) { - CMD_ARGS(); + NATIVE_ARGS(u8 battler, enum Ability ability, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (IsElectricAbilityAffected(battler, cmd->ability)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} - u16 species = GetMonData(GetBattlerMon(GetCatchingBattler()), MON_DATA_SPECIES, NULL); +void BS_SetTerrain(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + u32 statusFlag = 0; - switch (gBattleCommunication[0]) + switch (GetMoveEffect(gCurrentMove)) { - case 0: - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - gBattleCommunication[0]++; - break; - case 1: - if (!gPaletteFade.active) + case EFFECT_MISTY_TERRAIN: + if (!(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) { - struct Pokemon *mon = GetBattlerMon(GetCatchingBattler()); - FreeAllWindowBuffers(); - gBattleCommunication[TASK_ID] = DisplayCaughtMonDexPage(species, - GetMonData(mon, MON_DATA_IS_SHINY), - GetMonData(mon, MON_DATA_PERSONALITY)); - gBattleCommunication[0]++; + statusFlag = STATUS_FIELD_MISTY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; } break; - case 2: - if (!gPaletteFade.active - && gMain.callback2 == BattleMainCB2 - && !gTasks[gBattleCommunication[TASK_ID]].isActive) + case EFFECT_GRASSY_TERRAIN: + if (!(gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)) { - SetVBlankCallback(VBlankCB_Battle); - gBattleCommunication[0]++; + statusFlag = STATUS_FIELD_GRASSY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; } break; - case 3: - InitBattleBgsVideo(); - LoadBattleTextboxAndBackground(); - gBattle_BG3_X = 256; - gBattleCommunication[0]++; - break; - case 4: - if (!IsDma3ManagerBusyWithBgCopy()) + case EFFECT_ELECTRIC_TERRAIN: + if (!(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)) { - BeginNormalPaletteFade(PALETTES_BG, 0, 16, 0, RGB_BLACK); - ShowBg(0); - ShowBg(3); - gBattleCommunication[0]++; + statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; } break; - case 5: - if (!gPaletteFade.active) + case EFFECT_PSYCHIC_TERRAIN: + if (!(gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)) { - gBattlescriptCurrInstr = cmd->nextInstr; + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; } break; + default: + break; + } + if (gBattleStruct->isSkyBattle) + { + gBattlescriptCurrInstr = cmd->jumpInstr; + } + else if (statusFlag) + { + TryChangeBattleTerrain(gBattlerAttacker, statusFlag); + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->jumpInstr; } } -void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags) +void BS_JumpIfTerrainAffected(void) { - s32 destY, destX, bgId; - u16 var = 0; + NATIVE_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); - for (destY = yStart; destY <= yEnd; destY++) - { - for (destX = xStart; destX <= xEnd; destX++) - { - if (destY == yStart) - { - if (destX == xStart) - var = 0x1022; - else if (destX == xEnd) - var = 0x1024; - else - var = 0x1023; - } - else if (destY == yEnd) - { - if (destX == xStart) - var = 0x1028; - else if (destX == xEnd) - var = 0x102A; - else - var = 0x1029; - } - else - { - if (destX == xStart) - var = 0x1025; - else if (destX == xEnd) - var = 0x1027; - else - var = 0x1026; - } + if (IsBattlerTerrainAffected(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler), cmd->flags)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (flags & WINDOW_CLEAR) - var = 0; +void BS_TryReflectType(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u16 targetBaseSpecies = GET_BASE_SPECIES_ID(gBattleMons[gBattlerTarget].species); + enum Type targetTypes[3]; + GetBattlerTypes(gBattlerTarget, FALSE, targetTypes); - bgId = (flags & WINDOW_BG1) ? 1 : 0; - CopyToBgTilemapBufferRect_ChangePalette(bgId, &var, destX, destY, 1, 1, 0x11); - } + if (targetBaseSpecies == SPECIES_ARCEUS || targetBaseSpecies == SPECIES_SILVALLY) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (IS_BATTLER_TYPELESS(gBattlerTarget)) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (targetTypes[0] == TYPE_MYSTERY && targetTypes[1] == TYPE_MYSTERY && targetTypes[2] != TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].types[0] = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].types[1] = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].types[2] = targetTypes[2]; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else if (targetTypes[0] == TYPE_MYSTERY && targetTypes[1] != TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].types[0] = targetTypes[1]; + gBattleMons[gBattlerAttacker].types[1] = targetTypes[1]; + gBattleMons[gBattlerAttacker].types[2] = targetTypes[2]; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else if (targetTypes[0] != TYPE_MYSTERY && targetTypes[1] == TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].types[0] = targetTypes[0]; + gBattleMons[gBattlerAttacker].types[1] = targetTypes[0]; + gBattleMons[gBattlerAttacker].types[2] = targetTypes[2]; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattleMons[gBattlerAttacker].types[0] = targetTypes[0]; + gBattleMons[gBattlerAttacker].types[1] = targetTypes[1]; + gBattleMons[gBattlerAttacker].types[2] = targetTypes[2]; + gBattlescriptCurrInstr = cmd->nextInstr; } } -void BattleCreateYesNoCursorAt(u8 cursorPosition) +void BS_TrySetOctolock(void) { - u16 src[2]; - src[0] = 1; - src[1] = 2; + NATIVE_ARGS(const u8 *failInstr); - CopyToBgTilemapBufferRect_ChangePalette(0, src, 0x19, 9 + (2 * cursorPosition), 1, 2, 0x11); - CopyBgTilemapBufferToVram(0); + if (gDisableStructs[gBattlerTarget].octolock) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gDisableStructs[gBattlerTarget].octolock = TRUE; + gDisableStructs[gBattlerTarget].octolockedBy = gBattlerAttacker; + gBattleMons[gBattlerTarget].volatiles.escapePrevention = TRUE; + gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; + gBattlescriptCurrInstr = cmd->nextInstr; + } } -void BattleDestroyYesNoCursorAt(u8 cursorPosition) +void BS_SetPledge(void) { - u16 src[2]; - src[0] = 0x1016; - src[1] = 0x1016; - - CopyToBgTilemapBufferRect_ChangePalette(0, src, 0x19, 9 + (2 * cursorPosition), 1, 2, 0x11); - CopyBgTilemapBufferToVram(0); -} + NATIVE_ARGS(const u8 *jumpInstr); -static void Cmd_trygivecaughtmonnick(void) -{ - CMD_ARGS(); + u32 partner = BATTLE_PARTNER(gBattlerAttacker); + u32 partnerMove = GetChosenMoveFromPosition(partner); + u32 i = 0; + u32 k = 0; - switch (gBattleCommunication[MULTIUSE_STATE]) + if (gBattleStruct->pledgeMove && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)) { - case 0: - HandleBattleWindow(YESNOBOX_X_Y, 0); - BattlePutTextOnWindow(gText_BattleYesNoChoice, B_WIN_YESNO); - gBattleCommunication[MULTIUSE_STATE]++; - gBattleCommunication[CURSOR_POSITION] = 0; - BattleCreateYesNoCursorAt(0); - break; - case 1: - if (JOY_NEW(DPAD_UP) && gBattleCommunication[CURSOR_POSITION] != 0) + if ((gCurrentMove == MOVE_GRASS_PLEDGE && partnerMove == MOVE_WATER_PLEDGE) + || (gCurrentMove == MOVE_WATER_PLEDGE && partnerMove == MOVE_GRASS_PLEDGE)) { - PlaySE(SE_SELECT); - BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); - gBattleCommunication[CURSOR_POSITION] = 0; - BattleCreateYesNoCursorAt(0); + gCurrentMove = MOVE_GRASS_PLEDGE; + gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Grass; } - if (JOY_NEW(DPAD_DOWN) && gBattleCommunication[CURSOR_POSITION] == 0) + else if ((gCurrentMove == MOVE_FIRE_PLEDGE && partnerMove == MOVE_GRASS_PLEDGE) + || (gCurrentMove == MOVE_GRASS_PLEDGE && partnerMove == MOVE_FIRE_PLEDGE)) { - PlaySE(SE_SELECT); - BattleDestroyYesNoCursorAt(gBattleCommunication[CURSOR_POSITION]); - gBattleCommunication[CURSOR_POSITION] = 1; - BattleCreateYesNoCursorAt(1); + gCurrentMove = MOVE_FIRE_PLEDGE; + gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Fire; } - if (JOY_NEW(A_BUTTON)) + else if ((gCurrentMove == MOVE_WATER_PLEDGE && partnerMove == MOVE_FIRE_PLEDGE) + || (gCurrentMove == MOVE_FIRE_PLEDGE && partnerMove == MOVE_WATER_PLEDGE)) { - PlaySE(SE_SELECT); - if (gBattleCommunication[CURSOR_POSITION] == 0) - { - gBattleCommunication[MULTIUSE_STATE]++; - BeginFastPaletteFade(3); - } - else + gCurrentMove = MOVE_WATER_PLEDGE; + gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Water; + } + + gBattleCommunication[MSG_DISPLAY] = 0; + } + else if ((gChosenActionByBattler[partner] == B_ACTION_USE_MOVE) + && IsDoubleBattle() + && IsBattlerAlive(partner) + && !HasBattlerActedThisTurn(partner) + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && gCurrentMove != partnerMove + && GetMoveEffect(partnerMove) == EFFECT_PLEDGE) + { + u32 currPledgeUser = 0; + u32 newTurnOrder[] = {0xFF, 0xFF}; + + for (i = 0; i < gBattlersCount; i++) + { + if (gBattlerByTurnOrder[i] == gBattlerAttacker) { - gBattleCommunication[MULTIUSE_STATE] = 4; + currPledgeUser = i + 1; // Current battler going after attacker + break; } } - else if (JOY_NEW(B_BUTTON)) + for (i = currPledgeUser; i < gBattlersCount; i++) { - PlaySE(SE_SELECT); - gBattleCommunication[MULTIUSE_STATE] = 4; + if (gBattlerByTurnOrder[i] != partner) + { + newTurnOrder[k] = gBattlerByTurnOrder[i]; + k++; + } } - break; - case 2: - if (!gPaletteFade.active) - { - GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); - FreeAllWindowBuffers(); - MainCallback callback = CalculatePlayerPartyCount() == PARTY_SIZE ? ReshowBlankBattleScreenAfterMenu : BattleMainCB2; - DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick, - GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_SPECIES), - GetMonGender(GetBattlerMon(gBattlerTarget)), - GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_PERSONALITY, NULL), - callback); + gBattlerByTurnOrder[currPledgeUser] = partner; + currPledgeUser++; - gBattleCommunication[MULTIUSE_STATE]++; - } - break; - case 3: - if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) + for (i = 0; newTurnOrder[i] != 0xFF && i < 2; i++) { - SetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); - gBattleCommunication[MULTIUSE_STATE]++; + gBattlerByTurnOrder[currPledgeUser] = newTurnOrder[i]; + currPledgeUser++; } - break; - case 4: - gBattleCommunication[MULTIUSE_STATE] = 0; + + gBattleStruct->pledgeMove = TRUE; + gBattleScripting.battler = partner; gBattlescriptCurrInstr = cmd->nextInstr; - break; + } + else + { + gBattleStruct->pledgeMove = FALSE; + gBattlescriptCurrInstr = cmd->jumpInstr; } } -static void Cmd_subattackerhpbydmg(void) +void BS_SetPledgeStatus(void) { - CMD_ARGS(); + NATIVE_ARGS(u8 battler, u32 sideStatus); - gBattleMons[gBattlerAttacker].hp -= gBattleStruct->moveDamage[gBattlerTarget]; - gBattlescriptCurrInstr = cmd->nextInstr; -} + u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 side = GetBattlerSide(battler); -static void Cmd_removeattackerstatus1(void) -{ - CMD_ARGS(); + gBattleStruct->pledgeMove = FALSE; + if (!(gSideStatuses[side] & cmd->sideStatus)) + { + gSideStatuses[side] |= cmd->sideStatus; - gBattleMons[gBattlerAttacker].status1 = 0; - gBattlescriptCurrInstr = cmd->nextInstr; -} + switch (cmd->sideStatus) + { + case SIDE_STATUS_RAINBOW: + gSideTimers[side].rainbowTimer = 4; + break; + case SIDE_STATUS_SEA_OF_FIRE: + gSideTimers[side].seaOfFireTimer = 4; + break; + case SIDE_STATUS_SWAMP: + gSideTimers[side].swampTimer = 4; + } -// CMD_ARGS is not needed for these functions as they end the script execution. -static void Cmd_finishaction(void) -{ - gCurrentActionFuncId = B_ACTION_FINISHED; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + gBattlescriptCurrInstr = BattleScript_MoveEnd; } -static void Cmd_finishturn(void) +void BS_TryTrainerSlideZMoveMsg(void) { - gCurrentActionFuncId = B_ACTION_FINISHED; - gCurrentTurnActionNumber = gBattlersCount; + NATIVE_ARGS(); + s32 shouldSlide; + + if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_Z_MOVE))) + { + gBattleScripting.battler = gBattlerAttacker; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); + } + else + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_trainerslideout(void) +void BS_TryTrainerSlideMegaEvolutionMsg(void) { - CMD_ARGS(u8 position); - - u32 battler = GetBattlerForBattleScript(cmd->position); - BtlController_EmitTrainerSlideBack(battler, B_COMM_TO_CONTROLLER); - MarkBattlerForControllerExec(battler); + NATIVE_ARGS(); + s32 shouldSlide; - gBattlescriptCurrInstr = cmd->nextInstr; + if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_MEGA_EVOLUTION))) + { + gBattleScripting.battler = gBattlerAttacker; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); + } + else + gBattlescriptCurrInstr = cmd->nextInstr; } -static const u16 sTelekinesisBanList[] = -{ - SPECIES_DIGLETT, - SPECIES_DUGTRIO, - SPECIES_DIGLETT_ALOLA, - SPECIES_DUGTRIO_ALOLA, - SPECIES_SANDYGAST, - SPECIES_PALOSSAND, - SPECIES_GENGAR_MEGA, -}; - -bool32 IsTelekinesisBannedSpecies(u16 species) +void BS_TryTrainerSlideDynamaxMsg(void) { - u32 i; + NATIVE_ARGS(); + s32 shouldSlide; - for (i = 0; i < ARRAY_COUNT(sTelekinesisBanList); i++) + if ((shouldSlide = ShouldDoTrainerSlide(gBattleScripting.battler, TRAINER_SLIDE_DYNAMAX))) { - if (species == sTelekinesisBanList[i]) - return TRUE; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); } - return FALSE; + else + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_settelekinesis(void) +void BS_TryHealPulse(void) { - CMD_ARGS(const u8 *failInstr); + NATIVE_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) - || gFieldStatuses & STATUS_FIELD_GRAVITY - || IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species)) + if (IsBattlerAtMaxHp(gBattlerTarget)) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gStatuses3[gBattlerTarget] |= STATUS3_TELEKINESIS; - gDisableStructs[gBattlerTarget].telekinesisTimer = gBattleTurnCounter + 3; + s32 healAmount = 0; + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && IsPulseMove(gCurrentMove)) + healAmount = GetNonDynamaxMaxHP(gBattlerTarget) * 75 / 100; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && GetMoveEffectArg_MoveProperty(gCurrentMove) == MOVE_EFFECT_FLORAL_HEALING) + healAmount = GetNonDynamaxMaxHP(gBattlerTarget) * 2 / 3; + else + healAmount = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + + SetHealAmount(gBattlerTarget, healAmount); gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_swapstatstages(void) +void BS_TryDefog(void) { - CMD_ARGS(u8 stat); + NATIVE_ARGS(u8 clear, const u8 *failInstr); - u8 stat = cmd->stat; - s8 atkStatStage = gBattleMons[gBattlerAttacker].statStages[stat]; - s8 defStatStage = gBattleMons[gBattlerTarget].statStages[stat]; + if (cmd->clear) + { + if (TryDefogClear(gEffectBattler, TRUE)) + return; + else + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + if (TryDefogClear(gBattlerAttacker, FALSE)) + gBattlescriptCurrInstr = cmd->nextInstr; + else + gBattlescriptCurrInstr = cmd->failInstr; + } +} - gBattleMons[gBattlerAttacker].statStages[stat] = defStatStage; - gBattleMons[gBattlerTarget].statStages[stat] = atkStatStage; +void BS_TryTriggerStatusForm(void) +{ + NATIVE_ARGS(); + if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_STATUS)) + { + gBattleScripting.battler = gBattlerTarget; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; + return; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_AllySwitchSwapBattler(void) +{ + NATIVE_ARGS(); + gBattleScripting.battler = gBattlerAttacker; + gBattlerAttacker ^= BIT_FLANK; + gProtectStructs[gBattlerAttacker].usedAllySwitch = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; } -static u16 *GetBattlerStat(struct BattlePokemon *battler, u32 stat) +void BS_TryAllySwitch(void) { - switch (stat) + NATIVE_ARGS(const u8 *failInstr); + + if (!IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)) || HasPartnerTrainer(gBattlerAttacker)) { - case STAT_ATK: return &battler->attack; - case STAT_DEF: return &battler->defense; - case STAT_SPATK: return &battler->spAttack; - case STAT_SPDEF: return &battler->spDefense; - default: return NULL; + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (GetConfig(CONFIG_ALLY_SWITCH_FAIL_CHANCE) >= GEN_9) + { + TryResetProtectUseCounter(gBattlerAttacker); + if (sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] < Random()) + { + gDisableStructs[gBattlerAttacker].protectUses = 0; + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gDisableStructs[gBattlerAttacker].protectUses++; + gBattlescriptCurrInstr = cmd->nextInstr; + } + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void Cmd_averagestats(void) +static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16 usedMove) { - CMD_ARGS(u8 stat); + u32 i, j; - u16 *stat1 = GetBattlerStat(&gBattleMons[gBattlerAttacker], cmd->stat); - u16 *stat2 = GetBattlerStat(&gBattleMons[gBattlerTarget], cmd->stat); - u16 avg = (*stat1 + *stat2) / 2; - *stat1 = *stat2 = avg; + if (IsOnPlayerSide(gBattlerAttacker) + && !(gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_TRAINER_HILL + | BATTLE_TYPE_FRONTIER))) + { + const struct Evolution *evolutions = GetSpeciesEvolutions(gBattleMons[gBattlerAttacker].species); + if (evolutions == NULL) + return; - gBattlescriptCurrInstr = cmd->nextInstr; + for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) + { + if (SanitizeSpeciesId(evolutions[i].targetSpecies) == SPECIES_NONE) + continue; + if (evolutions[i].params == NULL) + continue; + + for (j = 0; evolutions[i].params[j].condition != CONDITIONS_END; j++) + { + if (evolutions[i].params[j].condition == evolutionCondition) + { + struct Pokemon *monAtk = GetBattlerMon(gBattlerAttacker); + struct Pokemon *monDef = GetBattlerMon(gBattlerTarget); + // We only have 10 bits to use + u16 val = min(1023, GetMonData(monAtk, MON_DATA_EVOLUTION_TRACKER) + upAmount); + // Reset progress if you faint for the recoil method. + switch (evolutionCondition) + { + case IF_USED_MOVE_X_TIMES: + if (evolutions[i].params[j].arg1 == usedMove) + SetMonData(monAtk, MON_DATA_EVOLUTION_TRACKER, &val); + break; + case IF_RECOIL_DAMAGE_GE: + if (gBattleMons[gBattlerAttacker].hp == 0) + val = 0; + SetMonData(monAtk, MON_DATA_EVOLUTION_TRACKER, &val); + break; + case IF_DEFEAT_X_WITH_ITEMS: + if (GetMonData(monDef, MON_DATA_SPECIES) == evolutions[i].params[j].arg1 + && GetMonData(monDef, MON_DATA_HELD_ITEM) == evolutions[i].params[j].arg2) + SetMonData(monAtk, MON_DATA_EVOLUTION_TRACKER, &val); + break; + } + return; + } + } + } + } } -static void Cmd_jumpifcaptivateaffected(void) +void BS_TryTidyUp(void) { - CMD_ARGS(const u8 *jumpInstr); + NATIVE_ARGS(u8 clear, const u8 *jumpInstr); - if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) + if (cmd->clear) { - gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp; - gLastUsedAbility = ABILITY_OBLIVIOUS; - RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS); + if (TryTidyUpClear(gEffectBattler, TRUE)) + return; + else + gBattlescriptCurrInstr = cmd->nextInstr; } - else if (AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) + else { - gBattlescriptCurrInstr = cmd->jumpInstr; + if (TryTidyUpClear(gBattlerAttacker, FALSE)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_TryGulpMissile(void) +{ + NATIVE_ARGS(); + + if ((gBattleMons[gBattlerAttacker].species == SPECIES_CRAMORANT) + && (gCurrentMove == MOVE_DIVE) + && GetBattlerAbility(gBattlerAttacker) == ABILITY_GULP_MISSILE + && TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_HP_PERCENT)) + { + gBattleScripting.battler = gBattlerAttacker; + gBattlescriptCurrInstr = BattleScript_GulpMissileFormChange; } else { @@ -16522,2240 +15559,2452 @@ static void Cmd_jumpifcaptivateaffected(void) } } -static void Cmd_setnonvolatilestatus(void) +void BS_TryActivateGulpMissile(void) { - CMD_ARGS(); - gEffectBattler = gBattlerTarget; - SetNonVolatileStatusCondition(gBattlerTarget, GetMoveNonVolatileStatus(gCurrentMove)); + NATIVE_ARGS(); + + if (!gProtectStructs[gBattlerAttacker].confusionSelfDmg + && IsBattlerAlive(gBattlerAttacker) + && IsBattlerTurnDamaged(gBattlerTarget) + && gBattleMons[gBattlerTarget].species != SPECIES_CRAMORANT + && GetBattlerAbility(gBattlerTarget) == ABILITY_GULP_MISSILE) + { + if (!IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_MAGIC_GUARD)) + SetPassiveDamageAmount(gBattlerTarget, GetNonDynamaxMaxHP(gBattlerAttacker) / 4); + + switch(gBattleMons[gBattlerTarget].species) + { + case SPECIES_CRAMORANT_GORGING: + TryBattleFormChange(gBattlerTarget, FORM_CHANGE_HIT_BY_MOVE); + BattleScriptCall(BattleScript_GulpMissileGorging); + return; + case SPECIES_CRAMORANT_GULPING: + TryBattleFormChange(gBattlerTarget, FORM_CHANGE_HIT_BY_MOVE); + BattleScriptCall(BattleScript_GulpMissileGulping); + return; + } + } + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_tryworryseed(void) +void BS_TryQuash(void) { - CMD_ARGS(const u8 *failInstr); + NATIVE_ARGS(const u8 *failInstr); + u32 i, j; - if (gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeOverwritten - || gBattleMons[gBattlerTarget].ability == ABILITY_INSOMNIA) + // It's true if foe is faster, has a bigger priority, or switches + if (HasBattlerActedThisTurn(gBattlerTarget)) { - RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); gBattlescriptCurrInstr = cmd->failInstr; + return; } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + + // If the above condition is not true, it means we are faster than the foe, so we can set the quash bit + gProtectStructs[gBattlerTarget].quash = TRUE; + + struct BattleContext ctx = {0}; + for (i = 0; i < gBattlersCount; i++) { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = cmd->failInstr; + ctx.abilities[i] = GetBattlerAbility(i); + ctx.holdEffects[i] = GetBattlerHoldEffect(i); } - else + // this implementation assumes turn order is correct when using Quash + i = GetBattlerTurnOrderNum(gBattlerTarget); + for (j = i + 1; j < gBattlersCount; j++) { - if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS) - gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; + ctx.battlerAtk = gBattlerByTurnOrder[i]; + ctx.battlerDef = gBattlerByTurnOrder[j]; - gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability; - gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = ABILITY_INSOMNIA; - gBattlescriptCurrInstr = cmd->nextInstr; + // Gen 7- config makes target go last so that the order of quash targets is kept for the correct turn order + // Gen 8+ config alters Turn Order of the target according to speed, dynamic speed should handle the rest + if (B_QUASH_TURN_ORDER < GEN_8 || GetWhichBattlerFaster(&ctx, FALSE) == -1) + SwapTurnOrder(i, j); + else + break; + i++; } + gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_callnative(void) +void BS_CopyFoesStatIncrease(void) { - CMD_ARGS(void (*func)(void)); - void (*func)(void) = cmd->func; - func(); -} + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u32 stat = 0; + u32 battler = GetBattlerForBattleScript(cmd->battler); -// Callnative Funcs + if (gQueuedStatBoosts[battler].stats == 0) + { + for (stat = 0; stat < (NUM_BATTLE_STATS - 1); stat++) + { + if (gQueuedStatBoosts[battler].statChanges[stat] != 0) + gQueuedStatBoosts[battler].stats |= (1 << stat); + } + gBattlescriptCurrInstr = cmd->jumpInstr; + return; + } -void SaveBattlerTarget(u32 battler) -{ - if (gBattleStruct->savedTargetCount < NELEMS(gBattleStruct->savedBattlerTarget)) - gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount++] = battler; - else - DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerTarget array size!"); + for (stat = 0; stat < (NUM_BATTLE_STATS - 1); stat++) + { + if (gQueuedStatBoosts[battler].stats & (1 << stat)) + { + if (gQueuedStatBoosts[battler].statChanges[stat] <= -1) + SET_STATCHANGER(stat + 1, abs(gQueuedStatBoosts[battler].statChanges[stat]), TRUE); + else + SET_STATCHANGER(stat + 1, gQueuedStatBoosts[battler].statChanges[stat], FALSE); + + gQueuedStatBoosts[battler].stats &= ~(1 << stat); + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + } + gBattlescriptCurrInstr = cmd->jumpInstr; } -void SaveBattlerAttacker(u32 battler) +void BS_RemoveWeather(void) { - if (gBattleStruct->savedAttackerCount < NELEMS(gBattleStruct->savedBattlerAttacker)) - gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount++] = battler; - else - DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerAttacker array size!"); + NATIVE_ARGS(); + RemoveAllWeather(); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_SaveTarget(void) +void BS_ApplyTerastallization(void) { NATIVE_ARGS(); - SaveBattlerTarget(gBattlerTarget); + ApplyBattlerVisualsForTeraAnim(gBattlerAttacker); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_RestoreTarget(void) +void BS_JumpIfSleepClause(void) { - NATIVE_ARGS(); - if (gBattleStruct->savedTargetCount > 0) + NATIVE_ARGS(const u8 *jumpInstr); + + // Can freely sleep own partner + if (IsDoubleBattle() && IsSleepClauseEnabled() && IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) { - gBattleStruct->savedTargetCount--; - gBattlerTarget = gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount]; + gBattleStruct->battlerState[gBattlerTarget].sleepClauseEffectExempt = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; + return; } + gBattleStruct->battlerState[gBattlerTarget].sleepClauseEffectExempt = FALSE; + // Can't sleep if clause is active otherwise + if (IsSleepClauseActiveForSide(GetBattlerSide(gBattlerTarget))) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - // #if TESTING - // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreTarget attempting to restore an empty target!"); - // #else - DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreTarget attempting to restore an empty target!"); - // #endif - } - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_SaveAttacker(void) +void BS_FickleBeamDamageCalculation(void) { NATIVE_ARGS(); - SaveBattlerAttacker(gBattlerAttacker); - gBattlescriptCurrInstr = cmd->nextInstr; -} -void BS_RestoreAttacker(void) -{ - NATIVE_ARGS(); - if (gBattleStruct->savedAttackerCount > 0) + if (RandomPercentage(RNG_FICKLE_BEAM, 30)) { - gBattleStruct->savedAttackerCount--; - gBattlerAttacker = gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount]; + gBattleStruct->fickleBeamBoosted = TRUE; + gBattlescriptCurrInstr = BattleScript_FickleBeamDoubled; } else { - // #if TESTING - // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreAttacker attempting to restore an empty attacker!"); - // #else - DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreAttacker attempting to restore an empty attacker!"); - // #endif + gBattlescriptCurrInstr = cmd->nextInstr; } - gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_CalcMetalBurstDmg(void) +void BS_TryTarShot(void) { NATIVE_ARGS(const u8 *failInstr); - - u8 sideAttacker = GetBattlerSide(gBattlerAttacker); - u8 sideTarget = 0; - - if (gProtectStructs[gBattlerAttacker].physicalDmg - && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId)) - && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp) + if (gDisableStructs[gBattlerTarget].tarShot || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA) { - gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].physicalDmg * 150 / 100; - - if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) - gBattlerTarget = gSideTimers[sideTarget].followmeTarget; - else - gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; - - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } - else if (gProtectStructs[gBattlerAttacker].specialDmg - && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId)) - && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) + else { - gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].specialDmg * 150 / 100; - - if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) - gBattlerTarget = gSideTimers[sideTarget].followmeTarget; - else - gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; - + gDisableStructs[gBattlerTarget].tarShot = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; } +} + +void BS_CanTarShotWork(void) +{ + NATIVE_ARGS(const u8 *failInstr); + // Tar Shot fails if the target can't be made weaker to fire and it's speed can't be lowered further + if (!(gDisableStructs[gBattlerTarget].tarShot || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA) + || CompareStat(gBattlerTarget, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(gBattlerTarget))) + gBattlescriptCurrInstr = cmd->nextInstr; else - { gBattlescriptCurrInstr = cmd->failInstr; - } } -void BS_JumpIfCantFling(void) +void BS_JumpIfBlockedBySoundproof(void) { NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); - if (!CanFling(battler)) + if (IsSoundMove(gCurrentMove) && GetBattlerAbility(battler) == ABILITY_SOUNDPROOF) + { + gLastUsedAbility = ABILITY_SOUNDPROOF; gBattlescriptCurrInstr = cmd->jumpInstr; + RecordAbilityBattle(battler, gLastUsedAbility); + gBattlerAbility = battler; + } else + { gBattlescriptCurrInstr = cmd->nextInstr; + } } -void BS_JumpIfMoreThanHalfHP(void) +void BS_SetMagicCoatTarget(void) +{ + NATIVE_ARGS(); + gBattleStruct->attackerBeforeBounce = gBattleScripting.battler = gBattlerAttacker; + gBattlerAttacker = gBattlerTarget; + gBattlerTarget = gBattleStruct->attackerBeforeBounce; + HandleMoveTargetRedirection(); + ClearDamageCalcResults(); + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TeatimeInvul(void) { NATIVE_ARGS(u8 battler, const u8 *jumpInstr); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gBattleMons[battler].hp > (gBattleMons[battler].maxHP + 1) / 2) + if (GetItemPocket(gBattleMons[battler].item) == POCKET_BERRIES && !IsSemiInvulnerable(gBattlerTarget, CHECK_ALL)) + gBattlescriptCurrInstr = cmd->nextInstr; + else gBattlescriptCurrInstr = cmd->jumpInstr; +} + +void BS_TeatimeTargets(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u32 count = 0, i; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsTeatimeAffected(i)) + count++; + } + if (count == 0) + gBattlescriptCurrInstr = cmd->failInstr; else gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_DoStockpileStatChangesWearOff(void) +void BS_TryWindRiderPower(void) { - NATIVE_ARGS(u8 battler, const u8 *statChangeInstr); + NATIVE_ARGS(u8 battler, const u8 *failInstr); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gDisableStructs[battler].stockpileDef != 0) - { - SET_STATCHANGER(STAT_DEF, abs(gDisableStructs[battler].stockpileDef), TRUE); - gDisableStructs[battler].stockpileDef = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = cmd->statChangeInstr; - } - else if (gDisableStructs[battler].stockpileSpDef) + enum Ability ability = GetBattlerAbility(battler); + if (IsBattlerAlly(battler, gBattlerAttacker) + && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) { - SET_STATCHANGER(STAT_SPDEF, abs(gDisableStructs[battler].stockpileSpDef), TRUE); - gDisableStructs[battler].stockpileSpDef = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = cmd->statChangeInstr; + gLastUsedAbility = ability; + RecordAbilityBattle(battler, gLastUsedAbility); + gBattlerAbility = gBattleScripting.battler = battler; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } } -static bool32 CriticalCapture(u32 odds) +void BS_ActivateWeatherChangeAbilities(void) { - u32 numCaught; - u32 totalDexCount; - - if (B_CRITICAL_CAPTURE == FALSE) - return FALSE; + NATIVE_ARGS(u8 battler); - if (B_CRITICAL_CAPTURE_LOCAL_DEX == TRUE) - totalDexCount = HOENN_DEX_COUNT; - else - totalDexCount = NATIONAL_DEX_COUNT; + u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0); +} - numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT); +void BS_ActivateTerrainChangeAbilities(void) +{ + NATIVE_ARGS(u8 battler); - if (numCaught <= (totalDexCount * 30) / 650) - odds = 0; - else if (numCaught <= (totalDexCount * 150) / 650) - odds /= 2; - else if (numCaught <= (totalDexCount * 300) / 650) - ; // odds = (odds * 100) / 100; - else if (numCaught <= (totalDexCount * 450) / 650) - odds = (odds * 150) / 100; - else if (numCaught <= (totalDexCount * 600) / 650) - odds *= 2; - else - odds = (odds * 250) / 100; + u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); +} - if (CheckBagHasItem(ITEM_CATCHING_CHARM, 1)) - odds = (odds * (100 + B_CATCHING_CHARM_BOOST)) / 100; +void BS_ResetTerrainAbilityFlags(void) +{ + NATIVE_ARGS(); + // reset terrain ability checks + for (u32 i = 0; i < gBattlersCount; i++) + gDisableStructs[i].terrainAbilityDone = 0; - odds /= 6; + gBattlescriptCurrInstr = cmd->nextInstr; +} - if ((Random() % 255) < odds) - return TRUE; +void BS_StoreHealingWish(void) +{ + NATIVE_ARGS(u8 battler); - return FALSE; + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (GetMoveEffect(gCurrentMove) == EFFECT_LUNAR_DANCE) + gBattleStruct->battlerState[battler].storedLunarDance = TRUE; + else + gBattleStruct->battlerState[battler].storedHealingWish = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; } -bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) +void BS_TryRevivalBlessing(void) { - if (move != MOVE_NONE && move != MOVE_UNAVAILABLE && move != MOVE_STRUGGLE - && !IsMoveParentalBondBanned(move) - && GetMoveCategory(move) != DAMAGE_CATEGORY_STATUS - && GetMoveStrikeCount(move) < 2 - && GetMoveEffect(move) != EFFECT_SEMI_INVULNERABLE - && GetMoveEffect(move) != EFFECT_TWO_TURNS_ATTACK - && GetMoveEffect(move) != EFFECT_MULTI_HIT) + NATIVE_ARGS(const u8 *failInstr); + u8 index = GetFirstFaintedPartyIndex(gBattlerAttacker); + + // Move fails if there are no battlers to revive. + if (index == PARTY_SIZE) { - if (IsDoubleBattle()) + gBattlescriptCurrInstr = cmd->failInstr; + return; + } + + // Battler selected! Revive and go to next instruction. + if (gSelectedMonPartyId != PARTY_SIZE) + { + struct Pokemon *party = GetBattlerParty(gBattlerAttacker); + + u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 1u << gSelectedMonPartyId, sizeof(hp), &hp); + MarkBattlerForControllerExec(gBattlerAttacker); + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES)); + + // If an on-field battler is revived, it needs to be sent out again. + if (IsDoubleBattle() && + gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) { - switch (GetBattlerMoveTargetType(battler, move)) - { - // Both foes are alive, spread move strikes once - case MOVE_TARGET_BOTH: - if (CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerTarget) >= 2) - return FALSE; - break; - // Either both foes or one foe and its ally are alive; spread move strikes once - case MOVE_TARGET_FOES_AND_ALLY: - if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, gBattlerAttacker) >= 2) - return FALSE; - break; - default: - break; - } + u32 i = BATTLE_PARTNER(gBattlerAttacker); + gAbsentBattlerFlags &= ~(1u << i); + gBattleStruct->monToSwitchIntoId[i] = gSelectedMonPartyId; + gBattleScripting.battler = i; + gBattleCommunication[MULTIUSE_STATE] = TRUE; } - return TRUE; + + gSelectedMonPartyId = PARTY_SIZE; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + // Open party menu, wait to go to next instruction. + BtlController_EmitChoosePokemon(gBattlerAttacker, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, 0, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); + MarkBattlerForControllerExec(gBattlerAttacker); } - return FALSE; } -static bool8 IsFinalStrikeEffect(enum BattleMoveEffects moveEffect) +void BS_JumpIfCommanderActive(void) { - u32 i; + NATIVE_ARGS(const u8 *jumpInstr); - for (i = 0; i < ARRAY_COUNT(sFinalStrikeOnlyEffects); i++) - { - if (moveEffect == sFinalStrikeOnlyEffects[i]) - return TRUE; - } - return FALSE; + if (gBattleStruct->battlerState[gBattlerTarget].commanderSpecies != SPECIES_NONE) + gBattlescriptCurrInstr = cmd->jumpInstr; + else if (gBattleMons[gBattlerTarget].volatiles.semiInvulnerable == STATE_COMMANDER) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; } -static bool32 CanAbilityPreventStatLoss(u32 abilityDef) +static void UpdatePokeFlutePartyStatus(struct Pokemon* party, u8 position) { - switch (abilityDef) + s32 i; + u8 battler; + u32 monToCheck, status; + u16 species, abilityNum; + monToCheck = 0; + for (i = 0; i < PARTY_SIZE; i++) { - case ABILITY_CLEAR_BODY: - case ABILITY_FULL_METAL_BODY: - case ABILITY_WHITE_SMOKE: - return TRUE; + species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); + status = GetMonData(&party[i], MON_DATA_STATUS); + if (species != SPECIES_NONE + && species != SPECIES_EGG + && status & AILMENT_FNT + && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF) + monToCheck |= (1 << i); + } + if (monToCheck) + { + battler = GetBattlerAtPosition(position); + status = 0; + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, monToCheck, 4, &status); + MarkBattlerForControllerExec(battler); + gBattleCommunication[MULTISTRING_CHOOSER] = 1; } - return FALSE; } -bool32 CanBurnHitThaw(u16 move) +void BS_CheckPokeFlute(void) { - u8 i; + NATIVE_ARGS(); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; - if (B_BURN_HIT_THAW >= GEN_6) + s32 i; + for (i = 0; i < gBattlersCount; i++) { - u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); - for (i = 0; i < numAdditionalEffects; i++) + if (GetBattlerAbility(i) != ABILITY_SOUNDPROOF) { - const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); - if (additionalEffect->moveEffect == MOVE_EFFECT_BURN) - return TRUE; + gBattleMons[i].status1 &= ~STATUS1_SLEEP; + gBattleMons[i].volatiles.nightmare = FALSE; } } - return FALSE; -} -void BS_CheckParentalBondCounter(void) -{ - NATIVE_ARGS(u8 counter, const u8 *jumpInstr); - // Some effects should only happen on the first or second strike of Parental Bond, - // so a way to check this in battle scripts is useful - if (gSpecialStatuses[gBattlerAttacker].parentalBondState == cmd->counter && IsBattlerAlive(gBattlerTarget)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + UpdatePokeFlutePartyStatus(gPlayerParty, B_POSITION_PLAYER_LEFT); + UpdatePokeFlutePartyStatus(gEnemyParty, B_POSITION_OPPONENT_LEFT); + + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_JumpIfCantLoseItem(void) +void BS_WaitFanfare(void) { - NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - u8 battler = GetBattlerForBattleScript(cmd->battler); - u16 item = gBattleMons[battler].item; + NATIVE_ARGS(); - if (item == ITEM_NONE || !CanBattlerGetOrLoseItem(battler, item)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + if (!IsFanfareTaskInactive()) + return; + + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_GetBattlerSide(void) +void BS_RemoveTerrain(void) { - NATIVE_ARGS(u8 battler); - gBattleCommunication[0] = GetBattlerSide(GetBattlerForBattleScript(cmd->battler)); + NATIVE_ARGS(); + RemoveAllTerrains(); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TrySymbiosis(void) +void BS_TrySpectralThiefSteal(void) { - NATIVE_ARGS(u8 battler); - u32 battler = GetBattlerForBattleScript(cmd->battler); - //called by Bestow, Fling, and Bug Bite, which don't work with Cmd_removeitem. - u32 partner = BATTLE_PARTNER(battler); - if (TryTriggerSymbiosis(battler, partner)) + NATIVE_ARGS(const u8 *jumpInstr); + + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) { - BestowItem(partner, battler); - gLastUsedAbility = gBattleMons[partner].ability; - gBattleScripting.battler = gBattlerAbility = partner; - gEffectBattler = battler; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SymbiosisActivates; + gBattlescriptCurrInstr = cmd->nextInstr; return; } - gBattlescriptCurrInstr = cmd->nextInstr; -} + bool32 contrary = GetBattlerAbility(gBattlerAttacker) == ABILITY_CONTRARY; + gBattleStruct->stolenStats[0] = 0; // Stats to steal. + gBattleScripting.animArg1 = 0; + for (enum Stat stat = STAT_ATK; stat < NUM_BATTLE_STATS; stat++) + { + if (gBattleMons[gBattlerTarget].statStages[stat] > DEFAULT_STAT_STAGE && gBattleMons[gBattlerAttacker].statStages[stat] != MAX_STAT_STAGE) + { + bool32 byTwo = FALSE; -void BS_SetZEffect(void) -{ - SetZEffect(); // Handles battle script jumping internally + gBattleStruct->stolenStats[0] |= (1 << (stat)); + // Store by how many stages to raise the stat. + gBattleStruct->stolenStats[stat] = gBattleMons[gBattlerTarget].statStages[stat] - DEFAULT_STAT_STAGE; + + while (gBattleMons[gBattlerAttacker].statStages[stat] + gBattleStruct->stolenStats[stat] > MAX_STAT_STAGE) + gBattleStruct->stolenStats[stat]--; + + gBattleMons[gBattlerTarget].statStages[stat] = DEFAULT_STAT_STAGE; + + if (gBattleStruct->stolenStats[stat] >= 2) + byTwo++; + + if (gBattleScripting.animArg1 == 0) + { + if (byTwo) + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS2 : STAT_ANIM_PLUS2) + stat; + else + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS1 : STAT_ANIM_PLUS1) + stat; + } + else + { + if (byTwo) + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS2 : STAT_ANIM_MULTIPLE_PLUS2); + else + gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS1 : STAT_ANIM_MULTIPLE_PLUS1); + } + } + } + + if (gBattleStruct->stolenStats[0] != 0) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; } -static void TryUpdateRoundTurnOrder(void) +void BS_SpectralThiefPrintStats(void) { - if (IsDoubleBattle()) + NATIVE_ARGS(); + + for (enum Stat stat = STAT_ATK; stat < NUM_BATTLE_STATS; stat++) { - u32 i; - u32 j = 0; - u32 k = 0; - u32 currRounder = 0; - u8 roundUsers[3] = {0xFF, 0xFF, 0xFF}; - u8 nonRoundUsers[3] = {0xFF, 0xFF, 0xFF}; - for (i = 0; i < gBattlersCount; i++) + if (gBattleStruct->stolenStats[0] & (1u << stat)) { - if (gBattlerByTurnOrder[i] == gBattlerAttacker) + gBattleStruct->stolenStats[0] &= ~(1u << stat); + SET_STATCHANGER(stat, gBattleStruct->stolenStats[stat], FALSE); + if (ChangeStatBuffs( + gBattlerAttacker, + GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), + stat, + STAT_CHANGE_CERTAIN, + 0, NULL) == STAT_CHANGE_WORKED) { - currRounder = i + 1; // Current battler going after attacker - break; + BattleScriptCall(BattleScript_StatUp); + return; } } + } + gBattlescriptCurrInstr = cmd->nextInstr; +} - // Get battlers after attacker using round - for (i = currRounder; i < gBattlersCount; i++) - { - if (gChosenMoveByBattler[gBattlerByTurnOrder[i]] == MOVE_ROUND) - roundUsers[j++] = gBattlerByTurnOrder[i]; - else - nonRoundUsers[k++] = gBattlerByTurnOrder[i]; - } +void BS_SetMoveResultFlags(void) +{ + NATIVE_ARGS(u16 value); + gBattleStruct->moveResultFlags[gBattlerTarget] |= cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; +} - // update turn order for round users - for (i = 0; roundUsers[i] != 0xFF && i < 3; i++) - { - gBattlerByTurnOrder[currRounder] = roundUsers[i]; - gProtectStructs[roundUsers[i]].quash = TRUE; // Make it so their turn order can't be changed again - currRounder++; - } +void BS_ClearMoveResultFlags(void) +{ + NATIVE_ARGS(u16 value); + gBattleStruct->moveResultFlags[gBattlerTarget] &= ~(cmd->value); + gBattlescriptCurrInstr = cmd->nextInstr; +} - // Update turn order for non-round users - for (i = 0; nonRoundUsers[i] != 0xFF && i < 3; i++) - { - gBattlerByTurnOrder[currRounder] = nonRoundUsers[i]; - currRounder++; - } - } +void BS_ClearSpecialStatuses(void) +{ + NATIVE_ARGS(); + memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses)); + gBattlescriptCurrInstr = cmd->nextInstr; } -u8 GetFirstFaintedPartyIndex(u8 battler) +void BS_JumpIfMoveResultFlags(void) { - u32 i; - u32 start = 0; - u32 end = PARTY_SIZE; - struct Pokemon *party = GetBattlerParty(battler); + NATIVE_ARGS(u16 value, const u8 *jumpInstr); - // Check whether partner is separate trainer. - if ((IsOnPlayerSide(battler) && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - || (!IsOnPlayerSide(battler) && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) - { - if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT - || GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) - { - end = PARTY_SIZE / 2; - } - else - { - start = PARTY_SIZE / 2; - } - } + if (gBattleStruct->moveResultFlags[gBattlerTarget] & cmd->value) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} - // Loop through to find fainted battler. - for (i = start; i < end; ++i) - { - u32 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); - if (species != SPECIES_NONE - && species != SPECIES_EGG - && GetMonData(&party[i], MON_DATA_HP) == 0) - { - return i; - } - } +void BS_JumpIfNotCriticalHit(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); - // Returns PARTY_SIZE if none found. - return PARTY_SIZE; + if (!gSpecialStatuses[gBattlerTarget].criticalHit) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; } -void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler) +void BS_SwapStats(void) { - enum ItemHoldEffect holdEffect = GetMonHoldEffect(&gPlayerParty[expGetterMonId]); + NATIVE_ARGS(u8 stat); - if (IsTradedMon(&gPlayerParty[expGetterMonId])) - *expAmount = (*expAmount * 150) / 100; - if (holdEffect == HOLD_EFFECT_LUCKY_EGG) - *expAmount = (*expAmount * 150) / 100; - if (B_UNEVOLVED_EXP_MULTIPLIER >= GEN_6 && IsMonPastEvolutionLevel(&gPlayerParty[expGetterMonId])) - *expAmount = (*expAmount * 4915) / 4096; - if (B_AFFECTION_MECHANICS == TRUE && GetMonAffectionHearts(&gPlayerParty[expGetterMonId]) >= AFFECTION_FOUR_HEARTS) - *expAmount = (*expAmount * 4915) / 4096; - if (CheckBagHasItem(ITEM_EXP_CHARM, 1)) //is also for other exp boosting Powers if/when implemented - *expAmount = (*expAmount * 150) / 100; + enum Stat stat = cmd->stat; + u32 temp; - if (B_SCALED_EXP >= GEN_5 && B_SCALED_EXP != GEN_6) + switch (stat) { - // Note: There is an edge case where if a pokemon receives a large amount of exp, it wouldn't be properly calculated - // because of multiplying by scaling factor(the value would simply be larger than an u32 can hold). Hence u64 is needed. - u64 value = *expAmount; - u8 faintedLevel = gBattleMons[faintedBattler].level; - u8 expGetterLevel = GetMonData(&gPlayerParty[expGetterMonId], MON_DATA_LEVEL); - - value *= sExperienceScalingFactors[(faintedLevel * 2) + 10]; - value /= sExperienceScalingFactors[faintedLevel + expGetterLevel + 10]; - - *expAmount = value + 1; + case STAT_HP: + SWAP(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerTarget].hp, temp); + break; + case STAT_ATK: + SWAP(gBattleMons[gBattlerAttacker].attack, gBattleMons[gBattlerTarget].attack, temp); + break; + case STAT_DEF: + SWAP(gBattleMons[gBattlerAttacker].defense, gBattleMons[gBattlerTarget].defense, temp); + break; + case STAT_SPEED: + SWAP(gBattleMons[gBattlerAttacker].speed, gBattleMons[gBattlerTarget].speed, temp); + break; + case STAT_SPATK: + SWAP(gBattleMons[gBattlerAttacker].spAttack, gBattleMons[gBattlerTarget].spAttack, temp); + break; + case STAT_SPDEF: + SWAP(gBattleMons[gBattlerAttacker].spDefense, gBattleMons[gBattlerTarget].spDefense, temp); + break; + default: + break; } + PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ItemRestoreHP(void) +static void TrySetParalysis(const u8 *nextInstr, const u8 *failInstr) { - NATIVE_ARGS(const u8 *alreadyMaxHpInstr, const u8 *restoreBattlerInstr); - u16 healAmount; - u32 battler = MAX_BATTLERS_COUNT; - u32 healParam = GetItemEffect(gLastUsedItem)[6]; - struct Pokemon *party = GetBattlerParty(gBattlerAttacker); - u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP); - u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP); - gBattleCommunication[MULTIUSE_STATE] = 0; - - if (hp == maxHP) - { - gBattlescriptCurrInstr = cmd->alreadyMaxHpInstr; - } + if (CanBeParalyzed(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget))) + SetNonVolatileStatus(gBattlerTarget, MOVE_EFFECT_PARALYSIS, nextInstr, TRIGGER_ON_MOVE); else - { - // Track the number of Revives used in a battle. - if (hp == 0 && IsOnPlayerSide(gBattlerAttacker) && gBattleResults.numRevivesUsed < 255) - gBattleResults.numRevivesUsed++; - - // Check if the recipient is an active battler. - if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) - battler = gBattlerAttacker; - else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) - battler = BATTLE_PARTNER(gBattlerAttacker); - - // Get amount to heal. - switch (healParam) - { - case ITEM6_HEAL_HP_FULL: - healAmount = maxHP; - break; - case ITEM6_HEAL_HP_HALF: - healAmount = maxHP / 2; - break; - case ITEM6_HEAL_HP_QUARTER: - healAmount = maxHP / 4; - break; - default: - healAmount = healParam; - break; - } - if (hp + healAmount > maxHP) - healAmount = maxHP - hp; - - gBattleScripting.battler = battler; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); + gBattlescriptCurrInstr = failInstr; +} - // Heal is applied as move damage if battler is active. - if (battler != MAX_BATTLERS_COUNT && hp != 0) - { - gBattleStruct->moveDamage[battler] = -healAmount; - gBattlescriptCurrInstr = cmd->restoreBattlerInstr; - } - else - { - hp += healAmount; - SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); +static void TrySetPoison(const u8 *nextInstr, const u8 *failInstr) +{ + if (CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerAbility(gBattlerTarget))) + SetNonVolatileStatus(gBattlerTarget, MOVE_EFFECT_POISON, nextInstr, TRIGGER_ON_MOVE); + else + gBattlescriptCurrInstr = failInstr; +} - // Revived battlers on the field need to be brought back. - if (IsDoubleBattle() && battler != MAX_BATTLERS_COUNT) - { - gAbsentBattlerFlags &= ~(1u << battler); - gBattleMons[battler].hp = hp; - gBattleCommunication[MULTIUSE_STATE] = TRUE; - } - gBattlescriptCurrInstr = cmd->nextInstr; - } - } +static void TrySetSleep(const u8 *nextInstr, const u8 *failInstr) +{ + if (CanBeSlept(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE)) + SetNonVolatileStatus(gBattlerTarget, MOVE_EFFECT_SLEEP, nextInstr, TRIGGER_ON_MOVE); + else + gBattlescriptCurrInstr = failInstr; } -void BS_ItemCureStatus(void) +void BS_TrySetParalysis(void) { - NATIVE_ARGS(const u8 *noStatusInstr); - u32 battler = gBattlerAttacker; - u32 previousStatus2 = 0; - bool32 statusChanged = FALSE; - struct Pokemon *party = GetBattlerParty(gBattlerAttacker); + NATIVE_ARGS(const u8 *failInstr); + TrySetParalysis(cmd->nextInstr, cmd->failInstr); +} - // Heal Status2 conditions if battler is active. - if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) - { - previousStatus2 = gBattleMons[battler].status2; - gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); - } - else if (IsDoubleBattle() - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) - { - battler = BATTLE_PARTNER(gBattlerAttacker); - previousStatus2 = gBattleMons[battler].status2; - gBattleMons[battler].status2 &= ~GetItemStatus2Mask(gLastUsedItem); - } +void BS_TrySetPoison(void) +{ + NATIVE_ARGS(const u8 *failInstr); + TrySetPoison(cmd->nextInstr, cmd->failInstr); +} - if (previousStatus2 != gBattleMons[battler].status2) - statusChanged = TRUE; +void BS_TrySetPoisonParalyzis(void) +{ + NATIVE_ARGS(const u8 *failInstr); - // Heal Status1 conditions. - if (!HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], GetItemStatus1Mask(gLastUsedItem), battler)) - { - statusChanged = TRUE; - if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - if (GetItemStatus2Mask(gLastUsedItem) & STATUS2_CONFUSION) - gStatuses4[battler] &= ~STATUS4_INFINITE_CONFUSION; - } + static const u32 sStunShockEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON}; + u32 status = RandomElement(RNG_G_MAX_STUN_SHOCK, sStunShockEffects); - if (statusChanged) - { - gBattleScripting.battler = battler; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); - gBattlescriptCurrInstr = cmd->nextInstr; - } + if (status == STATUS1_PARALYSIS) + TrySetParalysis(cmd->nextInstr, cmd->failInstr); else - { - gBattlescriptCurrInstr = cmd->noStatusInstr; - } + TrySetPoison(cmd->nextInstr, cmd->failInstr); } -void BS_ItemIncreaseStat(void) +void BS_TrySetEffectSpore(void) { - NATIVE_ARGS(); - u16 statId = GetItemEffect(gLastUsedItem)[1]; - u16 stages = GetItemHoldEffectParam(gLastUsedItem); - SET_STATCHANGER(statId, stages, FALSE); - gBattlescriptCurrInstr = cmd->nextInstr; + NATIVE_ARGS(const u8 *failInstr); + + static const u32 sBefuddleEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON, STATUS1_SLEEP}; + u32 status = RandomElement(RNG_G_MAX_BEFUDDLE, sBefuddleEffects); + + if (status == STATUS1_PARALYSIS) + TrySetParalysis(cmd->nextInstr, cmd->failInstr); + else if (status == STATUS1_POISON) + TrySetPoison(cmd->nextInstr, cmd->failInstr); + else + TrySetSleep(cmd->nextInstr, cmd->failInstr); } -void BS_ItemRestorePP(void) +void BS_TrySetConfusion(void) { - NATIVE_ARGS(); - const u8 *effect = GetItemEffect(gLastUsedItem); - u32 i, pp, maxPP, moveId, loopEnd; - u32 battler = MAX_BATTLERS_COUNT; - struct Pokemon *mon = (IsOnPlayerSide(gBattlerAttacker)) ? &gPlayerParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]] : &gEnemyParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]]; + NATIVE_ARGS(const u8 *failInstr); - // Check whether to apply to all moves. - if (effect[4] & ITEM4_HEAL_PP_ONE) + if (CanBeConfused(gBattlerTarget)) { - i = gBattleStruct->itemMoveIndex[gBattlerAttacker]; - loopEnd = i + 1; + gBattleMons[gBattlerTarget].volatiles.confusionTurns = ((Random()) % 4) + 2; + gBattleCommunication[MULTIUSE_STATE] = 1; + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - i = 0; - loopEnd = MAX_MON_MOVES; - } - - // Check if the recipient is an active battler. - if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) - battler = gBattlerAttacker; - else if (IsDoubleBattle() - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) - battler = BATTLE_PARTNER(gBattlerAttacker); - - // Heal PP! - for (; i < loopEnd; i++) - { - pp = GetMonData(mon, MON_DATA_PP1 + i, NULL); - moveId = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); - maxPP = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), i); - if (pp != maxPP) - { - pp += effect[6]; - if (pp > maxPP) - pp = maxPP; - SetMonData(mon, MON_DATA_PP1 + i, &pp); - - // Update battler PP if needed. - if (battler != MAX_BATTLERS_COUNT - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[battler] - && MOVE_IS_PERMANENT(battler, i)) - { - gBattleMons[battler].pp[i] = pp; - } - } + gBattlescriptCurrInstr = cmd->failInstr; } - gBattleScripting.battler = battler; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(mon, MON_DATA_SPECIES)); - gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryRevertWeatherForm(void) +void BS_TrySetInfatuation(void) { - NATIVE_ARGS(); - if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER)) + NATIVE_ARGS(const u8 *failInstr); + + if (!gBattleMons[gBattlerTarget].volatiles.infatuation + && gBattleMons[gBattlerTarget].ability != ABILITY_OBLIVIOUS + && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL) + && AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) { - gBattleScripting.battler = gBattlerTarget; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; - return; + gBattleMons[gBattlerTarget].volatiles.infatuation = INFATUATED_WITH(gBattlerAttacker); + gBattleCommunication[MULTIUSE_STATE] = 2; + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; } - gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_HandleMegaEvolution(void) +void BS_TrySetEscapePrevention(void) { - NATIVE_ARGS(u8 battler, u8 caseId); + NATIVE_ARGS(const u8 *failInstr); - u8 battler = GetBattlerForBattleScript(cmd->battler); - HandleScriptMegaPrimalBurst(cmd->caseId, battler, HANDLE_TYPE_MEGA_EVOLUTION); - gBattlescriptCurrInstr = cmd->nextInstr; + if (!gBattleMons[gBattlerTarget].volatiles.escapePrevention) + { + gBattleMons[gBattlerTarget].volatiles.escapePrevention = TRUE; + gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } } -void BS_HandlePrimalReversion(void) +void BS_TrySetTorment(void) { - NATIVE_ARGS(u8 battler, u8 caseId); + NATIVE_ARGS(const u8 *failInstr); - u8 battler = GetBattlerForBattleScript(cmd->battler); - HandleScriptMegaPrimalBurst(cmd->caseId, battler, HANDLE_TYPE_PRIMAL_REVERSION); - gBattlescriptCurrInstr = cmd->nextInstr; + if (!(gBattleMons[gBattlerTarget].volatiles.torment == TRUE) + && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL)) + { + gBattleMons[gBattlerTarget].volatiles.torment = TRUE; + gDisableStructs[gBattlerTarget].tormentTimer = 3; + gEffectBattler = gBattlerTarget; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } } -void BS_HandleUltraBurst(void) +// Heals one-sixth of the target's HP, including for Dynamaxed targets. +void BS_HealOneSixth(void) { - NATIVE_ARGS(u8 battler, u8 caseId); - - u8 battler = GetBattlerForBattleScript(cmd->battler); - HandleScriptMegaPrimalBurst(cmd->caseId, battler, HANDLE_TYPE_ULTRA_BURST); - gBattlescriptCurrInstr = cmd->nextInstr; + NATIVE_ARGS(const u8* failInstr); + SetHealAmount(gBattlerTarget, gBattleMons[gBattlerTarget].maxHP / 6); + if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) + gBattlescriptCurrInstr = cmd->failInstr; // fail + else + gBattlescriptCurrInstr = cmd->nextInstr; // can heal } -void BS_JumpIfShellTrap(void) +// Recycles the target's item if it is specifically holding a berry. +void BS_TryRecycleBerry(void) { - NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + NATIVE_ARGS(const u8 *failInstr); + u16 *usedHeldItem = &GetBattlerPartyState(gBattlerTarget)->usedHeldItem; + if (gBattleMons[gBattlerTarget].item == ITEM_NONE + && gBattleStruct->changedItems[gBattlerTarget] == ITEM_NONE // Will not inherit an item + && GetItemPocket(*usedHeldItem) == POCKET_BERRIES) + { + gLastUsedItem = *usedHeldItem; + *usedHeldItem = ITEM_NONE; + gBattleMons[gBattlerTarget].item = gLastUsedItem; + + BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); + MarkBattlerForControllerExec(gBattlerTarget); - u8 battler = GetBattlerForBattleScript(cmd->battler); - if (gProtectStructs[battler].shellTrap) - gBattlescriptCurrInstr = cmd->jumpInstr; - else gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } } -void BS_JumpIfElectricAbilityAffected(void) +// Sets up sharp steel on the target's side. +void BS_SetSteelsurge(void) { - NATIVE_ARGS(u8 battler, u16 ability, const u8 *jumpInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); - - if (IsElectricAbilityAffected(battler, cmd->ability)) - gBattlescriptCurrInstr = cmd->jumpInstr; + NATIVE_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); + if (IsHazardOnSide(targetSide, HAZARDS_STEELSURGE)) + { + gBattlescriptCurrInstr = cmd->failInstr; + } else + { + PushHazardTypeToQueue(targetSide, HAZARDS_STEELSURGE); gBattlescriptCurrInstr = cmd->nextInstr; + } } -void BS_ApplySaltCure(void) +void BS_JumpIfIntimidateAbilityPrevented(void) { - NATIVE_ARGS(u8 battler); + NATIVE_ARGS(); - u8 battler = GetBattlerForBattleScript(cmd->battler); - gStatuses4[battler] |= STATUS4_SALT_CURE; - gBattlescriptCurrInstr = cmd->nextInstr; + bool32 hasAbility = FALSE; + enum Ability ability = GetBattlerAbility(gBattlerTarget); + + switch (ability) + { + case ABILITY_INNER_FOCUS: + case ABILITY_SCRAPPY: + case ABILITY_OWN_TEMPO: + case ABILITY_OBLIVIOUS: + if (GetConfig(CONFIG_UPDATED_INTIMIDATE) >= GEN_8) + { + hasAbility = TRUE; + gBattlescriptCurrInstr = BattleScript_IntimidatePrevented; + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } + break; + case ABILITY_GUARD_DOG: + hasAbility = TRUE; + gBattlescriptCurrInstr = BattleScript_IntimidateInReverse; + break; + default: + gBattlescriptCurrInstr = cmd->nextInstr; + break; + } + + if (hasAbility) + { + gLastUsedAbility = ability; + gBattlerAbility = gBattlerTarget; + RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + } } -void BS_JumpIfMovePropertyArgument(void) +void BS_JumpIfCanGigantamax(void) { - NATIVE_ARGS(u8 argument, const u8 *jumpInstr); + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); - if (GetMoveEffectArg_MoveProperty(gCurrentMove) == cmd->argument) + if (GetMonData(GetBattlerMon(battler), MON_DATA_GIGANTAMAX_FACTOR) + && GetGMaxTargetSpecies(gBattleMons[battler].species) != SPECIES_NONE) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_SetRemoveTerrain(void) +void BS_TryFlingHoldEffect(void) { - NATIVE_ARGS(const u8 *jumpInstr); - u32 statusFlag = 0; + NATIVE_ARGS(); + enum HoldEffect holdEffect = GetItemHoldEffect(gBattleStruct->flingItem); + gBattleStruct->flingItem = ITEM_NONE; - switch (GetMoveEffect(gCurrentMove)) + if (IsMoveEffectBlockedByTarget(GetBattlerAbility(gBattlerTarget))) { - case EFFECT_MISTY_TERRAIN: - statusFlag = STATUS_FIELD_MISTY_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; + gBattlescriptCurrInstr = BattleScript_FlingBlockedByShieldDust; + return; + } + + switch (holdEffect) + { + case HOLD_EFFECT_FLAME_ORB: + SetMoveEffect(gBattlerAttacker, gBattlerTarget, MOVE_EFFECT_BURN, cmd->nextInstr, NO_FLAGS); break; - case EFFECT_GRASSY_TERRAIN: - statusFlag = STATUS_FIELD_GRASSY_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; + case HOLD_EFFECT_TOXIC_ORB: + SetMoveEffect(gBattlerAttacker, gBattlerTarget, MOVE_EFFECT_TOXIC, cmd->nextInstr, NO_FLAGS); break; - case EFFECT_ELECTRIC_TERRAIN: - statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; + case HOLD_EFFECT_LIGHT_BALL: + SetMoveEffect(gBattlerAttacker, gBattlerTarget, MOVE_EFFECT_PARALYSIS, cmd->nextInstr, NO_FLAGS); break; - case EFFECT_PSYCHIC_TERRAIN: - statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; + case HOLD_EFFECT_TYPE_POWER: + if (GetItemSecondaryId(gLastUsedItem) != TYPE_POISON) + gBattlescriptCurrInstr = cmd->nextInstr; + else + SetMoveEffect(gBattlerAttacker, gBattlerTarget, MOVE_EFFECT_POISON, cmd->nextInstr, NO_FLAGS); break; - case EFFECT_HIT_SET_REMOVE_TERRAIN: - switch (GetMoveEffectArg_MoveProperty(gCurrentMove)) - { - case ARG_SET_PSYCHIC_TERRAIN: // Genesis Supernova - statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; - break; - case ARG_TRY_REMOVE_TERRAIN_HIT: // Splintered Stormshards - case ARG_TRY_REMOVE_TERRAIN_FAIL: // Steel Roller - if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) - { - // No terrain to remove, jump to battle script pointer. - gBattlescriptCurrInstr = cmd->jumpInstr; - } - else - { - // Remove all terrains. - RemoveAllTerrains(); - gBattlescriptCurrInstr = cmd->nextInstr; - } + case HOLD_EFFECT_FLINCH: + SetMoveEffect(gBattlerAttacker, gBattlerTarget, MOVE_EFFECT_FLINCH, cmd->nextInstr, NO_FLAGS); + break; + case HOLD_EFFECT_MENTAL_HERB: + if (ItemBattleEffects(gBattlerTarget, 0, holdEffect, IsOnFlingActivation)) return; - default: - break; - } + else + gBattlescriptCurrInstr = cmd->nextInstr; + break; + case HOLD_EFFECT_WHITE_HERB: + if (ItemBattleEffects(gBattlerTarget, 0, holdEffect, IsOnFlingActivation)) + return; + else + gBattlescriptCurrInstr = cmd->nextInstr; break; default: + gBattlescriptCurrInstr = cmd->nextInstr; break; } +} - if (gFieldStatuses & statusFlag || statusFlag == 0) - { +void BS_JumpIfNoWhiteOut(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + + if (FlagGet(B_FLAG_NO_WHITEOUT)) gBattlescriptCurrInstr = cmd->jumpInstr; - } else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryBoosterEnergy(void) +{ + NATIVE_ARGS(u8 onFieldStatus); + + for (u32 orderNum = 0; orderNum < gBattlersCount; orderNum++) { - enum ItemHoldEffect atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); + u32 battler = gBattlerByTurnOrder[orderNum]; + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); + if (holdEffect != HOLD_EFFECT_BOOSTER_ENERGY) + continue; - gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; - gFieldStatuses |= statusFlag; - gFieldTimers.terrainTimer = gBattleTurnCounter + (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; - gBattlescriptCurrInstr = cmd->nextInstr; + enum Ability ability = GetBattlerAbility(battler); + if (!(ability == ABILITY_PROTOSYNTHESIS && cmd->onFieldStatus != ON_TERRAIN) + && !(ability == ABILITY_QUARK_DRIVE && cmd->onFieldStatus != ON_WEATHER)) + continue; + + if (ItemBattleEffects(battler, 0, holdEffect, IsOnEffectActivation)) + return; } + + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_JumpIfTerrainAffected(void) +void BS_JumpIfAbilityCantBeReactivated(void) { - NATIVE_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 ability = gBattleMons[battler].ability; - if (IsBattlerTerrainAffected(battler, cmd->flags)) + switch (ability) + { + case ABILITY_IMPOSTER: + case ABILITY_NEUTRALIZING_GAS: + case ABILITY_AIR_LOCK: + case ABILITY_CLOUD_NINE: gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + break; + default: + if (gAbilitiesInfo[ability].cantBeSuppressed) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + break; + } } -void BS_TryReflectType(void) +void BS_TryActivateAbilityShield(void) { - NATIVE_ARGS(const u8 *failInstr); - u16 targetBaseSpecies = GET_BASE_SPECIES_ID(gBattleMons[gBattlerTarget].species); - u32 targetTypes[3]; - GetBattlerTypes(gBattlerTarget, FALSE, targetTypes); + NATIVE_ARGS(u8 battler); + u32 battler = GetBattlerForBattleScript(cmd->battler); + enum Ability ability = GetBattlerAbility(battler); - if (targetBaseSpecies == SPECIES_ARCEUS || targetBaseSpecies == SPECIES_SILVALLY) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (IS_BATTLER_TYPELESS(gBattlerTarget)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (targetTypes[0] == TYPE_MYSTERY && targetTypes[1] == TYPE_MYSTERY && targetTypes[2] != TYPE_MYSTERY) + gBattlescriptCurrInstr = cmd->nextInstr; + + if (ability != ABILITY_NONE // if ability would be negated by breaking effects Ability Shield doesn't print message + && ability == GetBattlerAbilityInternal(battler, TRUE, TRUE)) + return; + + if (GetBattlerAbilityNoAbilityShield(battler) != ability) { - gBattleMons[gBattlerAttacker].types[0] = TYPE_NORMAL; - gBattleMons[gBattlerAttacker].types[1] = TYPE_NORMAL; - gBattleMons[gBattlerAttacker].types[2] = targetTypes[2]; - gBattlescriptCurrInstr = cmd->nextInstr; + gLastUsedItem = gBattleMons[battler].item; + RecordItemEffectBattle(battler, GetItemHoldEffect(gLastUsedItem)); + BattleScriptCall(BattleScript_AbilityShieldProtects); } - else if (targetTypes[0] == TYPE_MYSTERY && targetTypes[1] != TYPE_MYSTERY) +} + +void BS_TrySynchronoise(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + bool32 atleastOneSharedType = FALSE; + + for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { - gBattleMons[gBattlerAttacker].types[0] = targetTypes[1]; - gBattleMons[gBattlerAttacker].types[1] = targetTypes[1]; - gBattleMons[gBattlerAttacker].types[2] = targetTypes[2]; - gBattlescriptCurrInstr = cmd->nextInstr; + if (gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_SYNCHRONOISE_AFFECTED + || gBattlerAttacker == battlerDef + || !IsBattlerAlive(battlerDef)) + continue; + + if (DoBattlersShareType(gBattlerAttacker, battlerDef)) + { + atleastOneSharedType = TRUE; + continue; + } + + if (!DoBattlersShareType(gBattlerAttacker, battlerDef)) + { + gBattleScripting.battler = battlerDef; + gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_NO_EFFECT | MOVE_RESULT_SYNCHRONOISE_AFFECTED; + BattleScriptCall(BattleScript_ItDoesntAffectFoe); + return; + } } - else if (targetTypes[0] != TYPE_MYSTERY && targetTypes[1] == TYPE_MYSTERY) - { - gBattleMons[gBattlerAttacker].types[0] = targetTypes[0]; - gBattleMons[gBattlerAttacker].types[1] = targetTypes[0]; - gBattleMons[gBattlerAttacker].types[2] = targetTypes[2]; + + if (atleastOneSharedType) gBattlescriptCurrInstr = cmd->nextInstr; - } else - { - gBattleMons[gBattlerAttacker].types[0] = targetTypes[0]; - gBattleMons[gBattlerAttacker].types[1] = targetTypes[1]; - gBattleMons[gBattlerAttacker].types[2] = targetTypes[2]; + gBattlescriptCurrInstr = cmd->jumpInstr; +} + +void BS_JumpIfRoarFails(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + + if (WILD_DOUBLE_BATTLE + && IsOnPlayerSide(gBattlerAttacker) + && !IsOnPlayerSide(gBattlerTarget) + && IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else if (WILD_DOUBLE_BATTLE + && !IsOnPlayerSide(gBattlerAttacker) + && !IsOnPlayerSide(gBattlerTarget)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else if (FlagGet(B_FLAG_NO_RUNNING)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else gBattlescriptCurrInstr = cmd->nextInstr; - } } -void BS_TrySetOctolock(void) +void BS_JumpIfAbsent(void) { - NATIVE_ARGS(u8 battler, const u8 *failInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + if (!IsBattlerAlive(GetBattlerForBattleScript(cmd->battler))) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (gDisableStructs[battler].octolock) +void BS_JumpIfHoldEffect(void) +{ + NATIVE_ARGS(u8 battler, u8 holdEffect, const u8 *jumpInstr, u8 equal); + u32 battler = GetBattlerForBattleScript(cmd->battler); + if ((GetBattlerHoldEffect(battler) == cmd->holdEffect) == cmd->equal) { - gBattlescriptCurrInstr = cmd->failInstr; + if (cmd->equal) + gLastUsedItem = gBattleMons[battler].item; // For B_LAST_USED_ITEM + gBattlescriptCurrInstr = cmd->jumpInstr; } else { - gDisableStructs[battler].octolock = TRUE; - gBattleMons[battler].status2 |= STATUS2_ESCAPE_PREVENTION; - gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker; + if (!cmd->equal) + gLastUsedItem = gBattleMons[battler].item; // For B_LAST_USED_ITEM gBattlescriptCurrInstr = cmd->nextInstr; } } -void BS_SetGlaiveRush(void) +void BS_JumpIfNoAlly(void) { - NATIVE_ARGS(); - gStatuses4[gBattlerAttacker] |= STATUS4_GLAIVE_RUSH; - gBattlescriptCurrInstr = cmd->nextInstr; + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u32 partner = BATTLE_PARTNER(GetBattlerForBattleScript(cmd->battler)); + if (!IsBattlerAlive(partner)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; } -// TODO: Convert this to a proper FORM_CHANGE type. -void BS_TryRelicSong(void) +void BS_SetLastUsedItem(void) { - NATIVE_ARGS(); + NATIVE_ARGS(u8 battler); + gLastUsedItem = gBattleMons[GetBattlerForBattleScript(cmd->battler)].item; + gBattleStruct->flingItem = gLastUsedItem; + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) - && (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_ARIA || gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE)) +void BS_TrySetFairyLock(void) +{ + NATIVE_ARGS(const u8 *failInstr); + if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) { - if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_ARIA) - gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; - else if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE) - gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_ARIA; - - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_AttackerFormChangeMoveEffect; + gBattlescriptCurrInstr = cmd->failInstr; } else { + gFieldStatuses |= STATUS_FIELD_FAIRY_LOCK; + gFieldTimers.fairyLockTimer = 2; gBattlescriptCurrInstr = cmd->nextInstr; } } -void BS_SetPledge(void) +void BS_GetStatValue(void) { - NATIVE_ARGS(const u8 *jumpInstr); - - u32 partner = BATTLE_PARTNER(gBattlerAttacker); - u32 partnerMove = gBattleMons[partner].moves[gBattleStruct->chosenMovePositions[partner]]; - u32 i = 0; - u32 k = 0; - - if (gBattleStruct->pledgeMove && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)) - { - PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker); - gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; + NATIVE_ARGS(u8 stat); + u32 stat = cmd->stat; + gBattleStruct->passiveHpUpdate[gBattlerAttacker] = *(u16 *)(&gBattleMons[gBattlerTarget].attack) + (stat - 1); + gBattleStruct->passiveHpUpdate[gBattlerAttacker] *= gStatStageRatios[gBattleMons[gBattlerTarget].statStages[stat]][0]; + gBattleStruct->passiveHpUpdate[gBattlerAttacker] /= gStatStageRatios[gBattleMons[gBattlerTarget].statStages[stat]][1]; + gBattlescriptCurrInstr = cmd->nextInstr; +} - if ((gCurrentMove == MOVE_GRASS_PLEDGE && partnerMove == MOVE_WATER_PLEDGE) - || (gCurrentMove == MOVE_WATER_PLEDGE && partnerMove == MOVE_GRASS_PLEDGE)) - { - gCurrentMove = MOVE_GRASS_PLEDGE; - gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Grass; - } - else if ((gCurrentMove == MOVE_FIRE_PLEDGE && partnerMove == MOVE_GRASS_PLEDGE) - || (gCurrentMove == MOVE_GRASS_PLEDGE && partnerMove == MOVE_FIRE_PLEDGE)) - { - gCurrentMove = MOVE_FIRE_PLEDGE; - gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Fire; - } - else if ((gCurrentMove == MOVE_WATER_PLEDGE && partnerMove == MOVE_FIRE_PLEDGE) - || (gCurrentMove == MOVE_FIRE_PLEDGE && partnerMove == MOVE_WATER_PLEDGE)) - { - gCurrentMove = MOVE_WATER_PLEDGE; - gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Water; - } +void BS_JumpIfFullHp(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + if (IsBattlerAtMaxHp(GetBattlerForBattleScript(cmd->battler))) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} - gBattleCommunication[MSG_DISPLAY] = 0; - } - else if ((gChosenActionByBattler[partner] == B_ACTION_USE_MOVE) - && IsDoubleBattle() - && IsBattlerAlive(partner) - && GetBattlerTurnOrderNum(gBattlerAttacker) < GetBattlerTurnOrderNum(partner) - && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && gCurrentMove != partnerMove - && GetMoveEffect(partnerMove) == EFFECT_PLEDGE) +void BS_TryFriskMessage(void) +{ + NATIVE_ARGS(); + while (gBattleStruct->friskedBattler < gBattlersCount) { - u32 currPledgeUser = 0; - u32 newTurnOrder[] = {0xFF, 0xFF}; - - for (i = 0; i < gBattlersCount; i++) + gBattlerTarget = gBattleStruct->friskedBattler++; + if (!IsBattlerAlly(gBattlerAttacker, gBattlerTarget) + && IsBattlerAlive(gBattlerTarget) + && gBattleMons[gBattlerTarget].item != ITEM_NONE) { - if (gBattlerByTurnOrder[i] == gBattlerAttacker) + gLastUsedItem = gBattleMons[gBattlerTarget].item; + RecordItemEffectBattle(gBattlerTarget, GetBattlerHoldEffectIgnoreNegation(gBattlerTarget)); + // If Frisk identifies two mons' items, show the pop-up only once. + if (gBattleStruct->friskedAbility) { - currPledgeUser = i + 1; // Current battler going after attacker - break; + BattleScriptCall(BattleScript_FriskMsg); } - } - for (i = currPledgeUser; i < gBattlersCount; i++) - { - if (gBattlerByTurnOrder[i] != partner) + else { - newTurnOrder[k] = gBattlerByTurnOrder[i]; - k++; + gBattleStruct->friskedAbility = TRUE; + BattleScriptCall(BattleScript_FriskMsgWithPopup); } + return; } + } + gBattleStruct->friskedBattler = 0; + gBattleStruct->friskedAbility = FALSE; + gBattlescriptCurrInstr = cmd->nextInstr; +} - gBattlerByTurnOrder[currPledgeUser] = partner; - currPledgeUser++; +void BS_SetTracedAbility(void) +{ + NATIVE_ARGS(u8 battler); + u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = gBattleStruct->tracedAbility[battler]; + gBattlescriptCurrInstr = cmd->nextInstr; +} - for (i = 0; newTurnOrder[i] != 0xFF && i < 2; i++) - { - gBattlerByTurnOrder[currPledgeUser] = newTurnOrder[i]; - currPledgeUser++; - } +void BS_TryIllusionOff(void) +{ + NATIVE_ARGS(u8 battler); + if (TryClearIllusion(GetBattlerForBattleScript(cmd->battler), ABILITYEFFECT_MOVE_END)) + return; + gBattlescriptCurrInstr = cmd->nextInstr; +} - gBattleStruct->pledgeMove = TRUE; - gBattleScripting.battler = partner; +void BS_SetSpriteIgnore0Hp(void) +{ + NATIVE_ARGS(bool8 ignore0HP); + gBattleStruct->spriteIgnore0Hp = cmd->ignore0HP; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_UpdateNick(void) +{ + NATIVE_ARGS(); + u32 battler = gBattleScripting.battler; + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], GetBattlerMon(battler), HEALTHBOX_NICK); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfNotBerry(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + if (GetItemPocket(gBattleMons[GetBattlerForBattleScript(cmd->battler)].item) == POCKET_BERRIES) gBattlescriptCurrInstr = cmd->nextInstr; - } else - { - gBattleStruct->pledgeMove = FALSE; gBattlescriptCurrInstr = cmd->jumpInstr; - } } -void BS_SetPledgeStatus(void) +void BS_GravityOnAirborneMons(void) { - NATIVE_ARGS(u8 battler, u32 sideStatus); + NATIVE_ARGS(); + // Cancel all multiturn moves of IN_AIR Pokemon except those being targeted by Sky Drop. + if (gBattleMons[gBattlerTarget].volatiles.semiInvulnerable == STATE_ON_AIR) + CancelMultiTurnMoves(gBattlerTarget, SKY_DROP_GRAVITY_ON_AIRBORNE); - u32 battler = GetBattlerForBattleScript(cmd->battler); - u32 side = GetBattlerSide(battler); + gBattleMons[gBattlerTarget].volatiles.semiInvulnerable = STATE_NONE; + gBattleMons[gBattlerTarget].volatiles.magnetRise = FALSE; + gBattleMons[gBattlerTarget].volatiles.telekinesis = FALSE; + gBattlescriptCurrInstr = cmd->nextInstr; +} - gBattleStruct->pledgeMove = FALSE; - if (!(gSideStatuses[side] & cmd->sideStatus)) +void BS_TryAcupressure(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u32 bits = 0; + for (enum Stat stat = STAT_ATK; stat < NUM_BATTLE_STATS; stat++) { - gSideStatuses[side] |= cmd->sideStatus; - - switch (cmd->sideStatus) + if (CompareStat(gBattlerTarget, stat, MAX_STAT_STAGE, CMP_LESS_THAN, GetBattlerAbility(gBattlerTarget))) + bits |= 1u << stat; + } + if (bits) + { + u32 statId; + do { - case SIDE_STATUS_RAINBOW: - gSideTimers[side].rainbowTimer = gBattleTurnCounter + 4; - break; - case SIDE_STATUS_SEA_OF_FIRE: - gSideTimers[side].seaOfFireTimer = gBattleTurnCounter + 4; - break; - case SIDE_STATUS_SWAMP: - gSideTimers[side].swampTimer = gBattleTurnCounter + 4; - } + statId = (Random() % (NUM_BATTLE_STATS - 1)) + 1; + } while (!(bits & (1u << statId))); + SET_STATCHANGER(statId, 2, FALSE); gBattlescriptCurrInstr = cmd->nextInstr; } else - gBattlescriptCurrInstr = BattleScript_MoveEnd; + { + gBattlescriptCurrInstr = cmd->failInstr; + } } -void BS_TryTrainerSlideZMoveMsg(void) +void BS_CancelMultiTurnMoves(void) { NATIVE_ARGS(); - s32 shouldSlide; - - if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_Z_MOVE))) - { - gBattleScripting.battler = gBattlerAttacker; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); - } + const u8 *result = CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_CANCEL_MULTI_TURN_MOVES); + if (result) + gBattlescriptCurrInstr = result; else gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryTrainerSlideMegaEvolutionMsg(void) +void BS_IsRunningImpossible(void) { NATIVE_ARGS(); - s32 shouldSlide; - - if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_MEGA_EVOLUTION))) - { - gBattleScripting.battler = gBattlerAttacker; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); - } - else - gBattlescriptCurrInstr = cmd->nextInstr; + gBattleCommunication[0] = IsRunningFromBattleImpossible(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryTrainerSlideDynamaxMsg(void) +void BS_GetMoveTarget(void) { NATIVE_ARGS(); - s32 shouldSlide; - - if ((shouldSlide = ShouldDoTrainerSlide(gBattleScripting.battler, TRAINER_SLIDE_DYNAMAX))) - { - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); - } - else - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlerTarget = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryHealPulse(void) +void BS_GetBattlerFainted(void) { - NATIVE_ARGS(const u8 *failInstr); - - if (IsBattlerAtMaxHp(gBattlerTarget)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } + NATIVE_ARGS(u8 battler); + if (gHitMarker & HITMARKER_FAINTED(GetBattlerForBattleScript(cmd->battler))) + gBattleCommunication[0] = TRUE; else - { - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && IsPulseMove(gCurrentMove)) - gBattleStruct->moveDamage[gBattlerTarget] = -(GetNonDynamaxMaxHP(gBattlerTarget) * 75 / 100); - else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && GetMoveEffectArg_MoveProperty(gCurrentMove) == MOVE_EFFECT_FLORAL_HEALING) - gBattleStruct->moveDamage[gBattlerTarget] = -(GetNonDynamaxMaxHP(gBattlerTarget) * 2 / 3); - else - gBattleStruct->moveDamage[gBattlerTarget] = -(GetNonDynamaxMaxHP(gBattlerTarget) / 2); - - if (gBattleStruct->moveDamage[gBattlerTarget] == 0) - gBattleStruct->moveDamage[gBattlerTarget] = -1; - gBattlescriptCurrInstr = cmd->nextInstr; - } + gBattleCommunication[0] = FALSE; + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryCopycat(void) +void BS_ResetSwitchInAbilityBits(void) { - NATIVE_ARGS(const u8 *failInstr); + NATIVE_ARGS(); + gSpecialStatuses[gBattlerAttacker].switchInAbilityDone = FALSE; + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (gLastUsedMove == MOVE_NONE || gLastUsedMove == MOVE_UNAVAILABLE || IsMoveCopycatBanned(gLastUsedMove) || IsZMove(gLastUsedMove)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else +void BS_UpdateChoiceMoveOnLvlUp(void) +{ + NATIVE_ARGS(); + if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) { - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IsBattleMoveStatus(gLastUsedMove)) - { - gBattleStruct->zmove.baseMoves[gBattlerAttacker] = gLastUsedMove; - gCalledMove = GetTypeBasedZMove(gLastUsedMove); - } - else if (IsMaxMove(gLastUsedMove)) - { - gCalledMove = gBattleStruct->dynamax.lastUsedBaseMove; - } + u32 battler; + if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId) + battler = 0; else + battler = 2; + + u32 moveIndex; + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - gCalledMove = gLastUsedMove; + if (gBattleMons[battler].moves[moveIndex] == gBattleStruct->choicedMove[battler]) + break; } - - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gBattlerTarget = GetBattleMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr = cmd->nextInstr; + if (moveIndex == MAX_MON_MOVES) + gBattleStruct->choicedMove[battler] = MOVE_NONE; } + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryDefog(void) +void BS_ResetPlayerFainted(void) { - NATIVE_ARGS(u8 clear, const u8 *failInstr); - - if (cmd->clear) + NATIVE_ARGS(); + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE)) + && gBattleTypeFlags & BATTLE_TYPE_TRAINER + && IsBattlerAlive(B_POSITION_PLAYER_LEFT) + && IsBattlerAlive(B_POSITION_OPPONENT_LEFT)) { - if (TryDefogClear(gEffectBattler, TRUE)) - return; - else - gBattlescriptCurrInstr = cmd->nextInstr; + gHitMarker &= ~HITMARKER_PLAYER_FAINTED; } - else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_PalaceFlavorText(void) +{ + NATIVE_ARGS(); + // Try and print end-of-turn Battle Palace flavor text (e.g. "A glint appears in mon's eyes") + u32 battler; + gBattleCommunication[0] = FALSE; // whether or not msg should be printed + gBattleScripting.battler = battler = gBattleCommunication[1]; + if (!(gBattleStruct->palaceFlags & (1u << battler)) + && gBattleMons[battler].maxHP / 2 >= gBattleMons[battler].hp + && IsBattlerAlive(battler) + && !(gBattleMons[battler].status1 & STATUS1_SLEEP)) { - if (TryDefogClear(gBattlerAttacker, FALSE)) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->failInstr; + gBattleStruct->palaceFlags |= 1u << battler; + gBattleCommunication[0] = TRUE; + gBattleCommunication[MULTISTRING_CHOOSER] = gNaturesInfo[GetNatureFromPersonality(gBattleMons[battler].personality)].battlePalaceFlavorText; } + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryUpperHand(void) +void BS_ArenaJudgmentWindow(void) { - NATIVE_ARGS(const u8 *failInstr); + NATIVE_ARGS(); + u32 judgmentWindow = BattleArena_ShowJudgmentWindow(&gBattleCommunication[0]); - u32 abilityDef = GetBattlerAbility(gBattlerTarget); - u32 prio = GetChosenMovePriority(gBattlerTarget, abilityDef); + // BattleArena_ShowJudgmentWindow's last state was an intermediate step. + // Return without advancing the current instruction so that it will be called again. + if (judgmentWindow == ARENA_RESULT_RUNNING) + return; - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) - || gChosenMoveByBattler[gBattlerTarget] == MOVE_NONE - || IsBattleMoveStatus(gChosenMoveByBattler[gBattlerTarget]) - || prio < 1 - || prio > 3) // Fails if priority is less than 1 or greater than 3, if target already moved, or if using a status - gBattlescriptCurrInstr = cmd->failInstr; + gBattleCommunication[1] = judgmentWindow; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +static void SetArenMonLostValues(u32 battler, u32 side) +{ + gBattleMons[battler].hp = 0; + gHitMarker |= HITMARKER_FAINTED(battler); + if (side == B_SIDE_PLAYER) + gBattleStruct->arenaLostPlayerMons |= 1u << gBattlerPartyIndexes[battler]; else - gBattlescriptCurrInstr = cmd->nextInstr; + gBattleStruct->arenaLostOpponentMons |= 1u << gBattlerPartyIndexes[battler]; + gDisableStructs[battler].truantSwitchInHack = TRUE; } -void BS_TryTriggerStatusForm(void) +#define playerMon 0 +#define opponentMon 1 +void BS_ArenaOpponentMonLost(void) { NATIVE_ARGS(); - if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_STATUS)) - { - gBattleScripting.battler = gBattlerTarget; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; - return; - } + SetArenMonLostValues(opponentMon, B_SIDE_OPPONENT); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_AllySwitchSwapBattler(void) +void BS_ArenaPlayerMonLost(void) { NATIVE_ARGS(); - - gBattleScripting.battler = gBattlerAttacker; - gBattlerAttacker ^= BIT_FLANK; - gProtectStructs[gBattlerAttacker].usedAllySwitch = TRUE; + SetArenMonLostValues(playerMon, B_SIDE_PLAYER); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryAllySwitch(void) +void BS_ArenaBothMonsLost(void) { - NATIVE_ARGS(const u8 *failInstr); - - if (!IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)) - || (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - || (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (B_ALLY_SWITCH_FAIL_CHANCE >= GEN_9) - { - TryResetProtectUseCounter(gBattlerAttacker); - if (sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] < Random()) - { - gDisableStructs[gBattlerAttacker].protectUses = 0; - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gDisableStructs[gBattlerAttacker].protectUses++; - gBattlescriptCurrInstr = cmd->nextInstr; - } - } - else - { - gBattlescriptCurrInstr = cmd->nextInstr; - } + NATIVE_ARGS(); + SetArenMonLostValues(playerMon, B_SIDE_PLAYER); + SetArenMonLostValues(opponentMon, B_SIDE_OPPONENT); + gBattlescriptCurrInstr = cmd->nextInstr; } +#undef playerMon +#undef opponentMon -void BS_RunStatChangeItems(void) +void BS_ForfeitYesNoBox(void) { - NATIVE_ARGS(u8 battler); - - // Change instruction before calling ItemBattleEffects. + NATIVE_ARGS(); + BtlController_EmitYesNoBox(gBattlerAttacker, B_COMM_TO_CONTROLLER); + MarkBattlerForControllerExec(gBattlerAttacker); gBattlescriptCurrInstr = cmd->nextInstr; - ItemBattleEffects(ITEMEFFECT_STATS_CHANGED, GetBattlerForBattleScript(cmd->battler), FALSE); } -static void TryUpdateEvolutionTracker(u32 evolutionCondition, u32 upAmount, u16 usedMove) +void BS_DrawArenaRefTextBox(void) { - u32 i, j; - - if (IsOnPlayerSide(gBattlerAttacker) - && !(gBattleTypeFlags & (BATTLE_TYPE_LINK - | BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_TRAINER_HILL - | BATTLE_TYPE_FRONTIER))) - { - const struct Evolution *evolutions = GetSpeciesEvolutions(gBattleMons[gBattlerAttacker].species); - if (evolutions == NULL) - return; + NATIVE_ARGS(); + DrawArenaRefereeTextBox(); + gBattlescriptCurrInstr = cmd->nextInstr; +} - for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) - { - if (SanitizeSpeciesId(evolutions[i].targetSpecies) == SPECIES_NONE) - continue; - if (evolutions[i].params == NULL) - continue; +void BS_EraseArenaRefTextBox(void) +{ + NATIVE_ARGS(); + EraseArenaRefereeTextBox(); + gBattlescriptCurrInstr = cmd->nextInstr; +} - for (j = 0; evolutions[i].params[j].condition != CONDITIONS_END; j++) - { - if (evolutions[i].params[j].condition == evolutionCondition) - { - // We only have 10 bits to use - u16 val = min(1023, GetMonData(GetBattlerMon(gBattlerAttacker), MON_DATA_EVOLUTION_TRACKER) + upAmount); - // Reset progress if you faint for the recoil method. - switch (evolutionCondition) - { - case IF_USED_MOVE_X_TIMES: - if (evolutions[i].params[j].arg1 == usedMove) - SetMonData(GetBattlerMon(gBattlerAttacker), MON_DATA_EVOLUTION_TRACKER, &val); - break; - case IF_RECOIL_DAMAGE_GE: - if (gBattleMons[gBattlerAttacker].hp == 0) - val = 0; - SetMonData(GetBattlerMon(gBattlerAttacker), MON_DATA_EVOLUTION_TRACKER, &val); - break; - case IF_DEFEAT_X_WITH_ITEMS: - if (GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_SPECIES) == evolutions[i].params[j].arg1 - && GetMonData(GetBattlerMon(gBattlerTarget), MON_DATA_HELD_ITEM) == evolutions[i].params[j].arg2) - SetMonData(GetBattlerMon(gBattlerAttacker), MON_DATA_EVOLUTION_TRACKER, &val); - break; - } - return; - } - } - } - } +void BS_ArenaJudgmentString(void) +{ + NATIVE_ARGS(u8 id); + BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[cmd->id]); + BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGMENT_TEXT); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryUpdateRecoilTracker(void) +void BS_ArenaWaitMessage(void) { NATIVE_ARGS(); - TryUpdateEvolutionTracker(IF_RECOIL_DAMAGE_GE, gBattleStruct->moveDamage[gBattlerAttacker], MOVE_NONE); + if (IsTextPrinterActive(ARENA_WIN_JUDGMENT_TEXT)) + return; gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryUpdateLeadersCrestTracker(void) +void BS_WaitCry(void) { NATIVE_ARGS(); - TryUpdateEvolutionTracker(IF_DEFEAT_X_WITH_ITEMS, 1, MOVE_NONE); + if (!IsCryFinished()) + return; gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryTidyUp(void) +#define opponentFirstBattler 1 +#define opponentSecondBattler 3 +void BS_ReturnOpponentMon1ToBall(void) { - NATIVE_ARGS(u8 clear, const u8 *jumpInstr); - - if (cmd->clear) + NATIVE_ARGS(); + if (IsBattlerAlive(opponentFirstBattler)) { - if (TryTidyUpClear(gEffectBattler, TRUE)) - return; - else - gBattlescriptCurrInstr = cmd->nextInstr; + BtlController_EmitReturnMonToBall(opponentFirstBattler, B_COMM_TO_CONTROLLER, FALSE); + MarkBattlerForControllerExec(opponentFirstBattler); } - else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_ReturnOpponentMon2ToBall(void) +{ + NATIVE_ARGS(); + if (gBattlersCount > opponentSecondBattler) { - if (TryTidyUpClear(gBattlerAttacker, FALSE)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; + if (IsBattlerAlive(opponentSecondBattler)) + { + BtlController_EmitReturnMonToBall(opponentSecondBattler, B_COMM_TO_CONTROLLER, FALSE); + MarkBattlerForControllerExec(opponentSecondBattler); + } } + gBattlescriptCurrInstr = cmd->nextInstr; } +#undef opponentFirstBattler +#undef opponentSecondBattler -void BS_TryGulpMissile(void) +void BS_VolumeDown(void) { NATIVE_ARGS(); - - if ((gBattleMons[gBattlerAttacker].species == SPECIES_CRAMORANT) - && (gCurrentMove == MOVE_DIVE) - && (GetBattlerAbility(gBattlerAttacker) == ABILITY_GULP_MISSILE) - && TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_HP_PERCENT)) - gBattlescriptCurrInstr = BattleScript_GulpMissileFormChange; - else - gBattlescriptCurrInstr = cmd->nextInstr; + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x55); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryActivateGulpMissile(void) +void BS_VolumeUp(void) { NATIVE_ARGS(); - - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && IsBattlerAlive(gBattlerAttacker) - && IsBattlerTurnDamaged(gBattlerTarget) - && gBattleMons[gBattlerTarget].species != SPECIES_CRAMORANT - && GetBattlerAbility(gBattlerTarget) == ABILITY_GULP_MISSILE) - { - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) - { - gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; - if (gBattleStruct->moveDamage[gBattlerTarget] == 0) - gBattleStruct->moveDamage[gBattlerTarget] = 1; - } - - switch(gBattleMons[gBattlerTarget].species) - { - case SPECIES_CRAMORANT_GORGING: - BattleScriptPushCursor(); - TryBattleFormChange(gBattlerTarget, FORM_CHANGE_HIT_BY_MOVE); - gBattlescriptCurrInstr = BattleScript_GulpMissileGorging; - return; - case SPECIES_CRAMORANT_GULPING: - BattleScriptPushCursor(); - TryBattleFormChange(gBattlerTarget, FORM_CHANGE_HIT_BY_MOVE); - gBattlescriptCurrInstr = BattleScript_GulpMissileGulping; - return; - } - } + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryQuash(void) +void BS_SetAlreadyStatusedMoveAttempt(void) { - NATIVE_ARGS(const u8 *failInstr); - u32 i, j; + NATIVE_ARGS(); + gBattleStruct->battlerState[gBattlerAttacker].alreadyStatusedMoveAttempt = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; +} - // It's true if foe is faster, has a bigger priority, or switches - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - { - gBattlescriptCurrInstr = cmd->failInstr; +void BS_PalaceTryEscapeStatus(void) +{ + NATIVE_ARGS(); + if (BattlePalace_TryEscapeStatus(gBattlerAttacker)) return; - } - - // If the above condition is not true, it means we are faster than the foe, so we can set the quash bit - gProtectStructs[gBattlerTarget].quash = TRUE; - - // this implementation assumes turn order is correct when using Quash - i = GetBattlerTurnOrderNum(gBattlerTarget); - for (j = i + 1; j < gBattlersCount; j++) - { - // Gen 7- config makes target go last so that the order of quash targets is kept for the correct turn order - // Gen 8+ config alters Turn Order of the target according to speed, dynamic speed should handle the rest - if (B_QUASH_TURN_ORDER < GEN_8 || GetWhichBattlerFaster(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE) == -1) - SwapTurnOrder(i, j); - else - break; - i++; - } gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_CopyFoesStatIncrease(void) +void BS_SetTeleportOutcome(void) { - NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - u32 stat = 0; + NATIVE_ARGS(u8 battler); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gQueuedStatBoosts[battler].stats == 0) + // Don't end the battle if one of the wild mons teleported from the wild double battle + // and its partner is still alive. + if (!IsOnPlayerSide(battler) && IsBattlerAlive(BATTLE_PARTNER(battler))) { - for (stat = 0; stat < (NUM_BATTLE_STATS - 1); stat++) - { - if (gQueuedStatBoosts[battler].statChanges[stat] != 0) - gQueuedStatBoosts[battler].stats |= (1 << stat); - } - gBattlescriptCurrInstr = cmd->jumpInstr; - return; + gAbsentBattlerFlags |= 1u << battler; + gHitMarker |= HITMARKER_FAINTED(battler); + gBattleMons[battler].hp = 0; + SetMonData(GetBattlerMon(battler), MON_DATA_HP, &gBattleMons[battler].hp); + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]); + FaintClearSetData(battler); } - - for (stat = 0; stat < (NUM_BATTLE_STATS - 1); stat++) + else if (IsOnPlayerSide(battler)) { - if (gQueuedStatBoosts[battler].stats & (1 << stat)) - { - if (gQueuedStatBoosts[battler].statChanges[stat] <= -1) - SET_STATCHANGER(stat + 1, abs(gQueuedStatBoosts[battler].statChanges[stat]), TRUE); - else - SET_STATCHANGER(stat + 1, gQueuedStatBoosts[battler].statChanges[stat], FALSE); - - gQueuedStatBoosts[battler].stats &= ~(1 << stat); - gBattlerTarget = battler; - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } + gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; } - gBattlescriptCurrInstr = cmd->jumpInstr; + else + { + gBattleOutcome = B_OUTCOME_MON_TELEPORTED; + } + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_RemoveWeather(void) +void BS_PlayTrainerDefeatedMusic(void) { NATIVE_ARGS(); - RemoveAllWeather(); + BtlController_EmitPlayFanfareOrBGM(gBattlerAttacker, B_COMM_TO_CONTROLLER, MUS_VICTORY_TRAINER, TRUE); + MarkBattlerForControllerExec(gBattlerAttacker); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ApplyTerastallization(void) +void BS_StatTextBuffer(void) { NATIVE_ARGS(); - ApplyBattlerVisualsForTeraAnim(gBattlerAttacker); + PREPARE_STAT_BUFFER(gBattleTextBuff1, gBattleCommunication[0]); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_DamageToQuarterTargetHP(void) +void BS_SwitchinAbilities(void) { - NATIVE_ARGS(); - gBattleStruct->moveDamage[gBattlerTarget] = (3 * GetNonDynamaxHP(gBattlerTarget)) / 4; - if (gBattleStruct->moveDamage[gBattlerTarget] == 0) - gBattleStruct->moveDamage[gBattlerTarget] = 1; - + NATIVE_ARGS(u8 battler); + u32 battler = GetBattlerForBattleScript(cmd->battler); gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, battler, 0, 0, 0); + AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battler, 0, 0, 0); + AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0); + AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, battler, 0, 0, 0); + + if (gBattleWeather & B_WEATHER_ANY && HasWeatherEffect()) + AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0); + + if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); } -void BS_JumpIfSleepClause(void) +void BS_InstantHpDrop(void) { - NATIVE_ARGS(const u8 *jumpInstr); + NATIVE_ARGS(); + BtlController_EmitHealthBarUpdate(gBattlerAttacker, B_COMM_TO_CONTROLLER, INSTANT_HP_BAR_DROP); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; +} - // Can freely sleep own partner - if (IsDoubleBattle() && IsSleepClauseEnabled() && IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) - { - gBattleStruct->battlerState[gBattlerTarget].sleepClauseEffectExempt = TRUE; - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - gBattleStruct->battlerState[gBattlerTarget].sleepClauseEffectExempt = FALSE; - // Can't sleep if clause is active otherwise - if (IsSleepClauseActiveForSide(GetBattlerSide(gBattlerTarget))) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; +void BS_ClearStatus(void) +{ + NATIVE_ARGS(); + gBattleMons[gBattlerAttacker].status1 = 0; + BtlController_EmitSetMonData( + gBattlerAttacker, + B_COMM_TO_CONTROLLER, + REQUEST_STATUS_BATTLE, + 0, + sizeof(gBattleMons[gBattlerAttacker].status1), + &gBattleMons[gBattlerAttacker].status1); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_FickleBeamDamageCalculation(void) +// NEW BATCH + +void BS_RestoreMovePp(void) { NATIVE_ARGS(); - gBattleStruct->fickleBeamBoosted = FALSE; - - if (RandomPercentage(RNG_FICKLE_BEAM, 30)) - { - gBattleStruct->fickleBeamBoosted = TRUE; - gBattlescriptCurrInstr = BattleScript_FickleBeamDoubled; - } - else + u32 moveIndex; + u32 data[MAX_MON_MOVES + 1]; + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - gBattlescriptCurrInstr = cmd->nextInstr; + gBattleMons[gBattlerAttacker].pp[moveIndex] = CalculatePPWithBonus(gBattleMons[gBattlerAttacker].moves[moveIndex], gBattleMons[gBattlerAttacker].ppBonuses, moveIndex); + data[moveIndex] = gBattleMons[gBattlerAttacker].pp[moveIndex]; } + data[moveIndex] = gBattleMons[gBattlerAttacker].ppBonuses; + BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_PP_DATA_BATTLE, 0, 5, data); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryTarShot(void) +void BS_TryActivateReceiver(void) { - NATIVE_ARGS(const u8 *failInstr); - if (gDisableStructs[gBattlerTarget].tarShot || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA) - { - gBattlescriptCurrInstr = cmd->failInstr; + NATIVE_ARGS(u8 battler); + u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattlerAbility = BATTLE_PARTNER(battler); + u32 partnerAbility = GetBattlerAbility(gBattlerAbility); + if (IsBattlerAlive(gBattlerAbility) + && (partnerAbility == ABILITY_RECEIVER || partnerAbility == ABILITY_POWER_OF_ALCHEMY) + && GetBattlerHoldEffectIgnoreAbility(battler) != HOLD_EFFECT_ABILITY_SHIELD + && !gAbilitiesInfo[gBattleMons[battler].ability].cantBeCopied) + { + gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[battler].ability; // re-using the variable for trace + gBattleScripting.battler = battler; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_ReceiverActivates; } else { - gDisableStructs[gBattlerTarget].tarShot = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; } } -void BS_CanTarShotWork(void) +void BS_TryActivateSoulheart(void) +{ + NATIVE_ARGS(); + while (gBattleStruct->soulheartBattlerId < gBattlersCount) + { + gBattleScripting.battler = gBattleStruct->soulheartBattlerId++; + u32 ability = GetBattlerAbility(gBattleScripting.battler); + if (ability == ABILITY_SOUL_HEART + && IsBattlerAlive(gBattleScripting.battler) + && !NoAliveMonsForEitherParty() + && CompareStat(gBattleScripting.battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN, ability)) + { + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); + BattleScriptCall(BattleScript_ScriptingAbilityStatRaise); + return; + } + } + gBattleStruct->soulheartBattlerId = 0; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_PlayMoveAnimation(void) +{ + NATIVE_ARGS(u16 move); + BtlController_EmitMoveAnimation( + gBattlerAttacker, + B_COMM_TO_CONTROLLER, + cmd->move, + gBattleScripting.animTurn, + 0, + 0, + gBattleMons[gBattlerAttacker].friendship, + &gDisableStructs[gBattlerAttacker], + gMultiHitCounter); + MarkBattlerForControllerExec(gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SetLuckyChant(void) { NATIVE_ARGS(const u8 *failInstr); - // Tar Shot will fail if it's already been used on the target or if its speed can't be lowered further - if (!gDisableStructs[gBattlerTarget].tarShot - && CompareStat(gBattlerTarget, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) + u32 side = GetBattlerSide(gBattlerAttacker); + if (!(gSideStatuses[side] & SIDE_STATUS_LUCKY_CHANT)) + { + gSideStatuses[side] |= SIDE_STATUS_LUCKY_CHANT; + gSideTimers[side].luckyChantTimer = 5; gBattlescriptCurrInstr = cmd->nextInstr; + } else + { gBattlescriptCurrInstr = cmd->failInstr; + } } -void BS_JumpIfBlockedBySoundproof(void) +void BS_TryEntrainment(void) { - NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); - if (IsSoundMove(gCurrentMove) && GetBattlerAbility(battler) == ABILITY_SOUNDPROOF) + NATIVE_ARGS(const u8 *failInstr); + if (gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeCopied + || gAbilitiesInfo[gBattleMons[gBattlerTarget].ability].cantBeOverwritten) { - gLastUsedAbility = ABILITY_SOUNDPROOF; - gBattlescriptCurrInstr = cmd->jumpInstr; - RecordAbilityBattle(battler, gLastUsedAbility); - gBattlerAbility = battler; + RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (CanAbilityShieldActivateForBattler(gBattlerTarget)) + { + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); } else { - gBattlescriptCurrInstr = cmd->nextInstr; + if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability + || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + RemoveAbilityFlags(gBattlerTarget); + gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = gBattleMons[gBattlerAttacker].ability; + gBattlescriptCurrInstr = cmd->nextInstr; + } } } -void BS_SetMagicCoatTarget(void) +void BS_SetLastUsedAbility(void) { NATIVE_ARGS(); - gBattleStruct->attackerBeforeBounce = gBattleScripting.battler = gBattlerAttacker; - gBattlerAttacker = gBattlerTarget; - gBattlerTarget = gBattleStruct->attackerBeforeBounce; - HandleMoveTargetRedirection(); - + gLastUsedAbility = gBattleMons[gBattlerTarget].ability; gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TeatimeInvul(void) +void BS_InvertStatStages(void) { - NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - - u32 battler = GetBattlerForBattleScript(cmd->battler); - if (GetItemPocket(gBattleMons[battler].item) == POCKET_BERRIES && !(gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->jumpInstr; + NATIVE_ARGS(); + for (u32 i = 0; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[gBattlerTarget].statStages[i] < DEFAULT_STAT_STAGE) // Negative becomes positive. + gBattleMons[gBattlerTarget].statStages[i] = DEFAULT_STAT_STAGE + (DEFAULT_STAT_STAGE - gBattleMons[gBattlerTarget].statStages[i]); + else if (gBattleMons[gBattlerTarget].statStages[i] > DEFAULT_STAT_STAGE) // Positive becomes negative. + gBattleMons[gBattlerTarget].statStages[i] = DEFAULT_STAT_STAGE - (gBattleMons[gBattlerTarget].statStages[i] - DEFAULT_STAT_STAGE); + } + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TeatimeTargets(void) +void BS_TryElectrify(void) { NATIVE_ARGS(const u8 *failInstr); - u32 count = 0, i; - - for (i = 0; i < gBattlersCount; i++) + if (HasBattlerActedThisTurn(gBattlerTarget)) { - if (IsTeatimeAffected(i)) - count++; - } - if (count == 0) gBattlescriptCurrInstr = cmd->failInstr; + } else + { + gBattleMons[gBattlerTarget].volatiles.electrified = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; + } } -void BS_TryWindRiderPower(void) +void BS_TrySoak(void) { - NATIVE_ARGS(u8 battler, const u8 *failInstr); - - u32 battler = GetBattlerForBattleScript(cmd->battler); - u16 ability = GetBattlerAbility(battler); - if (IsBattlerAlly(battler, gBattlerAttacker) - && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) + NATIVE_ARGS(const u8 *failInstr); + enum Type types[3]; + GetBattlerTypes(gBattlerTarget, FALSE, types); + enum Type typeToSet = GetMoveArgType(gCurrentMove); + if ((types[0] == typeToSet && types[1] == typeToSet) + || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA) { - gLastUsedAbility = ability; - RecordAbilityBattle(battler, gLastUsedAbility); - gBattlerAbility = gBattleScripting.battler = battler; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattlescriptCurrInstr = cmd->failInstr; + SET_BATTLER_TYPE(gBattlerTarget, typeToSet); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, typeToSet); + gBattlescriptCurrInstr = cmd->nextInstr; } } -void BS_ActivateWeatherChangeAbilities(void) +void BS_HandleFormChange(void) { - NATIVE_ARGS(u8 battler); - + NATIVE_ARGS(u8 battler, u8 case_); u32 battler = GetBattlerForBattleScript(cmd->battler); - gBattlescriptCurrInstr = cmd->nextInstr; - AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0); -} - -void BS_ActivateTerrainChangeAbilities(void) -{ - NATIVE_ARGS(u8 battler); + struct Pokemon *mon = GetBattlerMon(battler); - u32 battler = GetBattlerForBattleScript(cmd->battler); + if (cmd->case_ == 0) // Change species. + { + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); + MarkBattlerForControllerExec(battler); + } + else if (cmd->case_ == 1) // Change stats. + { + RecalcBattlerStats(battler, mon, FALSE); + } + else // Update healthbox. + { + UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_ALL); + } gBattlescriptCurrInstr = cmd->nextInstr; - AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); } -void BS_StoreHealingWish(void) +void BS_TryAutotomize(void) { - NATIVE_ARGS(u8 battler); - - u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gCurrentMove == MOVE_LUNAR_DANCE) - gBattleStruct->battlerState[battler].storedLunarDance = TRUE; + NATIVE_ARGS(const u8 *failInstr); + if (GetBattlerWeight(gBattlerAttacker) > 1) + { + gDisableStructs[gBattlerAttacker].autotomizeCount++; + gBattlescriptCurrInstr = cmd->nextInstr; + } else - gBattleStruct->battlerState[battler].storedHealingWish = TRUE; - gBattlescriptCurrInstr = cmd->nextInstr; + { + gBattlescriptCurrInstr = cmd->failInstr; + } } -void BS_TryRevivalBlessing(void) +void BS_TryInstruct(void) { NATIVE_ARGS(const u8 *failInstr); - u8 index = GetFirstFaintedPartyIndex(gBattlerAttacker); - - // Move fails if there are no battlers to revive. - if (index == PARTY_SIZE) + u16 move = gLastPrintedMoves[gBattlerTarget]; + if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || MoveHasAdditionalEffectSelf(move, MOVE_EFFECT_RECHARGE) + || IsMoveInstructBanned(move) + || gBattleMoveEffects[GetMoveEffect(move)].twoTurnEffect + || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) + || IsZMove(move) + || IsMaxMove(move)) { gBattlescriptCurrInstr = cmd->failInstr; - return; } - - // Battler selected! Revive and go to next instruction. - if (gSelectedMonPartyId != PARTY_SIZE) + else { - struct Pokemon *party = GetBattlerParty(gBattlerAttacker); - - u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 1u << gSelectedMonPartyId, sizeof(hp), &hp); - MarkBattlerForControllerExec(gBattlerAttacker); - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES)); - - // If an on-field battler is revived, it needs to be sent out again. - if (IsDoubleBattle() && - gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) + gSpecialStatuses[gBattlerTarget].instructedChosenTarget = gBattleStruct->moveTarget[gBattlerTarget] | 0x4; + gCalledMove = move; + u32 moveIndex; + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - u32 i = BATTLE_PARTNER(gBattlerAttacker); - gAbsentBattlerFlags &= ~(1u << i); - gBattleStruct->monToSwitchIntoId[i] = gSelectedMonPartyId; - gBattleScripting.battler = i; - gBattleCommunication[MULTIUSE_STATE] = TRUE; + if (gBattleMons[gBattlerTarget].moves[moveIndex] == gCalledMove) + { + gCurrMovePos = moveIndex; + moveIndex = MAX_MON_MOVES; + break; + } + } + if (moveIndex != MAX_MON_MOVES || gBattleMons[gBattlerTarget].pp[gCurrMovePos] == 0) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gBattleScripting.battler = gBattlerAttacker; // for message + gEffectBattler = gBattleStruct->lastMoveTarget[gBattlerTarget]; + gBattlescriptCurrInstr = cmd->nextInstr; } - - gSelectedMonPartyId = PARTY_SIZE; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - // Open party menu, wait to go to next instruction. - BtlController_EmitChoosePokemon(gBattlerAttacker, B_COMM_TO_CONTROLLER, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); - MarkBattlerForControllerExec(gBattlerAttacker); } } -void BS_JumpIfCommanderActive(void) +void BS_ShowAbilityPopup(void) { - NATIVE_ARGS(const u8 *jumpInstr); + NATIVE_ARGS(); + CreateAbilityPopUp(gBattlerAbility, gBattleMons[gBattlerAbility].ability, (IsDoubleBattle()) != 0); + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (gBattleStruct->commanderActive[gBattlerTarget] != SPECIES_NONE) - gBattlescriptCurrInstr = cmd->jumpInstr; - else if (gStatuses3[gBattlerTarget] & STATUS3_COMMANDER) - gBattlescriptCurrInstr = cmd->jumpInstr; - else +void BS_UpdateAbilityPopup(void) +{ + NATIVE_ARGS(); + UpdateAbilityPopup(gBattlerAbility); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfTargetAlly(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + if (!IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) gBattlescriptCurrInstr = cmd->nextInstr; + else + gBattlescriptCurrInstr = cmd->jumpInstr; } -static void UpdatePokeFlutePartyStatus(struct Pokemon* party, u8 position) +void BS_TryPsychoShift(void) { - s32 i; - u8 battler; - u32 monToCheck, status; - u16 species, abilityNum; - monToCheck = 0; - for (i = 0; i < PARTY_SIZE; i++) + NATIVE_ARGS(const u8 *failInstr, const u8 *sleepClauseFailInstr); + u32 targetAbility = GetBattlerAbility(gBattlerTarget); + // Psycho shift works + if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), targetAbility)) { - species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); - abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); - status = GetMonData(&party[i], MON_DATA_STATUS); - if (species != SPECIES_NONE - && species != SPECIES_EGG - && status & AILMENT_FNT - && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF) - monToCheck |= (1 << i); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; } - if (monToCheck) + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_TOXIC_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), targetAbility)) { - battler = GetBattlerAtPosition(position); - status = 0; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, monToCheck, 4, &status); - MarkBattlerForControllerExec(battler); gBattleCommunication[MULTISTRING_CHOOSER] = 1; } -} - -void BS_CheckPokeFlute(void) -{ - NATIVE_ARGS(); - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - - s32 i; - for (i = 0; i < gBattlersCount; i++) + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_BURN) && CanBeBurned(gBattlerAttacker, gBattlerTarget, targetAbility)) { - if (GetBattlerAbility(i) != ABILITY_SOUNDPROOF) - { - gBattleMons[i].status1 &= ~STATUS1_SLEEP; - gBattleMons[i].status2 &= ~STATUS2_NIGHTMARE; - } + gBattleCommunication[MULTISTRING_CHOOSER] = 2; } - - UpdatePokeFlutePartyStatus(gPlayerParty, B_POSITION_PLAYER_LEFT); - UpdatePokeFlutePartyStatus(gEnemyParty, B_POSITION_OPPONENT_LEFT); - + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && CanBeParalyzed(gBattlerAttacker, gBattlerTarget, targetAbility)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + } + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) && CanBeSlept(gBattlerAttacker, gBattlerTarget, targetAbility, BLOCKED_BY_SLEEP_CLAUSE)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + } + else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) && CanBeFrozen(gBattlerAttacker, gBattlerTarget, targetAbility)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else if (IsSleepClauseActiveForSide(GetBattlerSide(gBattlerTarget))) + { + gBattlescriptCurrInstr = cmd->sleepClauseFailInstr; + return; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + return; + } + gBattleMons[gBattlerTarget].status1 = gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY; + BtlController_EmitSetMonData( + gBattlerTarget, + B_COMM_TO_CONTROLLER, + REQUEST_STATUS_BATTLE, + 0, + sizeof(gBattleMons[gBattlerTarget].status1), + &gBattleMons[gBattlerTarget].status1); + MarkBattlerForControllerExec(gBattlerTarget); + TryActivateSleepClause(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget]); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_WaitFanfare(void) +void BS_CureStatus(void) { - NATIVE_ARGS(); - - if (!IsFanfareTaskInactive()) - return; + NATIVE_ARGS(u8 battler); + u32 battler = GetBattlerForBattleScript(cmd->battler); - gBattlescriptCurrInstr = cmd->nextInstr; -} + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); -void BS_SetBeakBlast(void) -{ - NATIVE_ARGS(); - gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; + gBattleMons[battler].status1 = 0; + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1); + MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_RemoveTerrain(void) +void BS_PowerTrick(void) { NATIVE_ARGS(); - RemoveAllTerrains(); + u32 temp; + gBattleMons[gBattlerAttacker].volatiles.powerTrick = !gBattleMons[gBattlerAttacker].volatiles.powerTrick; + SWAP(gBattleMons[gBattlerAttacker].attack, gBattleMons[gBattlerAttacker].defense, temp); gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TrySpectralThiefSteal(void) +void BS_TryAfterYou(void) { - NATIVE_ARGS(const u8 *jumpInstr); - - if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + NATIVE_ARGS(const u8 *failInstr); + if (ChangeOrderTargetAfterAttacker()) { + gSpecialStatuses[gBattlerTarget].afterYou = 1; gBattlescriptCurrInstr = cmd->nextInstr; - return; } - - bool32 contrary = GetBattlerAbility(gBattlerAttacker) == ABILITY_CONTRARY; - gBattleStruct->stolenStats[0] = 0; // Stats to steal. - gBattleScripting.animArg1 = 0; - for (u32 stat = STAT_ATK; stat < NUM_BATTLE_STATS; stat++) + else { - if (gBattleMons[gBattlerTarget].statStages[stat] > DEFAULT_STAT_STAGE && gBattleMons[gBattlerAttacker].statStages[stat] != MAX_STAT_STAGE) - { - bool32 byTwo = FALSE; - - gBattleStruct->stolenStats[0] |= (1 << (stat)); - // Store by how many stages to raise the stat. - gBattleStruct->stolenStats[stat] = gBattleMons[gBattlerTarget].statStages[stat] - DEFAULT_STAT_STAGE; - - while (gBattleMons[gBattlerAttacker].statStages[stat] + gBattleStruct->stolenStats[stat] > MAX_STAT_STAGE) - gBattleStruct->stolenStats[stat]--; - - gBattleMons[gBattlerTarget].statStages[stat] = DEFAULT_STAT_STAGE; - - if (gBattleStruct->stolenStats[stat] >= 2) - byTwo++; - - if (gBattleScripting.animArg1 == 0) - { - if (byTwo) - gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS2 : STAT_ANIM_PLUS2) + stat; - else - gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MINUS1 : STAT_ANIM_PLUS1) + stat; - } - else - { - if (byTwo) - gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS2 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = (contrary ? STAT_ANIM_MULTIPLE_MINUS1 : STAT_ANIM_MULTIPLE_PLUS1); - } - } + gBattlescriptCurrInstr = cmd->failInstr; } +} - if (gBattleStruct->stolenStats[0] != 0) - gBattlescriptCurrInstr = cmd->jumpInstr; +void BS_TryBestow(void) +{ + NATIVE_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerAttacker].item == ITEM_NONE + || gBattleMons[gBattlerTarget].item != ITEM_NONE + || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) + || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item) + || GetBattlerAbility(gBattlerAttacker) == ABILITY_STICKY_HOLD + || gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget])) + { + gBattlescriptCurrInstr = cmd->failInstr; + } else + { + BestowItem(gBattlerAttacker, gBattlerTarget); gBattlescriptCurrInstr = cmd->nextInstr; + } } -void BS_SpectralThiefPrintStats(void) +void BS_HandleTrainerSlideMsg(void) { - NATIVE_ARGS(); - - for (u32 stat = STAT_ATK; stat < NUM_BATTLE_STATS; stat++) + NATIVE_ARGS(u8 battler, u8 case_); + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (cmd->case_ == PRINT_SLIDE_MESSAGE) { - if (gBattleStruct->stolenStats[0] & (1u << stat)) + BtlController_EmitPrintString(battler, B_COMM_TO_CONTROLLER, STRINGID_TRAINERSLIDE); + MarkBattlerForControllerExec(battler); + } + else if (cmd->case_ == RESTORE_BATTLER_SLIDE_CONTROL) + { + if (IsBattlerAlive(battler)) { - gBattleStruct->stolenStats[0] &= ~(1u << stat); - SET_STATCHANGER(stat, gBattleStruct->stolenStats[stat], FALSE); - if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), - stat, - MOVE_EFFECT_CERTAIN | MOVE_EFFECT_AFFECTS_USER, NULL) == STAT_CHANGE_WORKED) - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_StatUpMsg; - return; - } + SetBattlerShadowSpriteCallback(battler, gBattleMons[battler].species); + BattleLoadMonSpriteGfx(GetBattlerMon(battler), battler); + } + u32 partner = BATTLE_PARTNER(battler); + if (IsBattlerAlive(partner)) + { + SetBattlerShadowSpriteCallback(partner, gBattleMons[partner].species); + BattleLoadMonSpriteGfx(GetBattlerMon(partner), partner); } } gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_SetMoveResultFlags(void) -{ - NATIVE_ARGS(u16 value); - gBattleStruct->moveResultFlags[gBattlerTarget] |= cmd->value; - gBattlescriptCurrInstr = cmd->nextInstr; -} - -void BS_ClearMoveResultFlags(void) -{ - NATIVE_ARGS(u16 value); - gBattleStruct->moveResultFlags[gBattlerTarget] &= ~(cmd->value); - gBattlescriptCurrInstr = cmd->nextInstr; -} - -void BS_JumpIfMoveResultFlags(void) +void BS_TryTrainerSlideMsgFirstOff(void) { - NATIVE_ARGS(u16 value, const u8 *jumpInstr); - - if (gBattleStruct->moveResultFlags[gBattlerTarget] & cmd->value) - gBattlescriptCurrInstr = cmd->jumpInstr; + NATIVE_ARGS(u8 battler); + u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 shouldDoTrainerSlide = 0; + if ((shouldDoTrainerSlide = ShouldDoTrainerSlide(battler, TRAINER_SLIDE_PLAYER_LANDS_FIRST_DOWN))) + { + gBattleScripting.battler = battler; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = (shouldDoTrainerSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); + } else + { gBattlescriptCurrInstr = cmd->nextInstr; + } } -void BS_JumpIfCriticalHit(void) +void BS_TryTrainerSlideMsgLastOn(void) { - NATIVE_ARGS(const u8 *jumpInstr); - - if (gSpecialStatuses[gBattlerTarget].criticalHit) - gBattlescriptCurrInstr = cmd->jumpInstr; + NATIVE_ARGS(u8 battler); + u32 shouldDoTrainerSlide = 0; + u32 battler = GetBattlerForBattleScript(cmd->battler); + if ((shouldDoTrainerSlide = ShouldDoTrainerSlide(battler, TRAINER_SLIDE_LAST_SWITCHIN))) + { + gBattleScripting.battler = battler; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = (shouldDoTrainerSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); + } else + { gBattlescriptCurrInstr = cmd->nextInstr; + } } -void BS_SwapStats(void) +// Potential bug with failing message and missed result on wrong battler +void BS_SetAuroraVeil(void) { - NATIVE_ARGS(u8 stat); - - u32 stat = cmd->stat; - u32 temp; - - switch (stat) + NATIVE_ARGS(); + u32 side = GetBattlerSide(gBattlerAttacker); + if (gSideStatuses[side] & SIDE_STATUS_AURORA_VEIL) { - case STAT_HP: - SWAP(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerTarget].hp, temp); - break; - case STAT_ATK: - SWAP(gBattleMons[gBattlerAttacker].attack, gBattleMons[gBattlerTarget].attack, temp); - break; - case STAT_DEF: - SWAP(gBattleMons[gBattlerAttacker].defense, gBattleMons[gBattlerTarget].defense, temp); - break; - case STAT_SPEED: - SWAP(gBattleMons[gBattlerAttacker].speed, gBattleMons[gBattlerTarget].speed, temp); - break; - case STAT_SPATK: - SWAP(gBattleMons[gBattlerAttacker].spAttack, gBattleMons[gBattlerTarget].spAttack, temp); - break; - case STAT_SPDEF: - SWAP(gBattleMons[gBattlerAttacker].spDefense, gBattleMons[gBattlerTarget].spDefense, temp); - break; + gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gSideStatuses[side] |= SIDE_STATUS_AURORA_VEIL; + if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = 8; + else + gSideTimers[GetBattlerSide(gBattlerAttacker)].auroraVeilTimer = 5; + + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 5; } - PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); gBattlescriptCurrInstr = cmd->nextInstr; } -static void TrySetParalysis(const u8 *nextInstr, const u8 *failInstr) +void BS_TryThirdType(void) { - if (CanBeParalyzed(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget))) + NATIVE_ARGS(const u8 *failInstr); + u32 type = GetMoveArgType(gCurrentMove); + if (IS_BATTLER_OF_TYPE(gBattlerTarget, type) || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA) { - gBattleMons[gBattlerTarget].status1 |= STATUS1_PARALYSIS; - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - gEffectBattler = gBattlerTarget; - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); - MarkBattlerForControllerExec(gBattlerTarget); - gBattlescriptCurrInstr = nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattlescriptCurrInstr = failInstr; + gBattleMons[gBattlerTarget].types[2] = type; + PREPARE_TYPE_BUFFER(gBattleTextBuff1, type); + gBattlescriptCurrInstr = cmd->nextInstr; } } -static void TrySetPoison(const u8 *nextInstr, const u8 *failInstr) +void BS_DestroyAbilityPopup(void) { - if (CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerAbility(gBattlerTarget))) + NATIVE_ARGS(); + for (u32 battler = 0; battler < gBattlersCount; battler++) + DestroyAbilityPopUp(battler); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_GetTotemBoost(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + u32 battler = gBattlerAttacker; + if (gQueuedStatBoosts[battler].stats == 0) { - gBattleMons[gBattlerTarget].status1 |= STATUS1_POISON; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gEffectBattler = gBattlerTarget; - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); - MarkBattlerForControllerExec(gBattlerTarget); - gBattlescriptCurrInstr = nextInstr; + gBattlescriptCurrInstr = cmd->nextInstr; // stats done, exit } else { - gBattlescriptCurrInstr = failInstr; + for (u32 i = 0; i < (NUM_BATTLE_STATS - 1); i++) + { + if (gQueuedStatBoosts[battler].stats & (1 << i)) + { + if (gQueuedStatBoosts[battler].statChanges[i] <= -1) + SET_STATCHANGER(i + 1, abs(gQueuedStatBoosts[battler].statChanges[i]), TRUE); + else + SET_STATCHANGER(i + 1, gQueuedStatBoosts[battler].statChanges[i], FALSE); + + gQueuedStatBoosts[battler].stats &= ~(1 << i); + gBattleScripting.battler = battler; + gBattlerTarget = battler; + if (gQueuedStatBoosts[battler].stats & 0x80) + { + gQueuedStatBoosts[battler].stats &= ~0x80; // set 'aura flared to life' flag + gBattlescriptCurrInstr = BattleScript_TotemFlaredToLife; + } + else + { + gBattlescriptCurrInstr = cmd->jumpInstr; // do boost + } + return; + } + } + gBattlescriptCurrInstr = cmd->nextInstr; // exit if loop failed (failsafe) } } -static void TrySetSleep(const u8 *nextInstr, const u8 *failInstr) +void BS_ActivateItemEffects(void) { - if (CanBeSlept(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE)) + NATIVE_ARGS(); + for (u32 battler = 0; battler < gBattlersCount; battler++) { - if (B_SLEEP_TURNS >= GEN_5) - gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 3) + 2); - else - gBattleMons[gBattlerTarget].status1 |= STATUS1_SLEEP_TURN((Random() % 4) + 3); + if (!IsBattlerAlive(battler)) + continue; - TryActivateSleepClause(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget]); - gBattleCommunication[MULTISTRING_CHOOSER] = 4; - gEffectBattler = gBattlerTarget; - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].status1), &gBattleMons[gBattlerTarget].status1); - MarkBattlerForControllerExec(gBattlerTarget); - gBattlescriptCurrInstr = nextInstr; + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsForceTriggerItemActivation)) + return; } - else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryRoomService(void) +{ + NATIVE_ARGS(u8 battler, const u8 *failInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); + if (holdEffect == HOLD_EFFECT_ROOM_SERVICE && ItemBattleEffects(battler, 0, holdEffect, IsOnEffectActivation)) + return; + gBattlescriptCurrInstr = cmd->failInstr; +} + +void BS_TryTerrainSeed(void) +{ + NATIVE_ARGS(u8 battler, const u8 *failInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); + if (holdEffect == HOLD_EFFECT_TERRAIN_SEED && ItemBattleEffects(battler, 0, holdEffect, IsOnEffectActivation)) + return; + gBattlescriptCurrInstr = cmd->failInstr; +} + +void BS_MakeInvisible(void) +{ + NATIVE_ARGS(u8 battler); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (gBattleControllerExecFlags) + return; + + BtlController_EmitSpriteInvisibility(battler, B_COMM_TO_CONTROLLER, TRUE); + MarkBattlerForControllerExec(battler); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfTeamHealthy(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + u32 battler = gBattlerAttacker; + if ((IsDoubleBattle()) && IsBattlerAlive(BATTLE_PARTNER(battler))) { - gBattlescriptCurrInstr = failInstr; + u8 partner = BATTLE_PARTNER(battler); + if ((gBattleMons[battler].hp == gBattleMons[battler].maxHP && !(gBattleMons[battler].status1 & STATUS1_ANY)) + && (gBattleMons[partner].hp == gBattleMons[partner].maxHP && !(gBattleMons[partner].status1 & STATUS1_ANY))) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + } + else // single battle + { + if (gBattleMons[battler].hp == gBattleMons[battler].maxHP && !(gBattleMons[battler].status1 & STATUS1_ANY)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; } } -void BS_TrySetParalysis(void) -{ - NATIVE_ARGS(const u8 *failInstr); - TrySetParalysis(cmd->nextInstr, cmd->failInstr); -} - -void BS_TrySetPoison(void) +void BS_TryHealQuarterHealth(void) { - NATIVE_ARGS(const u8 *failInstr); - TrySetPoison(cmd->nextInstr, cmd->failInstr); + NATIVE_ARGS(u8 battler, const u8 *failInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / 4); + if (gBattleMons[battler].hp == gBattleMons[battler].maxHP) + gBattlescriptCurrInstr = cmd->failInstr; // fail + else + gBattlescriptCurrInstr = cmd->nextInstr; // can heal } -void BS_TrySetPoisonParalyzis(void) +void BS_JumpIfUnder200(void) { - NATIVE_ARGS(const u8 *failInstr); - - static const u32 sStunShockEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON}; - u32 status = RandomElement(RNG_G_MAX_STUN_SHOCK, sStunShockEffects); - - if (status == STATUS1_PARALYSIS) - TrySetParalysis(cmd->nextInstr, cmd->failInstr); + NATIVE_ARGS(const u8 *jumpInstr); + // If the Pokemon is less than 200 kg, or weighing less than 441 lbs, then Sky Drop will work. Otherwise, it will fail. + if (GetBattlerWeight(gBattlerTarget) < 2000) + gBattlescriptCurrInstr = cmd->jumpInstr; else - TrySetPoison(cmd->nextInstr, cmd->failInstr); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TrySetEffectSpore(void) +void BS_SetSkyDrop(void) { - NATIVE_ARGS(const u8 *failInstr); - - static const u32 sBefuddleEffects[] = {STATUS1_PARALYSIS, STATUS1_POISON, STATUS1_SLEEP}; - u32 status = RandomElement(RNG_G_MAX_BEFUDDLE, sBefuddleEffects); + NATIVE_ARGS(); + gBattleMons[gBattlerTarget].volatiles.semiInvulnerable = STATE_SKY_DROP; + /* skyDropTargets holds the information of who is in a particular instance of Sky Drop. + This is needed in the case that multiple Pokemon use Sky Drop in the same turn or if + the target of a Sky Drop faints while in the air.*/ + gBattleStruct->skyDropTargets[gBattlerAttacker] = gBattlerTarget; + gBattleStruct->skyDropTargets[gBattlerTarget] = gBattlerAttacker; + + // End any multiturn effects caused by the target except VOLATILE_LOCK_CONFUSE + gBattleMons[gBattlerTarget].volatiles.multipleTurns = 0; + gBattleMons[gBattlerTarget].volatiles.uproarTurns = 0; + gBattleMons[gBattlerTarget].volatiles.bideTurns = 0; + gDisableStructs[gBattlerTarget].rolloutTimer = 0; + gDisableStructs[gBattlerTarget].furyCutterCounter = 0; + + // End any Follow Me/Rage Powder effects caused by the target + if (gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer != 0 && gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget == gBattlerTarget) + gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 0; - if (status == STATUS1_PARALYSIS) - TrySetParalysis(cmd->nextInstr, cmd->failInstr); - else if (status == STATUS1_POISON) - TrySetPoison(cmd->nextInstr, cmd->failInstr); - else - TrySetSleep(cmd->nextInstr, cmd->failInstr); + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TrySetConfusion(void) +void BS_ClearSkyDrop(void) { NATIVE_ARGS(const u8 *failInstr); - - if (CanBeConfused(gBattlerTarget)) + // Check to see if the initial target of this Sky Drop fainted before the 2nd turn of Sky Drop. + // If so, make the move fail. If not, clear all of the statuses and continue the move. + if (gBattleStruct->skyDropTargets[gBattlerAttacker] == SKY_DROP_NO_TARGET) { - gBattleMons[gBattlerTarget].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattleCommunication[MULTIUSE_STATE] = 1; - gEffectBattler = gBattlerTarget; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } else { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleStruct->skyDropTargets[gBattlerAttacker] = SKY_DROP_NO_TARGET; + gBattleStruct->skyDropTargets[gBattlerTarget] = SKY_DROP_NO_TARGET; + gBattleMons[gBattlerTarget].volatiles.semiInvulnerable = STATE_NONE; + gBattlescriptCurrInstr = cmd->nextInstr; } + + // Confuse target if they were in the middle of Petal Dance/Outrage/Thrash when targeted. + if (gBattleMons[gBattlerTarget].volatiles.lockConfusionTurns) + gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION; } -void BS_TrySetInfatuation(void) +void BS_SkyDropYawn(void) { - NATIVE_ARGS(const u8 *failInstr); - - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_INFATUATION) - && gBattleMons[gBattlerTarget].ability != ABILITY_OBLIVIOUS - && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL) - && AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)) + NATIVE_ARGS(); + if (gBattleStruct->skyDropTargets[gEffectBattler] != SKY_DROP_NO_TARGET && gBattleMons[gEffectBattler].volatiles.semiInvulnerable != STATE_SKY_DROP) { - gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker); - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - gBattleCommunication[MULTIUSE_STATE] = 2; - gEffectBattler = gBattlerTarget; - gBattlescriptCurrInstr = cmd->nextInstr; + // Set the target of Sky Drop as gEffectBattler + gEffectBattler = gBattleStruct->skyDropTargets[gEffectBattler]; + + // Clear skyDropTargets data + gBattleStruct->skyDropTargets[gBattleStruct->skyDropTargets[gEffectBattler]] = SKY_DROP_NO_TARGET; + gBattleStruct->skyDropTargets[gEffectBattler] = SKY_DROP_NO_TARGET; + + // If the target was in the middle of Outrage/Thrash/etc. when targeted by Sky Drop, confuse them on release and do proper animation + if (gBattleMons[gEffectBattler].volatiles.lockConfusionTurns && CanBeConfused(gEffectBattler)) + { + gBattleMons[gEffectBattler].volatiles.lockConfusionTurns = 0; + gBattlerAttacker = gEffectBattler; + gBattleMons[gBattlerTarget].volatiles.confusionTurns = ((Random()) % 4) + 2; + gBattlescriptCurrInstr = BattleScript_ThrashConfuses; + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } } else { - gBattlescriptCurrInstr = cmd->failInstr; + gBattlescriptCurrInstr = cmd->nextInstr; } } -void BS_TrySetEscapePrevention(void) +void BS_JumpIfPranksterBlocked(void) { - NATIVE_ARGS(const u8 *failInstr); - - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)) - { - gBattleMons[gBattlerTarget].status2 |= STATUS2_ESCAPE_PREVENTION; - gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - gEffectBattler = gBattlerTarget; - gBattlescriptCurrInstr = cmd->nextInstr; - } + NATIVE_ARGS(const u8 *jumpInstr); + if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gBattlerTarget, TRUE)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - gBattlescriptCurrInstr = cmd->failInstr; - } + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TrySetTorment(void) +void BS_TryToClearPrimalWeather(void) { - NATIVE_ARGS(const u8 *failInstr); + NATIVE_ARGS(); + bool32 shouldNotClear = FALSE; - if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT) - && !IsAbilityOnSide(gBattlerTarget, ABILITY_AROMA_VEIL)) + for (u32 i = 0; i < gBattlersCount; i++) { - gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT; - gDisableStructs[gBattlerTarget].tormentTimer = gBattleTurnCounter + 3; // 3 turns excluding current turn - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - gEffectBattler = gBattlerTarget; - gBattlescriptCurrInstr = cmd->nextInstr; + enum Ability ability = GetBattlerAbility(i); + if (((ability == ABILITY_DESOLATE_LAND && gBattleWeather & B_WEATHER_SUN_PRIMAL) + || (ability == ABILITY_PRIMORDIAL_SEA && gBattleWeather & B_WEATHER_RAIN_PRIMAL) + || (ability == ABILITY_DELTA_STREAM && gBattleWeather & B_WEATHER_STRONG_WINDS)) + && IsBattlerAlive(i)) + shouldNotClear = TRUE; } - else + if (gBattleWeather & B_WEATHER_SUN_PRIMAL && !shouldNotClear) { - gBattlescriptCurrInstr = cmd->failInstr; + gBattleWeather &= ~B_WEATHER_SUN_PRIMAL; + PrepareStringBattle(STRINGID_EXTREMESUNLIGHTFADED, gBattlerAttacker); + gBattleCommunication[MSG_DISPLAY] = 1; + } + else if (gBattleWeather & B_WEATHER_RAIN_PRIMAL && !shouldNotClear) + { + gBattleWeather &= ~B_WEATHER_RAIN_PRIMAL; + PrepareStringBattle(STRINGID_HEAVYRAINLIFTED, gBattlerAttacker); + gBattleCommunication[MSG_DISPLAY] = 1; + } + else if (gBattleWeather & B_WEATHER_STRONG_WINDS && !shouldNotClear) + { + gBattleWeather &= ~B_WEATHER_STRONG_WINDS; + PrepareStringBattle(STRINGID_STRONGWINDSDISSIPATED, gBattlerAttacker); + gBattleCommunication[MSG_DISPLAY] = 1; } + gBattlescriptCurrInstr = cmd->nextInstr; } -// Heals one-sixth of the target's HP, including for Dynamaxed targets. -void BS_HealOneSixth(void) +void BS_TryEndNeutralizingGas(void) { - NATIVE_ARGS(const u8* failInstr); - gBattleStruct->moveDamage[gBattlerTarget] = gBattleMons[gBattlerTarget].maxHP / 6; - if (gBattleStruct->moveDamage[gBattlerTarget] == 0) - gBattleStruct->moveDamage[gBattlerTarget] = 1; - gBattleStruct->moveDamage[gBattlerTarget] *= -1; + NATIVE_ARGS(); + if (gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved) + { + gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = FALSE; + gDisableStructs[gBattlerTarget].neutralizingGas = FALSE; + if (!IsNeutralizingGasOnField()) + { + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; + return; + } + } - if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) - gBattlescriptCurrInstr = cmd->failInstr; // fail - else - gBattlescriptCurrInstr = cmd->nextInstr; // can heal + gBattlescriptCurrInstr = cmd->nextInstr; } -// Recycles the target's item if it is specifically holding a berry. -void BS_TryRecycleBerry(void) +void BS_GetRototillerTargets(void) { NATIVE_ARGS(const u8 *failInstr); - u16* usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerTarget]][GetBattlerSide(gBattlerTarget)]; - if (gBattleMons[gBattlerTarget].item == ITEM_NONE - && gBattleStruct->changedItems[gBattlerTarget] == ITEM_NONE // Will not inherit an item - && GetItemPocket(*usedHeldItem) == POCKET_BERRIES) + u32 count = 0; + for (u32 battler = 0; battler < gBattlersCount; battler++) { - gLastUsedItem = *usedHeldItem; - *usedHeldItem = ITEM_NONE; - gBattleMons[gBattlerTarget].item = gLastUsedItem; - - BtlController_EmitSetMonData(gBattlerTarget, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[gBattlerTarget].item); - MarkBattlerForControllerExec(gBattlerTarget); - - gBattlescriptCurrInstr = cmd->nextInstr; + gSpecialStatuses[battler].rototillerAffected = FALSE; + if (IsRototillerAffected(battler)) + { + gSpecialStatuses[battler].rototillerAffected = TRUE; + count++; + } } + + if (count == 0) + gBattlescriptCurrInstr = cmd->failInstr; // Rototiller fails else - { - gBattlescriptCurrInstr = cmd->failInstr; - } + gBattlescriptCurrInstr = cmd->nextInstr; } -// Sets up sharp steel on the target's side. -void BS_SetSteelsurge(void) +void BS_JumpIfNotRototillerAffected(void) { - NATIVE_ARGS(const u8 *failInstr); - u8 targetSide = GetBattlerSide(gBattlerTarget); - if (gSideStatuses[targetSide] & SIDE_STATUS_STEELSURGE) + NATIVE_ARGS(const u8 *jumpInstr); + if (gSpecialStatuses[gBattlerTarget].rototillerAffected) { - gBattlescriptCurrInstr = cmd->failInstr; + gSpecialStatuses[gBattlerTarget].rototillerAffected = FALSE; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gSideStatuses[targetSide] |= SIDE_STATUS_STEELSURGE; - gSideTimers[targetSide].steelsurgeAmount = 1; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->jumpInstr; // Unaffected by rototiller - print STRINGID_NOEFFECTONTARGET } } -void BS_JumpIfIntimidateAbilityPrevented(void) +// TODO: There might be a way to do it without a flag +void BS_ConsumeBerry(void) { - NATIVE_ARGS(); + NATIVE_ARGS(u8 battler, bool8 fromBattler); + u32 battler = GetBattlerForBattleScript(cmd->battler); - u32 hasAbility = FALSE; - u32 ability = GetBattlerAbility(gBattlerTarget); + if (cmd->fromBattler) + gLastUsedItem = gBattleMons[battler].item; - switch (ability) + if (GetItemPocket(gLastUsedItem) != POCKET_BERRIES || gBattleScripting.overrideBerryRequirements == 2) { - case ABILITY_INNER_FOCUS: - case ABILITY_SCRAPPY: - case ABILITY_OWN_TEMPO: - case ABILITY_OBLIVIOUS: - if (B_UPDATED_INTIMIDATE >= GEN_8) - { - hasAbility = TRUE; - gBattlescriptCurrInstr = BattleScript_IntimidatePrevented; - } - else - { - gBattlescriptCurrInstr = cmd->nextInstr; - } - break; - case ABILITY_GUARD_DOG: - hasAbility = TRUE; - gBattlescriptCurrInstr = BattleScript_IntimidateInReverse; - break; - default: + gBattleScripting.overrideBerryRequirements = 0; gBattlescriptCurrInstr = cmd->nextInstr; - break; + return; } - if (hasAbility) + gBattleScripting.overrideBerryRequirements = 1; + GetBattlerPartyState(battler)->ateBerry = TRUE; + if (ItemBattleEffects(battler, 0, GetItemHoldEffect(gLastUsedItem), IsOnBerryActivation)) { - gLastUsedAbility = ability; - gBattlerAbility = gBattlerTarget; - RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); + gBattleScripting.overrideBerryRequirements = 2; + return; } + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_TryIntimidateEjectPack(void) +void BS_JumpIfWeatherAffected(void) { - NATIVE_ARGS(); + NATIVE_ARGS(u16 flags, const u8 *jumpInstr); + u32 weather = cmd->flags; + if (IsBattlerWeatherAffected(gBattlerAttacker, weather)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfSpecies(void) +{ + NATIVE_ARGS(u16 species, const u8 *jumpInstr); + if (gBattleMons[gBattlerAttacker].species == cmd->species) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} - u32 affectedBattler = 0xFF; - u32 battler = BATTLE_OPPOSITE(gBattlerAttacker); - u32 partnerBattler = BATTLE_PARTNER(battler); +void BS_JumpIfAbilityPreventsRest(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 ability = GetBattlerAbility(battler); + if (GetConfig(CONFIG_LEAF_GUARD_PREVENTS_REST) >= GEN_5 && IsLeafGuardProtected(battler, ability)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else if (IsShieldsDownProtected(battler, ability)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} - bool32 ejectPackBattler = CanEjectPackTrigger(gBattlerAttacker, battler, MOVE_NONE); - bool32 ejectPackPartnerBattler = CanEjectPackTrigger(gBattlerAttacker, partnerBattler, MOVE_NONE); +void BS_SetAttackerToStickyWebUser(void) +{ + NATIVE_ARGS(); + // For Mirror Armor: "If the PokΓ©mon with this Ability is affected by Sticky Web, the effect is reflected back to the PokΓ©mon which set it up. + // If PokΓ©mon which set up Sticky Web is not on the field, no PokΓ©mon have their Speed lowered." + gBattlerAttacker = gBattlerTarget; // Initialize 'fail' condition + SET_STATCHANGER(STAT_SPEED, 1, TRUE); + if (gSideTimers[GetBattlerSide(gBattlerTarget)].stickyWebBattlerId != 0xFF) + gBattlerAttacker = gSideTimers[GetBattlerSide(gBattlerTarget)].stickyWebBattlerId; + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (ejectPackBattler && ejectPackPartnerBattler) - { - u32 battlerSpeed = GetBattlerTotalSpeedStat(battler); - u32 partnerbattlerSpeed = GetBattlerTotalSpeedStat(partnerBattler); +void BS_CutOneThirdHpAndRaiseStats(void) +{ + NATIVE_ARGS(const u8 *failInstr); + bool32 atLeastOneStatBoosted = FALSE; + u32 ability = GetBattlerAbility(gBattlerAttacker); - if (battlerSpeed >= partnerbattlerSpeed) - affectedBattler = battler; - else - affectedBattler = partnerBattler; - } - else if (ejectPackBattler) + for (u32 stat = 1; stat < NUM_STATS; stat++) { - affectedBattler = battler; + if (CompareStat(gBattlerAttacker, stat, MAX_STAT_STAGE, CMP_LESS_THAN, ability)) + { + atLeastOneStatBoosted = TRUE; + break; + } } - else if (ejectPackPartnerBattler) + if (atLeastOneStatBoosted) { - affectedBattler = partnerBattler; + SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 3); + gBattlescriptCurrInstr = cmd->nextInstr; } - - gBattlescriptCurrInstr = cmd->nextInstr; - if (affectedBattler != 0xFF) + else { - gProtectStructs[battler].statFell = FALSE; - gProtectStructs[partnerBattler].statFell = FALSE; - gAiLogicData->ejectPackSwitch = TRUE; - gBattleScripting.battler = affectedBattler; - gLastUsedItem = gBattleMons[affectedBattler].item; - RecordItemEffectBattle(affectedBattler, HOLD_EFFECT_EJECT_PACK); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EjectPackActivate_Ret; + gBattlescriptCurrInstr = cmd->failInstr; } } -void BS_JumpIfCanGigantamax(void) +void BS_SetPoltergeistMessage(void) { - NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); + NATIVE_ARGS(const u8 *failInstr); + PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].item); + gLastUsedItem = gBattleMons[gBattlerTarget].item; + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (GetMonData(GetBattlerMon(battler), MON_DATA_GIGANTAMAX_FACTOR) - && GetGMaxTargetSpecies(gBattleMons[battler].species) != SPECIES_NONE) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; +void BS_TryResetNegativeStatStages(void) +{ + NATIVE_ARGS(); + for (u32 stat = 0; stat < NUM_BATTLE_STATS; stat++) + if (gBattleMons[gBattlerTarget].statStages[stat] < DEFAULT_STAT_STAGE) + gBattleMons[gBattlerTarget].statStages[stat] = DEFAULT_STAT_STAGE; + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_JumpIfLastUsedItemHoldEffect(void) +void BS_JumpIfLastUsedItemBerry(void) { - NATIVE_ARGS(u8 holdEffect, u16 secondaryId, const u8 *jumpInstr); - if (GetItemHoldEffect(gLastUsedItem) == cmd->holdEffect - && (cmd->secondaryId == 0 || GetItemSecondaryId(gLastUsedItem) == cmd->secondaryId)) + NATIVE_ARGS(const u8 *jumpInstr); + if (GetItemPocket(gLastUsedItem) == POCKET_BERRIES) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_JumpIfNoWhiteOut(void) +void BS_SaveBattlerItem(void) { - NATIVE_ARGS(const u8 *jumpInstr); + NATIVE_ARGS(); + gBattleHistory->heldItems[gBattlerTarget] = gBattleMons[gBattlerTarget].item; + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (FlagGet(B_FLAG_NO_WHITEOUT)) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; +void BS_RestoreBattlerItem(void) +{ + NATIVE_ARGS(); + gBattleMons[gBattlerTarget].item = gBattleHistory->heldItems[gBattlerTarget]; + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_JumpIfAbilityCantBeSuppressed(void) +void BS_BattlerItemToLastUsedItem(void) { - NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); + NATIVE_ARGS(); + gBattleMons[gBattlerTarget].item = gLastUsedItem; + gBattlescriptCurrInstr = cmd->nextInstr; +} - if (gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed) +void BS_JumpIfGenConfigLowerThan(void) +{ + NATIVE_ARGS(u16 tag, u8 gen, const u8 *jumpInstr); + if (GetConfig(cmd->tag) < cmd->gen) gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/battle_setup.c b/src/battle_setup.c index 5c6a01c9321c..1ad284d05e7f 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -42,19 +42,20 @@ #include "data.h" #include "vs_seeker.h" #include "item.h" +#include "field_name_box.h" #include "constants/battle_frontier.h" #include "constants/battle_setup.h" #include "constants/event_objects.h" #include "constants/game_stat.h" #include "constants/items.h" #include "constants/songs.h" -#include "constants/map_types.h" #include "constants/trainers.h" #include "constants/trainer_hill.h" #include "constants/weather.h" -#include "wild_encounter.h" +#include "fishing.h" -enum { +enum TransitionType +{ TRANSITION_TYPE_NORMAL, TRANSITION_TYPE_CAVE, TRANSITION_TYPE_FLASH, @@ -260,7 +261,7 @@ static void Task_BattleStart(u8 taskId) } } -static void CreateBattleStartTask(u8 transition, u16 song) +static void CreateBattleStartTask(enum BattleTransition transition, u16 song) { u8 taskId = CreateTask(Task_BattleStart, 1); @@ -337,7 +338,7 @@ static void DoStandardWildBattle(bool32 isDouble) } else if (isDouble) gBattleTypeFlags |= BATTLE_TYPE_DOUBLE; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { VarSet(VAR_TEMP_E, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; @@ -356,7 +357,7 @@ void DoStandardWildBattle_Debug(void) StopPlayerAvatar(); gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = 0; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; @@ -416,7 +417,7 @@ static void DoTrainerBattle(void) static void DoBattlePyramidTrainerHillBattle(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) CreateBattleStartTask(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PYRAMID), 0); else CreateBattleStartTask(GetSpecialBattleTransition(B_TRANSITION_GROUP_TRAINER_HILL), 0); @@ -533,7 +534,7 @@ void StartGroudonKyogreBattle(void) void StartRegiBattle(void) { - u8 transitionId; + enum BattleTransition transitionId; u16 species; LockPlayerFieldControls(); @@ -591,7 +592,7 @@ static void CB2_EndWildBattle(void) HealPlayerParty(); } - if (IsPlayerDefeated(gBattleOutcome) == TRUE && !InBattlePyramid() && !InBattlePike()) + if (IsPlayerDefeated(gBattleOutcome) == TRUE && CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE && !InBattlePike()) { SetMainCallback2(CB2_WhiteOut); } @@ -610,7 +611,7 @@ static void CB2_EndScriptedWildBattle(void) if (IsPlayerDefeated(gBattleOutcome) == TRUE) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); else SetMainCallback2(CB2_WhiteOut); @@ -622,12 +623,12 @@ static void CB2_EndScriptedWildBattle(void) } } -u8 BattleSetup_GetEnvironmentId(void) +enum BattleEnvironments BattleSetup_GetEnvironmentId(void) { u16 tileBehavior; s16 x, y; - if (I_FISHING_ENVIRONMENT >= GEN_4 && gIsFishingEncounter) + if (ShouldUseFishingEnvironmentInBattle()) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); else PlayerGetDestCoords(&x, &y); @@ -686,7 +687,7 @@ u8 BattleSetup_GetEnvironmentId(void) return BATTLE_ENVIRONMENT_PLAIN; } -static u8 GetBattleTransitionTypeByMap(void) +static enum TransitionType GetBattleTransitionTypeByMap(void) { u16 tileBehavior; s16 x, y; @@ -749,7 +750,7 @@ static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) return sum; } -u8 GetWildBattleTransition(void) +enum BattleTransition GetWildBattleTransition(void) { u8 transitionType = GetBattleTransitionTypeByMap(); u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); @@ -757,28 +758,28 @@ u8 GetWildBattleTransition(void) if (enemyLevel < playerLevel) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) return B_TRANSITION_BLUR; else return sBattleTransitionTable_Wild[transitionType][0]; } else { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) return B_TRANSITION_GRID_SQUARES; else return sBattleTransitionTable_Wild[transitionType][1]; } } -u8 GetTrainerBattleTransition(void) +enum BattleTransition GetTrainerBattleTransition(void) { u8 minPartyCount = 1; u8 transitionType; u8 enemyLevel; u8 playerLevel; u32 trainerId = SanitizeTrainerId(TRAINER_BATTLE_PARAM.opponentA); - u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); + enum TrainerClassID trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA); if (DoesTrainerHaveMugshot(trainerId)) return B_TRANSITION_MUGSHOT; @@ -814,7 +815,7 @@ u8 GetTrainerBattleTransition(void) } #define RANDOM_TRANSITION(table) (table[Random() % ARRAY_COUNT(table)]) -u8 GetSpecialBattleTransition(s32 id) +enum BattleTransition GetSpecialBattleTransition(enum BattleTransitionGroup id) { u16 var; u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL); @@ -832,6 +833,8 @@ u8 GetSpecialBattleTransition(s32 id) return RANDOM_TRANSITION(sBattleTransitionTable_BattlePyramid); case B_TRANSITION_GROUP_B_DOME: return RANDOM_TRANSITION(sBattleTransitionTable_BattleDome); + default: + break; } if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS) @@ -849,6 +852,8 @@ u8 GetSpecialBattleTransition(s32 id) return RANDOM_TRANSITION(sBattleTransitionTable_BattlePyramid); case B_TRANSITION_GROUP_B_DOME: return RANDOM_TRANSITION(sBattleTransitionTable_BattleDome); + default: + break; } if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS) @@ -1005,7 +1010,7 @@ void TrainerBattleLoadArgsSecondTrainer(const u8 *data) void SetMapVarsToTrainerA(void) { - if (TRAINER_BATTLE_PARAM.objEventLocalIdA != 0) + if (TRAINER_BATTLE_PARAM.objEventLocalIdA != LOCALID_NONE) { gSpecialVar_LastTalked = TRAINER_BATTLE_PARAM.objEventLocalIdA; gSelectedObjectEvent = GetObjectEventIdByLocalIdAndMap(TRAINER_BATTLE_PARAM.objEventLocalIdA, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); @@ -1126,6 +1131,17 @@ bool32 GetTrainerFlagFromScriptPointer(const u8 *data) TrainerBattleParameter *temp = (TrainerBattleParameter*)(data + OPCODE_OFFSET); return FlagGet(TRAINER_FLAGS_START + temp->params.opponentA); } + +bool32 GetRematchFromScriptPointer(const u8 *data) +{ +#if FREE_MATCH_CALL + return FALSE; +#else + TrainerBattleParameter *temp = (TrainerBattleParameter*)(data + OPCODE_OFFSET); + return ShouldTryRematchBattleForTrainerId(temp->params.opponentA); +#endif +} + #undef OPCODE_OFFSET // Set trainer's movement type so they stop and remain facing that direction @@ -1144,7 +1160,7 @@ u8 GetTrainerBattleMode(void) bool8 GetTrainerFlag(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) return GetBattlePyramidTrainerFlag(gSelectedObjectEvent); else if (InTrainerHill()) return GetHillTrainerFlag(gSelectedObjectEvent); @@ -1201,7 +1217,7 @@ void BattleSetup_StartTrainerBattle(void) } } - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; @@ -1241,7 +1257,7 @@ void BattleSetup_StartTrainerBattle(void) gWhichTrainerToFaceAfterBattle = 0; gMain.savedCallback = CB2_EndTrainerBattle; - if (InBattlePyramid() || InTrainerHillChallenge()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || InTrainerHillChallenge()) DoBattlePyramidTrainerHillBattle(); else DoTrainerBattle(); @@ -1270,7 +1286,7 @@ static void SaveChangesToPlayerParty(void) { if ((participatedPokemon >> i & 1) == 1) { - gSaveBlock1Ptr->playerParty[i] = gPlayerParty[j]; + SavePlayerPartyMon(i, &gPlayerParty[j]); j++; } } @@ -1289,6 +1305,7 @@ static void CB2_EndTrainerBattle(void) { HandleBattleVariantEndParty(); + gIsDebugBattle = FALSE; if (FollowerNPCIsBattlePartner()) { RestorePartyAfterFollowerNPCBattle(); @@ -1305,7 +1322,7 @@ static void CB2_EndTrainerBattle(void) } else if (IsPlayerDefeated(gBattleOutcome) == TRUE) { - if (InBattlePyramid() || InTrainerHillChallenge() || (!NoAliveMonsForPlayer()) || FlagGet(B_FLAG_NO_WHITEOUT)) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || InTrainerHillChallenge() || (!NoAliveMonsForPlayer()) || FlagGet(B_FLAG_NO_WHITEOUT)) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); else SetMainCallback2(CB2_WhiteOut); @@ -1318,7 +1335,7 @@ static void CB2_EndTrainerBattle(void) { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); DowngradeBadPoison(); - if (!InBattlePyramid() && !InTrainerHillChallenge()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE && !InTrainerHillChallenge()) { RegisterTrainerInMatchCall(); SetBattledTrainersFlags(); @@ -1357,7 +1374,7 @@ void BattleSetup_StartRematchBattle(void) void ShowTrainerIntroSpeech(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { if (gNoOfApproachingTrainers == 0 || gNoOfApproachingTrainers == 1) CopyPyramidTrainerSpeechBefore(LocalIdToPyramidTrainerId(gSpecialVar_LastTalked)); @@ -1489,9 +1506,19 @@ static const u8 *ReturnEmptyStringIfNull(const u8 *string) static const u8 *GetIntroSpeechOfApproachingTrainer(void) { if (gApproachingTrainerId == 0) + { + if (OW_NAME_BOX_NPC_TRAINER) + gSpeakerName = GetTrainerNameFromId(TRAINER_BATTLE_PARAM.opponentA); + return ReturnEmptyStringIfNull(TRAINER_BATTLE_PARAM.introTextA); + } else + { + if (OW_NAME_BOX_NPC_TRAINER) + gSpeakerName = GetTrainerNameFromId(TRAINER_BATTLE_PARAM.opponentB); + return ReturnEmptyStringIfNull(TRAINER_BATTLE_PARAM.introTextB); + } } const u8 *GetTrainerALoseText(void) @@ -1742,6 +1769,20 @@ static void ClearTrainerWantRematchState(const struct RematchTrainer *table, u16 #endif //FREE_MATCH_CALL } +void ClearCurrentTrainerWantRematchVsSeeker(void) +{ +#if FREE_MATCH_CALL == FALSE + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && FlagGet(I_VS_SEEKER_CHARGING) && (I_VS_SEEKER_CHARGING != 0)) + { + for (u32 i = 0; i < REMATCH_TABLE_ENTRIES; i++) + { + if (gSaveBlock1Ptr->trainerRematches[i] == TRAINER_BATTLE_PARAM.opponentA) + gSaveBlock1Ptr->trainerRematches[i] = 0; + } + } +#endif //FREE_MATCH_CALL +} + static u32 GetTrainerMatchCallFlag(u32 trainerId) { s32 i; @@ -1773,12 +1814,18 @@ static bool8 WasSecondRematchWon(const struct RematchTrainer *table, u16 firstBa return FALSE; if (!HasTrainerBeenFought(table[tableId].trainerIds[1])) return FALSE; - +#if FREE_MATCH_CALL == FALSE + if (I_VS_SEEKER_CHARGING) + { + if (gSaveBlock1Ptr->trainerRematches[tableId] == 0) + return FALSE; + } +#endif return TRUE; } #if FREE_MATCH_CALL == FALSE -static bool32 HasAtLeastFiveBadges(void) +static bool32 HasEnoughBadgesForRematch(void) { s32 i, count; @@ -1786,7 +1833,7 @@ static bool32 HasAtLeastFiveBadges(void) { if (FlagGet(gBadgeFlags[i]) == TRUE) { - if (++count >= 5) + if (++count >= OW_REMATCH_BADGE_COUNT) return TRUE; } } @@ -1800,7 +1847,7 @@ static bool32 HasAtLeastFiveBadges(void) void IncrementRematchStepCounter(void) { #if FREE_MATCH_CALL == FALSE - if (!HasAtLeastFiveBadges()) + if (!HasEnoughBadgesForRematch()) return; if (IsVsSeekerEnabled()) @@ -1816,7 +1863,7 @@ void IncrementRematchStepCounter(void) #if FREE_MATCH_CALL == FALSE static bool32 IsRematchStepCounterMaxed(void) { - if (HasAtLeastFiveBadges() && gSaveBlock1Ptr->trainerRematchStepCounter >= STEP_COUNTER_MAX) + if (HasEnoughBadgesForRematch() && gSaveBlock1Ptr->trainerRematchStepCounter >= STEP_COUNTER_MAX) return TRUE; else return FALSE; @@ -1856,10 +1903,15 @@ u16 GetLastBeatenRematchTrainerId(u16 trainerId) bool8 ShouldTryRematchBattle(void) { - if (IsFirstTrainerIdReadyForRematch(gRematchTable, TRAINER_BATTLE_PARAM.opponentA)) + return ShouldTryRematchBattleForTrainerId(TRAINER_BATTLE_PARAM.opponentA); +} + +bool8 ShouldTryRematchBattleForTrainerId(u16 trainerId) +{ + if (IsFirstTrainerIdReadyForRematch(gRematchTable, trainerId)) return TRUE; - return WasSecondRematchWon(gRematchTable, TRAINER_BATTLE_PARAM.opponentA); + return WasSecondRematchWon(gRematchTable, trainerId); } bool8 IsTrainerReadyForRematch(void) diff --git a/src/battle_terastal.c b/src/battle_terastal.c index 6984f3fc6cfa..f0e720c93e6e 100644 --- a/src/battle_terastal.c +++ b/src/battle_terastal.c @@ -14,7 +14,6 @@ #include "sprite.h" #include "util.h" #include "constants/abilities.h" -#include "constants/hold_effects.h" #include "constants/rgb.h" // Sets flags and variables upon a battler's Terastallization. @@ -62,9 +61,9 @@ void ApplyBattlerVisualsForTeraAnim(u32 battler) // Returns whether a battler can Terastallize. bool32 CanTerastallize(u32 battler) { - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, FALSE); + enum HoldEffect holdEffect = GetBattlerHoldEffectIgnoreNegation(battler); - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED && GET_BASE_SPECIES_ID(gBattleMons[battler].species) == SPECIES_TERAPAGOS) + if (gBattleMons[battler].volatiles.transformed && GET_BASE_SPECIES_ID(gBattleMons[battler].species) == SPECIES_TERAPAGOS) return FALSE; // Prevents Zigzagoon from terastalizing in vanilla. @@ -109,20 +108,20 @@ bool32 CanTerastallize(u32 battler) } // Returns a battler's Tera type. -u32 GetBattlerTeraType(u32 battler) +enum Type GetBattlerTeraType(u32 battler) { return GetMonData(GetBattlerMon(battler), MON_DATA_TERA_TYPE); } // Uses up a type's Stellar boost. -void ExpendTypeStellarBoost(u32 battler, u32 type) +void ExpendTypeStellarBoost(u32 battler, enum Type type) { if (type < 32 && gBattleMons[battler].species != SPECIES_TERAPAGOS_STELLAR) // avoid OOB access gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] |= 1u << type; } // Checks whether a type's Stellar boost has been expended. -bool32 IsTypeStellarBoosted(u32 battler, u32 type) +bool32 IsTypeStellarBoosted(u32 battler, enum Type type) { if (type < 32) // avoid OOB access return !(gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] & (1u << type)); @@ -132,20 +131,19 @@ bool32 IsTypeStellarBoosted(u32 battler, u32 type) // Returns the STAB power multiplier to use when Terastallized. // Power multipliers from Smogon Research thread. -uq4_12_t GetTeraMultiplier(u32 battler, u32 type) +uq4_12_t GetTeraMultiplier(struct DamageContext *ctx) { - u32 teraType = GetBattlerTeraType(battler); - bool32 hasAdaptability = (GetBattlerAbility(battler) == ABILITY_ADAPTABILITY); + enum Type teraType = GetBattlerTeraType(ctx->battlerAtk); // Safety check. - if (GetActiveGimmick(battler) != GIMMICK_TERA) + if (GetActiveGimmick(ctx->battlerAtk) != GIMMICK_TERA) return UQ_4_12(1.0); // Stellar-type checks. if (teraType == TYPE_STELLAR) { - bool32 shouldBoost = IsTypeStellarBoosted(battler, type); - if (IS_BATTLER_OF_BASE_TYPE(battler, type)) + bool32 shouldBoost = IsTypeStellarBoosted(ctx->battlerAtk, ctx->moveType); + if (IS_BATTLER_OF_BASE_TYPE(ctx->battlerAtk, ctx->moveType)) { if (shouldBoost) return UQ_4_12(2.0); @@ -158,18 +156,18 @@ uq4_12_t GetTeraMultiplier(u32 battler, u32 type) return UQ_4_12(1.0); } // Base and Tera type. - if (type == teraType && IS_BATTLER_OF_BASE_TYPE(battler, type)) + if (ctx->moveType == teraType && IS_BATTLER_OF_BASE_TYPE(ctx->battlerAtk, ctx->moveType)) { - if (hasAdaptability) + if (ctx->abilityAtk == ABILITY_ADAPTABILITY) return UQ_4_12(2.25); else return UQ_4_12(2.0); } // Base or Tera type only. - else if ((type == teraType && !IS_BATTLER_OF_BASE_TYPE(battler, type)) - || (type != teraType && IS_BATTLER_OF_BASE_TYPE(battler, type))) + else if ((ctx->moveType == teraType && !IS_BATTLER_OF_BASE_TYPE(ctx->battlerAtk, ctx->moveType)) + || (ctx->moveType != teraType && IS_BATTLER_OF_BASE_TYPE(ctx->battlerAtk, ctx->moveType))) { - if (hasAdaptability) + if (ctx->abilityAtk == ABILITY_ADAPTABILITY) return UQ_4_12(2.0); else return UQ_4_12(1.5); @@ -181,7 +179,7 @@ uq4_12_t GetTeraMultiplier(u32 battler, u32 type) } } -u16 GetTeraTypeRGB(u32 type) +u16 GetTeraTypeRGB(enum Type type) { return gTypesInfo[type].teraTypeRGBValue; } diff --git a/src/battle_tower.c b/src/battle_tower.c index 19a123c41261..d589cb757a92 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -25,6 +25,7 @@ #include "battle_factory.h" #include "constants/abilities.h" #include "constants/apprentice.h" +#include "constants/battle_ai.h" #include "constants/battle_dome.h" #include "constants/battle_frontier.h" #include "constants/battle_frontier_mons.h" @@ -39,6 +40,8 @@ #include "constants/trainers.h" #include "constants/event_objects.h" #include "constants/moves.h" +#include "test/battle.h" +#include "test/test_runner_battle.h" // EWRAM vars. EWRAM_DATA const struct BattleFrontierTrainer *gFacilityTrainers = NULL; @@ -1351,9 +1354,9 @@ u8 GetFrontierTrainerFrontSpriteId(u16 trainerId) } } -u8 GetFrontierOpponentClass(u16 trainerId) +enum TrainerClassID GetFrontierOpponentClass(u16 trainerId) { - u8 trainerClass = 0; + enum TrainerClassID trainerClass = 0; enum DifficultyLevel difficulty = GetBattlePartnerDifficultyLevel(trainerId); SetFacilityPtrsGetLevel(); @@ -1568,7 +1571,8 @@ void CreateFacilityMon(const struct TrainerMon *fmon, u16 level, u8 fixedIV, u32 { u8 ball = (fmon->ball == 0xFF) ? Random() % POKEBALL_COUNT : fmon->ball; u16 move; - u32 personality = 0, ability, friendship, j; + u32 personality = 0, friendship, j; + enum Ability ability; if (fmon->gender == TRAINER_MON_MALE) { @@ -1628,7 +1632,7 @@ void CreateFacilityMon(const struct TrainerMon *fmon, u16 level, u8 fixedIV, u32 if (fmon->isShiny) { - u32 data = TRUE; + bool32 data = TRUE; SetMonData(dst, MON_DATA_IS_SHINY, &data); } if (fmon->dynamaxLevel > 0) @@ -1643,12 +1647,12 @@ void CreateFacilityMon(const struct TrainerMon *fmon, u16 level, u8 fixedIV, u32 } if (fmon->teraType) { - u32 data = fmon->teraType; + enum Type data = fmon->teraType; SetMonData(dst, MON_DATA_TERA_TYPE, &data); } - - SetMonData(dst, MON_DATA_POKEBALL, &ball); + if (ball != BALL_STRANGE) + SetMonData(dst, MON_DATA_POKEBALL, &ball); CalculateMonStats(dst); } @@ -1932,7 +1936,7 @@ static void HandleSpecialTrainerBattleEnd(void) case SPECIAL_BATTLE_SECRET_BASE: for (i = 0; i < PARTY_SIZE; i++) { - u16 itemBefore = GetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_HELD_ITEM); + u16 itemBefore = GetMonData(GetSavedPlayerPartyMon(i), MON_DATA_HELD_ITEM); SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &itemBefore); } break; @@ -1943,7 +1947,7 @@ static void HandleSpecialTrainerBattleEnd(void) for (i = 0; i < 3; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) - gSaveBlock1Ptr->playerParty[i] = gPlayerParty[i]; + SavePlayerPartyMon(i, &gPlayerParty[i]); } break; } @@ -1986,7 +1990,7 @@ void DoSpecialTrainerBattle(void) gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS; break; case FRONTIER_MODE_LINK_MULTIS: - gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_MULTI | BATTLE_TYPE_TOWER_LINK_MULTI; + gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_MULTI | BATTLE_TYPE_TOWER_LINK_MULTI | BATTLE_TYPE_TWO_OPPONENTS; FillFrontierTrainersParties(FRONTIER_MULTI_PARTY_SIZE); break; } @@ -1998,7 +2002,7 @@ void DoSpecialTrainerBattle(void) for (i = 0; i < PARTY_SIZE; i++) { u16 itemBefore = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_HELD_ITEM, &itemBefore); + SetMonData(GetSavedPlayerPartyMon(i), MON_DATA_HELD_ITEM, &itemBefore); } CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); @@ -2769,11 +2773,11 @@ static void AwardBattleTowerRibbons(void) partyIndex = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; ribbons[i].partyIndex = partyIndex; ribbons[i].count = 0; - if (!GetMonData(&gSaveBlock1Ptr->playerParty[partyIndex], ribbonType)) + if (!GetMonData(GetSavedPlayerPartyMon(partyIndex), ribbonType)) { gSpecialVar_Result = TRUE; - SetMonData(&gSaveBlock1Ptr->playerParty[partyIndex], ribbonType, &gSpecialVar_Result); - ribbons[i].count = GetRibbonCount(&gSaveBlock1Ptr->playerParty[partyIndex]); + SetMonData(GetSavedPlayerPartyMon(partyIndex), ribbonType, &gSpecialVar_Result); + ribbons[i].count = GetRibbonCount(GetSavedPlayerPartyMon(partyIndex)); } } } @@ -2792,7 +2796,7 @@ static void AwardBattleTowerRibbons(void) } if (ribbons[0].count > NUM_CUTIES_RIBBONS) { - TryPutSpotTheCutiesOnAir(&gSaveBlock1Ptr->playerParty[ribbons[0].partyIndex], ribbonType); + TryPutSpotTheCutiesOnAir(GetSavedPlayerPartyMon(ribbons[0].partyIndex), ribbonType); } } } @@ -2846,7 +2850,7 @@ u8 GetEreaderTrainerFrontSpriteId(void) #endif //FREE_BATTLE_TOWER_E_READER } -u8 GetEreaderTrainerClassId(void) +enum TrainerClassID GetEreaderTrainerClassId(void) { #if FREE_BATTLE_TOWER_E_READER == FALSE return gFacilityClassToTrainerClass[gSaveBlock2Ptr->frontier.ereaderTrainer.facilityClass]; @@ -3555,18 +3559,20 @@ bool32 ValidateBattleTowerRecord(u8 recordId) // unused void TrySetLinkBattleTowerEnemyPartyLevel(void) { - if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) + if (!IsMultibattleTest()) { - s32 i; - u8 enemyLevel = SetFacilityPtrsGetLevel(); - - for (i = 0; i < PARTY_SIZE; i++) + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) { - u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL); - if (species) + u8 enemyLevel = SetFacilityPtrsGetLevel(); + + for (u32 i = 0; i < PARTY_SIZE; i++) { - SetMonData(&gEnemyParty[i], MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][enemyLevel]); - CalculateMonStats(&gEnemyParty[i]); + u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL); + if (species) + { + SetMonData(&gEnemyParty[i], MON_DATA_EXP, &gExperienceTables[gSpeciesInfo[species].growthRate][enemyLevel]); + CalculateMonStats(&gEnemyParty[i]); + } } } } diff --git a/src/battle_transition.c b/src/battle_transition.c index fe7188203bc5..2b28bf7dc759 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -302,10 +302,10 @@ static const u8 sUnusedBrendan_Gfx[] = INCBIN_U8("graphics/battle_transitions/un static const u8 sUnusedLass_Gfx[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp"); static const u32 sShrinkingBoxTileset[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp"); static const u16 sEvilTeam_Palette[] = INCBIN_U16("graphics/battle_transitions/evil_team.gbapal"); -static const u32 sTeamAqua_Tileset[] = INCBIN_U32("graphics/battle_transitions/team_aqua.4bpp.lz"); -static const u32 sTeamAqua_Tilemap[] = INCBIN_U32("graphics/battle_transitions/team_aqua.bin.lz"); -static const u32 sTeamMagma_Tileset[] = INCBIN_U32("graphics/battle_transitions/team_magma.4bpp.lz"); -static const u32 sTeamMagma_Tilemap[] = INCBIN_U32("graphics/battle_transitions/team_magma.bin.lz"); +static const u32 sTeamAqua_Tileset[] = INCBIN_U32("graphics/battle_transitions/team_aqua.4bpp.smol"); +static const u32 sTeamAqua_Tilemap[] = INCBIN_U32("graphics/battle_transitions/team_aqua.bin.smolTM"); +static const u32 sTeamMagma_Tileset[] = INCBIN_U32("graphics/battle_transitions/team_magma.4bpp.smol"); +static const u32 sTeamMagma_Tilemap[] = INCBIN_U32("graphics/battle_transitions/team_magma.bin.smolTM"); static const u32 sRegis_Tileset[] = INCBIN_U32("graphics/battle_transitions/regis.4bpp"); static const u16 sRegice_Palette[] = INCBIN_U16("graphics/battle_transitions/regice.gbapal"); static const u16 sRegisteel_Palette[] = INCBIN_U16("graphics/battle_transitions/registeel.gbapal"); @@ -314,10 +314,10 @@ static const u32 sRegice_Tilemap[] = INCBIN_U32("graphics/battle_transitions/reg static const u32 sRegisteel_Tilemap[] = INCBIN_U32("graphics/battle_transitions/registeel.bin"); static const u32 sRegirock_Tilemap[] = INCBIN_U32("graphics/battle_transitions/regirock.bin"); static const u16 sUnused_Palette[] = INCBIN_U16("graphics/battle_transitions/unused.gbapal"); -static const u32 sKyogre_Tileset[] = INCBIN_U32("graphics/battle_transitions/kyogre.4bpp.lz"); -static const u32 sKyogre_Tilemap[] = INCBIN_U32("graphics/battle_transitions/kyogre.bin.lz"); -static const u32 sGroudon_Tileset[] = INCBIN_U32("graphics/battle_transitions/groudon.4bpp.lz"); -static const u32 sGroudon_Tilemap[] = INCBIN_U32("graphics/battle_transitions/groudon.bin.lz"); +static const u32 sKyogre_Tileset[] = INCBIN_U32("graphics/battle_transitions/kyogre.4bpp.smol"); +static const u32 sKyogre_Tilemap[] = INCBIN_U32("graphics/battle_transitions/kyogre.bin.smolTM"); +static const u32 sGroudon_Tileset[] = INCBIN_U32("graphics/battle_transitions/groudon.4bpp.smol"); +static const u32 sGroudon_Tilemap[] = INCBIN_U32("graphics/battle_transitions/groudon.bin.smolTM"); static const u16 sKyogre1_Palette[] = INCBIN_U16("graphics/battle_transitions/kyogre_pt1.gbapal"); static const u16 sKyogre2_Palette[] = INCBIN_U16("graphics/battle_transitions/kyogre_pt2.gbapal"); static const u16 sGroudon1_Palette[] = INCBIN_U16("graphics/battle_transitions/groudon_pt1.gbapal"); @@ -326,13 +326,13 @@ static const u16 sRayquaza_Palette[] = INCBIN_U16("graphics/battle_transitions/r static const u32 sRayquaza_Tileset[] = INCBIN_U32("graphics/battle_transitions/rayquaza.4bpp"); static const u32 sRayquaza_Tilemap[] = INCBIN_U32("graphics/battle_transitions/rayquaza.bin"); static const u16 sFrontierLogo_Palette[] = INCBIN_U16("graphics/battle_transitions/frontier_logo.gbapal"); -static const u32 sFrontierLogo_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_logo.4bpp.lz"); -static const u32 sFrontierLogo_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo.bin.lz"); +static const u32 sFrontierLogo_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_logo.4bpp.smol"); +static const u32 sFrontierLogo_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo.bin.smolTM"); static const u16 sFrontierSquares_Palette[] = INCBIN_U16("graphics/battle_transitions/frontier_squares_blanktiles.gbapal"); -static const u32 sFrontierSquares_FilledBg_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_1.4bpp.lz"); -static const u32 sFrontierSquares_EmptyBg_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_2.4bpp.lz"); -static const u32 sFrontierSquares_Shrink1_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_3.4bpp.lz"); -static const u32 sFrontierSquares_Shrink2_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_4.4bpp.lz"); +static const u32 sFrontierSquares_FilledBg_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_1.4bpp.smol"); +static const u32 sFrontierSquares_EmptyBg_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_2.4bpp.smol"); +static const u32 sFrontierSquares_Shrink1_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_3.4bpp.smol"); +static const u32 sFrontierSquares_Shrink2_Tileset[] = INCBIN_U32("graphics/battle_transitions/frontier_square_4.4bpp.smol"); static const u32 sFrontierSquares_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_squares.bin"); // All battle transitions use the same intro @@ -1048,6 +1048,9 @@ static void Task_BattleTransition(u8 taskId) static bool8 Transition_StartIntro(struct Task *task) { SetWeatherScreenFadeOut(); + // cause all shadow sprites to destroy themselves, + // freeing up sprite slots for the transition + gWeatherPtr->noShadows = TRUE; CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); if (sTasks_Intro[task->tTransitionId] != NULL) { @@ -1385,7 +1388,7 @@ static bool8 Aqua_Init(struct Task *task) InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); - LZ77UnCompVram(sTeamAqua_Tileset, tileset); + DecompressDataWithHeaderVram(sTeamAqua_Tileset, tileset); LoadPalette(sEvilTeam_Palette, BG_PLTT_ID(15), sizeof(sEvilTeam_Palette)); task->tState++; @@ -1400,7 +1403,7 @@ static bool8 Magma_Init(struct Task *task) InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); - LZ77UnCompVram(sTeamMagma_Tileset, tileset); + DecompressDataWithHeaderVram(sTeamMagma_Tileset, tileset); LoadPalette(sEvilTeam_Palette, BG_PLTT_ID(15), sizeof(sEvilTeam_Palette)); task->tState++; @@ -1460,7 +1463,7 @@ static bool8 Aqua_SetGfx(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LZ77UnCompVram(sTeamAqua_Tilemap, tilemap); + DecompressDataWithHeaderVram(sTeamAqua_Tilemap, tilemap); SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; @@ -1472,7 +1475,7 @@ static bool8 Magma_SetGfx(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LZ77UnCompVram(sTeamMagma_Tilemap, tilemap); + DecompressDataWithHeaderVram(sTeamMagma_Tilemap, tilemap); SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; @@ -1526,8 +1529,8 @@ static bool8 Kyogre_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); - LZ77UnCompVram(sKyogre_Tileset, tileset); - LZ77UnCompVram(sKyogre_Tilemap, tilemap); + DecompressDataWithHeaderVram(sKyogre_Tileset, tileset); + DecompressDataWithHeaderVram(sKyogre_Tilemap, tilemap); task->tState++; return FALSE; @@ -2277,7 +2280,7 @@ static bool8 Mugshot_SetGfx(struct Task *task) s16 i, j; u16 *tilemap, *tileset; const u16 *mugshotsMap = sMugshotsTilemap; - u8 mugshotColor = GetTrainerMugshotColorFromId(TRAINER_BATTLE_PARAM.opponentA); + enum MugshotColor mugshotColor = GetTrainerMugshotColorFromId(TRAINER_BATTLE_PARAM.opponentA); GetBg0TilesDst(&tilemap, &tileset); CpuSet(sEliteFour_Tileset, tileset, 0xF0); @@ -2584,7 +2587,7 @@ static void Mugshots_CreateTrainerPics(struct Task *task) u8 trainerAPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentA); u8 trainerBPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentB); - u8 partnerPicId = gTrainerPicToTrainerBackPic[GetTrainerPicFromId(gPartnerTrainerId)]; + u8 partnerPicId = GetTrainerPicFromId(gPartnerTrainerId); s16 opponentARotationScales = 0; s16 opponentBRotationScales = 0; @@ -3418,8 +3421,8 @@ static bool8 Groudon_Init(struct Task *task) GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); - LZ77UnCompVram(sGroudon_Tileset, tileset); - LZ77UnCompVram(sGroudon_Tilemap, tilemap); + DecompressDataWithHeaderVram(sGroudon_Tileset, tileset); + DecompressDataWithHeaderVram(sGroudon_Tilemap, tilemap); task->tState++; task->tTimer = 0; @@ -4304,7 +4307,7 @@ static bool8 FrontierLogoWiggle_Init(struct Task *task) InitPatternWeaveTransition(task); GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); - LZ77UnCompVram(sFrontierLogo_Tileset, tileset); + DecompressDataWithHeaderVram(sFrontierLogo_Tileset, tileset); LoadPalette(sFrontierLogo_Palette, BG_PLTT_ID(15), sizeof(sFrontierLogo_Palette)); task->tState++; @@ -4316,7 +4319,7 @@ static bool8 FrontierLogoWiggle_SetGfx(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LZ77UnCompVram(sFrontierLogo_Tilemap, tilemap); + DecompressDataWithHeaderVram(sFrontierLogo_Tilemap, tilemap); SetSinWave((s16*)gScanlineEffectRegBuffers[0], 0, task->tSinIndex, 132, task->tAmplitude, DISPLAY_HEIGHT); task->tState++; @@ -4366,7 +4369,7 @@ static bool8 FrontierLogoWave_Init(struct Task *task) REG_BLDALPHA = sTransitionData->BLDALPHA; GetBg0TilesDst(&tilemap, &tileset); CpuFill16(0, tilemap, BG_SCREEN_SIZE); - LZ77UnCompVram(sFrontierLogo_Tileset, tileset); + DecompressDataWithHeaderVram(sFrontierLogo_Tileset, tileset); LoadPalette(sFrontierLogo_Palette, BG_PLTT_ID(15), sizeof(sFrontierLogo_Palette)); sTransitionData->cameraY = 0; UpdateShadowColor(RGB_GRAY); @@ -4380,7 +4383,7 @@ static bool8 FrontierLogoWave_SetGfx(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LZ77UnCompVram(sFrontierLogo_Tilemap, tilemap); + DecompressDataWithHeaderVram(sFrontierLogo_Tilemap, tilemap); task->tState++; return TRUE; @@ -4512,7 +4515,7 @@ static bool8 FrontierSquares_Init(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset); + DecompressDataWithHeaderVram(sFrontierSquares_FilledBg_Tileset, tileset); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); FillBgTilemapBufferRect(0, 1, 0, 0, MARGIN_SIZE, 32, 15); @@ -4570,13 +4573,13 @@ static bool8 FrontierSquares_Shrink(struct Task *task) break; case 1: BlendPalettes(PALETTES_ALL & ~(1 << 15), 16, RGB_BLACK); - LZ77UnCompVram(sFrontierSquares_EmptyBg_Tileset, tileset); + DecompressDataWithHeaderVram(sFrontierSquares_EmptyBg_Tileset, tileset); break; case 2: - LZ77UnCompVram(sFrontierSquares_Shrink1_Tileset, tileset); + DecompressDataWithHeaderVram(sFrontierSquares_Shrink1_Tileset, tileset); break; case 3: - LZ77UnCompVram(sFrontierSquares_Shrink2_Tileset, tileset); + DecompressDataWithHeaderVram(sFrontierSquares_Shrink2_Tileset, tileset); break; default: FillBgTilemapBufferRect_Palette0(0, 1, 0, 0, 32, 32); @@ -4607,7 +4610,7 @@ static bool8 FrontierSquaresSpiral_Init(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset); + DecompressDataWithHeaderVram(sFrontierSquares_FilledBg_Tileset, tileset); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); FillBgTilemapBufferRect(0, 1, 0, 0, MARGIN_SIZE, 32, 15); @@ -4725,7 +4728,7 @@ static bool8 FrontierSquaresScroll_Init(struct Task *task) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LZ77UnCompVram(sFrontierSquares_FilledBg_Tileset, tileset); + DecompressDataWithHeaderVram(sFrontierSquares_FilledBg_Tileset, tileset); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); LoadPalette(sFrontierSquares_Palette, BG_PLTT_ID(15), sizeof(sFrontierSquares_Palette)); diff --git a/src/battle_transition_frontier.c b/src/battle_transition_frontier.c index 3e40129fa5ef..bef484d416af 100644 --- a/src/battle_transition_frontier.c +++ b/src/battle_transition_frontier.c @@ -45,9 +45,9 @@ static bool8 CirclesSymmetricSpiralInSeq_End(struct Task *task); #define PALTAG_LOGO_CIRCLES 0x2E90 -static const u32 sLogoCenter_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.4bpp.lz"); -static const u32 sLogoCenter_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.bin.lz"); -static const u32 sLogoCircles_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_circles.4bpp.lz"); +static const u32 sLogoCenter_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.4bpp.smol"); +static const u32 sLogoCenter_Tilemap[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_center.bin.smolTM"); +static const u32 sLogoCircles_Gfx[] = INCBIN_U32("graphics/battle_transitions/frontier_logo_circles.4bpp.smol"); static const u16 sLogo_Pal[] = INCBIN_U16("graphics/battle_transitions/frontier_logo_circles.gbapal"); static const struct OamData sOamData_LogoCircles = @@ -221,8 +221,8 @@ static void LoadLogoGfx(void) u16 *tilemap, *tileset; GetBg0TilesDst(&tilemap, &tileset); - LZ77UnCompVram(sLogoCenter_Gfx, tileset); - LZ77UnCompVram(sLogoCenter_Tilemap, tilemap); + DecompressDataWithHeaderVram(sLogoCenter_Gfx, tileset); + DecompressDataWithHeaderVram(sLogoCenter_Tilemap, tilemap); LoadPalette(sLogo_Pal, BG_PLTT_ID(15), sizeof(sLogo_Pal)); LoadCompressedSpriteSheet(&sSpriteSheet_LogoCircles); LoadSpritePalette(&sSpritePalette_LogoCircles); diff --git a/src/battle_tv.c b/src/battle_tv.c index 96ce63344038..cecab5efb31c 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -14,7 +14,7 @@ static bool8 IsNotSpecialBattleString(enum StringID stringId); static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3); static void TrySetBattleSeminarShow(void); -static void AddPointsOnFainting(bool8 targetFainted); +static void AddPointsOnFainting(void); static void AddPointsBasedOnWeather(u16 weatherFlags, u16 move, u8 moveSlot); static bool8 ShouldCalculateDamage(u16 move, s32 *dmg, u16 *powerOverride); @@ -124,12 +124,23 @@ static const u16 *const sPointsArray[] = // even if current PokΓ©mon does not have corresponding move static const u16 sSpecialBattleStrings[] = { - STRINGID_PKMNPERISHCOUNTFELL, STRINGID_PKMNWISHCAMETRUE, STRINGID_PKMNLOSTPPGRUDGE, - STRINGID_PKMNTOOKFOE, STRINGID_PKMNABSORBEDNUTRIENTS, STRINGID_PKMNANCHOREDITSELF, - STRINGID_PKMNAFFLICTEDBYCURSE, STRINGID_PKMNSAPPEDBYLEECHSEED, STRINGID_PKMNLOCKEDINNIGHTMARE, - STRINGID_PKMNHURTBY, STRINGID_PKMNHURTBYBURN, STRINGID_PKMNHURTBYPOISON, - STRINGID_PKMNHURTBYSPIKES, STRINGID_ATTACKERFAINTED, STRINGID_TARGETFAINTED, - STRINGID_PKMNHITWITHRECOIL, STRINGID_PKMNCRASHED, TABLE_END + STRINGID_PKMNPERISHCOUNTFELL, + STRINGID_PKMNWISHCAMETRUE, + STRINGID_PKMNLOSTPPGRUDGE, + STRINGID_PKMNTOOKFOE, + STRINGID_PKMNABSORBEDNUTRIENTS, + STRINGID_PKMNANCHOREDITSELF, + STRINGID_PKMNAFFLICTEDBYCURSE, + STRINGID_PKMNSAPPEDBYLEECHSEED, + STRINGID_PKMNLOCKEDINNIGHTMARE, + STRINGID_PKMNHURTBY, + STRINGID_PKMNHURTBYBURN, + STRINGID_PKMNHURTBYPOISON, + STRINGID_PKMNHURTBYSPIKES, + STRINGID_BATTLERFAINTED, + STRINGID_PKMNHITWITHRECOIL, + STRINGID_PKMNCRASHED, + TABLE_END }; // code @@ -139,7 +150,7 @@ void BattleTv_SetDataBasedOnString(enum StringID stringId) u32 atkSide, defSide, effSide, scriptingSide; struct Pokemon *atkMon, *defMon; u8 moveSlot; - u32 atkFlank, defFlank, effFlank; + u32 atkFlank, defFlank, effFlank, flank; u8 *perishCount; u16 *statStringId, *finishedMoveId; @@ -452,8 +463,6 @@ void BattleTv_SetDataBasedOnString(enum StringID stringId) tvPtr->pos[atkSide][atkFlank].mudSportMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1; tvPtr->pos[atkSide][atkFlank].mudSportMoveSlot = moveSlot; break; - case STRINGID_ATTACKERFAINTED: - AddPointsOnFainting(FALSE); case STRINGID_RETURNMON: if (tvPtr->pos[atkSide][atkFlank].waterSportMonId != 0) { @@ -466,26 +475,29 @@ void BattleTv_SetDataBasedOnString(enum StringID stringId) tvPtr->pos[atkSide][atkFlank].mudSportMoveSlot = 0; } break; - case STRINGID_TARGETFAINTED: - AddPointsOnFainting(TRUE); - if (tvPtr->pos[atkSide][defFlank].waterSportMonId != 0) + case STRINGID_BATTLERFAINTED: + AddPointsOnFainting(); + if (gBattlerAttacker == gBattleScripting.battler) + flank = atkFlank; + else + flank = defFlank; + + if (tvPtr->pos[atkSide][flank].waterSportMonId != 0) { - tvPtr->pos[atkSide][defFlank].waterSportMonId = 0; - tvPtr->pos[atkSide][defFlank].waterSportMoveSlot = 0; + tvPtr->pos[atkSide][flank].waterSportMonId = 0; + tvPtr->pos[atkSide][flank].waterSportMoveSlot = 0; } - if (tvPtr->pos[atkSide][defFlank].mudSportMonId != 0) + if (tvPtr->pos[atkSide][flank].mudSportMonId != 0) { - tvPtr->pos[atkSide][defFlank].mudSportMonId = 0; - tvPtr->pos[atkSide][defFlank].mudSportMoveSlot = 0; + tvPtr->pos[atkSide][flank].mudSportMonId = 0; + tvPtr->pos[atkSide][flank].mudSportMoveSlot = 0; } break; case STRINGID_PKMNRAISEDDEF: - case STRINGID_PKMNRAISEDDEFALITTLE: tvPtr->side[atkSide].reflectMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1; tvPtr->side[atkSide].reflectMoveSlot = moveSlot; break; case STRINGID_PKMNRAISEDSPDEF: - case STRINGID_PKMNRAISEDSPDEFALITTLE: tvPtr->side[atkSide].lightScreenMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1; tvPtr->side[atkSide].lightScreenMoveSlot = moveSlot; break; @@ -591,7 +603,7 @@ void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruc tvPtr->side[atkSide].usedMoveSlot = moveSlot; AddMovePoints(PTS_MOVE_EFFECT, moveSlot, move, 0); AddPointsBasedOnWeather(weatherFlags, move, moveSlot); - if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP) + if (gBattleMons[gBattlerAttacker].volatiles.chargeTimer > 0) AddMovePoints(PTS_ELECTRIC, move, moveSlot, 0); if (move == MOVE_WISH) @@ -599,7 +611,8 @@ void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruc tvPtr->side[atkSide].wishMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1; tvPtr->side[atkSide].wishMoveSlot = moveSlot; } - if (GetMoveEffect(move) == EFFECT_EXPLOSION) + enum BattleMoveEffects effect = GetMoveEffect(move); + if (effect == EFFECT_EXPLOSION || effect == EFFECT_MISTY_EXPLOSION) { tvPtr->side[atkSide ^ BIT_SIDE].explosionMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1; tvPtr->side[atkSide ^ BIT_SIDE].explosionMoveSlot = moveSlot; @@ -760,14 +773,14 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) // Changes depending on the effect switch (effect) { - case EFFECT_FIXED_DAMAGE_ARG: - baseFromEffect *= (GetMoveFixedDamage(move) / 20); + case EFFECT_FIXED_HP_DAMAGE: + baseFromEffect *= (GetMoveFixedHPDamage(move) / 20); break; case EFFECT_TWO_TURNS_ATTACK: for (i = 0; i < GetMoveAdditionalEffectCount(move); i++) { const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); - switch ((enum MoveEffects)additionalEffect->moveEffect) + switch ((enum MoveEffect)additionalEffect->moveEffect) { case MOVE_EFFECT_ATK_PLUS_1: case MOVE_EFFECT_DEF_PLUS_1: @@ -839,10 +852,6 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); switch (additionalEffect->moveEffect) { - case MOVE_EFFECT_STEAL_ITEM: - if ((additionalEffect->chance == 100 || additionalEffect->chance == 0)) - baseFromEffect += 3; - break; case MOVE_EFFECT_THRASH: if (additionalEffect->self == TRUE) baseFromEffect += 3; @@ -866,6 +875,8 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) if (additionalEffect->self == TRUE && (additionalEffect->chance == 100 || additionalEffect->chance == 0)) baseFromEffect += 2; break; + default: + break; } } @@ -1067,7 +1078,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3) } } -static void AddPointsOnFainting(bool8 targetFainted) +static void AddPointsOnFainting(void) { struct BattleTv *tvPtr = &gBattleStruct->tv; u32 atkSide = GetBattlerSide(gBattlerAttacker); @@ -1190,7 +1201,7 @@ static void AddPointsOnFainting(bool8 targetFainted) } break; case FNT_RECOIL: - if (targetFainted == TRUE) + if (gBattlerAttacker == gBattleScripting.battler) { AddMovePoints(PTS_FAINT_SET_UP, 0, atkSide, (gBattlerPartyIndexes[gBattlerAttacker]) * 4 + tvPtr->side[atkSide].usedMoveSlot); @@ -1254,22 +1265,24 @@ static void TrySetBattleSeminarShow(void) dmgByMove[gMoveSelectionCursor[gBattlerAttacker]] = gBattleStruct->moveDamage[gBattlerTarget]; // TODO: Not sure currMoveSaved = gCurrentMove; + u16 storedMoveResultFlags = gBattleStruct->moveResultFlags[gBattlerTarget]; for (i = 0; i < MAX_MON_MOVES; i++) { gCurrentMove = gBattleMons[gBattlerAttacker].moves[i]; powerOverride = 0; if (ShouldCalculateDamage(gCurrentMove, &dmgByMove[i], &powerOverride)) { - struct DamageCalculationData damageCalcData; - damageCalcData.battlerAtk = gBattlerAttacker; - damageCalcData.battlerDef = gBattlerTarget; - damageCalcData.move = gCurrentMove; - damageCalcData.moveType = GetMoveType(gCurrentMove); - damageCalcData.isCrit = FALSE; - damageCalcData.randomFactor = FALSE; - damageCalcData.updateFlags = FALSE; - gBattleStruct->moveDamage[gBattlerTarget] = CalculateMoveDamage(&damageCalcData, powerOverride); - dmgByMove[i] = gBattleStruct->moveDamage[gBattlerTarget]; + struct DamageContext ctx = {0}; + ctx.battlerAtk = gBattlerAttacker; + ctx.battlerDef = gBattlerTarget; + ctx.move = ctx.chosenMove = gCurrentMove; + ctx.moveType = GetMoveType(gCurrentMove); + ctx.isCrit = FALSE; + ctx.randomFactor = FALSE; + ctx.updateFlags = FALSE; + ctx.isSelfInflicted = FALSE; + ctx.fixedBasePower = powerOverride; + dmgByMove[i] = CalculateMoveDamage(&ctx); if (dmgByMove[i] == 0 && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) dmgByMove[i] = 1; } @@ -1300,8 +1313,8 @@ static void TrySetBattleSeminarShow(void) } } - gBattleStruct->moveDamage[gBattlerTarget] = dmgByMove[gMoveSelectionCursor[gBattlerAttacker]]; gCurrentMove = currMoveSaved; + gBattleStruct->moveResultFlags[gBattlerTarget] = storedMoveResultFlags; } static bool8 ShouldCalculateDamage(u16 move, s32 *dmg, u16 *powerOverride) diff --git a/src/battle_util.c b/src/battle_util.c index 226b041be069..11a5ef583c9f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2,6 +2,7 @@ #include "battle.h" #include "battle_anim.h" #include "battle_arena.h" +#include "battle_environment.h" #include "battle_pyramid.h" #include "battle_util.h" #include "battle_controllers.h" @@ -9,6 +10,7 @@ #include "battle_setup.h" #include "battle_z_move.h" #include "battle_gimmick.h" +#include "battle_hold_effects.h" #include "generational_changes.h" #include "party_menu.h" #include "pokemon.h" @@ -42,8 +44,8 @@ #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" #include "constants/battle_string_ids.h" -#include "constants/hold_effects.h" #include "constants/items.h" +#include "constants/item_effects.h" #include "constants/moves.h" #include "constants/songs.h" #include "constants/species.h" @@ -58,16 +60,24 @@ match the ROM; this is also why sSoundMovesTable's declaration is in the middle functions instead of at the top of the file with the other declarations. */ -typedef void (*MoveSuccessOrderCancellers)(u32 *effect); static bool32 TryRemoveScreens(u32 battler); static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler); static u32 GetFlingPowerFromItemId(u32 itemId); static void SetRandomMultiHitCounter(); -static u32 GetBattlerItemHoldEffectParam(u32 battler, u32 item); -static bool32 CanBeInfinitelyConfused(u32 battler); -static bool32 IsAnyTargetAffected(u32 battlerAtk); -static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, u32 abilityDef, u32 abilityAffected, const u8 *battleScript, enum NonVolatileStatus option); -static bool32 CanSleepDueToSleepClause(u32 battlerAtk, u32 battlerDef, enum NonVolatileStatus option); +static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, enum Ability abilityAffected, const u8 *battleScript, enum FunctionCallOption option); +static bool32 CanSleepDueToSleepClause(u32 battlerAtk, u32 battlerDef, enum FunctionCallOption option); +static bool32 IsOpposingSideEmpty(u32 battler); +static void ResetParadoxWeatherStat(u32 battler); +static void ResetParadoxTerrainStat(u32 battler); +static bool32 CanBattlerFormChange(u32 battler, enum FormChanges method); + +// Submoves +static u32 GetMirrorMoveMove(void); +static u32 GetMetronomeMove(void); +static u32 GetAssistMove(void); +static u32 GetSleepTalkMove(void); +static u32 GetCopyCatMove(void); +static u32 GetMeFirstMove(void); ARM_FUNC NOINLINE static uq4_12_t PercentToUQ4_12(u32 percent); ARM_FUNC NOINLINE static uq4_12_t PercentToUQ4_12_Floored(u32 percent); @@ -204,6 +214,24 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = }, }; +// Helper function for actual dmg calcs during battle. For simulated AI dmg, CalcTypeEffectivenessMultiplier should be used directly +// This should stay a static function. Ideally everything else is handled through CalcTypeEffectivenessMultiplier just like AI +static uq4_12_t CalcTypeEffectivenessMultiplierHelper(u32 move, enum Type moveType, u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, bool32 recordAbilities) +{ + struct DamageContext ctx = {0}; + ctx.battlerAtk = battlerAtk; + ctx.battlerDef = battlerDef; + ctx.move = ctx.chosenMove = move; + ctx.moveType = moveType; + ctx.updateFlags = recordAbilities; + ctx.abilityAtk = abilityAtk; + ctx.abilityDef = abilityDef; + ctx.holdEffectAtk = GetBattlerHoldEffect(battlerAtk); + ctx.holdEffectDef = GetBattlerHoldEffect(battlerDef); + + return CalcTypeEffectivenessMultiplier(&ctx); +} + u32 GetCurrentBattleWeather(void) { u32 currBattleWeather = 0xFF; @@ -231,7 +259,10 @@ bool32 EndOrContinueWeather(void) { gBattleWeather = B_WEATHER_NONE; for (u32 battler = 0; battler < gBattlersCount; battler++) + { gDisableStructs[battler].weatherAbilityDone = FALSE; + ResetParadoxWeatherStat(battler); + } gBattleCommunication[MULTISTRING_CHOOSER] = sBattleWeatherInfo[currBattleWeather].endMessage; BattleScriptExecute(BattleScript_WeatherFaded); return TRUE; @@ -247,20 +278,36 @@ bool32 EndOrContinueWeather(void) return FALSE; } +// Gen5+ static u32 CalcBeatUpPower(void) { - u32 basePower; - u32 species; - struct Pokemon *party = GetBattlerParty(gBattlerAttacker); + u32 species = gBattleStruct->beatUpSpecies[gBattleStruct->beatUpSlot++]; + return (GetSpeciesBaseAttack(species) / 10) + 5; +} + +// Gen 3/4 +static s32 CalcBeatUpDamage(struct DamageContext *ctx) +{ + u32 partyIndex = gBattleStruct->beatUpSpecies[gBattleStruct->beatUpSlot++]; + struct Pokemon *party = GetBattlerParty(ctx->battlerAtk); + u32 species = GetMonData(&party[partyIndex], MON_DATA_SPECIES); + u32 levelFactor = GetMonData(&party[partyIndex], MON_DATA_LEVEL) * 2 / 5 + 2; + s32 dmg = GetSpeciesBaseAttack(species); - // Party slot is incremented by the battle script for Beat Up after this damage calculation - species = GetMonData(&party[gBattleStruct->beatUpSlot], MON_DATA_SPECIES); - basePower = (gSpeciesInfo[species].baseAttack / 10) + 5; + dmg *= GetMovePower(ctx->move); + dmg *= levelFactor; + dmg /= GetSpeciesBaseDefense(gBattleMons[ctx->battlerDef].species); + dmg = (dmg / 50) + 2; - return basePower; + if (gProtectStructs[ctx->battlerAtk].helpingHand) + dmg = dmg * 15 / 10; + if (ctx->isCrit) + dmg *= 2; + + return dmg; } -static bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef, u32 abilityDef) +static bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef, enum Ability abilityDef) { if (!gSpecialStatuses[battlerDef].distortedTypeMatchups && gBattleMons[battlerDef].species == SPECIES_TERAPAGOS_TERASTAL @@ -283,23 +330,62 @@ static inline bool32 IsDragonDartsSecondHit(u32 effect) return FALSE; } +bool32 IsUnnerveBlocked(u32 battler, u32 itemId) +{ + if (GetItemPocket(itemId) != POCKET_BERRIES) + return FALSE; + + if (gBattleScripting.overrideBerryRequirements > 0) // Berries that aren't eaten naturally ignore unnerve + return FALSE; + + if (IsUnnerveAbilityOnOpposingSide(battler)) + return TRUE; + + return FALSE; +} + +static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler) +{ + for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { + if (battler == battlerDef || IsBattlerAlly(battler, battlerDef)) + continue; + + if (!IsBattlerAlive(battlerDef)) + continue; + + enum Ability ability = GetBattlerAbility(battlerDef); + switch (ability) + { + case ABILITY_UNNERVE: + case ABILITY_AS_ONE_ICE_RIDER: + case ABILITY_AS_ONE_SHADOW_RIDER: + return TRUE; + default: + break; + } + } + + return FALSE; +} + bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move) { - u32 ability = GetBattlerAbility(battlerAtk); + enum Ability ability = GetBattlerAbility(battlerAtk); enum BattleMoveEffects effect = GetMoveEffect(move); if (gSideTimers[defSide].followmeTimer == 0 || (!IsBattlerAlive(gSideTimers[defSide].followmeTarget) && !IsDragonDartsSecondHit(effect)) || effect == EFFECT_SNIPE_SHOT || effect == EFFECT_SKY_DROP - || ability == ABILITY_PROPELLER_TAIL - || ability == ABILITY_STALWART) + || IsAbilityAndRecord(battlerAtk, ability, ABILITY_PROPELLER_TAIL) + || IsAbilityAndRecord(battlerAtk, ability, ABILITY_STALWART)) return FALSE; if (effect == EFFECT_PURSUIT && IsPursuitTargetSet()) return FALSE; - if (gSideTimers[defSide].followmePowder && !IsAffectedByPowder(battlerAtk, ability, GetBattlerHoldEffect(battlerAtk, TRUE))) + if (gSideTimers[defSide].followmePowder && !IsAffectedByPowderMove(battlerAtk, ability, GetBattlerHoldEffect(battlerAtk))) return FALSE; return TRUE; @@ -309,10 +395,10 @@ bool32 HandleMoveTargetRedirection(void) { u32 redirectorOrderNum = MAX_BATTLERS_COUNT; u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); - u32 moveType = GetBattleMoveType(gCurrentMove); + enum Type moveType = GetBattleMoveType(gCurrentMove); enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); u32 side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); - u32 ability = GetBattlerAbility(gBattleStruct->moveTarget[gBattlerAttacker]); + enum Ability ability = GetBattlerAbility(gBattleStruct->moveTarget[gBattlerAttacker]); if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove) && moveTarget == MOVE_TARGET_SELECTED @@ -328,6 +414,7 @@ bool32 HandleMoveTargetRedirection(void) || (ability != ABILITY_STORM_DRAIN && moveType == TYPE_WATER))) { // Find first battler that redirects the move (in turn order) + enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); u32 battler; for (battler = 0; battler < gBattlersCount; battler++) { @@ -340,23 +427,19 @@ bool32 HandleMoveTargetRedirection(void) && GetBattlerTurnOrderNum(battler) < redirectorOrderNum && moveEffect != EFFECT_SNIPE_SHOT && moveEffect != EFFECT_PLEDGE - && GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL - && GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART) + && !IsAbilityAndRecord(gBattlerAttacker, abilityAtk, ABILITY_PROPELLER_TAIL) + && !IsAbilityAndRecord(gBattlerAttacker, abilityAtk, ABILITY_STALWART)) { redirectorOrderNum = GetBattlerTurnOrderNum(battler); } } - if (redirectorOrderNum != MAX_BATTLERS_COUNT) + if (redirectorOrderNum != MAX_BATTLERS_COUNT && gCurrentMove != MOVE_TEATIME) { - u16 battlerAbility; + enum Ability battlerAbility; battler = gBattlerByTurnOrder[redirectorOrderNum]; battlerAbility = GetBattlerAbility(battler); - - RecordAbilityBattle(battler, gBattleMons[battler].ability); - if (battlerAbility == ABILITY_LIGHTNING_ROD && gCurrentMove != MOVE_TEATIME) - gSpecialStatuses[battler].lightningRodRedirected = TRUE; - else if (battlerAbility == ABILITY_STORM_DRAIN) - gSpecialStatuses[battler].stormDrainRedirected = TRUE; + RecordAbilityBattle(battler, battlerAbility); + gSpecialStatuses[battler].abilityRedirected = TRUE; gBattlerTarget = battler; return TRUE; } @@ -370,7 +453,7 @@ void HandleAction_UseMove(void) u32 i, moveTarget; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - if (gBattleStruct->battlerState[gBattlerAttacker].absent + if (gAbsentBattlerFlags & 1u << gBattlerAttacker || gBattleStruct->battlerState[gBattlerAttacker].commandingDondozo || !IsBattlerAlive(gBattlerAttacker)) { @@ -378,12 +461,6 @@ void HandleAction_UseMove(void) return; } - gBattleStruct->atkCancellerTracker = 0; - ClearDamageCalcResults(); - gMultiHitCounter = 0; - gBattleScripting.savedDmg = 0; - gBattleCommunication[MISS_TYPE] = 0; - gBattleScripting.savedMoveEffect = 0; gCurrMovePos = gChosenMovePos = gBattleStruct->chosenMovePositions[gBattlerAttacker]; // choose move @@ -391,10 +468,9 @@ void HandleAction_UseMove(void) { gProtectStructs[gBattlerAttacker].noValidMoves = FALSE; gCurrentMove = gChosenMove = MOVE_STRUGGLE; - gHitMarker |= HITMARKER_NO_PPDEDUCT; gBattleStruct->moveTarget[gBattlerAttacker] = GetBattleMoveTarget(MOVE_STRUGGLE, NO_TARGET_OVERRIDE); } - else if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) + else if (gBattleMons[gBattlerAttacker].volatiles.multipleTurns || gDisableStructs[gBattlerAttacker].rechargeTimer > 0) { gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker]; } @@ -404,7 +480,8 @@ void HandleAction_UseMove(void) { gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove; gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos; - gBattleStruct->moveTarget[gBattlerAttacker] = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); + if (GetConfig(CONFIG_ENCORE_TARGET) < GEN_5) + gBattleStruct->moveTarget[gBattlerAttacker] = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } // check if the encored move wasn't overwritten else if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE @@ -451,6 +528,11 @@ void HandleAction_UseMove(void) gCurrentMove = gChosenMove = GetMaxMove(gBattlerAttacker, gCurrentMove); } + gBattleStruct->eventState.atkCanceler = 0; + ClearDamageCalcResults(); + gMultiHitCounter = 0; + gBattleCommunication[MISS_TYPE] = 0; + moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); if (!HandleMoveTargetRedirection()) @@ -487,9 +569,10 @@ void HandleAction_UseMove(void) } else { - gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); + gBattlerTarget = gBattleStruct->moveTarget[gBattlerAttacker]; if (!IsBattlerAlive(gBattlerTarget) && moveTarget != MOVE_TARGET_OPPONENTS_FIELD + && IsDoubleBattle() && (!IsBattlerAlly(gBattlerAttacker, gBattlerTarget))) { gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); @@ -517,8 +600,7 @@ void HandleAction_UseMove(void) gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; } } - - if (IsBattlerAlly(gBattlerAttacker, gBattlerTarget) && !IsBattlerAlive(gBattlerTarget)) + else if (IsBattlerAlly(gBattlerAttacker, gBattlerTarget) && !IsBattlerAlive(gBattlerTarget)) { gBattlescriptCurrInstr = BattleScript_FailedFromAtkCanceler; } @@ -537,7 +619,7 @@ void HandleAction_UseMove(void) BattleArena_AddMindPoints(gBattlerAttacker); for (i = 0; i < MAX_BATTLERS_COUNT; i++) - gBattleStruct->hpBefore[i] = gBattleMons[i].hp; + gBattleStruct->battlerState[i].wasAboveHalfHp = gBattleMons[i].hp > gBattleMons[i].maxHP / 2; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -580,6 +662,11 @@ void HandleAction_UseItem(void) ClearVariousBattlerFlags(gBattlerAttacker); gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][1] | (gBattleResources->bufferB[gBattlerAttacker][2] << 8); + if (X_ITEM_FRIENDSHIP_INCREASE > 0 + && GetItemEffectType(gLastUsedItem) == ITEM_EFFECT_X_ITEM + && !ShouldSkipFriendshipChange()) + UpdateFriendshipFromXItem(gBattlerAttacker); + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[GetItemBattleUsage(gLastUsedItem) - 1]; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -614,7 +701,7 @@ bool32 TryRunFromBattle(u32 battler) } else if (GetBattlerAbility(battler) == ABILITY_RUN_AWAY) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { gBattleStruct->runTries++; pyramidMultiplier = GetPyramidRunMultiplier(); @@ -647,7 +734,7 @@ bool32 TryRunFromBattle(u32 battler) if (!IsBattlerAlive(runningFromBattler)) runningFromBattler |= BIT_FLANK; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { pyramidMultiplier = GetPyramidRunMultiplier(); speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[runningFromBattler].speed) + (gBattleStruct->runTries * 30); @@ -717,7 +804,9 @@ void HandleAction_Run(void) } else { - if (!CanBattlerEscape(gBattlerAttacker)) + if (GetBattlerHoldEffect(gBattlerAttacker) != HOLD_EFFECT_CAN_ALWAYS_RUN + && GetBattlerAbility(gBattlerAttacker) != ABILITY_RUN_AWAY + && !CanBattlerEscape(gBattlerAttacker)) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ATTACKER_CANT_ESCAPE; gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; @@ -845,7 +934,7 @@ void HandleAction_TryFinish(void) { if (!HandleFaintedMonActions()) { - gBattleStruct->faintedActionsState = 0; + gBattleStruct->eventState.faintedAction = 0; gCurrentActionFuncId = B_ACTION_FINISHED; } } @@ -854,9 +943,8 @@ void HandleAction_NothingIsFainted(void) { gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; - gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_PASSIVE_DAMAGE - | HITMARKER_OBEYS | HITMARKER_SYNCHRONIZE_EFFECT | HITMARKER_CHARGING); + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_NONE; + gHitMarker &= ~(HITMARKER_OBEYS); } void HandleAction_ActionFinished(void) @@ -866,14 +954,11 @@ void HandleAction_ActionFinished(void) gBattleStruct->monToSwitchIntoId[gBattlerByTurnOrder[gCurrentTurnActionNumber]] = gSelectedMonPartyId = PARTY_SIZE; gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; - SpecialStatusesClear(); - gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_PASSIVE_DAMAGE - | HITMARKER_OBEYS | HITMARKER_SYNCHRONIZE_EFFECT - | HITMARKER_CHARGING | HITMARKER_IGNORE_DISGUISE); + memset(&gSpecialStatuses, 0, sizeof(gSpecialStatuses)); + gHitMarker &= ~(HITMARKER_OBEYS); + gCurrentMove = MOVE_NONE; ClearDamageCalcResults(); - gCurrentMove = 0; gBattleScripting.animTurn = 0; gBattleScripting.animTargetsHit = 0; gBattleStruct->dynamicMoveType = 0; @@ -882,34 +967,41 @@ void HandleAction_ActionFinished(void) gBattleScripting.moveendState = 0; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; - gBattleScripting.multihitMoveEffect = 0; gBattleResources->battleScriptsStack->size = 0; + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_NONE; - if (B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 && !afterYouActive && !gBattleStruct->pledgeMove && !IsPursuitTargetSet()) + if (GetConfig(CONFIG_RECALC_TURN_AFTER_ACTIONS) >= GEN_8 && !afterYouActive && !gBattleStruct->pledgeMove && !IsPursuitTargetSet()) { // i starts at `gCurrentTurnActionNumber` because we don't want to recalculate turn order for mon that have already // taken action. It's been previously increased, which we want in order to not recalculate the turn of the mon that just finished its action + + struct BattleContext ctx = {0}; + for (i = 0; i < gBattlersCount; i++) + { + ctx.abilities[i] = GetBattlerAbility(i); + ctx.holdEffects[i] = GetBattlerHoldEffect(i); + } for (i = gCurrentTurnActionNumber; i < gBattlersCount - 1; i++) { for (j = i + 1; j < gBattlersCount; j++) { - u32 battler1 = gBattlerByTurnOrder[i]; - u32 battler2 = gBattlerByTurnOrder[j]; + ctx.battlerAtk = gBattlerByTurnOrder[i]; + ctx.battlerDef = gBattlerByTurnOrder[j]; - if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash - || gProtectStructs[battler1].shellTrap || gProtectStructs[battler2].shellTrap) + if (gProtectStructs[ctx.battlerAtk].quash || gProtectStructs[ctx.battlerDef].quash + || gProtectStructs[ctx.battlerAtk].shellTrap || gProtectStructs[ctx.battlerDef].shellTrap) continue; // We recalculate order only for action of the same priority. If any action other than switch/move has been taken, they should // have been executed before. The only recalculation needed is for moves/switch. Mega evolution is handled in src/battle_main.c/TryChangeOrder if ((gActionsByTurnOrder[i] == B_ACTION_USE_MOVE && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE)) { - if (GetWhichBattlerFaster(battler1, battler2, FALSE) == -1) + if (GetWhichBattlerFaster(&ctx, FALSE) == -1) SwapTurnOrder(i, j); } else if ((gActionsByTurnOrder[i] == B_ACTION_SWITCH && gActionsByTurnOrder[j] == B_ACTION_SWITCH)) { - if (GetWhichBattlerFaster(battler1, battler2, TRUE) == -1) // If the actions chosen are switching, we recalc order but ignoring the moves + if (GetWhichBattlerFaster(&ctx, TRUE) == -1) // If the actions chosen are switching, we recalc order but ignoring the moves SwapTurnOrder(i, j); } } @@ -1028,7 +1120,7 @@ const u8 *CheckSkyDropState(u32 battler, enum SkyDropState skyDropState) const u8 *result = NULL; u8 otherSkyDropper = gBattleStruct->skyDropTargets[battler]; - gStatuses3[otherSkyDropper] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR); + gBattleMons[battler].volatiles.semiInvulnerable = STATE_NONE; // Makes both attacker and target's sprites visible gSprites[gBattlerSpriteIds[battler]].invisible = FALSE; @@ -1037,28 +1129,29 @@ const u8 *CheckSkyDropState(u32 battler, enum SkyDropState skyDropState) // If target was sky dropped in the middle of Outrage/Thrash/Petal Dance, // confuse them upon release and display "confused by fatigue" message & animation. // Don't do this if this CancelMultiTurnMoves is caused by falling asleep via Yawn. - if (gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE && skyDropState != SKY_DROP_STATUS_YAWN) + if (gBattleMons[otherSkyDropper].volatiles.lockConfusionTurns && skyDropState != SKY_DROP_STATUS_YAWN) { - gBattleMons[otherSkyDropper].status2 &= ~(STATUS2_LOCK_CONFUSE); + gBattleMons[otherSkyDropper].volatiles.lockConfusionTurns = 0; // If the target can be confused, confuse them. // Don't use CanBeConfused, can cause issues in edge cases. - if (!(GetBattlerAbility(otherSkyDropper) == ABILITY_OWN_TEMPO - || gBattleMons[otherSkyDropper].status2 & STATUS2_CONFUSION - || IsBattlerTerrainAffected(otherSkyDropper, STATUS_FIELD_MISTY_TERRAIN))) + enum Ability ability = GetBattlerAbility(otherSkyDropper); + if (!(gBattleMons[otherSkyDropper].volatiles.confusionTurns > 0 + || IsAbilityAndRecord(otherSkyDropper, ability, ABILITY_OWN_TEMPO) + || IsBattlerTerrainAffected(otherSkyDropper, ability, GetBattlerHoldEffect(otherSkyDropper), STATUS_FIELD_MISTY_TERRAIN))) { // Set confused status - gBattleMons[otherSkyDropper].status2 |= STATUS2_CONFUSION_TURN(((Random()) % 4) + 2); + gBattleMons[otherSkyDropper].volatiles.confusionTurns = ((Random()) % 4) + 2; - if (skyDropState == SKY_DROP_ATTACKCANCELLER_CHECK) + if (skyDropState == SKY_DROP_ATTACKCANCELER_CHECK) { gBattleStruct->skyDropTargets[battler] = SKY_DROP_RELEASED_TARGET; } else if (skyDropState == SKY_DROP_GRAVITY_ON_AIRBORNE) { - // Reapplying STATUS3_SKY_DROPPED allows for avoiding unecessary messages when Gravity is applied to the target. + // Reapplying STATE_SKY_DROPPED allows for avoiding unecessary messages when Gravity is applied to the target. gBattleStruct->skyDropTargets[battler] = SKY_DROP_RELEASED_TARGET; - gStatuses3[otherSkyDropper] |= STATUS3_SKY_DROPPED; + gBattleMons[otherSkyDropper].volatiles.semiInvulnerable = STATE_SKY_DROP; } else if (skyDropState == SKY_DROP_CANCEL_MULTI_TURN_MOVES) { @@ -1075,7 +1168,7 @@ const u8 *CheckSkyDropState(u32 battler, enum SkyDropState skyDropState) } // Clear skyDropTargets data, unless this CancelMultiTurnMoves is caused by Yawn, attackcanceler, or VARIOUS_GRAVITY_ON_AIRBORNE_MONS - if (!(gBattleMons[otherSkyDropper].status2 & STATUS2_LOCK_CONFUSE) && gBattleStruct->skyDropTargets[battler] < 4) + if (!(gBattleMons[otherSkyDropper].volatiles.lockConfusionTurns) && gBattleStruct->skyDropTargets[battler] < 4) { gBattleStruct->skyDropTargets[battler] = SKY_DROP_NO_TARGET; gBattleStruct->skyDropTargets[otherSkyDropper] = SKY_DROP_NO_TARGET; @@ -1087,25 +1180,25 @@ const u8 *CheckSkyDropState(u32 battler, enum SkyDropState skyDropState) const u8 *CancelMultiTurnMoves(u32 battler, enum SkyDropState skyDropState) { const u8 *result = NULL; - gBattleMons[battler].status2 &= ~(STATUS2_UPROAR); - gBattleMons[battler].status2 &= ~(STATUS2_BIDE); + gBattleMons[battler].volatiles.uproarTurns = 0; + gBattleMons[battler].volatiles.bideTurns = 0; if (B_RAMPAGE_CANCELLING < GEN_5) { - gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS); - gBattleMons[battler].status2 &= ~(STATUS2_LOCK_CONFUSE); + gBattleMons[battler].volatiles.multipleTurns = 0; + gBattleMons[battler].volatiles.lockConfusionTurns = 0; } - else if (!(gBattleMons[battler].status2 & STATUS2_LOCK_CONFUSE) - || ((gBattleMons[battler].status2 & STATUS2_LOCK_CONFUSE) > STATUS2_LOCK_CONFUSE_TURN(1))) + else if (!gBattleMons[battler].volatiles.lockConfusionTurns + || gBattleMons[battler].volatiles.lockConfusionTurns > 1) { - gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS); + gBattleMons[battler].volatiles.multipleTurns = 0; } // Clear battler's semi-invulnerable bits if they are not held by Sky Drop. - if (!(gStatuses3[battler] & STATUS3_SKY_DROPPED)) - gStatuses3[battler] &= ~(STATUS3_SEMI_INVULNERABLE); + if (gBattleMons[battler].volatiles.semiInvulnerable != STATE_SKY_DROP) + gBattleMons[battler].volatiles.semiInvulnerable = STATE_NONE; - if (gBattleStruct->skyDropTargets[battler] != SKY_DROP_NO_TARGET && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) + if (gBattleStruct->skyDropTargets[battler] != SKY_DROP_NO_TARGET && gBattleMons[battler].volatiles.semiInvulnerable != STATE_SKY_DROP) result = CheckSkyDropState(battler, skyDropState); gDisableStructs[battler].rolloutTimer = 0; @@ -1118,57 +1211,109 @@ bool32 WasUnableToUseMove(u32 battler) { if (gProtectStructs[battler].nonVolatileStatusImmobility || gProtectStructs[battler].unableToUseMove - || gProtectStructs[battler].powderSelfDmg || gProtectStructs[battler].confusionSelfDmg) return TRUE; return FALSE; } +// Returns TRUE if no other battler after this one in turn order will use a move +bool32 IsLastMonToMove(u32 battler) +{ + u32 i; + u32 battlerTurnOrderNum = GetBattlerTurnOrderNum(battler); + + if (battlerTurnOrderNum >= gBattlersCount - 1) + return TRUE; + + for (i = battlerTurnOrderNum + 1; i < gBattlersCount; i++) + { + u32 otherBattler = gBattlerByTurnOrder[i]; + if (!IsBattlerAlive(otherBattler)) + continue; + if (gActionsByTurnOrder[i] == B_ACTION_USE_MOVE) + return FALSE; + } + return TRUE; +} + +bool32 ShouldDefiantCompetitiveActivate(u32 battler, enum Ability ability) +{ + u32 side = GetBattlerSide(battler); + if (ability != ABILITY_DEFIANT && ability != ABILITY_COMPETITIVE) + return FALSE; + // if an ally dropped the stats (except for Sticky Web), don't activate + if (IsBattlerAlly(gSpecialStatuses[battler].changedStatsBattlerId, battler) && !gBattleScripting.stickyWebStatDrop) + return FALSE; + + if (GetConfig(CONFIG_DEFIANT_STICKY_WEB) >= GEN_9 || !gBattleScripting.stickyWebStatDrop) + return TRUE; + // only activate Defiant/Competitive if Web was setup by foe + return gSideTimers[side].stickyWebBattlerSide != side; +} + void PrepareStringBattle(enum StringID stringId, u32 battler) { - u32 targetSide = GetBattlerSide(gBattlerTarget); u16 battlerAbility = GetBattlerAbility(battler); u16 targetAbility = GetBattlerAbility(gBattlerTarget); // Support for Contrary ability. // If a move attempted to raise stat - print "won't increase". // If a move attempted to lower stat - print "won't decrease". - if (stringId == STRINGID_STATSWONTDECREASE && !(gBattleScripting.statChanger & STAT_BUFF_NEGATIVE)) - stringId = STRINGID_STATSWONTINCREASE; - else if (stringId == STRINGID_STATSWONTINCREASE && gBattleScripting.statChanger & STAT_BUFF_NEGATIVE) - stringId = STRINGID_STATSWONTDECREASE; - - else if (stringId == STRINGID_STATSWONTDECREASE2 && battlerAbility == ABILITY_CONTRARY) - stringId = STRINGID_STATSWONTINCREASE2; - else if (stringId == STRINGID_STATSWONTINCREASE2 && battlerAbility == ABILITY_CONTRARY) - stringId = STRINGID_STATSWONTDECREASE2; - - // Check Defiant and Competitive stat raise whenever a stat is lowered. - else if ((stringId == STRINGID_DEFENDERSSTATFELL || stringId == STRINGID_PKMNCUTSATTACKWITH) - && ((targetAbility == ABILITY_DEFIANT && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) - || (targetAbility == ABILITY_COMPETITIVE && CompareStat(gBattlerTarget, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN))) - && gSpecialStatuses[gBattlerTarget].changedStatsBattlerId != BATTLE_PARTNER(gBattlerTarget) - && ((gSpecialStatuses[gBattlerTarget].changedStatsBattlerId != gBattlerTarget) || gBattleScripting.stickyWebStatDrop == 1) - && !(gBattleScripting.stickyWebStatDrop == 1 && gSideTimers[targetSide].stickyWebBattlerSide == targetSide)) // Sticky Web must have been set by the foe + switch (stringId) + { + case STRINGID_ATTACKERSSTATROSE: + case STRINGID_DEFENDERSSTATROSE: + case STRINGID_STATSWONTINCREASE: + case STRINGID_USINGITEMSTATOFPKMNROSE: + if (gBattleScripting.statChanger & STAT_BUFF_NEGATIVE) + stringId = gStatDownStringIds[gBattleCommunication[MULTISTRING_CHOOSER]]; + break; + case STRINGID_ATTACKERSSTATFELL: + case STRINGID_DEFENDERSSTATFELL: + case STRINGID_STATSWONTDECREASE: + case STRINGID_USINGITEMSTATOFPKMNFELL: + if (!(gBattleScripting.statChanger & STAT_BUFF_NEGATIVE)) + stringId = gStatUpStringIds[gBattleCommunication[MULTISTRING_CHOOSER]]; + break; + case STRINGID_STATSWONTINCREASE2: + if (battlerAbility == ABILITY_CONTRARY) + stringId = STRINGID_STATSWONTDECREASE2; + break; + case STRINGID_STATSWONTDECREASE2: + if (battlerAbility == ABILITY_CONTRARY) + stringId = STRINGID_STATSWONTINCREASE2; + break; + case STRINGID_PKMNCUTSATTACKWITH: + if (GetConfig(CONFIG_UPDATED_INTIMIDATE) >= GEN_8 + && targetAbility == ABILITY_RATTLED + && CompareStat(gBattlerTarget, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, targetAbility)) + { + gBattlerAbility = gBattlerTarget; + BattleScriptCall(BattleScript_AbilityRaisesDefenderStat); + SET_STATCHANGER(STAT_SPEED, 1, FALSE); + } + else if (targetAbility == ABILITY_CONTRARY) + { + stringId = STRINGID_DEFENDERSSTATROSE; + } + break; + case STRINGID_ITDOESNTAFFECT: + case STRINGID_PKMNUNAFFECTED: + TryInitializeTrainerSlideEnemyMonUnaffected(gBattlerTarget); + break; + default: + break; + } + + if ((stringId == STRINGID_PKMNCUTSATTACKWITH || stringId == STRINGID_DEFENDERSSTATFELL) + && ShouldDefiantCompetitiveActivate(gBattlerTarget, targetAbility)) { gBattlerAbility = gBattlerTarget; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityRaisesDefenderStat; + BattleScriptCall(BattleScript_AbilityRaisesDefenderStat); if (targetAbility == ABILITY_DEFIANT) SET_STATCHANGER(STAT_ATK, 2, FALSE); else SET_STATCHANGER(STAT_SPATK, 2, FALSE); } - else if (B_UPDATED_INTIMIDATE >= GEN_8 && stringId == STRINGID_PKMNCUTSATTACKWITH && targetAbility == ABILITY_RATTLED - && CompareStat(gBattlerTarget, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) - { - gBattlerAbility = gBattlerTarget; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityRaisesDefenderStat; - SET_STATCHANGER(STAT_SPEED, 1, FALSE); - } - - if ((stringId == STRINGID_ITDOESNTAFFECT || stringId == STRINGID_PKMNWASNTAFFECTED || stringId == STRINGID_PKMNUNAFFECTED)) - TryInitializeTrainerSlideEnemyMonUnaffected(gBattlerTarget); BtlController_EmitPrintString(battler, B_COMM_TO_CONTROLLER, stringId); MarkBattlerForControllerExec(battler); @@ -1232,6 +1377,12 @@ void BattleScriptPushCursor(void) gBattleResources->battleScriptsStack->ptr[gBattleResources->battleScriptsStack->size++] = gBattlescriptCurrInstr; } +void BattleScriptCall(const u8 *bsPtr) +{ + BattleScriptPushCursor(); + gBattlescriptCurrInstr = bsPtr; +} + void BattleScriptPop(void) { if (gBattleResources->battleScriptsStack->size != 0) @@ -1248,7 +1399,7 @@ static bool32 IsGravityPreventingMove(u32 move) bool32 IsHealBlockPreventingMove(u32 battler, u32 move) { - if (!(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + if (!gBattleMons[battler].volatiles.healBlock) return FALSE; return IsHealingMove(move); @@ -1259,7 +1410,7 @@ bool32 IsBelchPreventingMove(u32 battler, u32 move) if (GetMoveEffect(move) != EFFECT_BELCH) return FALSE; - return !gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].ateBerry; + return !GetBattlerPartyState(battler)->ateBerry; } // Dynamax bypasses all selection prevention except Taunt and Assault Vest. @@ -1270,10 +1421,28 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) u32 limitations = 0; u8 moveId = gBattleResources->bufferB[battler][2] & ~RET_GIMMICK; u32 move = gBattleMons[battler].moves[moveId]; - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); u16 *choicedMove = &gBattleStruct->choicedMove[battler]; enum BattleMoveEffects moveEffect = GetMoveEffect(move); + if (GetConfig(CONFIG_ENCORE_TARGET) >= GEN_5 + && DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].encoredMove != move && gDisableStructs[battler].encoredMove != MOVE_NONE) + { + gBattleScripting.battler = battler; + gCurrentMove = gDisableStructs[battler].encoredMove; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) + { + gPalaceSelectionBattleScripts[battler] = BattleScript_EncoredMoveInPalace; + gProtectStructs[battler].palaceUnableToUseMove = TRUE; + } + else + { + gSelectionBattleScripts[battler] = BattleScript_EncoredMove; + limitations++; + } + return limitations; + } + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE) { gBattleScripting.battler = battler; @@ -1290,7 +1459,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].volatiles.torment == TRUE)) { CancelMultiTurnMoves(battler, SKY_DROP_IGNORE); if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1323,7 +1492,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } } - if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].throatChopTimer > gBattleTurnCounter && IsSoundMove(move)) + if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].throatChopTimer > 0 && IsSoundMove(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1430,7 +1599,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) } gPotentialItemEffectBattler = battler; - if (DYNAMAX_BYPASS_CHECK && HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) + if (DYNAMAX_BYPASS_CHECK && IsHoldEffectChoice(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) { gCurrentMove = *choicedMove; gLastUsedItem = gBattleMons[battler].item; @@ -1510,11 +1679,11 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) return limitations; } -u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) +u32 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) { u32 move; enum BattleMoveEffects moveEffect; - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); u16 *choicedMove = &gBattleStruct->choicedMove[battler]; s32 i; @@ -1537,7 +1706,7 @@ u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) else if (check & MOVE_LIMITATION_DISABLED && move == gDisableStructs[battler].disabledMove) unusableMoves |= 1u << i; // Torment - else if (check & MOVE_LIMITATION_TORMENTED && move == gLastMoves[battler] && gBattleMons[battler].status2 & STATUS2_TORMENT) + else if (check & MOVE_LIMITATION_TORMENTED && move == gLastMoves[battler] && gBattleMons[battler].volatiles.torment == TRUE) unusableMoves |= 1u << i; // Taunt else if (check & MOVE_LIMITATION_TAUNT && gDisableStructs[battler].tauntTimer && IsBattleMoveStatus(move)) @@ -1549,7 +1718,7 @@ u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) else if (check & MOVE_LIMITATION_ENCORE && gDisableStructs[battler].encoreTimer && gDisableStructs[battler].encoredMove != move) unusableMoves |= 1u << i; // Choice Items - else if (check & MOVE_LIMITATION_CHOICE_ITEM && HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) + else if (check & MOVE_LIMITATION_CHOICE_ITEM && IsHoldEffectChoice(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) unusableMoves |= 1u << i; // Assault Vest else if (check & MOVE_LIMITATION_ASSAULT_VEST && holdEffect == HOLD_EFFECT_ASSAULT_VEST && IsBattleMoveStatus(move) && moveEffect != EFFECT_ME_FIRST) @@ -1564,7 +1733,7 @@ u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) else if (check & MOVE_LIMITATION_BELCH && IsBelchPreventingMove(battler, move)) unusableMoves |= 1u << i; // Throat Chop - else if (check & MOVE_LIMITATION_THROAT_CHOP && gDisableStructs[battler].throatChopTimer > gBattleTurnCounter && IsSoundMove(move)) + else if (check & MOVE_LIMITATION_THROAT_CHOP && gDisableStructs[battler].throatChopTimer > 0 && IsSoundMove(move)) unusableMoves |= 1u << i; // Stuff Cheeks else if (check & MOVE_LIMITATION_STUFF_CHEEKS && moveEffect == EFFECT_STUFF_CHEEKS && GetItemPocket(gBattleMons[battler].item) != POCKET_BERRIES) @@ -1582,7 +1751,7 @@ u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) #define ALL_MOVES_MASK ((1 << MAX_MON_MOVES) - 1) bool32 AreAllMovesUnusable(u32 battler) { - u8 unusable = CheckMoveLimitations(battler, 0, MOVE_LIMITATIONS_ALL); + u32 unusable = CheckMoveLimitations(battler, 0, MOVE_LIMITATIONS_ALL); if (unusable == ALL_MOVES_MASK) // All moves are unusable. { @@ -1605,7 +1774,7 @@ u8 GetImprisonedMovesCount(u32 battler, u16 move) for (i = 0; i < gBattlersCount; i++) { - if (battlerSide != GetBattlerSide(i) && gStatuses3[i] & STATUS3_IMPRISONED_OTHERS) + if (battlerSide != GetBattlerSide(i) && gBattleMons[i].volatiles.imprison) { s32 j; for (j = 0; j < MAX_MON_MOVES; j++) @@ -1642,33 +1811,30 @@ u32 GetBattlerAffectionHearts(u32 battler) // gBattlerAttacker is the battler that's trying to raise their stats and due to limitations of RandomUniformExcept, cannot be an argument bool32 MoodyCantRaiseStat(u32 stat) { - return CompareStat(gBattlerAttacker, stat, MAX_STAT_STAGE, CMP_EQUAL); + return CompareStat(gBattlerAttacker, stat, MAX_STAT_STAGE, CMP_EQUAL, GetBattlerAbility(gBattlerAttacker)); } // gBattlerAttacker is the battler that's trying to lower their stats and due to limitations of RandomUniformExcept, cannot be an argument bool32 MoodyCantLowerStat(u32 stat) { - return stat == GET_STAT_BUFF_ID(gBattleScripting.statChanger) || CompareStat(gBattlerAttacker, stat, MIN_STAT_STAGE, CMP_EQUAL); + return stat == GET_STAT_BUFF_ID(gBattleScripting.statChanger) || CompareStat(gBattlerAttacker, stat, MIN_STAT_STAGE, CMP_EQUAL, GetBattlerAbility(gBattlerAttacker)); } void TryToRevertMimicryAndFlags(void) { - u32 i; - - for (i = 0; i < gBattlersCount; i++) + for (u32 battler = 0; battler < gBattlersCount; battler++) { - gDisableStructs[i].terrainAbilityDone = FALSE; - if (GetBattlerAbility(i) == ABILITY_MIMICRY) - RESTORE_BATTLER_TYPE(i); + gDisableStructs[battler].terrainAbilityDone = FALSE; + ResetParadoxTerrainStat(battler); + if (IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MIMICRY)) + RESTORE_BATTLER_TYPE(battler); } } bool32 BattleArenaTurnEnd(void) { - gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_IGNORE_BIDE); - if ((gBattleTypeFlags & BATTLE_TYPE_ARENA) - && gBattleStruct->arenaTurnCounter == 2 + && gBattleStruct->eventState.arenaTurn == 2 && IsBattlerAlive(B_POSITION_PLAYER_LEFT) && IsBattlerAlive(B_POSITION_OPPONENT_LEFT)) { for (u32 battler = 0; battler < 2; battler++) @@ -1678,34 +1844,30 @@ bool32 BattleArenaTurnEnd(void) BattleScriptExecute(BattleScript_ArenaDoJudgment); return TRUE; } - - gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_IGNORE_BIDE); - return FALSE; } // Ingrain, Leech Seed, Strength Sap and Aqua Ring s32 GetDrainedBigRootHp(u32 battler, s32 hp) { - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_BIG_ROOT) + if (GetBattlerHoldEffect(battler) == HOLD_EFFECT_BIG_ROOT) hp = (hp * 1300) / 1000; if (hp == 0) hp = 1; - return hp * -1; + return hp; } -// This should always be the last check. Otherwise the ability might be recorded when it is not supposed to be -bool32 IsMagicGuardProtected(u32 battler, u32 ability) +// Should always be the last check. Otherwise the ability might be wrongly recorded. +bool32 IsAbilityAndRecord(u32 battler, enum Ability battlerAbility, enum Ability abilityToCheck) { - if (ability != ABILITY_MAGIC_GUARD) + if (battlerAbility != abilityToCheck) return FALSE; - RecordAbilityBattle(battler, ability); + RecordAbilityBattle(battler, abilityToCheck); return TRUE; } -#define FAINTED_ACTIONS_MAX_CASE 7 bool32 HandleFaintedMonActions(void) { if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) @@ -1713,38 +1875,38 @@ bool32 HandleFaintedMonActions(void) do { s32 i; - switch (gBattleStruct->faintedActionsState) + switch (gBattleStruct->eventState.faintedAction) { - case 0: - gBattleStruct->faintedActionsBattlerId = 0; - gBattleStruct->faintedActionsState++; + case FAINTED_ACTIONS_NO_MONS_TO_SWITCH: + gBattleStruct->eventState.faintedActionBattler = 0; + gBattleStruct->eventState.faintedAction++; for (i = 0; i < gBattlersCount; i++) { if (gAbsentBattlerFlags & (1u << i) && !HasNoMonsToSwitch(i, PARTY_SIZE, PARTY_SIZE)) gAbsentBattlerFlags &= ~(1u << i); } // fall through - case 1: + case FAINTED_ACTIONS_GIVE_EXP: do { - gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId; - if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0 - && !(gBattleStruct->givenExpMons & (1u << gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId])) - && !(gAbsentBattlerFlags & (1u << gBattleStruct->faintedActionsBattlerId))) + gBattlerFainted = gBattlerTarget = gBattleStruct->eventState.faintedActionBattler; + if (gBattleMons[gBattleStruct->eventState.faintedActionBattler].hp == 0 + && !(gBattleStruct->givenExpMons & (1u << gBattlerPartyIndexes[gBattleStruct->eventState.faintedActionBattler])) + && !(gAbsentBattlerFlags & (1u << gBattleStruct->eventState.faintedActionBattler))) { BattleScriptExecute(BattleScript_GiveExp); - gBattleStruct->faintedActionsState = 2; + gBattleStruct->eventState.faintedAction = FAINTED_ACTIONS_SET_ABSENT_FLAGS; return TRUE; } - } while (++gBattleStruct->faintedActionsBattlerId != gBattlersCount); - gBattleStruct->faintedActionsState = 3; + } while (++gBattleStruct->eventState.faintedActionBattler != gBattlersCount); + gBattleStruct->eventState.faintedAction = FAINTED_ACTIONS_WAIT_STATE; break; - case 2: + case FAINTED_ACTIONS_SET_ABSENT_FLAGS: OpponentSwitchInResetSentPokesToOpponentValue(gBattlerFainted); - if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount) - gBattleStruct->faintedActionsState = 3; + if (++gBattleStruct->eventState.faintedActionBattler == gBattlersCount) + gBattleStruct->eventState.faintedAction = FAINTED_ACTIONS_WAIT_STATE; else - gBattleStruct->faintedActionsState = 1; + gBattleStruct->eventState.faintedAction = FAINTED_ACTIONS_GIVE_EXP; // Don't switch mons until all pokemon performed their actions or the battle's over. if (B_FAINT_SWITCH_IN >= GEN_4 && gBattleOutcome == 0 @@ -1752,11 +1914,11 @@ bool32 HandleFaintedMonActions(void) && gCurrentTurnActionNumber != gBattlersCount) { gAbsentBattlerFlags |= 1u << gBattlerFainted; - if (gBattleStruct->faintedActionsState != 1) + if (gBattleStruct->eventState.faintedAction != FAINTED_ACTIONS_GIVE_EXP) return FALSE; } break; - case 3: + case FAINTED_ACTIONS_WAIT_STATE: // Don't switch mons until all pokemon performed their actions or the battle's over. if (B_FAINT_SWITCH_IN >= GEN_4 && gBattleOutcome == 0 @@ -1765,38 +1927,33 @@ bool32 HandleFaintedMonActions(void) { return FALSE; } - gBattleStruct->faintedActionsBattlerId = 0; - gBattleStruct->faintedActionsState++; + gBattleStruct->eventState.faintedActionBattler = 0; + gBattleStruct->eventState.faintedAction++; // fall through - case 4: + case FAINTED_ACTIONS_HANDLE_FAINTED_MON: do { - gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId; - if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0 - && !(gAbsentBattlerFlags & (1u << gBattleStruct->faintedActionsBattlerId))) + gBattlerFainted = gBattlerTarget = gBattleStruct->eventState.faintedActionBattler; + if (gBattleMons[gBattleStruct->eventState.faintedActionBattler].hp == 0 + && !(gAbsentBattlerFlags & (1u << gBattleStruct->eventState.faintedActionBattler))) { BattleScriptExecute(BattleScript_HandleFaintedMon); - gBattleStruct->faintedActionsState = 5; + gBattleStruct->eventState.faintedAction = FAINTED_ACTIONS_HANDLE_NEXT_BATTLER; return TRUE; } - } while (++gBattleStruct->faintedActionsBattlerId != gBattlersCount); - gBattleStruct->faintedActionsState = 6; + } while (++gBattleStruct->eventState.faintedActionBattler != gBattlersCount); + gBattleStruct->eventState.faintedAction = FAINTED_ACTIONS_MAX_CASE; break; - case 5: - if (++gBattleStruct->faintedActionsBattlerId == gBattlersCount) - gBattleStruct->faintedActionsState = 6; + case FAINTED_ACTIONS_HANDLE_NEXT_BATTLER: + if (++gBattleStruct->eventState.faintedActionBattler == gBattlersCount) + gBattleStruct->eventState.faintedAction = FAINTED_ACTIONS_MAX_CASE; else - gBattleStruct->faintedActionsState = 4; - break; - case 6: - if (ItemBattleEffects(ITEMEFFECT_NORMAL, 0, TRUE)) - return TRUE; - gBattleStruct->faintedActionsState++; + gBattleStruct->eventState.faintedAction = FAINTED_ACTIONS_HANDLE_FAINTED_MON; break; case FAINTED_ACTIONS_MAX_CASE: break; } - } while (gBattleStruct->faintedActionsState != FAINTED_ACTIONS_MAX_CASE); + } while (gBattleStruct->eventState.faintedAction != FAINTED_ACTIONS_MAX_CASE); return FALSE; } @@ -1805,8 +1962,8 @@ void TryClearRageAndFuryCutter(void) s32 i; for (i = 0; i < gBattlersCount; i++) { - if ((gBattleMons[i].status2 & STATUS2_RAGE) && gChosenMoveByBattler[i] != MOVE_RAGE) - gBattleMons[i].status2 &= ~STATUS2_RAGE; + if (gBattleMons[i].volatiles.rage && gChosenMoveByBattler[i] != MOVE_RAGE) + gBattleMons[i].volatiles.rage = FALSE; if (gDisableStructs[i].furyCutterCounter != 0 && gChosenMoveByBattler[i] != MOVE_FURY_CUTTER) gDisableStructs[i].furyCutterCounter = 0; } @@ -1820,15 +1977,15 @@ static inline bool32 TryFormChangeBeforeMove(void) if (!result) return FALSE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AttackerFormChange; + gBattleScripting.battler = gBattlerAttacker; + BattleScriptCall(BattleScript_BattlerFormChange); return TRUE; } static inline bool32 TryActivatePowderStatus(u32 move) { - u32 partnerMove = gBattleMons[BATTLE_PARTNER(gBattlerAttacker)].moves[gBattleStruct->chosenMovePositions[BATTLE_PARTNER(gBattlerAttacker)]]; - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_POWDER)) + u32 partnerMove = GetChosenMoveFromPosition(BATTLE_PARTNER(gBattlerAttacker)); + if (!gBattleMons[gBattlerAttacker].volatiles.powder) return FALSE; if (GetBattleMoveType(move) == TYPE_FIRE && !gBattleStruct->pledgeMove) return TRUE; @@ -1839,531 +1996,901 @@ static inline bool32 TryActivatePowderStatus(u32 move) return FALSE; } -void SetAtkCancellerForCalledMove(void) +static enum MoveCanceler CancelerClearFlags(struct BattleContext *ctx) { - gBattleStruct->atkCancellerTracker = CANCELLER_HEAL_BLOCKED; - gBattleStruct->isAtkCancelerForCalledMove = TRUE; + gBattleMons[ctx->battlerAtk].volatiles.grudge = FALSE; + gBattleMons[ctx->battlerAtk].volatiles.glaiveRush = FALSE; + return MOVE_STEP_SUCCESS; } -static void CancellerFlags(u32 *effect) +static enum MoveCanceler CancelerStanceChangeOne(struct BattleContext *ctx) { - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_DESTINY_BOND; - gStatuses3[gBattlerAttacker] &= ~STATUS3_GRUDGE; - gStatuses4[gBattlerAttacker] &= ~STATUS4_GLAIVE_RUSH; + if (B_STANCE_CHANGE_FAIL < GEN_7 && gChosenMove == ctx->currentMove && TryFormChangeBeforeMove()) + return MOVE_STEP_BREAK; + return MOVE_STEP_SUCCESS; } -static void CancellerStanceChangeOne(u32 *effect) -{ - if (B_STANCE_CHANGE_FAIL < GEN_7 && TryFormChangeBeforeMove()) - *effect = 1; -} - -static void CancellerSkyDrop(u32 *effect) +static enum MoveCanceler CancelerSkyDrop(struct BattleContext *ctx) { // If Pokemon is being held in Sky Drop - if (gStatuses3[gBattlerAttacker] & STATUS3_SKY_DROPPED) + if (gBattleMons[ctx->battlerAtk].volatiles.semiInvulnerable == STATE_SKY_DROP) { gBattlescriptCurrInstr = BattleScript_MoveEnd; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_FAILURE; } + return MOVE_STEP_SUCCESS; } -static void CancellerRecharge(u32 *effect) +static enum MoveCanceler CancelerRecharge(struct BattleContext *ctx) { - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE) + if (gDisableStructs[ctx->battlerAtk].rechargeTimer > 0) { - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RECHARGE; - gDisableStructs[gBattlerAttacker].rechargeTimer = 0; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_FAILURE; } + return MOVE_STEP_SUCCESS; } -static void CancellerAsleep(u32 *effect) +static enum MoveCanceler CancelerAsleepOrFrozen(struct BattleContext *ctx) { - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) + if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_SLEEP) { - if (UproarWakeUpCheck(gBattlerAttacker)) + if (UproarWakeUpCheck(ctx->battlerAtk)) { - TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), gBattlerPartyIndexes[gBattlerAttacker]); - gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP; - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; - BattleScriptPushCursor(); + TryDeactivateSleepClause(GetBattlerSide(ctx->battlerAtk), gBattlerPartyIndexes[ctx->battlerAtk]); + gBattleMons[ctx->battlerAtk].status1 &= ~STATUS1_SLEEP; + gBattleMons[ctx->battlerAtk].volatiles.nightmare = FALSE; + gEffectBattler = ctx->battlerAtk; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP_UPROAR; - gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; - *effect = 2; + BattleScriptCall(BattleScript_MoveUsedWokeUp); + return MOVE_STEP_REMOVES_STATUS; } else { u8 toSub; - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_EARLY_BIRD) + if (IsAbilityAndRecord(ctx->battlerAtk, ctx->abilities[ctx->battlerAtk], ABILITY_EARLY_BIRD)) toSub = 2; else toSub = 1; - if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) < toSub) - gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP; + if ((gBattleMons[ctx->battlerAtk].status1 & STATUS1_SLEEP) < toSub) + gBattleMons[ctx->battlerAtk].status1 &= ~STATUS1_SLEEP; else - gBattleMons[gBattlerAttacker].status1 -= toSub; - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) + gBattleMons[ctx->battlerAtk].status1 -= toSub; + + enum BattleMoveEffects moveEffect = GetMoveEffect(ctx->currentMove); + if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_SLEEP) { - enum BattleMoveEffects moveEffect = GetMoveEffect(gChosenMove); if (moveEffect != EFFECT_SNORE && moveEffect != EFFECT_SLEEP_TALK) { - gProtectStructs[gBattlerAttacker].nonVolatileStatusImmobility = TRUE; + gProtectStructs[ctx->battlerAtk].nonVolatileStatusImmobility = TRUE; gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 2; + return MOVE_STEP_FAILURE; } } else { - TryDeactivateSleepClause(GetBattlerSide(gBattlerAttacker), gBattlerPartyIndexes[gBattlerAttacker]); - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; - BattleScriptPushCursor(); + TryDeactivateSleepClause(GetBattlerSide(ctx->battlerAtk), gBattlerPartyIndexes[ctx->battlerAtk]); + gBattleMons[ctx->battlerAtk].volatiles.nightmare = FALSE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP; - gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; - *effect = 2; + BattleScriptCall(BattleScript_MoveUsedWokeUp); + return MOVE_STEP_REMOVES_STATUS; } } } -} - -static void CancellerFrozen(u32 *effect) -{ - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE && !MoveThawsUser(gCurrentMove)) + else if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FREEZE && !MoveThawsUser(ctx->currentMove)) { if (!RandomPercentage(RNG_FROZEN, 20)) { - gProtectStructs[gBattlerAttacker].nonVolatileStatusImmobility = TRUE; + gProtectStructs[ctx->battlerAtk].nonVolatileStatusImmobility = TRUE; gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; - gHitMarker |= (HITMARKER_NO_ATTACKSTRING | HITMARKER_UNABLE_TO_USE_MOVE); + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; } else // unfreeze { - gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FREEZE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; + gBattleMons[ctx->battlerAtk].status1 &= ~STATUS1_FREEZE; + BattleScriptCall(BattleScript_MoveUsedUnfroze); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED; } - *effect = 2; + return MOVE_STEP_REMOVES_STATUS; // Move failure but also removes status } + return MOVE_STEP_SUCCESS; } -static void CancellerObedience(u32 *effect) +static enum MoveCanceler CancelerObedience(struct BattleContext *ctx) { - u32 obedienceResult = GetAttackerObedienceForAction(); - if (obedienceResult != OBEYS - && !(gHitMarker & HITMARKER_NO_PPDEDUCT) // Don't check obedience after first hit of multi target move or multi hit moves - && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) + if (!gBattleMons[ctx->battlerAtk].volatiles.multipleTurns) { + enum Obedience obedienceResult = GetAttackerObedienceForAction(); switch (obedienceResult) { + case OBEYS: + gHitMarker |= HITMARKER_OBEYS; + return MOVE_STEP_SUCCESS; case DISOBEYS_LOAFS: // Randomly select, then print a disobedient string // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - break; + gBattleStruct->moveResultFlags[ctx->battlerDef] |= MOVE_RESULT_MISSED; + return MOVE_STEP_FAILURE; case DISOBEYS_HITS_SELF: - gBattlerTarget = gBattlerAttacker; - struct DamageCalculationData damageCalcData; - damageCalcData.battlerAtk = damageCalcData.battlerDef = gBattlerAttacker; - damageCalcData.move = MOVE_NONE; - damageCalcData.moveType = TYPE_MYSTERY; - damageCalcData.isCrit = FALSE; - damageCalcData.randomFactor = FALSE; - damageCalcData.updateFlags = TRUE; - gBattleStruct->moveDamage[gBattlerAttacker] = CalculateMoveDamage(&damageCalcData, 40); + gBattlerTarget = ctx->battlerAtk; + struct DamageContext dmgCtx = {0}; + dmgCtx.battlerAtk = dmgCtx.battlerDef = ctx->battlerAtk; + dmgCtx.move = dmgCtx.chosenMove = MOVE_NONE; + dmgCtx.moveType = TYPE_MYSTERY; + dmgCtx.isCrit = FALSE; + dmgCtx.randomFactor = FALSE; + dmgCtx.updateFlags = TRUE; + dmgCtx.isSelfInflicted = TRUE; + dmgCtx.fixedBasePower = 40; + gBattleStruct->moveDamage[ctx->battlerAtk] = CalculateMoveDamage(&dmgCtx); gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gHitMarker |= HITMARKER_OBEYS; - break; + return MOVE_STEP_FAILURE; // Move doesn't fail but mon hits itself case DISOBEYS_FALL_ASLEEP: if (IsSleepClauseEnabled()) - gBattleStruct->battlerState[gBattlerAttacker].sleepClauseEffectExempt = TRUE; + gBattleStruct->battlerState[ctx->battlerAtk].sleepClauseEffectExempt = TRUE; gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; + gBattleStruct->moveResultFlags[ctx->battlerDef] |= MOVE_RESULT_MISSED; + return MOVE_STEP_FAILURE; break; case DISOBEYS_WHILE_ASLEEP: gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - break; + gBattleStruct->moveResultFlags[ctx->battlerDef] |= MOVE_RESULT_MISSED; + return MOVE_STEP_FAILURE; case DISOBEYS_RANDOM_MOVE: - gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - SetAtkCancellerForCalledMove(); - gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; + gCurrentMove = gCalledMove = gBattleMons[ctx->battlerAtk].moves[gCurrMovePos]; + BattleScriptCall(BattleScript_IgnoresAndUsesRandomMove); gBattlerTarget = GetBattleMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gHitMarker |= HITMARKER_OBEYS; - break; + return MOVE_STEP_BREAK; } - *effect = 1; } - else + gHitMarker |= HITMARKER_OBEYS; + return MOVE_STEP_SUCCESS; +} + +static enum MoveCanceler CancelerPowerPoints(struct BattleContext *ctx) +{ + if (gBattleMons[ctx->battlerAtk].pp[gCurrMovePos] == 0 + && ctx->currentMove != MOVE_STRUGGLE + && !gSpecialStatuses[ctx->battlerAtk].dancerUsedMove + && !gBattleMons[ctx->battlerAtk].volatiles.multipleTurns) { - gHitMarker |= HITMARKER_OBEYS; + gBattlescriptCurrInstr = BattleScript_NoPPForMove; + gBattleStruct->moveResultFlags[ctx->battlerDef] |= MOVE_RESULT_MISSED; + return MOVE_STEP_FAILURE; } + + return MOVE_STEP_SUCCESS; } -static void CancellerTruant(u32 *effect) +static enum MoveCanceler CancelerTruant(struct BattleContext *ctx) { - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter) + if (GetBattlerAbility(ctx->battlerAtk) == ABILITY_TRUANT && gDisableStructs[ctx->battlerAtk].truantCounter) { - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LOAFING; - gBattlerAbility = gBattlerAttacker; + gBattlerAbility = ctx->battlerAtk; gBattlescriptCurrInstr = BattleScript_TruantLoafingAround; - gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; - *effect = 1; + gBattleStruct->moveResultFlags[ctx->battlerDef] |= MOVE_RESULT_MISSED; + return MOVE_STEP_FAILURE; } + return MOVE_STEP_SUCCESS; } -static void CancellerFlinch(u32 *effect) +static enum MoveCanceler CancelerFlinch(struct BattleContext *ctx) { - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED) + if (gBattleMons[ctx->battlerAtk].volatiles.flinched) { - gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + gProtectStructs[ctx->battlerAtk].unableToUseMove = TRUE; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; - } -} - -static void CancellerInLove(u32 *effect) -{ - if (!gBattleStruct->isAtkCancelerForCalledMove && gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) - { - gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10); - if (!RandomPercentage(RNG_INFATUATION, 50)) - { - BattleScriptPushCursor(); - } - else - { - BattleScriptPush(BattleScript_MoveUsedIsInLoveCantAttack); - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); - } - gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove; - *effect = 1; + return MOVE_STEP_FAILURE; } + return MOVE_STEP_SUCCESS; } -static void CancellerDisabled(u32 *effect) +static enum MoveCanceler CancelerDisabled(struct BattleContext *ctx) { - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE) + if (GetActiveGimmick(ctx->battlerAtk) != GIMMICK_Z_MOVE + && gDisableStructs[ctx->battlerAtk].disabledMove == ctx->currentMove + && gDisableStructs[ctx->battlerAtk].disabledMove != MOVE_NONE) { - gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; - gBattleScripting.battler = gBattlerAttacker; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + gProtectStructs[ctx->battlerAtk].unableToUseMove = TRUE; + gBattleScripting.battler = ctx->battlerAtk; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_FAILURE; } + return MOVE_STEP_SUCCESS; } -static void CancellerHealBlocked(u32 *effect) +static enum MoveCanceler CancelerVolatileBlocked(struct BattleContext *ctx) { - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) + if (GetActiveGimmick(ctx->battlerAtk) != GIMMICK_Z_MOVE + && gBattleMons[ctx->battlerAtk].volatiles.healBlock + && IsHealBlockPreventingMove(ctx->battlerAtk, ctx->currentMove)) { - gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; - gBattleScripting.battler = gBattlerAttacker; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + gProtectStructs[ctx->battlerAtk].unableToUseMove = TRUE; + gBattleScripting.battler = ctx->battlerAtk; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedHealBlockPrevents; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_FAILURE; } -} - -static void CancellerGravity(u32 *effect) -{ - if (gFieldStatuses & STATUS_FIELD_GRAVITY && IsGravityPreventingMove(gCurrentMove)) + else if (gFieldStatuses & STATUS_FIELD_GRAVITY && IsGravityPreventingMove(ctx->currentMove)) { - gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; - gBattleScripting.battler = gBattlerAttacker; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + gProtectStructs[ctx->battlerAtk].unableToUseMove = TRUE; + gBattleScripting.battler = ctx->battlerAtk; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedGravityPrevents; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_FAILURE; } -} - -static void CancellerThroatChop(u32 *effect) -{ - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].throatChopTimer > gBattleTurnCounter && IsSoundMove(gCurrentMove)) + else if (GetActiveGimmick(ctx->battlerAtk) != GIMMICK_Z_MOVE && gDisableStructs[ctx->battlerAtk].throatChopTimer > 0 && IsSoundMove(ctx->currentMove)) { - gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + gProtectStructs[ctx->battlerAtk].unableToUseMove = TRUE; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedIsThroatChopPrevented; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_FAILURE; } + return MOVE_STEP_SUCCESS; } -static void CancellerTaunted(u32 *effect) +static enum MoveCanceler CancelerTaunted(struct BattleContext *ctx) { - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].tauntTimer && IsBattleMoveStatus(gCurrentMove)) + if (GetActiveGimmick(ctx->battlerAtk) != GIMMICK_Z_MOVE && gDisableStructs[ctx->battlerAtk].tauntTimer && IsBattleMoveStatus(ctx->currentMove)) { - gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + gProtectStructs[ctx->battlerAtk].unableToUseMove = TRUE; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_BREAK; } + return MOVE_STEP_SUCCESS; } -static void CancellerImprisoned(u32 *effect) +static enum MoveCanceler CancelerImprisoned(struct BattleContext *ctx) { - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove)) + if (GetActiveGimmick(ctx->battlerAtk) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(ctx->battlerAtk, ctx->currentMove)) { - gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + gProtectStructs[ctx->battlerAtk].unableToUseMove = TRUE; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_FAILURE; } + return MOVE_STEP_SUCCESS; } -static void CancellerConfused(u32 *effect) +static enum MoveCanceler CancelerConfused(struct BattleContext *ctx) { - if (gBattleStruct->isAtkCancelerForCalledMove) - return; - - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION) + if (gBattleMons[ctx->battlerAtk].volatiles.confusionTurns) { - if (!(gStatuses4[gBattlerAttacker] & STATUS4_INFINITE_CONFUSION)) - gBattleMons[gBattlerAttacker].status2 -= STATUS2_CONFUSION_TURN(1); - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION) + if (!gBattleMons[ctx->battlerAtk].volatiles.infiniteConfusion) + gBattleMons[ctx->battlerAtk].volatiles.confusionTurns--; + if (gBattleMons[ctx->battlerAtk].volatiles.confusionTurns) { // confusion dmg - if (RandomPercentage(RNG_CONFUSION, (GetGenConfig(GEN_CONFIG_CONFUSION_SELF_DMG_CHANCE) >= GEN_7 ? 33 : 50))) + if (RandomPercentage(RNG_CONFUSION, (GetConfig(CONFIG_CONFUSION_SELF_DMG_CHANCE) >= GEN_7 ? 33 : 50))) { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; - gBattlerTarget = gBattlerAttacker; - struct DamageCalculationData damageCalcData; - damageCalcData.battlerAtk = damageCalcData.battlerDef = gBattlerAttacker; - damageCalcData.move = MOVE_NONE; - damageCalcData.moveType = TYPE_MYSTERY; - damageCalcData.isCrit = FALSE; - damageCalcData.randomFactor = FALSE; - damageCalcData.updateFlags = TRUE; - gBattleStruct->moveDamage[gBattlerAttacker] = CalculateMoveDamage(&damageCalcData, 40); - gProtectStructs[gBattlerAttacker].confusionSelfDmg = TRUE; + struct DamageContext dmgCtx = {0}; + dmgCtx.battlerAtk = dmgCtx.battlerDef = ctx->battlerAtk; + dmgCtx.move = dmgCtx.chosenMove = MOVE_NONE; + dmgCtx.moveType = TYPE_MYSTERY; + dmgCtx.isCrit = FALSE; + dmgCtx.randomFactor = FALSE; + dmgCtx.updateFlags = TRUE; + dmgCtx.isSelfInflicted = TRUE; + dmgCtx.fixedBasePower = 40; + gBattleStruct->passiveHpUpdate[ctx->battlerAtk] = CalculateMoveDamage(&dmgCtx); + gProtectStructs[ctx->battlerAtk].confusionSelfDmg = TRUE; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused; + return MOVE_STEP_FAILURE; } else { gBattleCommunication[MULTISTRING_CHOOSER] = FALSE; - BattleScriptPushCursor(); + BattleScriptCall(BattleScript_MoveUsedIsConfused); + return MOVE_STEP_BREAK; } - gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused; } else // snapped out of confusion { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfusedNoMore; + BattleScriptCall(BattleScript_MoveUsedIsConfusedNoMore); + return MOVE_STEP_BREAK; } - *effect = 1; } + return MOVE_STEP_SUCCESS; } -static void CancellerParalysed(u32 *effect) +static enum MoveCanceler CancelerParalyzed(struct BattleContext *ctx) { - if (!gBattleStruct->isAtkCancelerForCalledMove - && (gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) - && !(B_MAGIC_GUARD == GEN_4 && GetBattlerAbility(gBattlerAttacker) == ABILITY_MAGIC_GUARD) + if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_PARALYSIS + && !(B_MAGIC_GUARD == GEN_4 && IsAbilityAndRecord(ctx->battlerAtk, ctx->abilities[ctx->battlerAtk], ABILITY_MAGIC_GUARD)) && !RandomPercentage(RNG_PARALYSIS, 75)) { - gProtectStructs[gBattlerAttacker].nonVolatileStatusImmobility = TRUE; + gProtectStructs[ctx->battlerAtk].nonVolatileStatusImmobility = TRUE; // This is removed in FRLG and Emerald for some reason - //CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); + //CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELER_CHECK); gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + return MOVE_STEP_FAILURE; + } + return MOVE_STEP_SUCCESS; +} + +static enum MoveCanceler CancelerInfatuation(struct BattleContext *ctx) +{ + if (gBattleMons[ctx->battlerAtk].volatiles.infatuation) + { + gBattleScripting.battler = gBattleMons[ctx->battlerAtk].volatiles.infatuation - 1; + if (!RandomPercentage(RNG_INFATUATION, 50)) + { + BattleScriptCall(BattleScript_MoveUsedIsInLove); + return MOVE_STEP_BREAK; + } + else + { + BattleScriptPush(BattleScript_MoveUsedIsInLoveCantAttack); + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + gProtectStructs[ctx->battlerAtk].unableToUseMove = TRUE; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); + gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove; + return MOVE_STEP_FAILURE; + } } + return MOVE_STEP_SUCCESS; } -static void CancellerBide(u32 *effect) +static enum MoveCanceler CancelerBide(struct BattleContext *ctx) { - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE) + if (gBattleMons[ctx->battlerAtk].volatiles.bideTurns) { - gBattleMons[gBattlerAttacker].status2 -= STATUS2_BIDE_TURN(1); - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE) + if (--gBattleMons[ctx->battlerAtk].volatiles.bideTurns) { gBattlescriptCurrInstr = BattleScript_BideStoringEnergy; } else { // This is removed in FRLG and Emerald for some reason - //gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS; - if (gBideDmg[gBattlerAttacker]) + //gBattleMons[gBattlerAttacker].volatiles.multipleTurns = FALSE; + if (gBideDmg[ctx->battlerAtk]) { gCurrentMove = MOVE_BIDE; - gBattlerTarget = gBideTarget[gBattlerAttacker]; - if (gAbsentBattlerFlags & (1u << gBattlerTarget)) + gBattlerTarget = gBideTarget[ctx->battlerAtk]; + if (gAbsentBattlerFlags & (1u << ctx->battlerDef)) gBattlerTarget = GetBattleMoveTarget(MOVE_BIDE, MOVE_TARGET_SELECTED + 1); gBattlescriptCurrInstr = BattleScript_BideAttack; + return MOVE_STEP_BREAK; // Jumps to a different script but no failure } else { gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack; + return MOVE_STEP_FAILURE; } } - *effect = 1; } + return MOVE_STEP_SUCCESS; } -static void CancellerThaw(u32 *effect) +static enum MoveCanceler CancelerZMoves(struct BattleContext *ctx) { - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE) - { - if (!(IsMoveEffectRemoveSpeciesType(gCurrentMove, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE))) - { - gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FREEZE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED_BY_MOVE; - } - *effect = 2; - } - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE && MoveThawsUser(gCurrentMove)) + if (GetActiveGimmick(ctx->battlerAtk) == GIMMICK_Z_MOVE) { - if (!(IsMoveEffectRemoveSpeciesType(gCurrentMove, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_FIRE))) - { - gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_FROSTBITE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MoveUsedUnfrostbite; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FROSTBITE_HEALED_BY_MOVE; - } - *effect = 2; + // attacker has a queued z move + RecordItemEffectBattle(ctx->battlerAtk, HOLD_EFFECT_Z_CRYSTAL); + SetGimmickAsActivated(ctx->battlerAtk, GIMMICK_Z_MOVE); + + gBattleScripting.battler = ctx->battlerAtk; + if (GetMoveCategory(ctx->currentMove) == DAMAGE_CATEGORY_STATUS) + BattleScriptCall(BattleScript_ZMoveActivateStatus); + else + BattleScriptCall(BattleScript_ZMoveActivateDamaging); + + return MOVE_STEP_BREAK; } + return MOVE_STEP_SUCCESS; } -static void CancellerStanceChangeTwo(u32 *effect) +static enum MoveCanceler CancelerChoiceLock(struct BattleContext *ctx) { - if (B_STANCE_CHANGE_FAIL >= GEN_7 && !gBattleStruct->isAtkCancelerForCalledMove && TryFormChangeBeforeMove()) - *effect = 1; -} + u16 *choicedMoveAtk = &gBattleStruct->choicedMove[ctx->battlerAtk]; + enum HoldEffect holdEffect = GetBattlerHoldEffect(ctx->battlerAtk); -static void CancellerWeatherPrimal(u32 *effect) -{ - if (HasWeatherEffect() && GetMovePower(gCurrentMove) > 0) + if (gChosenMove != MOVE_STRUGGLE + && (*choicedMoveAtk == MOVE_NONE || *choicedMoveAtk == MOVE_UNAVAILABLE) + && (IsHoldEffectChoice(holdEffect) || ctx->abilities[ctx->battlerAtk] == ABILITY_GORILLA_TACTICS)) + *choicedMoveAtk = gChosenMove; + + u32 moveIndex; + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - u32 moveType = GetBattleMoveType(gCurrentMove); - if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL) && (B_POWDER_RAIN >= GEN_7 || !TryActivatePowderStatus(gCurrentMove))) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PRIMAL_WEATHER_FIZZLED_BY_RAIN; - *effect = 1; - } - else if (moveType == TYPE_WATER && (gBattleWeather & B_WEATHER_SUN_PRIMAL)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PRIMAL_WEATHER_EVAPORATED_IN_SUN; - *effect = 1; - } - if (*effect == 1) - { - gBattleScripting.moveEffect = 0; - gProtectStructs[gBattlerAttacker].chargingTurn = FALSE; - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_PrimalWeatherBlocksMove; - } + if (gBattleMons[ctx->battlerAtk].moves[moveIndex] == *choicedMoveAtk) + break; } + + if (moveIndex == MAX_MON_MOVES) + *choicedMoveAtk = MOVE_NONE; + + return MOVE_STEP_SUCCESS; } -static void CancellerDynamaxBlocked(u32 *effect) +static enum MoveCanceler CancelerCallSubmove(struct BattleContext *ctx) { - if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && IsMoveBlockedByDynamax(gCurrentMove)) + bool32 noEffect = FALSE; + u32 calledMove = MOVE_NONE; + const u8 *battleScript = NULL; + battleScript = BattleScript_SubmoveAttackstring; + + switch(GetMoveEffect(ctx->currentMove)) { - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MoveBlockedByDynamax; - *effect = 1; + case EFFECT_MIRROR_MOVE: + calledMove = GetMirrorMoveMove(); + break; + case EFFECT_METRONOME: + calledMove = GetMetronomeMove(); + battleScript = BattleScript_MetronomeAttackstring; + break; + case EFFECT_ASSIST: + calledMove = GetAssistMove(); + break; + case EFFECT_NATURE_POWER: + calledMove = GetNaturePowerMove(ctx->battlerAtk); + battleScript = BattleScript_NaturePowerAttackstring; + break; + case EFFECT_SLEEP_TALK: + calledMove = GetSleepTalkMove(); + battleScript = BattleScript_SleepTalkAttackstring; + break; + case EFFECT_COPYCAT: + calledMove = GetCopyCatMove(); + break; + case EFFECT_ME_FIRST: + calledMove = GetMeFirstMove(); + break; + default: + noEffect = TRUE; + break; } -} -static void CancellerPowderStatus(u32 *effect) -{ - if (TryActivatePowderStatus(gCurrentMove)) + if (noEffect) { - gProtectStructs[gBattlerAttacker].powderSelfDmg = TRUE; - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; + gBattleStruct->submoveAnnouncement = SUBMOVE_NO_EFFECT; + return MOVE_STEP_SUCCESS; + } - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE - || HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE)) - gBattlescriptCurrInstr = BattleScript_MoveUsedPowder; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; + if (calledMove != MOVE_NONE) + { + if (GetActiveGimmick(ctx->battlerAtk) == GIMMICK_Z_MOVE && !IsBattleMoveStatus(calledMove)) + calledMove = GetTypeBasedZMove(calledMove); + if (GetMoveEffect(ctx->currentMove) == EFFECT_COPYCAT && IsMaxMove(calledMove)) + calledMove = gBattleStruct->dynamax.lastUsedBaseMove; + + gBattleStruct->submoveAnnouncement = SUBMOVE_SUCCESS; + gCalledMove = calledMove; + BattleScriptCall(battleScript); + return MOVE_STEP_BREAK; } + + gBattleStruct->submoveAnnouncement = SUBMOVE_FAILURE; + return MOVE_STEP_SUCCESS; } -static void CancellerProtean(u32 *effect) +static enum MoveCanceler CancelerThaw(struct BattleContext *ctx) { - u32 moveType = GetBattleMoveType(gCurrentMove); - if (ProteanTryChangeType(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), gCurrentMove, moveType)) + if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FREEZE) { - if (B_PROTEAN_LIBERO == GEN_9) - gDisableStructs[gBattlerAttacker].usedProteanLibero = TRUE; - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - gBattlerAbility = gBattlerAttacker; - BattleScriptPushCursor(); - PrepareStringBattle(STRINGID_EMPTYSTRING3, gBattlerAttacker); - gBattleCommunication[MSG_DISPLAY] = 1; - gBattlescriptCurrInstr = BattleScript_ProteanActivates; - *effect = 1; + if (!(IsMoveEffectRemoveSpeciesType(ctx->currentMove, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) && !IS_BATTLER_OF_TYPE(ctx->battlerAtk, TYPE_FIRE))) + { + gBattleMons[ctx->battlerAtk].status1 &= ~STATUS1_FREEZE; + BattleScriptCall(BattleScript_MoveUsedUnfroze); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED_BY_MOVE; + } + return MOVE_STEP_REMOVES_STATUS; } + if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FROSTBITE && MoveThawsUser(ctx->currentMove)) + { + if (!(IsMoveEffectRemoveSpeciesType(ctx->currentMove, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) && !IS_BATTLER_OF_TYPE(ctx->battlerAtk, TYPE_FIRE))) + { + gBattleMons[ctx->battlerAtk].status1 &= ~STATUS1_FROSTBITE; + BattleScriptCall(BattleScript_MoveUsedUnfrostbite); + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FROSTBITE_HEALED_BY_MOVE; + } + return MOVE_STEP_REMOVES_STATUS; + } + return MOVE_STEP_SUCCESS; } -static void CancellerPsychicTerrain(u32 *effect) +static enum MoveCanceler CancelerStanceChangeTwo(struct BattleContext *ctx) { - if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN - && IsBattlerGrounded(gBattlerTarget) - && GetChosenMovePriority(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) > 0 - && GetMoveTarget(gCurrentMove) != MOVE_TARGET_ALL_BATTLERS - && GetMoveTarget(gCurrentMove) != MOVE_TARGET_OPPONENTS_FIELD - && !IsBattlerAlly(gBattlerAttacker, gBattlerTarget)) - { - CancelMultiTurnMoves(gBattlerAttacker, SKY_DROP_ATTACKCANCELLER_CHECK); - gBattlescriptCurrInstr = BattleScript_MoveUsedPsychicTerrainPrevents; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; - } + if (B_STANCE_CHANGE_FAIL >= GEN_7 && gChosenMove == ctx->currentMove && TryFormChangeBeforeMove()) + return MOVE_STEP_BREAK; + return MOVE_STEP_SUCCESS; } -static void CancellerExplodingDamp(u32 *effect) +static enum MoveCanceler CancelerAttackstring(struct BattleContext *ctx) { - u32 dampBattler = IsAbilityOnField(ABILITY_DAMP); - if (dampBattler && (GetMoveEffect(gCurrentMove) == EFFECT_EXPLOSION - || GetMoveEffect(gCurrentMove) == EFFECT_MIND_BLOWN)) - { - gBattleScripting.battler = dampBattler - 1; - gBattlescriptCurrInstr = BattleScript_DampStopsExplosion; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - *effect = 1; - } + BattleScriptCall(BattleScript_Attackstring); + if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) + gLastPrintedMoves[gBattlerAttacker] = gChosenMove; + return MOVE_STEP_BREAK; } -static void CancellerMultihitMoves(u32 *effect) +static enum MoveCanceler CancelerPPDeduction(struct BattleContext *ctx) { - if (GetMoveEffect(gCurrentMove) == EFFECT_MULTI_HIT) - { - u32 ability = GetBattlerAbility(gBattlerAttacker); + if (gBattleMons[ctx->battlerAtk].volatiles.multipleTurns + || gSpecialStatuses[ctx->battlerAtk].dancerUsedMove + || ctx->currentMove == MOVE_STRUGGLE) + return MOVE_STEP_SUCCESS; - if (ability == ABILITY_SKILL_LINK) + s32 ppToDeduct = 1; + u32 moveTarget = GetBattlerMoveTargetType(ctx->battlerAtk, ctx->currentMove); + u32 movePosition = gCurrMovePos; + + if (gBattleStruct->submoveAnnouncement == SUBMOVE_SUCCESS) + movePosition = gChosenMovePos; + + if (moveTarget == MOVE_TARGET_BOTH + || moveTarget == MOVE_TARGET_FOES_AND_ALLY + || moveTarget == MOVE_TARGET_ALL_BATTLERS + || MoveForcesPressure(ctx->currentMove)) + { + for (u32 i = 0; i < gBattlersCount; i++) + { + if (!IsBattlerAlly(i, ctx->battlerAtk) && IsBattlerAlive(i)) + ppToDeduct += (GetBattlerAbility(i) == ABILITY_PRESSURE); + } + } + else if (moveTarget != MOVE_TARGET_OPPONENTS_FIELD) + { + if (ctx->battlerAtk != ctx->battlerDef && ctx->abilities[ctx->battlerDef] == ABILITY_PRESSURE) + ppToDeduct++; + } + + // For item Metronome, echoed voice + if (ctx->currentMove != gLastResultingMoves[ctx->battlerAtk] || WasUnableToUseMove(ctx->battlerAtk)) + gBattleStruct->metronomeItemCounter[ctx->battlerAtk] = 0; + + if (gBattleMons[ctx->battlerAtk].pp[movePosition] > ppToDeduct) + gBattleMons[ctx->battlerAtk].pp[movePosition] -= ppToDeduct; + else + gBattleMons[ctx->battlerAtk].pp[movePosition] = 0; + + if (MOVE_IS_PERMANENT(ctx->battlerAtk, movePosition)) + { + BtlController_EmitSetMonData( + ctx->battlerAtk, + B_COMM_TO_CONTROLLER, + REQUEST_PPMOVE1_BATTLE + movePosition, + 0, + sizeof(gBattleMons[ctx->battlerAtk].pp[movePosition]), + &gBattleMons[ctx->battlerAtk].pp[movePosition]); + MarkBattlerForControllerExec(ctx->battlerAtk); + } + + if (gBattleStruct->submoveAnnouncement != SUBMOVE_NO_EFFECT) + { + if (gBattleStruct->submoveAnnouncement == SUBMOVE_FAILURE) + { + gBattleStruct->submoveAnnouncement = SUBMOVE_NO_EFFECT; + gBattlescriptCurrInstr = BattleScript_ButItFailed; + return MOVE_STEP_FAILURE; + } + else if (CancelerVolatileBlocked(ctx) == MOVE_STEP_FAILURE) // Check Gravity/Heal Block/Throat Chop for Submove + { + gBattleStruct->submoveAnnouncement = SUBMOVE_NO_EFFECT; + return MOVE_STEP_FAILURE; + } + else + { + gBattleStruct->submoveAnnouncement = SUBMOVE_NO_EFFECT; + gBattlerTarget = GetBattleMoveTarget(ctx->currentMove, NO_TARGET_OVERRIDE); + gBattleScripting.animTurn = 0; + gBattleScripting.animTargetsHit = 0; + + // Possibly better to just move type setting and redirection to attackcanceler as a new case at this point + SetTypeBeforeUsingMove(ctx->currentMove, ctx->battlerAtk); + HandleMoveTargetRedirection(); + ClearDamageCalcResults(); + gBattlescriptCurrInstr = GetMoveBattleScript(ctx->currentMove); + return MOVE_STEP_BREAK; + } + } + + return MOVE_STEP_SUCCESS; +} + +static enum MoveCanceler CancelerWeatherPrimal(struct BattleContext *ctx) +{ + enum MoveCanceler effect = MOVE_STEP_SUCCESS; + if (HasWeatherEffect() && GetMovePower(ctx->currentMove) > 0) + { + enum Type moveType = GetBattleMoveType(ctx->currentMove); + if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL) && (GetConfig(CONFIG_POWDER_RAIN) >= GEN_7 || !TryActivatePowderStatus(ctx->currentMove))) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PRIMAL_WEATHER_FIZZLED_BY_RAIN; + effect = MOVE_STEP_FAILURE; + } + else if (moveType == TYPE_WATER && (gBattleWeather & B_WEATHER_SUN_PRIMAL)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PRIMAL_WEATHER_EVAPORATED_IN_SUN; + effect = MOVE_STEP_FAILURE; + } + if (effect == MOVE_STEP_FAILURE) + { + gProtectStructs[ctx->battlerAtk].chargingTurn = FALSE; + CancelMultiTurnMoves(ctx->battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + gBattlescriptCurrInstr = BattleScript_PrimalWeatherBlocksMove; + } + } + return effect; +} + +static enum MoveCanceler CancelerMoveFailure(struct BattleContext *ctx) +{ + const u8 *battleScript = NULL; + + switch (GetMoveEffect(ctx->currentMove)) + { + case EFFECT_FAIL_IF_NOT_ARG_TYPE: + if (!IS_BATTLER_OF_TYPE(ctx->battlerAtk, GetMoveArgType(ctx->currentMove))) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_AURA_WHEEL: + if (gBattleMons[ctx->battlerAtk].species != SPECIES_MORPEKO_FULL_BELLY + && gBattleMons[ctx->battlerAtk].species != SPECIES_MORPEKO_HANGRY) + battleScript = BattleScript_PokemonCantUseTheMove; + break; + case EFFECT_AURORA_VEIL: + if (!(gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW) && HasWeatherEffect())) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_CLANGOROUS_SOUL: + if (gBattleMons[ctx->battlerAtk].hp <= max(1, GetNonDynamaxMaxHP(ctx->battlerAtk) / 3)) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_COUNTER: + case EFFECT_MIRROR_COAT: + case EFFECT_METAL_BURST: + // TODO: Needs a refactor because the moves currently don't work according to new gens + break; + case EFFECT_DESTINY_BOND: + if (DoesDestinyBondFail(ctx->battlerAtk)) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_FIRST_TURN_ONLY: + if (!gDisableStructs[ctx->battlerAtk].isFirstTurn || gSpecialStatuses[ctx->battlerAtk].instructedChosenTarget) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_MAT_BLOCK: + if (!gDisableStructs[ctx->battlerAtk].isFirstTurn || gSpecialStatuses[ctx->battlerAtk].instructedChosenTarget) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_FLING: + if (!CanFling(ctx->battlerAtk)) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_FOLLOW_ME: + if (B_UPDATED_MOVE_DATA >= GEN_8 && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_FUTURE_SIGHT: + if (gWishFutureKnock.futureSightCounter[ctx->battlerDef] > 0) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_LAST_RESORT: + if (!CanUseLastResort(ctx->battlerAtk)) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_NO_RETREAT: + if (gBattleMons[ctx->battlerDef].volatiles.noRetreat) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_POLTERGEIST: + if (gBattleMons[ctx->battlerDef].item == ITEM_NONE + || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM + || ctx->abilities[ctx->battlerDef] == ABILITY_KLUTZ) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_PROTECT: + // TODO + break; + case EFFECT_REST: + if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_SLEEP + || ctx->abilities[ctx->battlerAtk] == ABILITY_COMATOSE) + battleScript = BattleScript_RestIsAlreadyAsleep; + else if (gBattleMons[ctx->battlerAtk].hp == gBattleMons[ctx->battlerAtk].maxHP) + battleScript = BattleScript_AlreadyAtFullHp; + else if (ctx->abilities[ctx->battlerAtk] == ABILITY_INSOMNIA + || ctx->abilities[ctx->battlerAtk] == ABILITY_VITAL_SPIRIT + || ctx->abilities[ctx->battlerAtk] == ABILITY_PURIFYING_SALT) + battleScript = BattleScript_InsomniaProtects; + break; + case EFFECT_SUCKER_PUNCH: + if (HasBattlerActedThisTurn(ctx->battlerDef) + || (IsBattleMoveStatus(GetChosenMoveFromPosition(ctx->battlerDef)) && !gProtectStructs[ctx->battlerDef].noValidMoves)) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_UPPER_HAND: + { + u32 prio = GetChosenMovePriority(ctx->battlerDef, ctx->abilities[ctx->battlerDef]); + if (prio < 1 || prio > 3 // Fails if priority is less than 1 or greater than 3, if target already moved, or if using a status + || HasBattlerActedThisTurn(ctx->battlerDef) + || gChosenMoveByBattler[ctx->battlerDef] == MOVE_NONE + || IsBattleMoveStatus(gChosenMoveByBattler[ctx->battlerDef])) + battleScript = BattleScript_ButItFailed; + break; + } + case EFFECT_SNORE: + if (!(gBattleMons[ctx->battlerAtk].status1 & STATUS1_SLEEP) + && ctx->abilities[ctx->battlerAtk] != ABILITY_COMATOSE) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_STEEL_ROLLER: + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_STOCKPILE: + if (gDisableStructs[ctx->battlerAtk].stockpileCounter >= 3) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_STUFF_CHEEKS: + if (GetItemPocket(gBattleMons[ctx->battlerAtk].item) != POCKET_BERRIES) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_SWALLOW: + case EFFECT_SPIT_UP: + if (gDisableStructs[ctx->battlerAtk].stockpileCounter == 0 && !gBattleStruct->snatchedMoveIsUsed) + battleScript = BattleScript_ButItFailed; + break; + case EFFECT_TELEPORT: + // TODO: follow up: Can't make sense of teleport logic + break; + case EFFECT_LOW_KICK: + case EFFECT_HEAT_CRASH: + if (GetActiveGimmick(ctx->battlerDef) == GIMMICK_DYNAMAX) + battleScript = BattleScript_MoveBlockedByDynamax; + break; + default: + break; + } + + if (battleScript != NULL) + { + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + gBattlescriptCurrInstr = battleScript; + return MOVE_STEP_FAILURE; + } + + return MOVE_STEP_SUCCESS; +} + +static enum MoveCanceler CancelerPowderStatus(struct BattleContext *ctx) +{ + if (TryActivatePowderStatus(ctx->currentMove)) + { + if (!IsAbilityAndRecord(ctx->battlerAtk, ctx->abilities[ctx->battlerAtk], ABILITY_MAGIC_GUARD)) + SetPassiveDamageAmount(ctx->battlerAtk, GetNonDynamaxMaxHP(ctx->battlerAtk) / 4); + + // This might be incorrect + if (GetActiveGimmick(ctx->battlerAtk) != GIMMICK_Z_MOVE + || HasTrainerUsedGimmick(ctx->battlerAtk, GIMMICK_Z_MOVE)) + gBattlescriptCurrInstr = BattleScript_MoveUsedPowder; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + return MOVE_STEP_FAILURE; + } + return MOVE_STEP_SUCCESS; +} + +bool32 IsDazzlingAbility(enum Ability ability) +{ + switch (ability) + { + case ABILITY_DAZZLING: return TRUE; + case ABILITY_QUEENLY_MAJESTY: return TRUE; + case ABILITY_ARMOR_TAIL: return TRUE; + default: break; + } + return FALSE; +} + +static enum MoveCanceler CancelerPriorityBlock(struct BattleContext *ctx) +{ + bool32 effect = FALSE; + s32 priority = GetChosenMovePriority(ctx->battlerAtk, ctx->abilities[ctx->battlerAtk]); + u32 blockAbility = ABILITY_NONE; // ability of battler who is blocking + u32 blockedByBattler = ctx->battlerDef; + + if (priority <= 0 || IsBattlerAlly(ctx->battlerAtk, ctx->battlerDef)) + return MOVE_STEP_SUCCESS; + + if (IsDazzlingAbility(ctx->abilities[ctx->battlerDef])) + { + blockAbility = ctx->abilities[ctx->battlerDef]; + effect = TRUE; + } + else if (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(ctx->battlerDef))) + { + blockAbility = GetBattlerAbility(BATTLE_PARTNER(ctx->battlerDef)); + if (IsDazzlingAbility(blockAbility)) + { + blockedByBattler = BATTLE_PARTNER(ctx->battlerDef); + effect = TRUE; + } + } + + if (effect) + { + gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed. + gLastUsedAbility = blockAbility; + RecordAbilityBattle(blockedByBattler, blockAbility); + gBattleScripting.battler = gBattlerAbility = blockedByBattler; + gBattlescriptCurrInstr = BattleScript_DazzlingProtected; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + return MOVE_STEP_FAILURE; + } + + return MOVE_STEP_SUCCESS; +} + +static enum MoveCanceler CancelerProtean(struct BattleContext *ctx) +{ + enum Type moveType = GetBattleMoveType(ctx->currentMove); + if (ProteanTryChangeType(ctx->battlerAtk, ctx->abilities[ctx->battlerAtk], ctx->currentMove, moveType)) + { + if (GetConfig(CONFIG_PROTEAN_LIBERO) >= GEN_9) + gDisableStructs[ctx->battlerAtk].usedProteanLibero = TRUE; + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); + gBattlerAbility = ctx->battlerAtk; + PrepareStringBattle(STRINGID_EMPTYSTRING3, ctx->battlerAtk); + gBattleCommunication[MSG_DISPLAY] = 1; + BattleScriptCall(BattleScript_ProteanActivates); + return MOVE_STEP_BREAK; + } + return MOVE_STEP_SUCCESS; +} + +static enum MoveCanceler CancelerExplodingDamp(struct BattleContext *ctx) +{ + u32 dampBattler = IsAbilityOnField(ABILITY_DAMP); + if (dampBattler && IsMoveDampBanned(ctx->currentMove)) + { + gBattleScripting.battler = dampBattler - 1; + gBattlescriptCurrInstr = BattleScript_DampStopsExplosion; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + return MOVE_STEP_FAILURE; + } + return MOVE_STEP_SUCCESS; +} + +static enum MoveCanceler CancelerMultihitMoves(struct BattleContext *ctx) +{ + if (GetMoveEffect(ctx->currentMove) == EFFECT_MULTI_HIT) + { + enum Ability ability = ctx->abilities[ctx->battlerAtk]; + + if (ability == ABILITY_SKILL_LINK) { gMultiHitCounter = 5; } else if (ability == ABILITY_BATTLE_BOND - && gCurrentMove == MOVE_WATER_SHURIKEN - && gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_ASH) + && ctx->currentMove == MOVE_WATER_SHURIKEN + && gBattleMons[ctx->battlerAtk].species == SPECIES_GRENINJA_ASH) { gMultiHitCounter = 3; } @@ -2374,92 +2901,63 @@ static void CancellerMultihitMoves(u32 *effect) PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) } - else if (GetMoveStrikeCount(gCurrentMove) > 1) + else if (GetMoveStrikeCount(ctx->currentMove) > 1) { - if (GetMoveEffect(gCurrentMove) == EFFECT_POPULATION_BOMB && GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LOADED_DICE) + if (GetMoveEffect(ctx->currentMove) == EFFECT_POPULATION_BOMB && GetBattlerHoldEffect(ctx->battlerAtk) == HOLD_EFFECT_LOADED_DICE) { gMultiHitCounter = RandomUniform(RNG_LOADED_DICE, 4, 10); } else { - gMultiHitCounter = GetMoveStrikeCount(gCurrentMove); + gMultiHitCounter = GetMoveStrikeCount(ctx->currentMove); - if (GetMoveEffect(gCurrentMove) == EFFECT_DRAGON_DARTS - && !IsAffectedByFollowMe(gBattlerAttacker, GetBattlerSide(gBattlerTarget), gCurrentMove) - && CanTargetPartner(gBattlerAttacker, gBattlerTarget) - && TargetFullyImmuneToCurrMove(gBattlerAttacker, gBattlerTarget)) - gBattlerTarget = BATTLE_PARTNER(gBattlerTarget); + if (GetMoveEffect(ctx->currentMove) == EFFECT_DRAGON_DARTS + && !IsAffectedByFollowMe(ctx->battlerAtk, GetBattlerSide(ctx->battlerDef), ctx->currentMove) + && CanTargetPartner(ctx->battlerAtk, ctx->battlerDef) + && TargetFullyImmuneToCurrMove(ctx->battlerAtk, ctx->battlerDef)) + gBattlerTarget = BATTLE_PARTNER(ctx->battlerDef); } PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 3, 0) } - else if (B_BEAT_UP >= GEN_5 && GetMoveEffect(gCurrentMove) == EFFECT_BEAT_UP) + else if (GetMoveEffect(ctx->currentMove) == EFFECT_BEAT_UP) { - struct Pokemon* party = GetBattlerParty(gBattlerAttacker); + struct Pokemon* party = GetBattlerParty(ctx->battlerAtk); int i; + gBattleStruct->beatUpSlot = 0; + gMultiHitCounter = 0; + memset(gBattleStruct->beatUpSpecies, 0xFF, sizeof(gBattleStruct->beatUpSpecies)); for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&party[i], MON_DATA_HP) - && GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + u32 species = GetMonData(&party[i], MON_DATA_SPECIES); + if (species != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_HP) && !GetMonData(&party[i], MON_DATA_IS_EGG) && !GetMonData(&party[i], MON_DATA_STATUS)) + { + if (GetConfig(CONFIG_BEAT_UP) >= GEN_5) + gBattleStruct->beatUpSpecies[gMultiHitCounter] = species; + else + gBattleStruct->beatUpSpecies[gMultiHitCounter] = i; gMultiHitCounter++; + } } - gBattleStruct->beatUpSlot = 0; PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) } else { gMultiHitCounter = 0; } -} - -static void CancellerZMoves(u32 *effect) -{ - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) - { - // For Z-Mirror Move, so it doesn't play the animation twice. - bool32 alreadyUsed = HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE); - - // attacker has a queued z move - RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_Z_CRYSTAL); - SetGimmickAsActivated(gBattlerAttacker, GIMMICK_Z_MOVE); - gBattleScripting.battler = gBattlerAttacker; - if (gProtectStructs[gBattlerAttacker].powderSelfDmg) - { - if (!alreadyUsed) - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ZMoveActivatePowder; - } - } - else if (GetMoveCategory(gCurrentMove) == DAMAGE_CATEGORY_STATUS) - { - if (!alreadyUsed) - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ZMoveActivateStatus; - } - } - else - { - if (!alreadyUsed) - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ZMoveActivateDamaging; - } - } - *effect = 1; - } + return MOVE_STEP_SUCCESS; } -static void CancellerMultiTargetMoves(u32 *effect) +static enum MoveCanceler CancelerMultiTargetMoves(struct BattleContext *ctx) { - u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); - u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); + u32 moveTarget = GetBattlerMoveTargetType(ctx->battlerAtk, ctx->currentMove); + enum Ability abilityAtk = ctx->abilities[ctx->battlerAtk]; if (IsSpreadMove(moveTarget)) { @@ -2468,87 +2966,97 @@ static void CancellerMultiTargetMoves(u32 *effect) if (gBattleStruct->bouncedMoveIsUsed && !IsOnPlayerSide(battlerDef)) continue; - u32 abilityDef = GetBattlerAbility(battlerDef); + enum Ability abilityDef = GetBattlerAbility(battlerDef); - if (gBattlerAttacker == battlerDef + if (ctx->battlerAtk == battlerDef || !IsBattlerAlive(battlerDef) - || (moveTarget == MOVE_TARGET_BOTH && gBattlerAttacker == BATTLE_PARTNER(battlerDef)) - || IsBattlerProtected(gBattlerAttacker, battlerDef, gCurrentMove)) // Missing Invulnerable check + || (GetMoveEffect(ctx->currentMove) == EFFECT_SYNCHRONOISE && !DoBattlersShareType(ctx->battlerAtk, battlerDef)) + || (moveTarget == MOVE_TARGET_BOTH && ctx->battlerAtk == BATTLE_PARTNER(battlerDef)) + || IsBattlerProtected(ctx->battlerAtk, battlerDef, ctx->currentMove)) // Missing Invulnerable check { gBattleStruct->moveResultFlags[battlerDef] = MOVE_RESULT_NO_EFFECT; - gBattleStruct->noResultString[battlerDef] = TRUE; + gBattleStruct->noResultString[battlerDef] = WILL_FAIL; } - else if (CanAbilityBlockMove(gBattlerAttacker, battlerDef, abilityAtk, abilityDef, gCurrentMove, ABILITY_CHECK_TRIGGER) - || (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_PSYCHIC_TERRAIN) && GetBattleMovePriority(gBattlerAttacker, abilityAtk, gCurrentMove) > 0)) + else if (CanAbilityBlockMove(ctx->battlerAtk, battlerDef, abilityAtk, abilityDef, ctx->currentMove, CHECK_TRIGGER)) { gBattleStruct->moveResultFlags[battlerDef] = 0; - gBattleStruct->noResultString[battlerDef] = TRUE; + gBattleStruct->noResultString[battlerDef] = WILL_FAIL; } - else if (CanAbilityAbsorbMove(gBattlerAttacker, battlerDef, abilityDef, gCurrentMove, GetBattleMoveType(gCurrentMove), ABILITY_CHECK_TRIGGER)) + else if (CanAbilityAbsorbMove(ctx->battlerAtk, battlerDef, abilityDef, ctx->currentMove, GetBattleMoveType(gCurrentMove), CHECK_TRIGGER)) { gBattleStruct->moveResultFlags[battlerDef] = 0; - gBattleStruct->noResultString[battlerDef] = DO_ACCURACY_CHECK; + gBattleStruct->noResultString[battlerDef] = CHECK_ACCURACY; } else { - CalcTypeEffectivenessMultiplier(gCurrentMove, GetBattleMoveType(gCurrentMove), gBattlerAttacker, battlerDef, GetBattlerAbility(battlerDef), TRUE); + CalcTypeEffectivenessMultiplierHelper(ctx->currentMove, GetBattleMoveType(ctx->currentMove), ctx->battlerAtk, battlerDef, abilityAtk, abilityDef, TRUE); // Sets moveResultFlags + gBattleStruct->noResultString[battlerDef] = CAN_DAMAGE; } } if (moveTarget == MOVE_TARGET_BOTH) - gBattleStruct->numSpreadTargets = CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER_SIDE, gBattlerAttacker); + gBattleStruct->numSpreadTargets = CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER_SIDE, ctx->battlerAtk); else - gBattleStruct->numSpreadTargets = CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, gBattlerAttacker); - } -} - -static const MoveSuccessOrderCancellers sMoveSuccessOrderCancellers[] = -{ - [CANCELLER_FLAGS] = CancellerFlags, - [CANCELLER_STANCE_CHANGE_1] = CancellerStanceChangeOne, - [CANCELLER_SKY_DROP] = CancellerSkyDrop, - [CANCELLER_RECHARGE] = CancellerRecharge, - [CANCELLER_ASLEEP] = CancellerAsleep, - [CANCELLER_FROZEN] = CancellerFrozen, - [CANCELLER_OBEDIENCE] = CancellerObedience, - [CANCELLER_TRUANT] = CancellerTruant, - [CANCELLER_FLINCH] = CancellerFlinch, - [CANCELLER_IN_LOVE] = CancellerInLove, - [CANCELLER_DISABLED] = CancellerDisabled, - [CANCELLER_HEAL_BLOCKED] = CancellerHealBlocked, - [CANCELLER_GRAVITY] = CancellerGravity, - [CANCELLER_THROAT_CHOP] = CancellerThroatChop, - [CANCELLER_TAUNTED] = CancellerTaunted, - [CANCELLER_IMPRISONED] = CancellerImprisoned, - [CANCELLER_CONFUSED] = CancellerConfused, - [CANCELLER_PARALYSED] = CancellerParalysed, - [CANCELLER_BIDE] = CancellerBide, - [CANCELLER_THAW] = CancellerThaw, - [CANCELLER_STANCE_CHANGE_2] = CancellerStanceChangeTwo, - [CANCELLER_WEATHER_PRIMAL] = CancellerWeatherPrimal, - [CANCELLER_DYNAMAX_BLOCKED] = CancellerDynamaxBlocked, - [CANCELLER_POWDER_STATUS] = CancellerPowderStatus, - [CANCELLER_PROTEAN] = CancellerProtean, - [CANCELLER_PSYCHIC_TERRAIN] = CancellerPsychicTerrain, - [CANCELLER_EXPLODING_DAMP] = CancellerExplodingDamp, - [CANCELLER_MULTIHIT_MOVES] = CancellerMultihitMoves, - [CANCELLER_Z_MOVES] = CancellerZMoves, - [CANCELLER_MULTI_TARGET_MOVES] = CancellerMultiTargetMoves, + gBattleStruct->numSpreadTargets = CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, ctx->battlerAtk); + } + return MOVE_STEP_SUCCESS; +} + +static enum MoveCanceler (*const sMoveSuccessOrderCancelers[])(struct BattleContext *ctx) = +{ + [CANCELER_CLEAR_FLAGS] = CancelerClearFlags, + [CANCELER_STANCE_CHANGE_1] = CancelerStanceChangeOne, + [CANCELER_SKY_DROP] = CancelerSkyDrop, + [CANCELER_RECHARGE] = CancelerRecharge, + [CANCELER_ASLEEP_OR_FROZEN] = CancelerAsleepOrFrozen, + [CANCELER_OBEDIENCE] = CancelerObedience, + [CANCELER_POWER_POINTS] = CancelerPowerPoints, + [CANCELER_TRUANT] = CancelerTruant, + [CANCELER_FLINCH] = CancelerFlinch, + [CANCELER_DISABLED] = CancelerDisabled, + [CANCELER_VOLATILE_BLOCKED] = CancelerVolatileBlocked, + [CANCELER_TAUNTED] = CancelerTaunted, + [CANCELER_IMPRISONED] = CancelerImprisoned, + [CANCELER_CONFUSED] = CancelerConfused, + [CANCELER_PARALYZED] = CancelerParalyzed, + [CANCELER_INFATUATION] = CancelerInfatuation, + [CANCELER_BIDE] = CancelerBide, + [CANCELER_Z_MOVES] = CancelerZMoves, + [CANCELER_CHOICE_LOCK] = CancelerChoiceLock, + [CANCELER_CALLSUBMOVE] = CancelerCallSubmove, + [CANCELER_THAW] = CancelerThaw, + [CANCELER_STANCE_CHANGE_2] = CancelerStanceChangeTwo, + [CANCELER_ATTACKSTRING] = CancelerAttackstring, + [CANCELER_PPDEDUCTION] = CancelerPPDeduction, + [CANCELER_WEATHER_PRIMAL] = CancelerWeatherPrimal, + [CANCELER_MOVE_FAILURE] = CancelerMoveFailure, + [CANCELER_POWDER_STATUS] = CancelerPowderStatus, + [CANCELER_PRIORITY_BLOCK] = CancelerPriorityBlock, + [CANCELER_PROTEAN] = CancelerProtean, + [CANCELER_EXPLODING_DAMP] = CancelerExplodingDamp, + [CANCELER_MULTIHIT_MOVES] = CancelerMultihitMoves, + [CANCELER_MULTI_TARGET_MOVES] = CancelerMultiTargetMoves, }; -u32 AtkCanceller_MoveSuccessOrder(void) +enum MoveCanceler AtkCanceler_MoveSuccessOrder(struct BattleContext *ctx) { - u32 effect = 0; + enum MoveCanceler effect = MOVE_STEP_SUCCESS; - while (gBattleStruct->atkCancellerTracker < CANCELLER_END && effect == 0) + while (gBattleStruct->eventState.atkCanceler < CANCELER_END && effect == MOVE_STEP_SUCCESS) { - sMoveSuccessOrderCancellers[gBattleStruct->atkCancellerTracker](&effect); - gBattleStruct->atkCancellerTracker++; + effect = sMoveSuccessOrderCancelers[gBattleStruct->eventState.atkCanceler](ctx); + gBattleStruct->eventState.atkCanceler++; } - if (effect == 2) + if (effect == MOVE_STEP_REMOVES_STATUS) { - BtlController_EmitSetMonData(gBattlerAttacker, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBattlerAttacker].status1); - MarkBattlerForControllerExec(gBattlerAttacker); + BtlController_EmitSetMonData( + ctx->battlerAtk, + B_COMM_TO_CONTROLLER, + REQUEST_STATUS_BATTLE, + 0, + 4, + &gBattleMons[gBattlerAttacker].status1); + MarkBattlerForControllerExec(ctx->battlerAtk); } return effect; @@ -2712,24 +3220,27 @@ bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2 } } -bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbility) +bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, u32 ability) { - u16 battlerAbility = GetBattlerAbility(battler); - if (gBattleWeather & sBattleWeatherInfo[battleWeatherId].flag) { return FALSE; } else if (gBattleWeather & B_WEATHER_PRIMAL_ANY - && battlerAbility != ABILITY_DESOLATE_LAND - && battlerAbility != ABILITY_PRIMORDIAL_SEA - && battlerAbility != ABILITY_DELTA_STREAM) + && ability != ABILITY_DESOLATE_LAND + && ability != ABILITY_PRIMORDIAL_SEA + && ability != ABILITY_DELTA_STREAM) { return FALSE; } - else if (GetGenConfig(GEN_CONFIG_ABILITY_WEATHER) < GEN_6 && viaAbility) + else if (GetConfig(CONFIG_ABILITY_WEATHER) < GEN_6 && ability != ABILITY_NONE) { gBattleWeather = sBattleWeatherInfo[battleWeatherId].flag; + for (u32 i = 0; i < gBattlersCount; i++) + { + gDisableStructs[i].weatherAbilityDone = FALSE; + ResetParadoxWeatherStat(i); + } return TRUE; } else @@ -2738,29 +3249,39 @@ bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbilit gBattleWeather = sBattleWeatherInfo[battleWeatherId].flag; if (gBattleWeather & B_WEATHER_PRIMAL_ANY) gWishFutureKnock.weatherDuration = 0; - else if (rock != 0 && GetBattlerHoldEffect(battler, TRUE) == rock) + else if (rock != 0 && GetBattlerHoldEffect(battler) == rock) gWishFutureKnock.weatherDuration = 8; else gWishFutureKnock.weatherDuration = 5; + for (u32 i = 0; i < gBattlersCount; i++) + { + gDisableStructs[i].weatherAbilityDone = FALSE; + ResetParadoxWeatherStat(i); + } return TRUE; } return FALSE; } -static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u16 *timer) +bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag) { - if ((!(gFieldStatuses & statusFlag) && (!gBattleStruct->isSkyBattle))) + if (gBattleStruct->isSkyBattle) + return FALSE; + + if (!(gFieldStatuses & statusFlag)) { gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; gFieldStatuses |= statusFlag; - gDisableStructs[battler].terrainAbilityDone = FALSE; - - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_TERRAIN_EXTENDER) - *timer = gBattleTurnCounter + 8; + for (u32 i = 0; i < gBattlersCount; i++) + { + gDisableStructs[i].terrainAbilityDone = FALSE; + ResetParadoxTerrainStat(i); + } + if (GetBattlerHoldEffect(battler) == HOLD_EFFECT_TERRAIN_EXTENDER) + gFieldTimers.terrainTimer = 8; else - *timer = gBattleTurnCounter + 5; - + gFieldTimers.terrainTimer = 5; gBattleScripting.battler = battler; return TRUE; } @@ -2792,6 +3313,7 @@ static void ForewarnChooseMove(u32 battler) switch (GetMoveEffect(data[count].moveId)) { case EFFECT_OHKO: + case EFFECT_SHEER_COLD: data[count].power = 150; break; case EFFECT_COUNTER: @@ -2822,16 +3344,16 @@ static void ForewarnChooseMove(u32 battler) bestId = i; } - gBattlerTarget = data[bestId].battler; + gEffectBattler = data[bestId].battler; PREPARE_MOVE_BUFFER(gBattleTextBuff1, data[bestId].moveId) - RecordKnownMove(gBattlerTarget, data[bestId].moveId); + RecordKnownMove(data[bestId].battler, data[bestId].moveId); Free(data); } bool32 ChangeTypeBasedOnTerrain(u32 battler) { - u32 battlerType; + enum Type battlerType; if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) battlerType = TYPE_ELECTRIC; @@ -2849,7 +3371,7 @@ bool32 ChangeTypeBasedOnTerrain(u32 battler) return TRUE; } -static inline u8 GetSideFaintCounter(u32 side) +static inline u8 GetSideFaintCounter(enum BattleSide side) { return (side == B_SIDE_PLAYER) ? gBattleResults.playerFaintCounter : gBattleResults.opponentFaintCounter; } @@ -2867,10 +3389,9 @@ static inline uq4_12_t GetSupremeOverlordModifier(u32 battler) bool32 HadMoreThanHalfHpNowDoesnt(u32 battler) { - u32 cutoff = gBattleMons[battler].maxHP / 2; // Had more than half of hp before, now has less - return gBattleStruct->hpBefore[battler] > cutoff - && gBattleMons[battler].hp <= cutoff; + return gBattleStruct->battlerState[battler].wasAboveHalfHp + && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 2; } #define ANIM_STAT_HP 0 @@ -2881,7 +3402,7 @@ bool32 HadMoreThanHalfHpNowDoesnt(u32 battler) #define ANIM_STAT_SPEED 5 #define ANIM_STAT_ACC 6 #define ANIM_STAT_EVASION 7 -static void ChooseStatBoostAnimation(u32 battler) +void ChooseStatBoostAnimation(u32 battler) { u32 stat; bool32 statBuffMoreThan1 = FALSE; @@ -2921,44 +3442,19 @@ static void ChooseStatBoostAnimation(u32 battler) #undef ANIM_STAT_ACC #undef ANIM_STAT_EVASION -bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 abilityDef, u32 move, enum AbilityEffectOptions option) +bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, u32 move, enum FunctionCallOption option) { const u8 *battleScriptBlocksMove = NULL; - u32 battlerAbility = battlerDef; - s32 atkPriority = 0; - - if (option == ABILITY_CHECK_TRIGGER_AI) - atkPriority = GetBattleMovePriority(battlerAtk, abilityAtk, move); - else - atkPriority = GetChosenMovePriority(battlerAtk, abilityAtk); switch (abilityDef) { case ABILITY_SOUNDPROOF: if (IsSoundMove(move) && !(GetBattlerMoveTargetType(battlerAtk, move) & MOVE_TARGET_USER)) - { - if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; battleScriptBlocksMove = BattleScript_SoundproofProtected; - } break; case ABILITY_BULLETPROOF: if (IsBallisticMove(move)) - { - if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; battleScriptBlocksMove = BattleScript_SoundproofProtected; - } - break; - case ABILITY_DAZZLING: - case ABILITY_QUEENLY_MAJESTY: - case ABILITY_ARMOR_TAIL: - if (atkPriority > 0 && !IsBattlerAlly(battlerAtk, battlerDef)) - { - if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; - battleScriptBlocksMove = BattleScript_DazzlingProtected; - } break; case ABILITY_GOOD_AS_GOLD: if (IsBattleMoveStatus(move)) @@ -2967,44 +3463,43 @@ bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 a battleScriptBlocksMove = BattleScript_GoodAsGoldActivates; } break; + default: + break; } - if (atkPriority > 0) + if (battleScriptBlocksMove == NULL) { - // Prankster check - if (battleScriptBlocksMove == NULL - && IsBattleMoveStatus(move) - && BlocksPrankster(move, battlerAtk, battlerDef, TRUE) - && !(IsBattleMoveStatus(move) && (abilityDef == ABILITY_MAGIC_BOUNCE || gProtectStructs[battlerDef].bounceMove))) - { - if (option == ABILITY_RUN_SCRIPT && !IsSpreadMove(GetBattlerMoveTargetType(battlerAtk, move))) - CancelMultiTurnMoves(battlerAtk, SKY_DROP_ATTACKCANCELLER_CHECK); // Don't cancel moves that can hit two targets bc one target might not be protected + s32 atkPriority = 0; + if (option == AI_CHECK) + atkPriority = GetBattleMovePriority(battlerAtk, abilityAtk, move); + else + atkPriority = GetChosenMovePriority(battlerAtk, abilityAtk); - battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster; + if (atkPriority <= 0) + { + // Not a priority move } - - // Check def partner ability - u32 partnerDef = BATTLE_PARTNER(battlerDef); - if (battleScriptBlocksMove == NULL - && IsDoubleBattle() - && IsBattlerAlive(partnerDef) - && !IsBattlerAlly(battlerAtk, partnerDef)) + else if (IsBattleMoveStatus(move) + && BlocksPrankster(move, battlerAtk, battlerDef, TRUE) + && !(IsBattleMoveStatus(move) && (abilityDef == ABILITY_MAGIC_BOUNCE || gProtectStructs[battlerDef].bounceMove))) { - if (option == ABILITY_CHECK_TRIGGER_AI) - abilityDef = gAiLogicData->abilities[partnerDef]; - else - abilityDef = GetBattlerAbility(partnerDef); - - switch (abilityDef) + if (option == RUN_SCRIPT && !IsSpreadMove(GetBattlerMoveTargetType(battlerAtk, move))) + CancelMultiTurnMoves(battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); // Don't cancel moves that can hit two targets bc one target might not be protected + battleScriptBlocksMove = BattleScript_DoesntAffectTargetAtkString; + } + else if (IsBattlerTerrainAffected(battlerDef, abilityDef, GetBattlerHoldEffect(battlerDef), STATUS_FIELD_PSYCHIC_TERRAIN) // Not an ability but similar conditions + && !IsBattlerAlly(battlerAtk, battlerDef) + && GetMoveTarget(move) != MOVE_TARGET_ALL_BATTLERS + && GetMoveTarget(move) != MOVE_TARGET_OPPONENTS_FIELD) + { + battleScriptBlocksMove = BattleScript_MoveUsedPsychicTerrainPrevents; + if (option == RUN_SCRIPT) { - case ABILITY_DAZZLING: - case ABILITY_QUEENLY_MAJESTY: - case ABILITY_ARMOR_TAIL: - if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; - battlerAbility = partnerDef; - battleScriptBlocksMove = BattleScript_DazzlingProtected; - break; + gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed. + if (!IsSpreadMove(GetBattlerMoveTargetType(battlerAtk, move))) + CancelMultiTurnMoves(battlerAtk, SKY_DROP_ATTACKCANCELER_CHECK); // Don't cancel moves that can hit two targets bc one target might not be protected + gBattlescriptCurrInstr = BattleScript_MoveUsedPsychicTerrainPrevents; + return TRUE; // Early return since we don't want to set remaining values } } } @@ -3012,23 +3507,23 @@ bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 a if (battleScriptBlocksMove == NULL) return FALSE; - if (option == ABILITY_RUN_SCRIPT) + if (option == RUN_SCRIPT) { - gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed. + gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed. gLastUsedAbility = abilityDef; RecordAbilityBattle(battlerDef, abilityDef); - gBattleScripting.battler = gBattlerAbility = battlerAbility; + gBattleScripting.battler = gBattlerAbility = battlerDef; gBattlescriptCurrInstr = battleScriptBlocksMove; } return TRUE; } -bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType, enum AbilityEffectOptions option) +bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef, u32 move, enum Type moveType, enum FunctionCallOption option) { enum MoveAbsorbed effect = MOVE_ABSORBED_BY_NO_ABILITY; const u8 *battleScript = NULL; - u32 statId = 0; + enum Stat statId = 0; u32 statAmount = 1; switch (abilityDef) @@ -3057,14 +3552,14 @@ bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 } break; case ABILITY_LIGHTNING_ROD: - if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_ELECTRIC && GetBattlerMoveTargetType(battlerAtk, move) != MOVE_TARGET_ALL_BATTLERS) + if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && moveType == TYPE_ELECTRIC && GetBattlerMoveTargetType(battlerAtk, move) != MOVE_TARGET_ALL_BATTLERS) { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; statId = STAT_SPATK; } break; case ABILITY_STORM_DRAIN: - if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_WATER) + if (GetConfig(CONFIG_REDIRECT_ABILITY_IMMUNITY) >= GEN_5 && moveType == TYPE_WATER) { effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; statId = STAT_SPATK; @@ -3098,7 +3593,7 @@ bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 break; } - if (effect == MOVE_ABSORBED_BY_NO_ABILITY || option != ABILITY_RUN_SCRIPT) + if (effect == MOVE_ABSORBED_BY_NO_ABILITY || option != RUN_SCRIPT) return effect; switch (effect) @@ -3107,42 +3602,25 @@ bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 return FALSE; case MOVE_ABSORBED_BY_DRAIN_HP_ABILITY: gBattleStruct->pledgeMove = FALSE; - if (IsBattlerAtMaxHp(battlerDef) || (B_HEAL_BLOCKING >= GEN_5 && gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK)) + if (IsBattlerAtMaxHp(battlerDef) || (B_HEAL_BLOCKING >= GEN_5 && gBattleMons[battlerDef].volatiles.healBlock)) { - if ((gProtectStructs[battlerAtk].notFirstStrike)) - battleScript = BattleScript_MonMadeMoveUseless; - else - battleScript = BattleScript_MonMadeMoveUseless_PPLoss; + battleScript = BattleScript_MonMadeMoveUseless; } else { - if (gProtectStructs[battlerAtk].notFirstStrike) - battleScript = BattleScript_MoveHPDrain; - else - battleScript = BattleScript_MoveHPDrain_PPLoss; - - gBattleStruct->moveDamage[battlerDef] = GetNonDynamaxMaxHP(battlerDef) / 4; - if (gBattleStruct->moveDamage[battlerDef] == 0) - gBattleStruct->moveDamage[battlerDef] = 1; - gBattleStruct->moveDamage[battlerDef] *= -1; + battleScript = BattleScript_MoveHPDrain; + SetHealAmount(battlerDef, GetNonDynamaxMaxHP(battlerDef) / 4); } break; case MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY: gBattleStruct->pledgeMove = FALSE; - if (!CompareStat(battlerDef, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (!CompareStat(battlerDef, statId, MAX_STAT_STAGE, CMP_LESS_THAN, abilityDef)) { - if ((gProtectStructs[battlerAtk].notFirstStrike)) - battleScript = BattleScript_MonMadeMoveUseless; - else - battleScript = BattleScript_MonMadeMoveUseless_PPLoss; + battleScript = BattleScript_MonMadeMoveUseless; } else { - if (gProtectStructs[battlerAtk].notFirstStrike) - battleScript = BattleScript_MoveStatDrain; - else - battleScript = BattleScript_MoveStatDrain_PPLoss; - + battleScript = BattleScript_MoveStatDrain; SET_STATCHANGER(statId, statAmount, FALSE); if (B_ABSORBING_ABILITY_STRING < GEN_5) PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); @@ -3153,19 +3631,13 @@ bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 if (!gDisableStructs[battlerDef].flashFireBoosted) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_BOOST; - if (gProtectStructs[battlerAtk].notFirstStrike) - battleScript = BattleScript_FlashFireBoost; - else - battleScript = BattleScript_FlashFireBoost_PPLoss; + battleScript = BattleScript_FlashFireBoost; gDisableStructs[battlerDef].flashFireBoosted = TRUE; } else { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST; - if (gProtectStructs[battlerAtk].notFirstStrike) - battleScript = BattleScript_FlashFireBoost; - else - battleScript = BattleScript_FlashFireBoost_PPLoss; + battleScript = BattleScript_FlashFireBoost; } break; } @@ -3182,7 +3654,7 @@ bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 return effect; } -static inline u32 SetStartingFieldStatus(u32 flag, u32 message, u32 anim, u16 *timer) +static inline bool32 SetStartingFieldStatus(u32 flag, u32 message, u32 anim, u16 *timer) { if (!(gFieldStatuses & flag)) { @@ -3190,17 +3662,17 @@ static inline u32 SetStartingFieldStatus(u32 flag, u32 message, u32 anim, u16 *t gFieldStatuses |= flag; gBattleScripting.animArg1 = anim; if (gBattleStruct->startingStatusTimer) - *timer = gBattleTurnCounter + gBattleStruct->startingStatusTimer; + *timer = gBattleStruct->startingStatusTimer; else *timer = 0; // Infinite - return 1; + return TRUE; } - return 0; + return FALSE; } -static inline u32 SetStartingSideStatus(u32 flag, u32 side, u32 message, u32 anim, u16 *timer) +static inline bool32 SetStartingSideStatus(u32 flag, u32 side, u32 message, u32 anim, u16 *timer) { if (!(gSideStatuses[side] & flag)) { @@ -3209,163 +3681,158 @@ static inline u32 SetStartingSideStatus(u32 flag, u32 side, u32 message, u32 ani gSideStatuses[side] |= flag; gBattleScripting.animArg1 = anim; if (gBattleStruct->startingStatusTimer) - *timer = gBattleTurnCounter + gBattleStruct->startingStatusTimer; + *timer = gBattleStruct->startingStatusTimer; else *timer = 0; // Infinite - return 1; + return TRUE; } - return 0; + return FALSE; } -u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg) +bool32 TryFieldEffects(enum FieldEffectCases caseId) { - u32 effect = 0; - u32 moveType = 0, move = 0; - u32 side = 0; - u32 i = 0, j = 0; - u32 partner = 0; - struct Pokemon *mon; + bool32 effect = FALSE; + bool32 isTerrain = FALSE; if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - return 0; - - if (gBattlerAttacker >= gBattlersCount) - gBattlerAttacker = battler; + return FALSE; - if (special) - gLastUsedAbility = special; - else if (ability) - gLastUsedAbility = ability; - else - gLastUsedAbility = GetBattlerAbility(battler); - - if (moveArg) - move = moveArg; - else - move = gCurrentMove; - - moveType = GetBattleMoveType(move); - - switch (caseID) + switch (caseId) { - case ABILITYEFFECT_SWITCH_IN_STATUSES: // starting field/side/etc statuses with a variable + case FIELD_EFFECT_TRAINER_STATUSES: // starting field/side/etc statuses with a variable + switch ((enum StartingStatus) gBattleStruct->startingStatus) + { + case STARTING_STATUS_NONE: + break; + case STARTING_STATUS_ELECTRIC_TERRAIN: + effect = SetStartingFieldStatus( + STATUS_FIELD_ELECTRIC_TERRAIN, + B_MSG_TERRAIN_SET_ELECTRIC, + 0, + &gFieldTimers.terrainTimer); + isTerrain = TRUE; + break; + case STARTING_STATUS_MISTY_TERRAIN: + effect = SetStartingFieldStatus( + STATUS_FIELD_MISTY_TERRAIN, + B_MSG_TERRAIN_SET_MISTY, + 0, + &gFieldTimers.terrainTimer); + isTerrain = TRUE; + break; + case STARTING_STATUS_GRASSY_TERRAIN: + effect = SetStartingFieldStatus( + STATUS_FIELD_GRASSY_TERRAIN, + B_MSG_TERRAIN_SET_GRASSY, + 0, + &gFieldTimers.terrainTimer); + isTerrain = TRUE; + break; + case STARTING_STATUS_PSYCHIC_TERRAIN: + effect = SetStartingFieldStatus( + STATUS_FIELD_PSYCHIC_TERRAIN, + B_MSG_TERRAIN_SET_PSYCHIC, + 0, + &gFieldTimers.terrainTimer); + isTerrain = TRUE; + break; + case STARTING_STATUS_TRICK_ROOM: + effect = SetStartingFieldStatus( + STATUS_FIELD_TRICK_ROOM, + B_MSG_SET_TRICK_ROOM, + B_ANIM_TRICK_ROOM, + &gFieldTimers.trickRoomTimer); + break; + case STARTING_STATUS_MAGIC_ROOM: + effect = SetStartingFieldStatus( + STATUS_FIELD_MAGIC_ROOM, + B_MSG_SET_MAGIC_ROOM, + B_ANIM_MAGIC_ROOM, + &gFieldTimers.magicRoomTimer); + break; + case STARTING_STATUS_WONDER_ROOM: + effect = SetStartingFieldStatus( + STATUS_FIELD_WONDER_ROOM, + B_MSG_SET_WONDER_ROOM, + B_ANIM_WONDER_ROOM, + &gFieldTimers.wonderRoomTimer); + break; + case STARTING_STATUS_TAILWIND_PLAYER: + effect = SetStartingSideStatus( + SIDE_STATUS_TAILWIND, + B_SIDE_PLAYER, + B_MSG_SET_TAILWIND, + B_ANIM_TAILWIND, + &gSideTimers[B_SIDE_PLAYER].tailwindTimer); + break; + case STARTING_STATUS_TAILWIND_OPPONENT: + effect = SetStartingSideStatus( + SIDE_STATUS_TAILWIND, + B_SIDE_OPPONENT, + B_MSG_SET_TAILWIND, + B_ANIM_TAILWIND, + &gSideTimers[B_SIDE_OPPONENT].tailwindTimer); + break; + case STARTING_STATUS_RAINBOW_PLAYER: + effect = SetStartingSideStatus( + SIDE_STATUS_RAINBOW, + B_SIDE_PLAYER, + B_MSG_SET_RAINBOW, + B_ANIM_RAINBOW, + &gSideTimers[B_SIDE_PLAYER].rainbowTimer); + break; + case STARTING_STATUS_RAINBOW_OPPONENT: + effect = SetStartingSideStatus( + SIDE_STATUS_RAINBOW, + B_SIDE_OPPONENT, + B_MSG_SET_RAINBOW, + B_ANIM_RAINBOW, + &gSideTimers[B_SIDE_OPPONENT].rainbowTimer); + break; + case STARTING_STATUS_SEA_OF_FIRE_PLAYER: + effect = SetStartingSideStatus( + SIDE_STATUS_SEA_OF_FIRE, + B_SIDE_PLAYER, + B_MSG_SET_SEA_OF_FIRE, + B_ANIM_SEA_OF_FIRE, + &gSideTimers[B_SIDE_PLAYER].seaOfFireTimer); + break; + case STARTING_STATUS_SEA_OF_FIRE_OPPONENT: + effect = SetStartingSideStatus( + SIDE_STATUS_SEA_OF_FIRE, + B_SIDE_OPPONENT, + B_MSG_SET_SEA_OF_FIRE, + B_ANIM_SEA_OF_FIRE, + &gSideTimers[B_SIDE_OPPONENT].seaOfFireTimer); + break; + case STARTING_STATUS_SWAMP_PLAYER: + effect = SetStartingSideStatus( + SIDE_STATUS_SWAMP, + B_SIDE_PLAYER, + B_MSG_SET_SWAMP, + B_ANIM_SWAMP, + &gSideTimers[B_SIDE_PLAYER].swampTimer); + break; + case STARTING_STATUS_SWAMP_OPPONENT: + effect = SetStartingSideStatus( + SIDE_STATUS_SWAMP, + B_SIDE_OPPONENT, + B_MSG_SET_SWAMP, + B_ANIM_SWAMP, + &gSideTimers[B_SIDE_OPPONENT].swampTimer); + break; + } + if (effect) { - gBattleScripting.battler = battler; - switch (gBattleStruct->startingStatus) - { - case STARTING_STATUS_ELECTRIC_TERRAIN: - effect = SetStartingFieldStatus(STATUS_FIELD_ELECTRIC_TERRAIN, - B_MSG_TERRAIN_SET_ELECTRIC, - 0, - &gFieldTimers.terrainTimer); - effect = (effect == 1) ? 2 : 0; - break; - case STARTING_STATUS_MISTY_TERRAIN: - effect = SetStartingFieldStatus(STATUS_FIELD_MISTY_TERRAIN, - B_MSG_TERRAIN_SET_MISTY, - 0, - &gFieldTimers.terrainTimer); - effect = (effect == 1) ? 2 : 0; - break; - case STARTING_STATUS_GRASSY_TERRAIN: - effect = SetStartingFieldStatus(STATUS_FIELD_GRASSY_TERRAIN, - B_MSG_TERRAIN_SET_GRASSY, - 0, - &gFieldTimers.terrainTimer); - effect = (effect == 1) ? 2 : 0; - break; - case STARTING_STATUS_PSYCHIC_TERRAIN: - effect = SetStartingFieldStatus(STATUS_FIELD_PSYCHIC_TERRAIN, - B_MSG_TERRAIN_SET_PSYCHIC, - 0, - &gFieldTimers.terrainTimer); - effect = (effect == 1) ? 2 : 0; - break; - case STARTING_STATUS_TRICK_ROOM: - effect = SetStartingFieldStatus(STATUS_FIELD_TRICK_ROOM, - B_MSG_SET_TRICK_ROOM, - B_ANIM_TRICK_ROOM, - &gFieldTimers.trickRoomTimer); - break; - case STARTING_STATUS_MAGIC_ROOM: - effect = SetStartingFieldStatus(STATUS_FIELD_MAGIC_ROOM, - B_MSG_SET_MAGIC_ROOM, - B_ANIM_MAGIC_ROOM, - &gFieldTimers.magicRoomTimer); - break; - case STARTING_STATUS_WONDER_ROOM: - effect = SetStartingFieldStatus(STATUS_FIELD_WONDER_ROOM, - B_MSG_SET_WONDER_ROOM, - B_ANIM_WONDER_ROOM, - &gFieldTimers.wonderRoomTimer); - break; - case STARTING_STATUS_TAILWIND_PLAYER: - effect = SetStartingSideStatus(SIDE_STATUS_TAILWIND, - B_SIDE_PLAYER, - B_MSG_SET_TAILWIND, - B_ANIM_TAILWIND, - &gSideTimers[B_SIDE_PLAYER].tailwindTimer); - break; - case STARTING_STATUS_TAILWIND_OPPONENT: - effect = SetStartingSideStatus(SIDE_STATUS_TAILWIND, - B_SIDE_OPPONENT, - B_MSG_SET_TAILWIND, - B_ANIM_TAILWIND, - &gSideTimers[B_SIDE_OPPONENT].tailwindTimer); - break; - case STARTING_STATUS_RAINBOW_PLAYER: - effect = SetStartingSideStatus(SIDE_STATUS_RAINBOW, - B_SIDE_PLAYER, - B_MSG_SET_RAINBOW, - B_ANIM_RAINBOW, - &gSideTimers[B_SIDE_PLAYER].rainbowTimer); - break; - case STARTING_STATUS_RAINBOW_OPPONENT: - effect = SetStartingSideStatus(SIDE_STATUS_RAINBOW, - B_SIDE_OPPONENT, - B_MSG_SET_RAINBOW, - B_ANIM_RAINBOW, - &gSideTimers[B_SIDE_OPPONENT].rainbowTimer); - break; - case STARTING_STATUS_SEA_OF_FIRE_PLAYER: - effect = SetStartingSideStatus(SIDE_STATUS_SEA_OF_FIRE, - B_SIDE_PLAYER, - B_MSG_SET_SEA_OF_FIRE, - B_ANIM_SEA_OF_FIRE, - &gSideTimers[B_SIDE_PLAYER].seaOfFireTimer); - break; - case STARTING_STATUS_SEA_OF_FIRE_OPPONENT: - effect = SetStartingSideStatus(SIDE_STATUS_SEA_OF_FIRE, - B_SIDE_OPPONENT, - B_MSG_SET_SEA_OF_FIRE, - B_ANIM_SEA_OF_FIRE, - &gSideTimers[B_SIDE_OPPONENT].seaOfFireTimer); - break; - case STARTING_STATUS_SWAMP_PLAYER: - effect = SetStartingSideStatus(SIDE_STATUS_SWAMP, - B_SIDE_PLAYER, - B_MSG_SET_SWAMP, - B_ANIM_SWAMP, - &gSideTimers[B_SIDE_PLAYER].swampTimer); - break; - case STARTING_STATUS_SWAMP_OPPONENT: - effect = SetStartingSideStatus(SIDE_STATUS_SWAMP, - B_SIDE_OPPONENT, - B_MSG_SET_SWAMP, - B_ANIM_SWAMP, - &gSideTimers[B_SIDE_OPPONENT].swampTimer); - break; - } - - if (effect == 1) - BattleScriptPushCursorAndCallback(BattleScript_OverworldStatusStarts); - else if (effect == 2) + if (isTerrain) BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); + else + BattleScriptPushCursorAndCallback(BattleScript_OverworldStatusStarts); } break; - case ABILITYEFFECT_SWITCH_IN_TERRAIN: // terrain starting from overworld weather + case FIELD_EFFECT_OVERWORLD_TERRAIN: // terrain starting from overworld weather if (B_THUNDERSTORM_TERRAIN == TRUE && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) && GetCurrentWeather() == WEATHER_RAIN_THUNDERSTORM) @@ -3375,7 +3842,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gFieldTimers.terrainTimer = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); - effect++; + effect = TRUE; } else if (B_OVERWORLD_FOG >= GEN_8 && (GetCurrentWeather() == WEATHER_FOG_HORIZONTAL || GetCurrentWeather() == WEATHER_FOG_DIAGONAL) @@ -3385,11 +3852,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gFieldTimers.terrainTimer = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain); - effect++; + effect = TRUE; } break; - case ABILITYEFFECT_SWITCH_IN_WEATHER: - gBattleScripting.battler = battler; + case FIELD_EFFECT_OVERWORLD_WEATHER: if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) { switch (GetCurrentWeather()) @@ -3401,7 +3867,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 { gBattleWeather = B_WEATHER_RAIN_NORMAL; gBattleScripting.animArg1 = B_ANIM_RAIN_CONTINUES; - effect++; + effect = TRUE; } break; case WEATHER_SANDSTORM: @@ -3409,7 +3875,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 { gBattleWeather = B_WEATHER_SANDSTORM; gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES; - effect++; + effect = TRUE; } break; case WEATHER_DROUGHT: @@ -3417,7 +3883,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 { gBattleWeather = B_WEATHER_SUN_NORMAL; gBattleScripting.animArg1 = B_ANIM_SUN_CONTINUES; - effect++; + effect = TRUE; } break; case WEATHER_SNOW: @@ -3433,29 +3899,62 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleWeather = B_WEATHER_HAIL; gBattleScripting.animArg1 = B_ANIM_HAIL_CONTINUES; } - effect++; + effect = TRUE; } break; case WEATHER_FOG_DIAGONAL: case WEATHER_FOG_HORIZONTAL: - if (B_OVERWORLD_FOG == GEN_4) + if (B_OVERWORLD_FOG == GEN_4 && !(gBattleWeather & B_WEATHER_FOG)) { - if (!(gBattleWeather & B_WEATHER_FOG)) - { - gBattleWeather = B_WEATHER_FOG; - gBattleScripting.animArg1 = B_ANIM_FOG_CONTINUES; - effect++; - } - break; + gBattleWeather = B_WEATHER_FOG; + gBattleScripting.animArg1 = B_ANIM_FOG_CONTINUES; + effect = TRUE; } + break; } } - if (effect != 0) + if (effect) { gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather(); BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts); } break; + } + + return effect; +} + +u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ability, u32 special, u32 moveArg) +{ + u32 effect = 0; + enum Type moveType = 0; + u32 move = 0; + u32 side = 0; + u32 i = 0, j = 0; + u32 partner = 0; + + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + return 0; + + if (gBattlerAttacker >= gBattlersCount) + gBattlerAttacker = battler; + + if (special) + gLastUsedAbility = special; + else if (ability) + gLastUsedAbility = ability; + else + gLastUsedAbility = GetBattlerAbility(battler); + + if (moveArg) + move = moveArg; + else + move = gCurrentMove; + + moveType = GetBattleMoveType(move); + + switch (caseID) + { case ABILITYEFFECT_ON_SWITCHIN: gBattleScripting.battler = battler; switch (gLastUsedAbility) @@ -3468,6 +3967,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (gSpecialStatuses[battler].switchInAbilityDone) break; + if (GetBattlerHoldEffectIgnoreAbility(battler) == HOLD_EFFECT_ABILITY_SHIELD) + break; side = (BATTLE_OPPOSITE(GetBattlerPosition(battler))) & BIT_SIDE; target1 = GetBattlerAtPosition(side); @@ -3493,8 +3994,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 BattleScriptPushCursorAndCallback(BattleScript_TraceActivates); gBattleStruct->tracedAbility[battler] = gLastUsedAbility = gBattleMons[chosenTarget].ability; RecordAbilityBattle(chosenTarget, gLastUsedAbility); // Record the opposing battler has this ability - gBattlerAbility = battler; - PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, chosenTarget, gBattlerPartyIndexes[chosenTarget]) PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility) } @@ -3510,11 +4009,14 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (gDisableStructs[battler].isFirstTurn == 2 && !gDisableStructs[battler].overwrittenAbility && IsBattlerAlive(diagonalBattler) - && !(gBattleMons[diagonalBattler].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE)) - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + && !gBattleMons[diagonalBattler].volatiles.substitute + && !gBattleMons[diagonalBattler].volatiles.transformed + && !gBattleMons[battler].volatiles.transformed && gBattleStruct->illusion[diagonalBattler].state != ILLUSION_ON - && !(gStatuses3[diagonalBattler] & STATUS3_SEMI_INVULNERABLE_NO_COMMANDER)) + && !IsSemiInvulnerable(diagonalBattler, EXCLUDE_COMMANDER)) { + SaveBattlerAttacker(gBattlerAttacker); + SaveBattlerTarget(gBattlerTarget); gBattlerAttacker = battler; gBattlerTarget = diagonalBattler; BattleScriptPushCursorAndCallback(BattleScript_ImposterActivates); @@ -3552,7 +4054,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_SLOW_START: if (!gSpecialStatuses[battler].switchInAbilityDone) { - gDisableStructs[battler].slowStartTimer = gBattleTurnCounter + 5; + gDisableStructs[battler].slowStartTimer = 5; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_SLOWSTART; gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); @@ -3562,7 +4064,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_UNNERVE: if (!gSpecialStatuses[battler].switchInAbilityDone && !gDisableStructs[battler].unnerveActivated) { - gBattlerTarget = GetOppositeBattler(battler); + gEffectBattler = GetOppositeBattler(battler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_UNNERVE; gDisableStructs[battler].unnerveActivated = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; @@ -3574,7 +4076,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_AS_ONE_SHADOW_RIDER: if (!gSpecialStatuses[battler].switchInAbilityDone && !gDisableStructs[battler].unnerveActivated) { - gBattlerTarget = GetOppositeBattler(battler); + gEffectBattler = GetOppositeBattler(battler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_ASONE; gDisableStructs[battler].unnerveActivated = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; @@ -3596,6 +4098,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_PASTEL_VEIL: if (!gSpecialStatuses[battler].switchInAbilityDone) { + SaveBattlerTarget(gBattlerTarget); gBattlerTarget = battler; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_PASTEL_VEIL; BattleScriptPushCursorAndCallback(BattleScript_PastelVeilActivates); @@ -3606,6 +4109,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_ANTICIPATION: if (!gSpecialStatuses[battler].switchInAbilityDone) { + struct DamageContext ctx = {0}; + uq4_12_t modifier = UQ_4_12(1.0); for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (IsBattlerAlive(i) && !IsBattlerAlly(i, battler)) @@ -3613,8 +4118,19 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 for (j = 0; j < MAX_MON_MOVES; j++) { move = gBattleMons[i].moves[j]; + enum BattleMoveEffects moveEffect = GetMoveEffect(move); moveType = GetBattleMoveType(move); - if (CalcTypeEffectivenessMultiplier(move, moveType, i, battler, ABILITY_ANTICIPATION, FALSE) >= UQ_4_12(2.0) || GetMoveEffect(move) == EFFECT_OHKO) + + ctx.battlerAtk = i; + ctx.battlerDef = battler; + ctx.move = ctx.chosenMove = move; + ctx.moveType = moveType; + ctx.isAnticipation = TRUE; + modifier = CalcTypeEffectivenessMultiplier(&ctx); + + if (modifier >= UQ_4_12(2.0) + || moveEffect == EFFECT_OHKO + || moveEffect == EFFECT_SHEER_COLD) { effect++; break; @@ -3635,7 +4151,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattleScripting.battler = battler; BattleScriptPushCursorAndCallback(BattleScript_FriskActivates); // Try activate effect++; } @@ -3653,7 +4168,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_DOWNLOAD: if (!gSpecialStatuses[battler].switchInAbilityDone) { - u32 statId, opposingBattler; + enum Stat statId; + u32 opposingBattler; u32 opposingDef = 0, opposingSpDef = 0; opposingBattler = BATTLE_OPPOSITE(battler); @@ -3677,9 +4193,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gSpecialStatuses[battler].switchInAbilityDone = TRUE; - if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) { SET_STATCHANGER(statId, 1, FALSE); + SaveBattlerAttacker(gBattlerAttacker); gBattlerAttacker = battler; PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); BattleScriptPushCursorAndCallback(BattleScript_AttackerAbilityStatRaiseEnd3); @@ -3742,7 +4259,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_DRIZZLE: - if (TryChangeBattleWeather(battler, BATTLE_WEATHER_RAIN, TRUE)) + if (TryChangeBattleWeather(battler, BATTLE_WEATHER_RAIN, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates); effect++; @@ -3755,7 +4272,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_SAND_STREAM: - if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SANDSTORM, TRUE)) + if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SANDSTORM, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates); effect++; @@ -3767,8 +4284,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect++; } break; + case ABILITY_ORICHALCUM_PULSE: case ABILITY_DROUGHT: - if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN, TRUE)) + if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); effect++; @@ -3781,12 +4299,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_SNOW_WARNING: - if (B_SNOW_WARNING >= GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_SNOW, TRUE)) + if (GetConfig(CONFIG_SNOW_WARNING) >= GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_SNOW, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesSnow); effect++; } - else if (B_SNOW_WARNING < GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_HAIL, TRUE)) + else if (GetConfig(CONFIG_SNOW_WARNING) < GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_HAIL, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesHail); effect++; @@ -3800,36 +4318,37 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_ELECTRIC_SURGE: case ABILITY_HADRON_ENGINE: - if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN, &gFieldTimers.terrainTimer)) + if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN)) { BattleScriptPushCursorAndCallback(BattleScript_ElectricSurgeActivates); effect++; } break; case ABILITY_GRASSY_SURGE: - if (TryChangeBattleTerrain(battler, STATUS_FIELD_GRASSY_TERRAIN, &gFieldTimers.terrainTimer)) + if (TryChangeBattleTerrain(battler, STATUS_FIELD_GRASSY_TERRAIN)) { BattleScriptPushCursorAndCallback(BattleScript_GrassySurgeActivates); effect++; } break; case ABILITY_MISTY_SURGE: - if (TryChangeBattleTerrain(battler, STATUS_FIELD_MISTY_TERRAIN, &gFieldTimers.terrainTimer)) + if (TryChangeBattleTerrain(battler, STATUS_FIELD_MISTY_TERRAIN)) { BattleScriptPushCursorAndCallback(BattleScript_MistySurgeActivates); effect++; } break; case ABILITY_PSYCHIC_SURGE: - if (TryChangeBattleTerrain(battler, STATUS_FIELD_PSYCHIC_TERRAIN, &gFieldTimers.terrainTimer)) + if (TryChangeBattleTerrain(battler, STATUS_FIELD_PSYCHIC_TERRAIN)) { BattleScriptPushCursorAndCallback(BattleScript_PsychicSurgeActivates); effect++; } break; case ABILITY_INTIMIDATE: - if (!gSpecialStatuses[battler].switchInAbilityDone) + if (!gSpecialStatuses[battler].switchInAbilityDone && !IsOpposingSideEmpty(battler)) { + SaveBattlerAttacker(gBattlerAttacker); gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_ATK, 1, TRUE); @@ -3839,11 +4358,13 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_SUPERSWEET_SYRUP: if (!gSpecialStatuses[battler].switchInAbilityDone - && !gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].supersweetSyrup) + && !GetBattlerPartyState(battler)->supersweetSyrup + && !IsOpposingSideEmpty(battler)) { + SaveBattlerAttacker(gBattlerAttacker); gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].supersweetSyrup = TRUE; + GetBattlerPartyState(battler)->supersweetSyrup = TRUE; BattleScriptPushCursorAndCallback(BattleScript_SupersweetSyrupActivates); effect++; } @@ -3865,6 +4386,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 BattleScriptPushCursorAndCallback(BattleScript_ActivateTeraformZero); effect++; } + break; case ABILITY_SCHOOLING: if (gBattleMons[battler].level < 20) break; @@ -3873,46 +4395,45 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_SHIELDS_DOWN: if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT)) { - gBattlerAttacker = battler; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeEnd3); effect++; } break; case ABILITY_INTREPID_SWORD: - if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) - && !gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].intrepidSwordBoost) + if (!gSpecialStatuses[battler].switchInAbilityDone + && !GetBattlerPartyState(battler)->intrepidSwordBoost) { - gBattleScripting.savedBattler = gBattlerAttacker; - gBattlerAttacker = battler; - if (B_INTREPID_SWORD == GEN_9) - gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].intrepidSwordBoost = TRUE; + if (GetConfig(CONFIG_INTREPID_SWORD) == GEN_9) + GetBattlerPartyState(battler)->intrepidSwordBoost = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - SET_STATCHANGER(STAT_ATK, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); - effect++; + if (CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) + { + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); + effect++; + } } break; case ABILITY_DAUNTLESS_SHIELD: - if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN) - && !gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].dauntlessShieldBoost) + if (!gSpecialStatuses[battler].switchInAbilityDone + && !GetBattlerPartyState(battler)->dauntlessShieldBoost) { - gBattleScripting.savedBattler = gBattlerAttacker; - gBattlerAttacker = battler; - if (B_DAUNTLESS_SHIELD == GEN_9) - gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].dauntlessShieldBoost = TRUE; + if (GetConfig(CONFIG_DAUNTLESS_SHIELD) == GEN_9) + GetBattlerPartyState(battler)->dauntlessShieldBoost = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - SET_STATCHANGER(STAT_DEF, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); - effect++; + if (CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) + { + SET_STATCHANGER(STAT_DEF, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); + effect++; + } } break; case ABILITY_WIND_RIDER: if (!gSpecialStatuses[battler].switchInAbilityDone - && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) + && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility) && gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_TAILWIND) { - gBattleScripting.savedBattler = gBattlerAttacker; - gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_ATK, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); @@ -3920,21 +4441,21 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_DESOLATE_LAND: - if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN_PRIMAL, TRUE)) + if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN_PRIMAL, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_DesolateLandActivates); effect++; } break; case ABILITY_PRIMORDIAL_SEA: - if (TryChangeBattleWeather(battler, BATTLE_WEATHER_RAIN_PRIMAL, TRUE)) + if (TryChangeBattleWeather(battler, BATTLE_WEATHER_RAIN_PRIMAL, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_PrimordialSeaActivates); effect++; } break; case ABILITY_DELTA_STREAM: - if (TryChangeBattleWeather(battler, BATTLE_WEATHER_STRONG_WINDS, TRUE)) + if (TryChangeBattleWeather(battler, BATTLE_WEATHER_STRONG_WINDS, gLastUsedAbility)) { BattleScriptPushCursorAndCallback(BattleScript_DeltaStreamActivates); effect++; @@ -3943,6 +4464,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_VESSEL_OF_RUIN: if (!gSpecialStatuses[battler].switchInAbilityDone) { + gBattleMons[battler].volatiles.vesselOfRuin = TRUE; PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_RuinAbilityActivates); @@ -3952,6 +4474,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_SWORD_OF_RUIN: if (!gSpecialStatuses[battler].switchInAbilityDone) { + gBattleMons[battler].volatiles.swordOfRuin = TRUE; PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF); gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_RuinAbilityActivates); @@ -3961,6 +4484,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_TABLETS_OF_RUIN: if (!gSpecialStatuses[battler].switchInAbilityDone) { + gBattleMons[battler].volatiles.tabletsOfRuin = TRUE; PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_RuinAbilityActivates); @@ -3970,19 +4494,13 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_BEADS_OF_RUIN: if (!gSpecialStatuses[battler].switchInAbilityDone) { + gBattleMons[battler].volatiles.beadsOfRuin = TRUE; PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF); gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_RuinAbilityActivates); effect++; } break; - case ABILITY_ORICHALCUM_PULSE: - if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN, TRUE)) - { - BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); - effect++; - } - break; case ABILITY_SUPREME_OVERLORD: if (!gSpecialStatuses[battler].switchInAbilityDone) { @@ -3996,30 +4514,31 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_COSTAR: + partner = BATTLE_PARTNER(battler); if (!gSpecialStatuses[battler].switchInAbilityDone && IsDoubleBattle() - && IsBattlerAlive(BATTLE_PARTNER(battler)) - && CountBattlerStatIncreases(BATTLE_PARTNER(battler), FALSE)) + && IsBattlerAlive(partner) + && BattlerHasCopyableChanges(partner)) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattlerAttacker = gBattlerAbility = battler; for (i = 0; i < NUM_BATTLE_STATS; i++) - gBattleMons[battler].statStages[i] = gBattleMons[BATTLE_PARTNER(battler)].statStages[i]; - gBattleScripting.battler = BATTLE_PARTNER(battler); + gBattleMons[battler].statStages[i] = gBattleMons[partner].statStages[i]; + // Copy crit boosts (Focus Energy, Dragon Cheer, G-Max Chi Strike) + gBattleMons[battler].volatiles.focusEnergy = gBattleMons[partner].volatiles.focusEnergy; + gBattleMons[battler].volatiles.dragonCheer = gBattleMons[partner].volatiles.dragonCheer; + gBattleMons[battler].volatiles.bonusCritStages = gBattleMons[partner].volatiles.bonusCritStages; + gEffectBattler = partner; BattleScriptPushCursorAndCallback(BattleScript_CostarActivates); effect++; } break; case ABILITY_ZERO_TO_HERO: - side = GetBattlerSide(battler); - mon = GetBattlerMon(battler); - if (!gSpecialStatuses[battler].switchInAbilityDone - && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_PALAFIN_HERO - && !gBattleStruct->partyState[side][gBattlerPartyIndexes[battler]].transformZeroToHero) + && GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES) == SPECIES_PALAFIN_HERO + && !GetBattlerPartyState(battler)->transformZeroToHero) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattleStruct->partyState[side][gBattlerPartyIndexes[battler]].transformZeroToHero = TRUE; + GetBattlerPartyState(battler)->transformZeroToHero = TRUE; BattleScriptPushCursorAndCallback(BattleScript_ZeroToHeroActivates); effect++; } @@ -4029,14 +4548,13 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone && IsDoubleBattle() - && !(gStatuses3[partner] & STATUS3_HEAL_BLOCK) + && !gBattleMons[partner].volatiles.healBlock && gBattleMons[partner].hp < gBattleMons[partner].maxHP && IsBattlerAlive(partner)) { - gBattlerTarget = partner; - gBattlerAttacker = battler; + gEffectBattler = partner; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattleStruct->moveDamage[partner] = (GetNonDynamaxMaxHP(partner) / 4) * -1; + SetHealAmount(partner, GetNonDynamaxMaxHP(partner) / 4); BattleScriptPushCursorAndCallback(BattleScript_HospitalityActivates); effect++; } @@ -4047,7 +4565,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK: if (!gSpecialStatuses[battler].switchInAbilityDone) { - u32 stat; + enum Stat stat; if (gLastUsedAbility == ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK) stat = STAT_ATK; @@ -4058,11 +4576,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 else //ABILITY_EMBODY_ASPECT_TEAL_MASK stat = STAT_SPEED; - if (CompareStat(battler, stat, MAX_STAT_STAGE, CMP_EQUAL)) + if (CompareStat(battler, stat, MAX_STAT_STAGE, CMP_EQUAL, gLastUsedAbility)) break; - gBattleScripting.savedBattler = gBattlerAttacker; - gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(stat, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); @@ -4074,20 +4590,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && gBattleMons[battler].species == SPECIES_TERAPAGOS_NORMAL && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_SWITCH)) { - gBattlerAttacker = battler; gBattleScripting.abilityPopupOverwrite = gLastUsedAbility = ABILITY_TERA_SHIFT; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeWithStringEnd3); - effect++; - } - break; - case ABILITY_ICE_FACE: - if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW) - && gBattleMons[battler].species == SPECIES_EISCUE_NOICE - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) - { - // TODO: Convert this to a proper FORM_CHANGE type. - gBattleMons[battler].species = SPECIES_EISCUE_ICE; BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; } @@ -4097,7 +4601,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone && IsBattlerAlive(partner) && IsBattlerAlive(battler) - && gBattleStruct->commanderActive[partner] == SPECIES_NONE + && gBattleStruct->battlerState[partner].commanderSpecies == SPECIES_NONE && gBattleMons[partner].species == SPECIES_DONDOZO && GET_BASE_SPECIES_ID(GetMonData(GetBattlerMon(battler), MON_DATA_SPECIES)) == SPECIES_TATSUGIRI) { @@ -4105,17 +4609,18 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gSpecialStatuses[battler].switchInAbilityDone = TRUE; gBattlerAttacker = partner; gBattleStruct->battlerState[battler].commandingDondozo = TRUE; - gBattleStruct->commanderActive[partner] = gBattleMons[battler].species; - gStatuses3[battler] |= STATUS3_COMMANDER; - if (gBattleMons[battler].status2 & STATUS2_CONFUSION - && !(gStatuses4[battler] & STATUS4_INFINITE_CONFUSION)) - gBattleMons[battler].status2 -= STATUS2_CONFUSION_TURN(1); + gBattleStruct->battlerState[partner].commanderSpecies = gBattleMons[battler].species; + gBattleMons[battler].volatiles.semiInvulnerable = STATE_COMMANDER; + if (gBattleMons[battler].volatiles.confusionTurns > 0 && !gBattleMons[battler].volatiles.infiniteConfusion) + gBattleMons[battler].volatiles.confusionTurns--; BtlController_EmitSpriteInvisibility(battler, B_COMM_TO_CONTROLLER, TRUE); MarkBattlerForControllerExec(battler); BattleScriptPushCursorAndCallback(BattleScript_CommanderActivates); effect++; } break; + default: + break; } break; case ABILITYEFFECT_ENDTURN: @@ -4130,8 +4635,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && PickupHasValidTarget(battler)) { gBattlerTarget = RandomUniformExcept(RNG_PICKUP, 0, gBattlersCount - 1, CantPickupItem); - gLastUsedItem = GetUsedHeldItem(gBattlerTarget); - BattleScriptPushCursorAndCallback(BattleScript_PickupActivates); + gLastUsedItem = GetBattlerPartyState(gBattlerTarget)->usedHeldItem; + BattleScriptExecute(BattleScript_PickupActivates); effect++; } break; @@ -4139,24 +4644,22 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if ((IsBattlerWeatherAffected(battler, B_WEATHER_SUN) || RandomPercentage(RNG_HARVEST, 50)) && gBattleMons[battler].item == ITEM_NONE && gBattleStruct->changedItems[battler] == ITEM_NONE // Will not inherit an item - && GetItemPocket(GetUsedHeldItem(battler)) == POCKET_BERRIES) + && GetItemPocket(GetBattlerPartyState(battler)->usedHeldItem) == POCKET_BERRIES) { - gLastUsedItem = GetUsedHeldItem(battler); - BattleScriptPushCursorAndCallback(BattleScript_HarvestActivates); + gLastUsedItem = GetBattlerPartyState(battler)->usedHeldItem; + BattleScriptExecute(BattleScript_HarvestActivates); effect++; } break; case ABILITY_ICE_BODY: if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW) && !IsBattlerAtMaxHp(battler) - && !(gStatuses3[battler] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + && gBattleMons[battler].volatiles.semiInvulnerable != STATE_UNDERGROUND + && gBattleMons[battler].volatiles.semiInvulnerable != STATE_UNDERWATER + && !gBattleMons[battler].volatiles.healBlock) { - BattleScriptPushCursorAndCallback(BattleScript_IceBodyHeal); - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; + BattleScriptExecute(BattleScript_IceBodyHeal); + SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / 16); effect++; } break; @@ -4167,13 +4670,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_RAIN_DISH: if (IsBattlerWeatherAffected(battler, B_WEATHER_RAIN) && !IsBattlerAtMaxHp(battler) - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + && !gBattleMons[battler].volatiles.healBlock) { - BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates); - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (gLastUsedAbility == ABILITY_RAIN_DISH ? 16 : 8); - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; + s32 healAmount = gLastUsedAbility == ABILITY_RAIN_DISH ? 16 : 8; + SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / healAmount); + BattleScriptExecute(BattleScript_RainDishActivates); effect++; } break; @@ -4205,19 +4706,20 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); gBattleMons[battler].status1 = 0; - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; + gBattleMons[battler].volatiles.nightmare = FALSE; gBattleScripting.battler = battler; - BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates); + BattleScriptExecute(BattleScript_ShedSkinActivates); BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); MarkBattlerForControllerExec(battler); effect++; } break; case ABILITY_SPEED_BOOST: - if (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) && gDisableStructs[battler].isFirstTurn != 2) + if (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility) && gDisableStructs[battler].isFirstTurn != 2) { + SaveBattlerAttacker(gBattlerAttacker); SET_STATCHANGER(STAT_SPEED, 1, FALSE); - BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); + BattleScriptExecute(BattleScript_AttackerAbilityStatRaiseEnd2); gBattleScripting.battler = battler; effect++; } @@ -4226,13 +4728,13 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (gDisableStructs[battler].isFirstTurn != 2) { u32 validToRaise = 0, validToLower = 0; - u32 statsNum = GetGenConfig(GEN_CONFIG_MOODY_STATS) >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS; + u32 statsNum = GetConfig(CONFIG_MOODY_ACC_EVASION) >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS; for (i = STAT_ATK; i < statsNum; i++) { - if (CompareStat(battler, i, MIN_STAT_STAGE, CMP_GREATER_THAN)) + if (CompareStat(battler, i, MIN_STAT_STAGE, CMP_GREATER_THAN, gLastUsedAbility)) validToLower |= 1u << i; - if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN)) + if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) validToRaise |= 1u << i; } @@ -4249,7 +4751,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 i = RandomUniformExcept(RNG_MOODY_DECREASE, STAT_ATK, statsNum - 1, MoodyCantLowerStat); SET_STATCHANGER2(gBattleScripting.savedStatChanger, i, 1, TRUE); } - BattleScriptPushCursorAndCallback(BattleScript_MoodyActivates); + BattleScriptExecute(BattleScript_MoodyActivates); effect++; } break; @@ -4257,24 +4759,22 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gDisableStructs[gBattlerAttacker].truantCounter ^= 1; break; case ABILITY_SLOW_START: - if (gDisableStructs[battler].slowStartTimer == gBattleTurnCounter) + if (gDisableStructs[battler].slowStartTimer > 0 && --gDisableStructs[battler].slowStartTimer == 0) { BattleScriptExecute(BattleScript_SlowStartEnds); effect++; } break; case ABILITY_BAD_DREAMS: - BattleScriptPushCursorAndCallback(BattleScript_BadDreamsActivates); + BattleScriptExecute(BattleScript_BadDreamsActivates); effect++; break; case ABILITY_SOLAR_POWER: if (IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) { SOLAR_POWER_HP_DROP: - BattleScriptPushCursorAndCallback(BattleScript_SolarPowerActivates); - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / 8); + BattleScriptExecute(BattleScript_SolarPowerActivates); effect++; } break; @@ -4284,7 +4784,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && gBattleMons[gBattleScripting.battler].status1 & STATUS1_ANY && RandomPercentage(RNG_HEALER, 30)) { - BattleScriptPushCursorAndCallback(BattleScript_HealerActivates); + BattleScriptExecute(BattleScript_HealerActivates); effect++; } break; @@ -4296,40 +4796,41 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_SHIELDS_DOWN: if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT)) { - gBattlerAttacker = battler; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3); + gBattleScripting.battler = battler; + BattleScriptExecute(BattleScript_BattlerFormChangeEnd2); effect++; } break; case ABILITY_POWER_CONSTRUCT: if (TryBattleFormChange(battler, FORM_CHANGE_BATTLE_HP_PERCENT)) { - gBattlerAttacker = battler; - BattleScriptPushCursorAndCallback(BattleScript_PowerConstruct); + gBattleScripting.battler = battler; + BattleScriptExecute(BattleScript_PowerConstruct); effect++; } break; case ABILITY_BALL_FETCH: if (gBattleMons[battler].item == ITEM_NONE - && gBattleResults.catchAttempts[gLastUsedBall - ITEM_ULTRA_BALL] >= 1 + && gBattleResults.catchAttempts[ItemIdToBallId(gLastUsedBall)] >= 1 && !gHasFetchedBall) { + gLastUsedItem = gLastUsedBall; gBattleScripting.battler = battler; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedBall); + gBattleMons[battler].item = gLastUsedItem; + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); MarkBattlerForControllerExec(battler); gHasFetchedBall = TRUE; - gLastUsedItem = gLastUsedBall; - BattleScriptPushCursorAndCallback(BattleScript_BallFetch); + BattleScriptExecute(BattleScript_BallFetch); effect++; } break; case ABILITY_HUNGER_SWITCH: - if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + if (!gBattleMons[battler].volatiles.transformed && GetActiveGimmick(battler) != GIMMICK_TERA && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_TURN_END)) { - gBattlerAttacker = battler; - BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3NoPopup); + gBattleScripting.battler = battler; + BattleScriptExecute(BattleScript_BattlerFormChangeEnd3NoPopup); effect++; } break; @@ -4338,241 +4839,231 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 { gBattleScripting.battler = battler; gDisableStructs[battler].cudChew = FALSE; - gLastUsedItem = gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]; - gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)] = ITEM_NONE; - BattleScriptPushCursorAndCallback(BattleScript_CudChewActivates); + gLastUsedItem = GetBattlerPartyState(battler)->usedHeldItem; + GetBattlerPartyState(battler)->usedHeldItem = ITEM_NONE; + BattleScriptExecute(BattleScript_CudChewActivates); effect++; } - else if (!gDisableStructs[battler].cudChew && GetItemPocket(GetUsedHeldItem(battler)) == POCKET_BERRIES) + else if (!gDisableStructs[battler].cudChew && GetItemPocket(GetBattlerPartyState(battler)->usedHeldItem) == POCKET_BERRIES) { gDisableStructs[battler].cudChew = TRUE; } break; + default: + break; + } + } + break; + case ABILITYEFFECT_COLOR_CHANGE: + switch (gLastUsedAbility) + { + case ABILITY_COLOR_CHANGE: + if (IsBattlerTurnDamaged(battler) + && IsBattlerAlive(battler) + && !IS_BATTLER_OF_TYPE(battler, moveType) + && move != MOVE_STRUGGLE + && moveType != TYPE_STELLAR + && moveType != TYPE_MYSTERY) + { + gEffectBattler = gBattlerAbility = battler; + SET_BATTLER_TYPE(battler, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); + BattleScriptCall(BattleScript_ColorChangeActivates); + effect++; + } + break; + case ABILITY_BERSERK: + if (IsBattlerTurnDamaged(battler) + && IsBattlerAlive(battler) + && HadMoreThanHalfHpNowDoesnt(battler) + && CompareStat(battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) + { + gEffectBattler = gBattlerAbility = battler; + SET_STATCHANGER(STAT_SPATK, 1, FALSE); + BattleScriptCall(BattleScript_BerserkActivates); + effect++; + } + break; + case ABILITY_ANGER_SHELL: + if (IsBattlerTurnDamaged(battler) + && IsBattlerAlive(battler) + && HadMoreThanHalfHpNowDoesnt(battler)) + { + gEffectBattler = gBattlerAbility = battler; + BattleScriptCall(BattleScript_AngerShellActivates); + effect++; } + break; + default: + break; } break; case ABILITYEFFECT_MOVE_END: // Think contact abilities. switch (gLastUsedAbility) { case ABILITY_JUSTIFIED: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) + if (IsBattlerTurnDamaged(battler) && IsBattlerAlive(battler) && moveType == TYPE_DARK - && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) { - gEffectBattler = battler; + gEffectBattler = gBattlerAbility = battler; SET_STATCHANGER(STAT_ATK, 1, FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseRet; + BattleScriptCall(BattleScript_TargetAbilityStatRaiseRet); effect++; } break; case ABILITY_RATTLED: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) + if (IsBattlerTurnDamaged(battler) && IsBattlerAlive(battler) && (moveType == TYPE_DARK || moveType == TYPE_BUG || moveType == TYPE_GHOST) - && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) + && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) { - gEffectBattler = battler; + gEffectBattler = gBattlerAbility = battler; SET_STATCHANGER(STAT_SPEED, 1, FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseRet; + BattleScriptCall(BattleScript_TargetAbilityStatRaiseRet); effect++; } break; case ABILITY_WATER_COMPACTION: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) + if (IsBattlerTurnDamaged(battler) && IsBattlerAlive(battler) && moveType == TYPE_WATER - && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN)) + && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) { - gEffectBattler = battler; + gEffectBattler = gBattlerAbility = battler; SET_STATCHANGER(STAT_DEF, 2, FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseRet; + BattleScriptCall(BattleScript_TargetAbilityStatRaiseRet); effect++; } break; case ABILITY_STAMINA: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && gBattlerAttacker != gBattlerTarget + if (gBattlerAttacker != gBattlerTarget && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) - && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN)) + && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) { - gEffectBattler = battler; + gEffectBattler = gBattlerAbility = battler; SET_STATCHANGER(STAT_DEF, 1, FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseRet; - effect++; - } - break; - case ABILITY_BERSERK: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) - && IsBattlerAlive(battler) - && HadMoreThanHalfHpNowDoesnt(battler) - && (gMultiHitCounter == 0 || gMultiHitCounter == 1) - && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) - && CompareStat(battler, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)) - { - gEffectBattler = battler; - SET_STATCHANGER(STAT_SPATK, 1, FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseRet; + BattleScriptCall(BattleScript_TargetAbilityStatRaiseRet); effect++; } break; case ABILITY_WEAK_ARMOR: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) + if (IsBattlerTurnDamaged(battler) && IsBattlerAlive(battler) && IsBattleMovePhysical(gCurrentMove) - && (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) // Don't activate if both Speed and Defense cannot be raised. - || CompareStat(battler, STAT_DEF, MIN_STAT_STAGE, CMP_GREATER_THAN))) + && (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility) // Don't activate if both Speed and Defense cannot be raised. + || CompareStat(battler, STAT_DEF, MIN_STAT_STAGE, CMP_GREATER_THAN, gLastUsedAbility))) { if (GetMoveEffect(gCurrentMove) == EFFECT_HIT_ESCAPE && CanBattlerSwitch(gBattlerAttacker)) gProtectStructs[battler].disableEjectPack = TRUE; // Set flag for target - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_WeakArmorActivates; + BattleScriptCall(BattleScript_WeakArmorActivates); effect++; } break; case ABILITY_CURSED_BODY: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) + if (IsBattlerTurnDamaged(gBattlerTarget) && gDisableStructs[gBattlerAttacker].disabledMove == MOVE_NONE && IsBattlerAlive(gBattlerAttacker) && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) - && gBattleMons[gBattlerAttacker].pp[gChosenMovePos] != 0 - && !(GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) // TODO: Max Moves don't make contact, useless? + && gChosenMove != MOVE_STRUGGLE && RandomPercentage(RNG_CURSED_BODY, 30)) { gDisableStructs[gBattlerAttacker].disabledMove = gChosenMove; gDisableStructs[gBattlerAttacker].disableTimer = 4; PREPARE_MOVE_BUFFER(gBattleTextBuff1, gChosenMove); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_CursedBodyActivates; + BattleScriptCall(BattleScript_CursedBodyActivates); effect++; } break; case ABILITY_LINGERING_AROMA: case ABILITY_MUMMY: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) + if (IsBattlerAlive(gBattlerAttacker) && IsBattlerTurnDamaged(gBattlerTarget) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move) && gDisableStructs[gBattlerAttacker].overwrittenAbility != GetBattlerAbility(gBattlerTarget) && gBattleMons[gBattlerAttacker].ability != ABILITY_MUMMY && gBattleMons[gBattlerAttacker].ability != ABILITY_LINGERING_AROMA && !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSuppressed) { - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + if (GetBattlerHoldEffectIgnoreAbility(gBattlerAttacker) == HOLD_EFFECT_ABILITY_SHIELD) { RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD); break; } + RemoveAbilityFlags(gBattlerAttacker); gLastUsedAbility = gBattleMons[gBattlerAttacker].ability; gBattleMons[gBattlerAttacker].ability = gDisableStructs[gBattlerAttacker].overwrittenAbility = gBattleMons[gBattlerTarget].ability; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MummyActivates; + BattleScriptCall(BattleScript_MummyActivates); effect++; break; } break; case ABILITY_WANDERING_SPIRIT: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) + if (IsBattlerAlive(gBattlerAttacker) && IsBattlerTurnDamaged(gBattlerTarget) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move) && !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSwapped) { - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + if (GetBattlerHoldEffectIgnoreAbility(gBattlerAttacker) == HOLD_EFFECT_ABILITY_SHIELD) { RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD); break; } + if (GetBattlerHoldEffectIgnoreAbility(gBattlerTarget) == HOLD_EFFECT_ABILITY_SHIELD) + { + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); + break; + } + RemoveAbilityFlags(gBattlerAttacker); gLastUsedAbility = gBattleMons[gBattlerAttacker].ability; gBattleMons[gBattlerAttacker].ability = gDisableStructs[gBattlerAttacker].overwrittenAbility = gBattleMons[gBattlerTarget].ability; gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = gLastUsedAbility; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates; + BattleScriptCall(BattleScript_WanderingSpiritActivates); effect++; break; } break; case ABILITY_ANGER_POINT: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && gSpecialStatuses[battler].criticalHit - && IsBattlerTurnDamaged(gBattlerTarget) + if (gSpecialStatuses[battler].criticalHit + && IsBattlerTurnDamaged(battler) && IsBattlerAlive(battler) - && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) + && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility)) { SET_STATCHANGER(STAT_ATK, MAX_STAT_STAGE - gBattleMons[battler].statStages[STAT_ATK], FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetsStatWasMaxedOut; - effect++; - } - break; - case ABILITY_COLOR_CHANGE: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && move != MOVE_STRUGGLE - && !IsBattleMoveStatus(move) - && IsBattlerTurnDamaged(gBattlerTarget) - && !IS_BATTLER_OF_TYPE(battler, moveType) - && moveType != TYPE_STELLAR - && moveType != TYPE_MYSTERY - && IsBattlerAlive(battler)) - { - SET_BATTLER_TYPE(battler, moveType); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ColorChangeActivates; + BattleScriptCall(BattleScript_TargetsStatWasMaxedOut); effect++; } break; case ABILITY_GOOEY: case ABILITY_TANGLING_HAIR: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) - && (CompareStat(gBattlerAttacker, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN) || GetBattlerAbility(gBattlerAttacker) == ABILITY_MIRROR_ARMOR) + if (IsBattlerAlive(gBattlerAttacker) + && (CompareStat(gBattlerAttacker, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN, gLastUsedAbility) || GetBattlerAbility(gBattlerAttacker) == ABILITY_MIRROR_ARMOR) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker)) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move)) { SET_STATCHANGER(STAT_SPEED, 1, TRUE); PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_GooeyActivates; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_GooeyActivates); effect++; } break; case ABILITY_ROUGH_SKIN: case ABILITY_IRON_BARBS: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) + if (IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker)) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move)) { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / (B_ROUGH_SKIN_DMG >= GEN_4 ? 8 : 16); - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; + SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / (B_ROUGH_SKIN_DMG >= GEN_4 ? 8 : 16)); PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_RoughSkinActivates; + BattleScriptCall(BattleScript_RoughSkinActivates); effect++; } break; @@ -4580,23 +5071,18 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !IsBattlerAlive(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker)) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move)) { if ((battler = IsAbilityOnField(ABILITY_DAMP))) { gBattleScripting.battler = battler - 1; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_DampPreventsAftermath; + BattleScriptCall(BattleScript_DampPreventsAftermath); } else { gBattleScripting.battler = gBattlerTarget; - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AftermathDmg; + SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 4); + BattleScriptCall(BattleScript_AftermathDmg); } effect++; } @@ -4611,18 +5097,16 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; gBattleScripting.battler = gBattlerTarget; - gBattleStruct->moveDamage[gBattlerAttacker] = gBattleStruct->moveDamage[gBattlerTarget]; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AftermathDmg; + SetPassiveDamageAmount(gBattlerAttacker, gBattleStruct->moveDamage[gBattlerTarget]); + BattleScriptCall(BattleScript_AftermathDmg); effect++; } break; case ABILITY_EFFECT_SPORE: { - u32 ability = GetBattlerAbility(gBattlerAttacker); - if ((!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GRASS) || B_POWDER_GRASS < GEN_6) - && ability != ABILITY_OVERCOAT - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES) + enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); + enum HoldEffect holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker); + if (IsAffectedByPowderMove(gBattlerAttacker, abilityAtk, holdEffectAtk)) { u32 poison, paralysis, sleep; @@ -4645,21 +5129,19 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 goto STATIC; // Sleep if (i < sleep - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) - && CanBeSlept(gBattlerAttacker, gBattlerTarget, ability, NOT_BLOCKED_BY_SLEEP_CLAUSE) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker)) + && CanBeSlept(gBattlerTarget, gBattlerAttacker, abilityAtk, NOT_BLOCKED_BY_SLEEP_CLAUSE) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, abilityAtk, holdEffectAtk, move)) { if (IsSleepClauseEnabled()) gBattleStruct->battlerState[gBattlerAttacker].sleepClauseEffectExempt = TRUE; - gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_SLEEP; + gEffectBattler = gBattlerAttacker; + gBattleScripting.battler = gBattlerTarget; + gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_AbilityStatusEffect); effect++; } } @@ -4669,79 +5151,76 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3)) { POISON_POINT: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) + { + enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); + if (IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) - && CanBePoisoned(gBattlerTarget, gBattlerAttacker, gLastUsedAbility, GetBattlerAbility(gBattlerAttacker)) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker)) + && CanBePoisoned(gBattlerTarget, gBattlerAttacker, gLastUsedAbility, abilityAtk) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, abilityAtk, GetBattlerHoldEffect(gBattlerAttacker), move)) { - gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON; + gEffectBattler = gBattlerAttacker; + gBattleScripting.battler = gBattlerTarget; + gBattleScripting.moveEffect = MOVE_EFFECT_POISON; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_AbilityStatusEffect); effect++; } } + } break; case ABILITY_STATIC: if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3)) { STATIC: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) + { + enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); + if (IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) - && CanBeParalyzed(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker)) + && CanBeParalyzed(gBattlerTarget, gBattlerAttacker, abilityAtk) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, abilityAtk, GetBattlerHoldEffect(gBattlerAttacker), move)) { - gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; + gEffectBattler = gBattlerAttacker; + gBattleScripting.battler = gBattlerTarget; + gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_AbilityStatusEffect); effect++; } } + } break; case ABILITY_FLAME_BODY: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) + if (IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && (IsMoveMakingContact(move, gBattlerAttacker)) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move) && IsBattlerTurnDamaged(gBattlerTarget) && CanBeBurned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3))) { - gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; + gEffectBattler = gBattlerAttacker; + gBattleScripting.battler = gBattlerTarget; + gBattleScripting.moveEffect = MOVE_EFFECT_BURN; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_AbilityStatusEffect); effect++; } break; case ABILITY_CUTE_CHARM: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) + if (IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget) && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_CUTE_CHARM, 30) : RandomChance(RNG_CUTE_CHARM, 1, 3)) - && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) + && !(gBattleMons[gBattlerAttacker].volatiles.infatuation) && AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker) + && !IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_OBLIVIOUS) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move) && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL)) { - gBattleMons[gBattlerAttacker].status2 |= STATUS2_INFATUATED_WITH(gBattlerTarget); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; + gBattleMons[gBattlerAttacker].volatiles.infatuation = INFATUATED_WITH(gBattlerTarget); + BattleScriptCall(BattleScript_CuteCharmActivates); effect++; } break; @@ -4749,147 +5228,111 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (gBattleStruct->illusion[gBattlerTarget].state == ILLUSION_ON && IsBattlerTurnDamaged(gBattlerTarget)) { gBattleScripting.battler = gBattlerTarget; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_IllusionOff; + BattleScriptCall(BattleScript_IllusionOff); effect++; } break; case ABILITY_COTTON_DOWN: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerAttacker) + if (IsBattlerAlive(gBattlerAttacker) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget)) { gEffectBattler = gBattlerTarget; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_CottonDownActivates; + BattleScriptCall(BattleScript_CottonDownActivates); effect++; } break; case ABILITY_STEAM_ENGINE: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) + if (IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) - && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) + && CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility) && (moveType == TYPE_FIRE || moveType == TYPE_WATER)) { - gEffectBattler = battler; + gEffectBattler = gBattlerAbility = battler; SET_STATCHANGER(STAT_SPEED, 6, FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseRet; + BattleScriptCall(BattleScript_TargetAbilityStatRaiseRet); effect++; } break; case ABILITY_SAND_SPIT: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + if (!gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && !(gBattleWeather & B_WEATHER_SANDSTORM && HasWeatherEffect())) { if (gBattleWeather & B_WEATHER_PRIMAL_ANY && HasWeatherEffect()) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BlockedByPrimalWeatherRet; + BattleScriptCall(BattleScript_BlockedByPrimalWeatherRet); effect++; } - else if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SANDSTORM, TRUE)) + else if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SANDSTORM, gLastUsedAbility)) { gBattleScripting.battler = battler; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SandSpitActivates; + BattleScriptCall(BattleScript_SandSpitActivates); effect++; } } break; case ABILITY_PERISH_BODY: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + if (!gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && (IsMoveMakingContact(move, gBattlerAttacker)) - && !(gStatuses3[gBattlerAttacker] & STATUS3_PERISH_SONG)) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move) + && !gBattleMons[gBattlerAttacker].volatiles.perishSong) { - if (!(gStatuses3[battler] & STATUS3_PERISH_SONG)) + if (!gBattleMons[battler].volatiles.perishSong) { - gStatuses3[battler] |= STATUS3_PERISH_SONG; + gBattleMons[battler].volatiles.perishSong = TRUE; gDisableStructs[battler].perishSongTimer = 3; } - gStatuses3[gBattlerAttacker] |= STATUS3_PERISH_SONG; + gBattleMons[gBattlerAttacker].volatiles.perishSong = TRUE; gDisableStructs[gBattlerAttacker].perishSongTimer = 3; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_PerishBodyActivates; + BattleScriptCall(BattleScript_PerishBodyActivates); effect++; } break; case ABILITY_GULP_MISSILE: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + if (!gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerAttacker) && gBattleMons[gBattlerTarget].species != SPECIES_CRAMORANT) { - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) - { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - } + if (!IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_MAGIC_GUARD)) + SetPassiveDamageAmount(gBattlerAttacker, GetNonDynamaxMaxHP(gBattlerAttacker) / 4); - switch(gBattleMons[gBattlerTarget].species) + switch (gBattleMons[gBattlerTarget].species) { case SPECIES_CRAMORANT_GORGING: TryBattleFormChange(battler, FORM_CHANGE_HIT_BY_MOVE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_GulpMissileGorging; + BattleScriptCall(BattleScript_GulpMissileGorging); effect++; break; case SPECIES_CRAMORANT_GULPING: TryBattleFormChange(battler, FORM_CHANGE_HIT_BY_MOVE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_GulpMissileGulping; + BattleScriptCall(BattleScript_GulpMissileGulping); effect++; break; } } break; case ABILITY_SEED_SOWER: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + if (!gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget) - && TryChangeBattleTerrain(gBattlerTarget, STATUS_FIELD_GRASSY_TERRAIN, &gFieldTimers.terrainTimer)) + && TryChangeBattleTerrain(gBattlerTarget, STATUS_FIELD_GRASSY_TERRAIN)) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_SeedSowerActivates; + BattleScriptCall(BattleScript_SeedSowerActivates); effect++; } break; case ABILITY_THERMAL_EXCHANGE: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) + if (IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget) - && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) + && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN, gLastUsedAbility) && moveType == TYPE_FIRE) { - gEffectBattler = gBattlerTarget; + gEffectBattler = gBattlerAbility = gBattlerTarget; SET_STATCHANGER(STAT_ATK, 1, FALSE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetAbilityStatRaiseRet; - effect++; - } - break; - case ABILITY_ANGER_SHELL: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && IsBattlerTurnDamaged(gBattlerTarget) - && (gMultiHitCounter == 0 || gMultiHitCounter == 1) // Activates after all hits from a multi-hit move. - && IsBattlerAlive(gBattlerTarget) - && HadMoreThanHalfHpNowDoesnt(gBattlerTarget) - && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove))) - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AngerShellActivates; + BattleScriptCall(BattleScript_TargetAbilityStatRaiseRet); effect++; } break; @@ -4898,91 +5341,82 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; // fall through case ABILITY_ELECTROMORPHOSIS: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg + if (!gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget)) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_WindPowerActivates; + BattleScriptCall(BattleScript_WindPowerActivates); effect++; } break; case ABILITY_TOXIC_DEBRIS: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && (!gBattleStruct->isSkyBattle) + if (!gBattleStruct->isSkyBattle && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattleMovePhysical(gCurrentMove) && IsBattlerTurnDamaged(gBattlerTarget) && (gSideTimers[GetBattlerSide(gBattlerAttacker)].toxicSpikesAmount != 2)) { - SWAP(gBattlerAttacker, gBattlerTarget, i); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ToxicDebrisActivates; + SaveBattlerTarget(gBattlerTarget); + SaveBattlerAttacker(gBattlerAttacker); + gBattlerAttacker = gBattlerTarget; + gBattlerTarget = BATTLE_OPPOSITE(gBattlerAttacker); + BattleScriptCall(BattleScript_ToxicDebrisActivates); effect++; } break; + default: + break; } break; case ABILITYEFFECT_MOVE_END_ATTACKER: // Same as above, but for attacker switch (gLastUsedAbility) { case ABILITY_POISON_TOUCH: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerTarget) + if (IsBattlerAlive(gBattlerTarget) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && CanBePoisoned(gBattlerAttacker, gBattlerTarget, gLastUsedAbility, GetBattlerAbility(gBattlerTarget)) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(move, gBattlerAttacker) + && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move) && IsBattlerTurnDamaged(gBattlerTarget) // Need to actually hit the target && RandomPercentage(RNG_POISON_TOUCH, 30)) { + gEffectBattler = gBattlerTarget; + gBattleScripting.battler = gBattlerAttacker; gBattleScripting.moveEffect = MOVE_EFFECT_POISON; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_AbilityStatusEffect); effect++; } break; case ABILITY_TOXIC_CHAIN: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerTarget) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && CanBePoisoned(gBattlerAttacker, gBattlerTarget, gLastUsedAbility, GetBattlerAbility(gBattlerTarget)) - && IsBattlerTurnDamaged(gBattlerTarget) // Need to actually hit the target - && RandomWeighted(RNG_TOXIC_CHAIN, 7, 3)) + if (gBattleStruct->toxicChainPriority) { + gBattleStruct->toxicChainPriority = FALSE; + gEffectBattler = gBattlerTarget; + gBattleScripting.battler = gBattlerAttacker; gBattleScripting.moveEffect = MOVE_EFFECT_TOXIC; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_AbilityStatusEffect); effect++; } break; case ABILITY_STENCH: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerAlive(gBattlerTarget) + if (IsBattlerAlive(gBattlerTarget) && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && RandomChance(RNG_STENCH, 1, 10) && IsBattlerTurnDamaged(gBattlerTarget) && !MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_FLINCH)) { - gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH; - BattleScriptPushCursor(); - SetMoveEffect(FALSE, FALSE); - BattleScriptPop(); + SetMoveEffect(gBattlerAttacker, gBattlerTarget, MOVE_EFFECT_FLINCH, gBattlescriptCurrInstr, EFFECT_PRIMARY); effect++; } break; case ABILITY_GULP_MISSILE: if ((gBattleMons[gBattlerAttacker].species == SPECIES_CRAMORANT) - && ((gCurrentMove == MOVE_SURF && IsBattlerTurnDamaged(gBattlerTarget)) || gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER) + && ((gCurrentMove == MOVE_SURF && IsBattlerTurnDamaged(gBattlerTarget)) || gBattleMons[gBattlerAttacker].volatiles.semiInvulnerable == STATE_UNDERWATER) && TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_HP_PERCENT)) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AttackerFormChange; + gBattleScripting.battler = gBattlerAttacker; + BattleScriptCall(BattleScript_BattlerFormChange); effect++; } break; @@ -4994,11 +5428,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleStruct->poisonPuppeteerConfusion = FALSE; gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; + BattleScriptCall(BattleScript_AbilityStatusEffect); effect++; } break; + default: + break; } break; case ABILITYEFFECT_MOVE_END_OTHER: // Abilities that activate on *another* battler's moveend: Dancer, Soul-Heart, Receiver, Symbiosis @@ -5019,285 +5454,149 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 // Set the target to the original target of the mon that first used a Dance move gBattlerTarget = gBattleScripting.savedBattler & 0x3; - // Edge case for dance moves that hit multiply targets - gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; - // Make sure that the target isn't an ally - if it is, target the original user if (IsBattlerAlly(gBattlerTarget, gBattlerAttacker)) gBattlerTarget = (gBattleScripting.savedBattler & 0xF0) >> 4; - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; BattleScriptExecute(BattleScript_DancerActivates); effect++; } break; + default: + break; } break; case ABILITYEFFECT_OPPORTUNIST: - /* Similar to ABILITYEFFECT_IMMUNITY in that it loops through all battlers. - * Is called after ABILITYEFFECT_ON_SWITCHIN to copy any boosts - * from switch in abilities e.g. intrepid sword, as - */ - for (battler = 0; battler < gBattlersCount; battler++) + case ABILITYEFFECT_OPPORTUNIST_FIRST_TURN: + switch (ability) { - switch (GetBattlerAbility(battler)) + case ABILITY_OPPORTUNIST: + if (gProtectStructs[battler].activateOpportunist == 2) { - case ABILITY_OPPORTUNIST: - if (gProtectStructs[battler].activateOpportunist == 2) - { - gBattleScripting.battler = battler; - gProtectStructs[battler].activateOpportunist--; - ChooseStatBoostAnimation(battler); - BattleScriptPushCursorAndCallback(BattleScript_OpportunistCopyStatChange); - effect = 1; - } - break; + gBattleScripting.battler = battler; + gProtectStructs[battler].activateOpportunist--; + ChooseStatBoostAnimation(battler); + if (caseID == ABILITYEFFECT_OPPORTUNIST_FIRST_TURN) + BattleScriptPushCursorAndCallback(BattleScript_OpportunistCopyStatChangeEnd3); + else + BattleScriptCall(BattleScript_OpportunistCopyStatChange); + effect = 1; } + break; + default: + break; } break; case ABILITYEFFECT_IMMUNITY: - gBattleStruct->bypassMoldBreakerChecks = TRUE; - for (battler = 0; battler < gBattlersCount; battler++) - { - switch (GetBattlerAbility(battler)) - { - case ABILITY_IMMUNITY: - case ABILITY_PASTEL_VEIL: - if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER)) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - effect = 1; - } - break; - case ABILITY_OWN_TEMPO: - if (gBattleMons[battler].status2 & STATUS2_CONFUSION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - effect = 2; - } - break; - case ABILITY_LIMBER: - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - effect = 1; - } - break; - case ABILITY_INSOMNIA: - case ABILITY_VITAL_SPIRIT: - if (gBattleMons[battler].status1 & STATUS1_SLEEP) - { - TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - effect = 1; - } - break; - case ABILITY_WATER_VEIL: - case ABILITY_WATER_BUBBLE: - case ABILITY_THERMAL_EXCHANGE: - if (gBattleMons[battler].status1 & STATUS1_BURN) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - effect = 1; - } - break; - case ABILITY_MAGMA_ARMOR: - if (gBattleMons[battler].status1 & (STATUS1_FREEZE | STATUS1_FROSTBITE)) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - effect = 1; - } - break; - case ABILITY_OBLIVIOUS: - if (gBattleMons[battler].status2 & STATUS2_INFATUATION) - effect = 3; - else if (gDisableStructs[battler].tauntTimer != 0) - effect = 4; - break; - } - - if (effect != 0) - { - switch (effect) - { - case 1: // status cleared - gBattleMons[battler].status1 = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; - break; - case 2: // get rid of confusion - RemoveConfusionStatus(battler); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; - break; - case 3: // get rid of infatuation - gBattleMons[battler].status2 &= ~STATUS2_INFATUATION; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BattlerGotOverItsInfatuation; - break; - case 4: // get rid of taunt - gDisableStructs[battler].tauntTimer = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BattlerShookOffTaunt; - break; - } - - gBattleScripting.battler = gBattlerAbility = battler; - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - return effect; - } - } - gBattleStruct->bypassMoldBreakerChecks = FALSE; + effect = TryImmunityAbilityHealStatus(battler, caseID); + if (effect) + return effect; + break; + case ABILITYEFFECT_ON_SWITCHIN_IMMUNITIES: + effect = TryImmunityAbilityHealStatus(battler, caseID); break; case ABILITYEFFECT_SYNCHRONIZE: - if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONIZE_EFFECT)) + if (gLastUsedAbility == ABILITY_SYNCHRONIZE && gBattleStruct->synchronizeMoveEffect != MOVE_EFFECT_NONE) { - gHitMarker &= ~HITMARKER_SYNCHRONIZE_EFFECT; - - bool32 statusChanged = CanSetNonVolatileStatus(gBattlerTarget, - gBattlerAttacker, - gLastUsedAbility, - GetBattlerAbility(gBattlerAttacker), - gBattleStruct->synchronizeMoveEffect, - STATUS_CHECK_TRIGGER); - - BattleScriptPushCursor(); gBattleScripting.battler = gBattlerAbility = gBattlerTarget; RecordAbilityBattle(gBattlerTarget, ABILITY_SYNCHRONIZE); - if (statusChanged) - { - gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); - if (B_SYNCHRONIZE_TOXIC < GEN_5 && gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) - gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; + if (GetConfig(CONFIG_SYNCHRONIZE_TOXIC) < GEN_5 && gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; - gBattleScripting.moveEffect = gBattleStruct->synchronizeMoveEffect + MOVE_EFFECT_AFFECTS_USER; + if (CanSetNonVolatileStatus( + gBattlerTarget, + gBattlerAttacker, + gLastUsedAbility, + GetBattlerAbility(gBattlerAttacker), + gBattleStruct->synchronizeMoveEffect, + CHECK_TRIGGER)) + { + gEffectBattler = gBattlerAttacker; + gBattleScripting.moveEffect = gBattleStruct->synchronizeMoveEffect; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, ABILITY_SYNCHRONIZE); - gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_SynchronizeActivates); effect++; } else // Synchronize ability pop up still shows up even if status fails { - gBattlescriptCurrInstr = BattleScript_AbilityPopUp; + BattleScriptCall(BattleScript_AbilityPopUp); } + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_NONE; } break; case ABILITYEFFECT_ATK_SYNCHRONIZE: - if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONIZE_EFFECT)) + if (gLastUsedAbility == ABILITY_SYNCHRONIZE && gBattleStruct->synchronizeMoveEffect != MOVE_EFFECT_NONE) { - gHitMarker &= ~HITMARKER_SYNCHRONIZE_EFFECT; - - bool32 statusChanged = CanSetNonVolatileStatus(gBattlerAttacker, - gBattlerTarget, - gLastUsedAbility, - GetBattlerAbility(gBattlerAttacker), - gBattleStruct->synchronizeMoveEffect, - STATUS_CHECK_TRIGGER); - - BattleScriptPushCursor(); gBattleScripting.battler = gBattlerAbility = gBattlerAttacker; RecordAbilityBattle(gBattlerAttacker, ABILITY_SYNCHRONIZE); - if (statusChanged) + if (GetConfig(CONFIG_SYNCHRONIZE_TOXIC) < GEN_5 && gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; + + if (CanSetNonVolatileStatus( + gBattlerAttacker, + gBattlerTarget, + gLastUsedAbility, + GetBattlerAbility(gBattlerAttacker), + gBattleStruct->synchronizeMoveEffect, + CHECK_TRIGGER)) { - gBattleStruct->synchronizeMoveEffect &= ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); if (gBattleStruct->synchronizeMoveEffect == MOVE_EFFECT_TOXIC) gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_POISON; + gEffectBattler = gBattlerTarget; gBattleScripting.moveEffect = gBattleStruct->synchronizeMoveEffect; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, ABILITY_SYNCHRONIZE); - gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; - gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT; + BattleScriptCall(BattleScript_SynchronizeActivates); effect++; } else // Synchronize ability pop up still shows up even if status fails { - gBattlescriptCurrInstr = BattleScript_AbilityPopUp; + BattleScriptCall(BattleScript_AbilityPopUp); } + gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_NONE; } break; case ABILITYEFFECT_NEUTRALIZINGGAS: + case ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN: // Prints message only. separate from ABILITYEFFECT_ON_SWITCHIN bc activates before entry hazards - for (i = 0; i < gBattlersCount; i++) + if (gLastUsedAbility == ABILITY_NEUTRALIZING_GAS && !gDisableStructs[battler].neutralizingGas) { - if (gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !gDisableStructs[i].neutralizingGas) - { - gDisableStructs[i].neutralizingGas = TRUE; - gBattlerAbility = i; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS; + gDisableStructs[battler].neutralizingGas = TRUE; + gBattlerAbility = battler; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_NEUTRALIZING_GAS; + if (caseID == ABILITYEFFECT_NEUTRALIZINGGAS_FIRST_TURN) BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); - effect++; - } - - if (effect != 0) - break; - } - break; - case ABILITYEFFECT_FIELD_SPORT: - switch (gLastUsedAbility) - { - case ABILITYEFFECT_MUD_SPORT: - for (i = 0; i < gBattlersCount; i++) - { - if (gStatuses4[i] & STATUS4_MUD_SPORT) - effect = i + 1; - } - break; - case ABILITYEFFECT_WATER_SPORT: - for (i = 0; i < gBattlersCount; i++) - { - if (gStatuses4[i] & STATUS4_WATER_SPORT) - effect = i + 1; - } - break; - default: - for (i = 0; i < gBattlersCount; i++) - { - if (gBattleMons[i].ability == ability) - { - gLastUsedAbility = ability; - effect = i + 1; - } - } - break; + else + BattleScriptCall(BattleScript_SwitchInAbilityMsgRet); + effect++; } break; case ABILITYEFFECT_ON_WEATHER: // For ability effects that activate when the battle weather changes. + if (!IsBattlerAlive(battler)) + return effect; gLastUsedAbility = GetBattlerAbility(battler); switch (gLastUsedAbility) { case ABILITY_FORECAST: case ABILITY_FLOWER_GIFT: - if ((IsBattlerWeatherAffected(battler, gBattleWeather) - || gBattleWeather == B_WEATHER_NONE - || !HasWeatherEffect()) // Air Lock active - && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) - { - gBattleScripting.battler = battler; - BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); - effect++; - } - break; case ABILITY_ICE_FACE: { - u32 battlerWeatherAffected = IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW); - if (battlerWeatherAffected && gBattleMons[battler].species == SPECIES_EISCUE) + u32 battlerWeatherAffected = IsBattlerWeatherAffected(battler, gBattleWeather); + if (battlerWeatherAffected && !CanBattlerFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) { // If Hail/Snow activates when in Eiscue is in base, prevent reversion when Eiscue Noice gets broken gDisableStructs[battler].weatherAbilityDone = TRUE; } - if (!gDisableStructs[battler].weatherAbilityDone - && battlerWeatherAffected - && gBattleMons[battler].species == SPECIES_EISCUE_NOICE - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + + if (((!gDisableStructs[battler].weatherAbilityDone && battlerWeatherAffected) + || gBattleWeather == B_WEATHER_NONE + || !HasWeatherEffect()) // Air Lock active + && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) { - // TODO: Convert this to a proper FORM_CHANGE type. gBattleScripting.battler = battler; gDisableStructs[battler].weatherAbilityDone = TRUE; - gBattleMons[battler].species = SPECIES_EISCUE_ICE; BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; } @@ -5306,19 +5605,24 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_PROTOSYNTHESIS: if (!gDisableStructs[battler].weatherAbilityDone && (gBattleWeather & B_WEATHER_SUN) && HasWeatherEffect() - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - && !gDisableStructs[battler].boosterEnergyActivates) + && !gBattleMons[battler].volatiles.transformed + && !gDisableStructs[battler].boosterEnergyActivated) { gDisableStructs[battler].weatherAbilityDone = TRUE; - PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); + gDisableStructs[battler].paradoxBoostedStat = GetParadoxHighestStatId(battler); + PREPARE_STAT_BUFFER(gBattleTextBuff1, gDisableStructs[battler].paradoxBoostedStat); gBattleScripting.battler = battler; BattleScriptPushCursorAndCallback(BattleScript_ProtosynthesisActivates); effect++; } break; + default: + break; } break; case ABILITYEFFECT_ON_TERRAIN: // For ability effects that activate when the field terrain changes. + if (!IsBattlerAlive(battler)) + return effect; gLastUsedAbility = GetBattlerAbility(battler); switch (gLastUsedAbility) { @@ -5335,16 +5639,19 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_QUARK_DRIVE: if (!gDisableStructs[battler].terrainAbilityDone && gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - && !gDisableStructs[battler].boosterEnergyActivates) + && !gBattleMons[battler].volatiles.transformed + && !gDisableStructs[battler].boosterEnergyActivated) { gDisableStructs[battler].terrainAbilityDone = TRUE; - PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); + gDisableStructs[battler].paradoxBoostedStat = GetParadoxHighestStatId(battler); + PREPARE_STAT_BUFFER(gBattleTextBuff1, gDisableStructs[battler].paradoxBoostedStat); gBattlerAbility = gBattleScripting.battler = battler; BattleScriptPushCursorAndCallback(BattleScript_QuarkDriveActivates); effect++; } break; + default: + break; } break; } @@ -5359,7 +5666,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 bool32 TryPrimalReversion(u32 battler) { - if (GetBattlerHoldEffect(battler, FALSE) == HOLD_EFFECT_PRIMAL_ORB + if (GetBattlerHoldEffectIgnoreNegation(battler) == HOLD_EFFECT_PRIMAL_ORB && GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) != gBattleMons[battler].species) { gBattleScripting.battler = battler; @@ -5375,69 +5682,86 @@ bool32 IsNeutralizingGasOnField(void) for (i = 0; i < gBattlersCount; i++) { - if (IsBattlerAlive(i) && gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !(gStatuses3[i] & STATUS3_GASTRO_ACID)) + if (gDisableStructs[i].neutralizingGas && !gBattleMons[i].volatiles.gastroAcid) return TRUE; } return FALSE; } -bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability) +bool32 IsMoldBreakerTypeAbility(u32 battler, enum Ability ability) { - if (gStatuses3[battler] & STATUS3_GASTRO_ACID) + if (gBattleMons[battler].volatiles.gastroAcid) return FALSE; - return (ability == ABILITY_MOLD_BREAKER || ability == ABILITY_TERAVOLT || ability == ABILITY_TURBOBLAZE - || (ability == ABILITY_MYCELIUM_MIGHT && IsBattleMoveStatus(gCurrentMove))); + if (ability == ABILITY_MOLD_BREAKER + || ability == ABILITY_TERAVOLT + || ability == ABILITY_TURBOBLAZE + || (ability == ABILITY_MYCELIUM_MIGHT && IsBattleMoveStatus(gCurrentMove))) + { + RecordAbilityBattle(battler, ability); + return TRUE; + } + + return FALSE; } -static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 ability, u32 hasAbilityShield) +static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 hasAbilityShield, u32 ignoreMoldBreaker) { - if (hasAbilityShield || gBattleStruct->bypassMoldBreakerChecks) + if (hasAbilityShield || ignoreMoldBreaker || battlerDef == battlerAtk) return FALSE; + return gBattleStruct->moldBreakerActive && gAbilitiesInfo[gBattleMons[battlerDef].ability].breakable; +} + +u32 GetBattlerAbilityNoAbilityShield(u32 battler) +{ + return GetBattlerAbilityInternal(battler, FALSE, TRUE); +} + +u32 GetBattlerAbilityIgnoreMoldBreaker(u32 battler) +{ + return GetBattlerAbilityInternal(battler, TRUE, FALSE); +} - return ((IsMoldBreakerTypeAbility(battlerAtk, ability) || MoveIgnoresTargetAbility(gCurrentMove)) - && battlerDef != battlerAtk - && gAbilitiesInfo[gBattleMons[battlerDef].ability].breakable - && gBattlerByTurnOrder[gCurrentTurnActionNumber] == battlerAtk - && gActionsByTurnOrder[gCurrentTurnActionNumber] == B_ACTION_USE_MOVE - && gCurrentTurnActionNumber < gBattlersCount); +enum Ability GetBattlerAbility(u32 battler) +{ + return GetBattlerAbilityInternal(battler, FALSE, FALSE); } -u32 GetBattlerAbility(u32 battler) +u32 GetBattlerAbilityInternal(u32 battler, u32 ignoreMoldBreaker, u32 noAbilityShield) { - bool32 hasAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) == HOLD_EFFECT_ABILITY_SHIELD; + bool32 hasAbilityShield = !noAbilityShield && GetBattlerHoldEffectIgnoreAbility(battler) == HOLD_EFFECT_ABILITY_SHIELD; bool32 abilityCantBeSuppressed = gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed; if (abilityCantBeSuppressed) { // Edge case: pokemon under the effect of gastro acid transforms into a pokemon with Comatose (Todo: verify how other unsuppressable abilities behave) - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED - && gStatuses3[battler] & STATUS3_GASTRO_ACID + if (gBattleMons[battler].volatiles.transformed + && gBattleMons[battler].volatiles.gastroAcid && gBattleMons[battler].ability == ABILITY_COMATOSE) return ABILITY_NONE; - if (CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability, hasAbilityShield)) + if (CanBreakThroughAbility(gBattlerAttacker, battler, hasAbilityShield, ignoreMoldBreaker)) return ABILITY_NONE; return gBattleMons[battler].ability; } - if (gStatuses3[battler] & STATUS3_GASTRO_ACID) + if (gBattleMons[battler].volatiles.gastroAcid) return ABILITY_NONE; if (!hasAbilityShield && IsNeutralizingGasOnField() - && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS) + && (gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS || gBattleMons[battler].volatiles.gastroAcid)) return ABILITY_NONE; - if (CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability, hasAbilityShield)) + if (CanBreakThroughAbility(gBattlerAttacker, battler, hasAbilityShield, ignoreMoldBreaker)) return ABILITY_NONE; return gBattleMons[battler].ability; } -u32 IsAbilityOnSide(u32 battler, u32 ability) +u32 IsAbilityOnSide(u32 battler, enum Ability ability) { if (IsBattlerAlive(battler) && GetBattlerAbility(battler) == ability) return battler + 1; @@ -5447,12 +5771,12 @@ u32 IsAbilityOnSide(u32 battler, u32 ability) return 0; } -u32 IsAbilityOnOpposingSide(u32 battler, u32 ability) +u32 IsAbilityOnOpposingSide(u32 battler, enum Ability ability) { return IsAbilityOnSide(BATTLE_OPPOSITE(battler), ability); } -u32 IsAbilityOnField(u32 ability) +u32 IsAbilityOnField(enum Ability ability) { u32 i; @@ -5465,7 +5789,7 @@ u32 IsAbilityOnField(u32 ability) return 0; } -u32 IsAbilityOnFieldExcept(u32 battler, u32 ability) +u32 IsAbilityOnFieldExcept(u32 battler, enum Ability ability) { u32 i; @@ -5483,17 +5807,18 @@ u32 IsAbilityPreventingEscape(u32 battler) if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return 0; + bool32 isBattlerGrounded = IsBattlerGrounded(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler)); for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { if (battler == battlerDef || IsBattlerAlly(battler, battlerDef)) continue; - u32 ability = GetBattlerAbility(battlerDef); + enum Ability ability = GetBattlerAbility(battlerDef); if (ability == ABILITY_SHADOW_TAG && (B_SHADOW_TAG_ESCAPE <= GEN_3 || GetBattlerAbility(battler) != ABILITY_SHADOW_TAG)) return battlerDef + 1; - if (ability == ABILITY_ARENA_TRAP && IsBattlerGrounded(battler)) + if (ability == ABILITY_ARENA_TRAP && isBattlerGrounded) return battlerDef + 1; if (ability == ABILITY_MAGNET_PULL && IS_BATTLER_OF_TYPE(battler, TYPE_STEEL)) @@ -5505,19 +5830,19 @@ u32 IsAbilityPreventingEscape(u32 battler) bool32 CanBattlerEscape(u32 battler) // no ability check { - if (gBattleStruct->commanderActive[battler] != SPECIES_NONE) + if (gBattleStruct->battlerState[battler].commanderSpecies != SPECIES_NONE) return FALSE; - else if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_SHED_SHELL) - return TRUE; else if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return TRUE; - else if (gBattleMons[battler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) + else if (gBattleMons[battler].volatiles.escapePrevention) + return FALSE; + else if (gBattleMons[battler].volatiles.wrapped) return FALSE; - else if (gStatuses3[battler] & STATUS3_ROOTED) + else if (gBattleMons[battler].volatiles.root) return FALSE; else if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) return FALSE; - else if (gStatuses3[battler] & STATUS3_SKY_DROPPED) + else if (gBattleMons[battler].volatiles.semiInvulnerable == STATE_SKY_DROP) return FALSE; else return TRUE; @@ -5533,100 +5858,212 @@ void BattleScriptExecute(const u8 *BS_ptr) void BattleScriptPushCursorAndCallback(const u8 *BS_ptr) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BS_ptr; + BattleScriptCall(BS_ptr); gBattleResources->battleCallbackStack->function[gBattleResources->battleCallbackStack->size++] = gBattleMainFunc; gBattleMainFunc = RunBattleScriptCommands; } -bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag) +bool32 IsBattlerTerrainAffected(u32 battler, enum Ability ability, enum HoldEffect holdEffect, u32 terrainFlag) { if (!(gFieldStatuses & terrainFlag)) return FALSE; - else if (gStatuses3[battler] & STATUS3_SEMI_INVULNERABLE) + if (IsSemiInvulnerable(battler, CHECK_ALL)) return FALSE; - return IsBattlerGrounded(battler); + return IsBattlerGrounded(battler, ability, holdEffect); +} + +u32 GetHighestStatId(u32 battler) +{ + u32 highestId = STAT_ATK; + u32 highestStat = gBattleMons[battler].attack; + + for (u32 stat = STAT_DEF; stat < NUM_STATS; stat++) + { + if (stat == STAT_SPEED) + continue; + + u16 *statVal = &gBattleMons[battler].attack + (stat - 1); + if (*statVal > highestStat) + { + highestStat = *statVal; + highestId = stat; + } + } + + if (gBattleMons[battler].speed > highestStat) + highestId = STAT_SPEED; + + return highestId; +} + +static u32 GetStatValueWithStages(u32 battler, u32 stat) +{ + u32 statValue; + + switch (stat) + { + case STAT_ATK: + statValue = gBattleMons[battler].attack; + break; + case STAT_DEF: + statValue = gBattleMons[battler].defense; + break; + case STAT_SPATK: + statValue = gBattleMons[battler].spAttack; + break; + case STAT_SPDEF: + statValue = gBattleMons[battler].spDefense; + break; + case STAT_SPEED: + statValue = gBattleMons[battler].speed; + break; + default: + return 0; + } + + statValue *= gStatStageRatios[gBattleMons[battler].statStages[stat]][0]; + statValue /= gStatStageRatios[gBattleMons[battler].statStages[stat]][1]; + + return statValue; +} + +u32 GetParadoxHighestStatId(u32 battler) +{ + u32 highestId = STAT_ATK; + u32 highestStat = GetStatValueWithStages(battler, STAT_ATK); + + for (u32 stat = STAT_DEF; stat < NUM_STATS; stat++) + { + if (stat == STAT_SPEED) + continue; + + u32 statValue = GetStatValueWithStages(battler, stat); + if (statValue > highestStat) + { + highestStat = statValue; + highestId = stat; + } + } + + u32 speed = GetStatValueWithStages(battler, STAT_SPEED); + if (speed > highestStat) + highestId = STAT_SPEED; + + return highestId; +} + +static void ResetParadoxWeatherStat(u32 battler) +{ + if (gBattleMons[battler].ability == ABILITY_PROTOSYNTHESIS + && !gDisableStructs[battler].boosterEnergyActivated) + gDisableStructs[battler].paradoxBoostedStat = 0; +} + +static void ResetParadoxTerrainStat(u32 battler) +{ + if (gBattleMons[battler].ability == ABILITY_QUARK_DRIVE + && !gDisableStructs[battler].boosterEnergyActivated) + gDisableStructs[battler].paradoxBoostedStat = 0; +} + +u32 GetParadoxBoostedStatId(u32 battler) +{ + if (gDisableStructs[battler].paradoxBoostedStat == 0) + gDisableStructs[battler].paradoxBoostedStat = GetParadoxHighestStatId(battler); + + return gDisableStructs[battler].paradoxBoostedStat; } -bool32 CanBeSlept(u32 battlerAtk, u32 battlerDef, u32 abilityDef, enum SleepClauseBlock isBlockedBySleepClause) +bool32 CanBeSlept(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef, enum SleepClauseBlock isBlockedBySleepClause) { - if (IsSleepClauseActiveForSide(GetBattlerSide(battlerDef)) && isBlockedBySleepClause) + if (IsSleepClauseActiveForSide(GetBattlerSide(battlerDef)) && isBlockedBySleepClause != NOT_BLOCKED_BY_SLEEP_CLAUSE) return FALSE; - if (CanSetNonVolatileStatus(battlerAtk, - battlerDef, - ABILITY_NONE, // attacker ability does not matter - abilityDef, - MOVE_EFFECT_SLEEP, // also covers yawn - STATUS_CHECK_TRIGGER)) - return TRUE; - return FALSE; + if (isBlockedBySleepClause == NOT_BLOCKED_BY_SLEEP_CLAUSE) + gBattleStruct->sleepClauseNotBlocked = TRUE; + + bool32 effect = FALSE; + if (CanSetNonVolatileStatus( + battlerAtk, + battlerDef, + ABILITY_NONE, // attacker ability does not matter + abilityDef, + MOVE_EFFECT_SLEEP, // also covers yawn + CHECK_TRIGGER)) + effect = TRUE; + + gBattleStruct->sleepClauseNotBlocked = FALSE; + return effect; } -bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 abilityDef) +bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef) { - if (CanSetNonVolatileStatus(battlerAtk, - battlerDef, - abilityAtk, - abilityDef, - MOVE_EFFECT_TOXIC, // also covers poison - STATUS_CHECK_TRIGGER)) + if (CanSetNonVolatileStatus( + battlerAtk, + battlerDef, + abilityAtk, + abilityDef, + MOVE_EFFECT_TOXIC, // also covers poison + CHECK_TRIGGER)) return TRUE; return FALSE; } // TODO: check order of battlerAtk and battlerDef -bool32 CanBeBurned(u32 battlerAtk, u32 battlerDef, u32 abilityDef) -{ - if (CanSetNonVolatileStatus(battlerAtk, - battlerDef, - ABILITY_NONE, // attacker ability does not matter - abilityDef, - MOVE_EFFECT_BURN, - STATUS_CHECK_TRIGGER)) +bool32 CanBeBurned(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef) +{ + if (CanSetNonVolatileStatus( + battlerAtk, + battlerDef, + ABILITY_NONE, // attacker ability does not matter + abilityDef, + MOVE_EFFECT_BURN, + CHECK_TRIGGER)) return TRUE; return FALSE; } -bool32 CanBeParalyzed(u32 battlerAtk, u32 battlerDef, u32 abilityDef) +bool32 CanBeParalyzed(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef) { - if (CanSetNonVolatileStatus(battlerAtk, - battlerDef, - ABILITY_NONE, // attacker ability does not matter - abilityDef, - MOVE_EFFECT_PARALYSIS, - STATUS_CHECK_TRIGGER)) + if (CanSetNonVolatileStatus( + battlerAtk, + battlerDef, + ABILITY_NONE, // attacker ability does not matter + abilityDef, + MOVE_EFFECT_PARALYSIS, + CHECK_TRIGGER)) return TRUE; return FALSE; } -bool32 CanBeFrozen(u32 battlerAtk, u32 battlerDef, u32 abilityDef) +bool32 CanBeFrozen(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef) { - if (CanSetNonVolatileStatus(battlerAtk, - battlerDef, - ABILITY_NONE, // attacker ability does not matter - abilityDef, - MOVE_EFFECT_FREEZE, - STATUS_CHECK_TRIGGER)) + if (CanSetNonVolatileStatus( + battlerAtk, + battlerDef, + ABILITY_NONE, // attacker ability does not matter + abilityDef, + MOVE_EFFECT_FREEZE, + CHECK_TRIGGER)) return TRUE; return FALSE; } - -// Unused, technically also redundant -bool32 CanGetFrostbite(u32 battlerAtk, u32 battlerDef, u32 abilityDef) +// Unused, technically also redundant because it is just a copy of CanBeFrozen +bool32 CanGetFrostbite(u32 battlerAtk, u32 battlerDef, enum Ability abilityDef) { - if (CanSetNonVolatileStatus(battlerAtk, - battlerDef, - ABILITY_NONE, // attacker ability does not matter - abilityDef, - MOVE_EFFECT_FREEZE_OR_FROSTBITE, // also covers frostbite - STATUS_CHECK_TRIGGER)) + if (CanSetNonVolatileStatus( + battlerAtk, + battlerDef, + ABILITY_NONE, // attacker ability does not matter + abilityDef, + MOVE_EFFECT_FREEZE_OR_FROSTBITE, // also covers frostbite + CHECK_TRIGGER)) return TRUE; return FALSE; } -bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u32 abilityDef, enum MoveEffects effect, enum NonVolatileStatus option) +bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, enum MoveEffect effect, enum FunctionCallOption option) { const u8 *battleScript = NULL; u32 sideBattler = ABILITY_NONE; @@ -5650,13 +6087,11 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u abilityAffected = TRUE; battlerDef = sideBattler - 1; abilityDef = ABILITY_PASTEL_VEIL; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PASTEL_VEIL; battleScript = BattleScript_ImmunityProtected; } else if (abilityDef == ABILITY_IMMUNITY) { abilityAffected = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_MOVE_POISON; battleScript = BattleScript_ImmunityProtected; } break; @@ -5665,12 +6100,12 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u { battleScript = BattleScript_AlreadyParalyzed; } - else if (B_PARALYZE_ELECTRIC >= GEN_6 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ELECTRIC)) + else if (GetConfig(CONFIG_PARALYZE_ELECTRIC) >= GEN_6 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ELECTRIC)) { battleScript = BattleScript_NotAffected; } - else if (option == STATUS_RUN_SCRIPT // Check only important during battle execution for moves - && CalcTypeEffectivenessMultiplier(gCurrentMove, GetBattleMoveType(gCurrentMove), battlerAtk, battlerDef, abilityDef, TRUE) + else if (option == RUN_SCRIPT // Check only important during battle execution for moves + && CalcTypeEffectivenessMultiplierHelper(gCurrentMove, GetBattleMoveType(gCurrentMove), battlerAtk, battlerDef, abilityAtk, abilityDef, TRUE) && gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT) { battleScript = BattleScript_ButItFailed; @@ -5678,7 +6113,6 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u else if (abilityDef == ABILITY_LIMBER) { abilityAffected = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_MOVE_PARALYSIS; battleScript = BattleScript_ImmunityProtected; } break; @@ -5694,7 +6128,6 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u else if (abilityDef == ABILITY_WATER_VEIL || abilityDef == ABILITY_WATER_BUBBLE) { abilityAffected = TRUE; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABILITY_PREVENTS_MOVE_BURN; battleScript = BattleScript_ImmunityProtected; } else if (abilityDef == ABILITY_THERMAL_EXCHANGE) @@ -5712,11 +6145,11 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u { battleScript = BattleScript_CantMakeAsleep; } - else if (CanSleepDueToSleepClause(battlerAtk, battlerDef, option)) + else if (!gBattleStruct->sleepClauseNotBlocked && CanSleepDueToSleepClause(battlerAtk, battlerDef, option)) { battleScript = BattleScript_SleepClauseBlocked; } - else if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) + else if (IsBattlerTerrainAffected(battlerDef, abilityDef, GetBattlerHoldEffect(battlerDef), STATUS_FIELD_ELECTRIC_TERRAIN)) { battleScript = BattleScript_ElectricTerrainPrevents; } @@ -5725,7 +6158,6 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u abilityAffected = TRUE; battlerDef = sideBattler - 1; abilityDef = ABILITY_SWEET_VEIL; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STATUS_HAD_NO_EFFECT; battleScript = BattleScript_ImmunityProtected; } else if (abilityDef == ABILITY_VITAL_SPIRIT || abilityDef == ABILITY_INSOMNIA) @@ -5759,13 +6191,12 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u // Checks that apply to all non volatile statuses if (abilityDef == ABILITY_COMATOSE - || abilityDef == ABILITY_SHIELDS_DOWN || abilityDef == ABILITY_PURIFYING_SALT) { abilityAffected = TRUE; battleScript = BattleScript_AbilityProtectsDoesntAffect; } - else if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) + else if (IsBattlerTerrainAffected(battlerDef, abilityDef, GetBattlerHoldEffect(battlerDef), STATUS_FIELD_MISTY_TERRAIN)) { battleScript = BattleScript_MistyTerrainPrevents; } @@ -5774,6 +6205,11 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u abilityAffected = TRUE; battleScript = BattleScript_AbilityProtectsDoesntAffect; } + else if (IsShieldsDownProtected(battlerDef, abilityDef)) + { + abilityAffected = TRUE; + battleScript = BattleScript_AbilityProtectsDoesntAffect; + } else if ((sideBattler = IsFlowerVeilProtected(battlerDef))) { abilityAffected = TRUE; @@ -5796,11 +6232,11 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u return TRUE; } -static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, u32 abilityDef, u32 abilityAffected, const u8 *battleScript, enum NonVolatileStatus option) +static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, enum Ability abilityAffected, const u8 *battleScript, enum FunctionCallOption option) { if (battleScript != NULL) { - if (option == STATUS_RUN_SCRIPT) + if (option == RUN_SCRIPT) { if (battleScript != BattleScript_NotAffected) gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FAILED; @@ -5821,17 +6257,17 @@ static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, u32 abilityDef, u32 abi return FALSE; } -static bool32 CanSleepDueToSleepClause(u32 battlerAtk, u32 battlerDef, enum NonVolatileStatus option) +static bool32 CanSleepDueToSleepClause(u32 battlerAtk, u32 battlerDef, enum FunctionCallOption option) { // Can freely sleep own partner if (IsDoubleBattle() && IsSleepClauseEnabled() && IsBattlerAlly(battlerAtk, battlerDef)) { - if (option == STATUS_RUN_SCRIPT) + if (option == RUN_SCRIPT) gBattleStruct->battlerState[battlerDef].sleepClauseEffectExempt = TRUE; return FALSE; } - if (option == STATUS_RUN_SCRIPT) + if (option == RUN_SCRIPT) gBattleStruct->battlerState[battlerDef].sleepClauseEffectExempt = FALSE; // Can't sleep if clause is active otherwise if (IsSleepClauseActiveForSide(GetBattlerSide(battlerDef))) @@ -5842,2073 +6278,551 @@ static bool32 CanSleepDueToSleepClause(u32 battlerAtk, u32 battlerDef, enum NonV bool32 CanBeConfused(u32 battler) { - if (GetBattlerAbility(battler) == ABILITY_OWN_TEMPO - || gBattleMons[battler].status2 & STATUS2_CONFUSION - || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)) + enum Ability ability = GetBattlerAbility(battler); + if (gBattleMons[battler].volatiles.confusionTurns > 0 + || IsBattlerTerrainAffected(battler, ability, GetBattlerHoldEffect(battler), STATUS_FIELD_MISTY_TERRAIN) + || IsAbilityAndRecord(battler, ability, ABILITY_OWN_TEMPO)) return FALSE; return TRUE; } // second argument is 1/X of current hp compared to max hp -bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId) +bool32 HasEnoughHpToEatBerry(u32 battler, enum Ability ability, u32 hpFraction, u32 itemId) { - bool32 isBerry = (GetItemPocket(itemId) == POCKET_BERRIES); - if (!IsBattlerAlive(battler)) return FALSE; if (gBattleScripting.overrideBerryRequirements) return TRUE; - // Unnerve prevents consumption of opponents' berries. - if (isBerry && IsUnnerveAbilityOnOpposingSide(battler)) - return FALSE; if (gBattleMons[battler].hp <= gBattleMons[battler].maxHP / hpFraction) return TRUE; - if (hpFraction <= 4 && GetBattlerAbility(battler) == ABILITY_GLUTTONY && isBerry - && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 2) - { - RecordAbilityBattle(battler, ABILITY_GLUTTONY); + if (hpFraction <= 4 && GetItemPocket(itemId) == POCKET_BERRIES + && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 2 + && IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_GLUTTONY)) return TRUE; - } return FALSE; } -static enum ItemEffect HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, enum ItemCaseId caseID) +void ClearVariousBattlerFlags(u32 battler) { - if (HasEnoughHpToEatBerry(battler, (B_CONFUSE_BERRIES_HEAL >= GEN_7 ? 4 : 2), itemId) - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) - { - PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, flavorId); - - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / GetBattlerItemHoldEffectParam(battler, itemId); - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; - - if (GetBattlerAbility(battler) == ABILITY_RIPEN) - { - gBattleStruct->moveDamage[battler] *= 2; - gBattlerAbility = battler; - } - gBattleScripting.battler = battler; - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) - { - if (GetFlavorRelationByPersonality(gBattleMons[battler].personality, flavorId) < 0) - BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); - else - BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2); - } - else - { - BattleScriptPushCursor(); - if (GetFlavorRelationByPersonality(gBattleMons[battler].personality, flavorId) < 0) - gBattlescriptCurrInstr = BattleScript_BerryConfuseHealRet; - else - gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet; - } - - return ITEM_HP_CHANGE; - } - return ITEM_NO_EFFECT; + gDisableStructs[battler].furyCutterCounter = 0; + gBattleMons[battler].volatiles.destinyBond = 0; + gBattleMons[battler].volatiles.glaiveRush = FALSE; + gBattleMons[battler].volatiles.grudge = FALSE; } -static enum ItemEffect StatRaiseBerry(u32 battler, u32 itemId, u32 statId, enum ItemCaseId caseID) +void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands { - if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN) && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, itemId), itemId)) - { - BufferStatChange(battler, statId, STRINGID_STATROSE); - gEffectBattler = gBattleScripting.battler = battler; - if (GetBattlerAbility(battler) == ABILITY_RIPEN) - SET_STATCHANGER(statId, 2, FALSE); - else - SET_STATCHANGER(statId, 1, FALSE); - - gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; - gBattleScripting.animArg2 = 0; - - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) - { - BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; - } - return ITEM_STATS_CHANGE; - } - return ITEM_NO_EFFECT; + if (gBattleControllerExecFlags == 0) + gBattleScriptingCommandsTable[*gBattlescriptCurrInstr](); } -static enum ItemEffect RandomStatRaiseBerry(u32 battler, u32 itemId, enum ItemCaseId caseID) +u32 SetRandomTarget(u32 battlerAtk) { - s32 stat; - enum StringID stringId; + u32 target; + static const u8 targets[2][2] = + { + [B_SIDE_PLAYER] = {B_POSITION_OPPONENT_LEFT, B_POSITION_OPPONENT_RIGHT}, + [B_SIDE_OPPONENT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT}, + }; - for (stat = STAT_ATK; stat < NUM_STATS; stat++) + if (IsDoubleBattle()) { - if (CompareStat(battler, stat, MAX_STAT_STAGE, CMP_LESS_THAN)) - break; + target = GetBattlerAtPosition(targets[GetBattlerSide(battlerAtk)][RandomUniform(RNG_RANDOM_TARGET, 0, 1)]); + if (!IsBattlerAlive(target)) + target ^= BIT_FLANK; } - if (stat != NUM_STATS && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, itemId), itemId)) + else { - u16 battlerAbility = GetBattlerAbility(battler); - u32 savedAttacker = gBattlerAttacker; - // MoodyCantRaiseStat requires that the battler is set to gBattlerAttacker - gBattlerAttacker = gBattleScripting.battler = battler; - stat = RandomUniformExcept(RNG_RANDOM_STAT_UP, STAT_ATK, NUM_STATS - 1, MoodyCantRaiseStat); - gBattlerAttacker = savedAttacker; + target = GetBattlerAtPosition(targets[GetBattlerSide(battlerAtk)][0]); + } - PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); - stringId = (battlerAbility == ABILITY_CONTRARY) ? STRINGID_STATFELL : STRINGID_STATROSE; - gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; - gBattleTextBuff2[1] = B_BUFF_STRING; - gBattleTextBuff2[2] = STRINGID_STATSHARPLY; - gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8; - gBattleTextBuff2[4] = B_BUFF_STRING; - gBattleTextBuff2[5] = stringId; - gBattleTextBuff2[6] = stringId >> 8; - gBattleTextBuff2[7] = EOS; - gEffectBattler = battler; - if (battlerAbility == ABILITY_RIPEN) - SET_STATCHANGER(stat, 4, FALSE); - else - SET_STATCHANGER(stat, 2, FALSE); - - gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + stat; - gBattleScripting.animArg2 = 0; - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) - { - BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; - } - - return ITEM_STATS_CHANGE; - } - return ITEM_NO_EFFECT; + return target; } -static enum ItemEffect TrySetMicleBerry(u32 battler, u32 itemId, enum ItemCaseId caseID) +u32 GetBattleMoveTarget(u16 move, u8 setTarget) { - if (HasEnoughHpToEatBerry(battler, 4, itemId)) + u8 targetBattler = 0; + u32 moveTarget, side; + enum Type moveType = GetBattleMoveType(move); + + if (setTarget != NO_TARGET_OVERRIDE) + moveTarget = setTarget - 1; + else + moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); + + switch (moveTarget) { - gBattleStruct->battlerState[battler].usedMicleBerry = TRUE; - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) + case MOVE_TARGET_SELECTED: + case MOVE_TARGET_OPPONENT: + side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); + if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) { - BattleScriptExecute(BattleScript_MicleBerryActivateEnd2); + targetBattler = gSideTimers[side].followmeTarget; } else { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MicleBerryActivateRet; + enum Ability battlerAbilityOnField = 0; + + targetBattler = SetRandomTarget(gBattlerAttacker); + if (moveType == TYPE_ELECTRIC && GetBattlerAbility(targetBattler) != ABILITY_LIGHTNING_ROD) + { + if (B_REDIRECT_ABILITY_ALLIES >= GEN_4) + battlerAbilityOnField = IsAbilityOnField(ABILITY_LIGHTNING_ROD); + else + battlerAbilityOnField = IsAbilityOnOpposingSide(targetBattler, ABILITY_LIGHTNING_ROD); + + if (battlerAbilityOnField > 0 && (battlerAbilityOnField - 1) != gBattlerAttacker) + { + targetBattler = battlerAbilityOnField - 1; + RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability); + gSpecialStatuses[targetBattler].abilityRedirected = TRUE; + } + } + else if (moveType == TYPE_WATER && GetBattlerAbility(targetBattler) != ABILITY_STORM_DRAIN) + { + if (B_REDIRECT_ABILITY_ALLIES >= GEN_4) + battlerAbilityOnField = IsAbilityOnField(ABILITY_STORM_DRAIN); + else + battlerAbilityOnField = IsAbilityOnOpposingSide(targetBattler, ABILITY_STORM_DRAIN); + + if (battlerAbilityOnField > 0 && (battlerAbilityOnField - 1) != gBattlerAttacker) + { + targetBattler = battlerAbilityOnField - 1; + RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability); + gSpecialStatuses[targetBattler].abilityRedirected = TRUE; + } + } } - return ITEM_EFFECT_OTHER; + break; + case MOVE_TARGET_DEPENDS: + case MOVE_TARGET_BOTH: + case MOVE_TARGET_FOES_AND_ALLY: + targetBattler = GetOpposingSideBattler(gBattlerAttacker); + if (IsDoubleBattle() && !IsBattlerAlive(targetBattler)) + targetBattler ^= BIT_FLANK; + break; + case MOVE_TARGET_OPPONENTS_FIELD: + targetBattler = GetOpposingSideBattler(gBattlerAttacker); + break; + case MOVE_TARGET_RANDOM: + side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); + if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) + targetBattler = gSideTimers[side].followmeTarget; + else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) + targetBattler = SetRandomTarget(gBattlerAttacker); + else + targetBattler = GetOpposingSideBattler(gBattlerAttacker); + break; + case MOVE_TARGET_USER: + default: + targetBattler = gBattlerAttacker; + break; + case MOVE_TARGET_ALLY: + if (IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker))) + targetBattler = BATTLE_PARTNER(gBattlerAttacker); + else + targetBattler = gBattlerAttacker; + break; } - return ITEM_NO_EFFECT; -} -static enum ItemEffect TrySetEnigmaBerry(u32 battler) -{ - if (IsBattlerAlive(battler) - && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) - && ((IsBattlerTurnDamaged(battler) && gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_SUPER_EFFECTIVE) || gBattleScripting.overrideBerryRequirements) - && !(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) - { - gBattleScripting.battler = battler; - gBattleStruct->moveDamage[battler] = (gBattleMons[battler].maxHP * 25 / 100) * -1; - if (GetBattlerAbility(battler) == ABILITY_RIPEN) - gBattleStruct->moveDamage[battler] *= 2; + gBattleStruct->moveTarget[gBattlerAttacker] = targetBattler; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet; - return ITEM_HP_CHANGE; - } - return ITEM_NO_EFFECT; + return targetBattler; } -static enum ItemEffect DamagedStatBoostBerryEffect(u32 battler, u8 statId, u8 category) +u8 GetAttackerObedienceForAction() { - if (IsBattlerAlive(battler) - && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN) - && (gBattleScripting.overrideBerryRequirements - || (!DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) - && GetBattleMoveCategory(gCurrentMove) == category - && battler != gBattlerAttacker - && IsBattlerTurnDamaged(battler))) - ) - { - BufferStatChange(battler, statId, STRINGID_STATROSE); + s32 rnd; + s32 calc; + u8 obedienceLevel = 0; + u8 levelReferenced; - gEffectBattler = battler; - if (GetBattlerAbility(battler) == ABILITY_RIPEN) - SET_STATCHANGER(statId, 2, FALSE); - else - SET_STATCHANGER(statId, 1, FALSE); + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) + return OBEYS; + if (BattlerHasAi(gBattlerAttacker)) + return OBEYS; - gBattleScripting.battler = battler; - gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; - gBattleScripting.animArg2 = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; - return ITEM_STATS_CHANGE; - } - return ITEM_NO_EFFECT; -} + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_RIGHT) + return OBEYS; + if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + return OBEYS; + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + return OBEYS; + if (B_OBEDIENCE_MECHANICS < GEN_8 && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) + return OBEYS; + if (FlagGet(FLAG_BADGE08_GET)) // Rain Badge, ignore obedience altogether + return OBEYS; -enum ItemEffect TryHandleSeed(u32 battler, u32 terrainFlag, u32 statId, u32 itemId, enum ItemCaseId caseID) -{ - if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) - { - BufferStatChange(battler, statId, STRINGID_STATROSE); - gLastUsedItem = itemId; // For surge abilities - gEffectBattler = gBattleScripting.battler = battler; - SET_STATCHANGER(statId, 1, FALSE); - gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; - gBattleScripting.animArg2 = 0; - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN) - { - BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ConsumableStatRaiseRet; - } - return ITEM_STATS_CHANGE; - } - return ITEM_NO_EFFECT; -} + obedienceLevel = 10; -static enum ItemEffect TryEjectPack(u32 battler, enum ItemCaseId caseID) -{ - if (gProtectStructs[battler].statFell - && !gProtectStructs[battler].disableEjectPack - && CountUsablePartyMons(battler) > 0 - && !(GetMoveEffect(gCurrentMove) == EFFECT_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker))) // Does not activate if attacker used Parting Shot and can switch out + if (FlagGet(FLAG_BADGE01_GET)) // Stone Badge + obedienceLevel = 20; + if (FlagGet(FLAG_BADGE02_GET)) // Knuckle Badge + obedienceLevel = 30; + if (FlagGet(FLAG_BADGE03_GET)) // Dynamo Badge + obedienceLevel = 40; + if (FlagGet(FLAG_BADGE04_GET)) // Heat Badge + obedienceLevel = 50; + if (FlagGet(FLAG_BADGE05_GET)) // Balance Badge + obedienceLevel = 60; + if (FlagGet(FLAG_BADGE06_GET)) // Feather Badge + obedienceLevel = 70; + if (FlagGet(FLAG_BADGE07_GET)) // Mind Badge + obedienceLevel = 80; + + if (B_OBEDIENCE_MECHANICS >= GEN_8 + && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) + levelReferenced = gBattleMons[gBattlerAttacker].metLevel; + else + levelReferenced = gBattleMons[gBattlerAttacker].level; + + if (levelReferenced <= obedienceLevel) + return OBEYS; + + rnd = Random(); + calc = (levelReferenced + obedienceLevel) * (rnd & 255) >> 8; + if (calc < obedienceLevel) + return OBEYS; + + // Clear the Z-Move flags if the battler is disobedient as to not waste the Z-Move + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) { - gProtectStructs[battler].statFell = FALSE; - gBattleScripting.battler = battler; - gAiLogicData->ejectPackSwitch = TRUE; - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN) - { - BattleScriptExecute(BattleScript_EjectPackActivate_End2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EjectPackActivate_Ret; - } - return ITEM_STATS_CHANGE; + gBattleStruct->gimmick.activated[gBattlerAttacker][GIMMICK_Z_MOVE] = FALSE; + gBattleStruct->gimmick.activeGimmick[GetBattlerSide(gBattlerAttacker)][gBattlerPartyIndexes[gBattlerAttacker]] = GIMMICK_NONE; } - return ITEM_NO_EFFECT; -} -static enum ItemEffect ConsumeBerserkGene(u32 battler, enum ItemCaseId caseID) -{ - if (CanBeInfinitelyConfused(battler)) - gStatuses4[battler] |= STATUS4_INFINITE_CONFUSION; + // is not obedient + enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); + if (moveEffect == EFFECT_RAGE) + gBattleMons[gBattlerAttacker].volatiles.rage = FALSE; + if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (moveEffect == EFFECT_SNORE || moveEffect == EFFECT_SLEEP_TALK)) + return DISOBEYS_WHILE_ASLEEP; - BufferStatChange(battler, STAT_ATK, STRINGID_STATROSE); - gBattlerAttacker = gEffectBattler = battler; - SET_STATCHANGER(STAT_ATK, 2, FALSE); - gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_ATK; - gBattleScripting.animArg2 = 0; - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) + calc = (levelReferenced + obedienceLevel) * ((rnd >> 8) & 255) >> 8; + if (calc < obedienceLevel) { - BattleScriptExecute(BattleScript_BerserkGeneRetEnd2); + calc = CheckMoveLimitations(gBattlerAttacker, 1u << gCurrMovePos, MOVE_LIMITATIONS_ALL); + if (calc == ALL_MOVES_MASK) // all moves cannot be used + return DISOBEYS_LOAFS; + else // use a random move + do + gCurrMovePos = gChosenMovePos = MOD(Random(), MAX_MON_MOVES); + while ((1u << gCurrMovePos) & calc); + return DISOBEYS_RANDOM_MOVE; } else { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerserkGeneRet; + obedienceLevel = levelReferenced - obedienceLevel; + + calc = ((rnd >> 16) & 255); + if (calc < obedienceLevel && CanBeSlept(gBattlerAttacker, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), NOT_BLOCKED_BY_SLEEP_CLAUSE)) + { + // try putting asleep + int i; + for (i = 0; i < gBattlersCount; i++) + if (gBattleMons[i].volatiles.uproarTurns) + break; + if (i == gBattlersCount) + return DISOBEYS_FALL_ASLEEP; + } + calc -= obedienceLevel; + if (calc < obedienceLevel) + return DISOBEYS_HITS_SELF; + else + return DISOBEYS_LOAFS; } - return ITEM_STATS_CHANGE; } -static u32 ItemRestorePp(u32 battler, u32 itemId, enum ItemCaseId caseID) +enum HoldEffect GetBattlerHoldEffect(u32 battler) { - struct Pokemon *mon = GetBattlerMon(battler); - u32 i, changedPP = 0; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - u32 move = GetMonData(mon, MON_DATA_MOVE1 + i); - u32 currentPP = GetMonData(mon, MON_DATA_PP1 + i); - u32 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); - u32 maxPP = CalculatePPWithBonus(move, ppBonuses, i); - if (move && (currentPP == 0 || (gBattleScripting.overrideBerryRequirements && currentPP != maxPP))) - { - u32 ppRestored = GetBattlerItemHoldEffectParam(battler, itemId); - - if (GetBattlerAbility(battler) == ABILITY_RIPEN) - { - ppRestored *= 2; - gBattlerAbility = battler; - } - if (currentPP + ppRestored > maxPP) - changedPP = maxPP; - else - changedPP = currentPP + ppRestored; - - PREPARE_MOVE_BUFFER(gBattleTextBuff1, move); + return GetBattlerHoldEffectInternal(battler, GetBattlerAbility(battler)); +} - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) - { - BattleScriptExecute(BattleScript_BerryPPHealEnd2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryPPHealRet; - } - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); - MarkBattlerForControllerExec(battler); - if (MOVE_IS_PERMANENT(battler, i)) - gBattleMons[battler].pp[i] = changedPP; - return ITEM_PP_CHANGE; - } - } - return 0; +enum HoldEffect GetBattlerHoldEffectIgnoreAbility(u32 battler) +{ + return GetBattlerHoldEffectInternal(battler, ABILITY_NONE); } -static u32 ItemHealHp(u32 battler, u32 itemId, enum ItemCaseId caseID, bool32 percentHeal) +enum HoldEffect GetBattlerHoldEffectInternal(u32 battler, u32 ability) { - if (!(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) - && HasEnoughHpToEatBerry(battler, 2, itemId)) - { - if (percentHeal) - gBattleStruct->moveDamage[battler] = (GetNonDynamaxMaxHP(battler) * GetBattlerItemHoldEffectParam(battler, itemId) / 100) * -1; - else - gBattleStruct->moveDamage[battler] = GetBattlerItemHoldEffectParam(battler, itemId) * -1; + if (gBattleMons[battler].volatiles.embargo) + return HOLD_EFFECT_NONE; + if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) + return HOLD_EFFECT_NONE; + if (ability == ABILITY_KLUTZ && !gBattleMons[battler].volatiles.gastroAcid) + return HOLD_EFFECT_NONE; - // check ripen - if (GetItemPocket(itemId) == POCKET_BERRIES && GetBattlerAbility(battler) == ABILITY_RIPEN) - gBattleStruct->moveDamage[battler] *= 2; + gPotentialItemEffectBattler = battler; - gBattlerAbility = battler; // in SWSH, berry juice shows ability pop up but has no effect. This is mimicked here - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) - { - BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet; - } + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) + return gEnigmaBerries[battler].holdEffect; + else + return GetItemHoldEffect(gBattleMons[battler].item); +} - return ITEM_HP_CHANGE; - } - return 0; +enum HoldEffect GetBattlerHoldEffectIgnoreNegation(u32 battler) +{ + gPotentialItemEffectBattler = battler; + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) + return gEnigmaBerries[battler].holdEffect; + else + return GetItemHoldEffect(gBattleMons[battler].item); } -static bool32 UnnerveOn(u32 battler, u32 itemId) +u32 GetBattlerHoldEffectParam(u32 battler) { - if (gBattleScripting.overrideBerryRequirements > 0) // Berries that aren't eaten naturally ignore unnerve - return FALSE; + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) + return gEnigmaBerries[battler].holdEffectParam; + else + return GetItemHoldEffectParam(gBattleMons[battler].item); +} - if (GetItemPocket(itemId) == POCKET_BERRIES && IsUnnerveAbilityOnOpposingSide(battler)) +bool32 CanBattlerAvoidContactEffects(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum HoldEffect holdEffectAtk, u32 move) +{ + if (holdEffectAtk == HOLD_EFFECT_PROTECTIVE_PADS) + { + RecordItemEffectBattle(battlerAtk, HOLD_EFFECT_PROTECTIVE_PADS); return TRUE; - return FALSE; + } + + return !IsMoveMakingContact(battlerAtk, battlerDef, abilityAtk, holdEffectAtk, move); } -static bool32 GetMentalHerbEffect(u32 battler) +bool32 IsMoveMakingContact(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum HoldEffect holdEffectAtk, u32 move) { - bool32 ret = FALSE; - - // Check infatuation - if (gBattleMons[battler].status2 & STATUS2_INFATUATION) + if (!(MoveMakesContact(move) || (GetMoveEffect(move) == EFFECT_SHELL_SIDE_ARM + && gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL))) { - gBattleMons[battler].status2 &= ~STATUS2_INFATUATION; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_INFATUATION; // STRINGID_TARGETGOTOVERINFATUATION - StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - ret = TRUE; + return FALSE; } - if (B_MENTAL_HERB >= GEN_5) + else if (holdEffectAtk == HOLD_EFFECT_PUNCHING_GLOVE && IsPunchingMove(move)) { - // Check taunt - if (gDisableStructs[battler].tauntTimer != 0) - { - gDisableStructs[battler].tauntTimer = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TAUNT; - PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_TAUNT); - ret = TRUE; - } - // Check encore - if (gDisableStructs[battler].encoreTimer != 0) - { - gDisableStructs[battler].encoredMove = 0; - gDisableStructs[battler].encoreTimer = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_ENCORE; // STRINGID_PKMNENCOREENDED - ret = TRUE; - } - // Check torment - if (gBattleMons[battler].status2 & STATUS2_TORMENT) - { - gBattleMons[battler].status2 &= ~STATUS2_TORMENT; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT; - ret = TRUE; - } - // Check heal block - if (gStatuses3[battler] & STATUS3_HEAL_BLOCK) - { - gStatuses3[battler] &= ~STATUS3_HEAL_BLOCK; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; - ret = TRUE; - } - // Check disable - if (gDisableStructs[battler].disableTimer != 0) - { - gDisableStructs[battler].disableTimer = 0; - gDisableStructs[battler].disabledMove = 0; - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; - ret = TRUE; - } + RecordItemEffectBattle(battlerAtk, HOLD_EFFECT_PUNCHING_GLOVE); + return FALSE; } - return ret; + else if (abilityAtk == ABILITY_LONG_REACH) + { + RecordAbilityBattle(battlerAtk, ABILITY_LONG_REACH); + return FALSE; + } + return TRUE; } -static u32 TryConsumeMirrorHerb(u32 battler, enum ItemCaseId caseID) +static inline bool32 IsSideProtected(u32 battler, enum ProtectMethod method) { - u32 effect = 0; + return gProtectStructs[battler].protected == method + || gProtectStructs[BATTLE_PARTNER(battler)].protected == method; +} - if (gProtectStructs[battler].eatMirrorHerb) - { +bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) +{ + if (gProtectStructs[battlerDef].protected == PROTECT_NONE + && gProtectStructs[BATTLE_PARTNER(battlerDef)].protected == PROTECT_NONE) + return FALSE; - gLastUsedItem = gBattleMons[battler].item; - gBattleScripting.battler = battler; - gProtectStructs[battler].eatMirrorHerb = 0; - ChooseStatBoostAnimation(battler); - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) - { - BattleScriptExecute(BattleScript_MirrorHerbCopyStatChangeEnd2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MirrorHerbCopyStatChange; - } - effect = ITEM_STATS_CHANGE; + if (gProtectStructs[battlerDef].protected != PROTECT_MAX_GUARD && !MoveIgnoresProtect(move)) + { + if (IsZMove(move) || IsMaxMove(move)) + return FALSE; // Z-Moves and Max Moves bypass protection (except Max Guard). + if (GetBattlerAbility(battlerAtk) == ABILITY_UNSEEN_FIST + && IsMoveMakingContact(battlerAtk, battlerDef, ABILITY_UNSEEN_FIST, GetBattlerHoldEffect(battlerAtk), move)) + return FALSE; } - return effect; + + bool32 isProtected = FALSE; + + if (IsSideProtected(battlerDef, PROTECT_CRAFTY_SHIELD) + && IsBattleMoveStatus(move) + && GetMoveEffect(move) != EFFECT_COACHING) + isProtected = TRUE; + else if (MoveIgnoresProtect(move)) + isProtected = FALSE; + else if (IsSideProtected(battlerDef, PROTECT_WIDE_GUARD) && IsSpreadMove(GetBattlerMoveTargetType(battlerAtk, move))) + isProtected = TRUE; + else if (gProtectStructs[battlerDef].protected == PROTECT_NORMAL) + isProtected = TRUE; + else if (gProtectStructs[battlerDef].protected == PROTECT_SPIKY_SHIELD) + isProtected = TRUE; + else if (gProtectStructs[battlerDef].protected == PROTECT_MAX_GUARD) + isProtected = TRUE; + else if (gProtectStructs[battlerDef].protected == PROTECT_BANEFUL_BUNKER) + isProtected = TRUE; + else if (gProtectStructs[battlerDef].protected == PROTECT_BURNING_BULWARK) + isProtected = TRUE; + else if (gProtectStructs[battlerDef].protected == PROTECT_OBSTRUCT && !IsBattleMoveStatus(move)) + isProtected = TRUE; + else if (gProtectStructs[battlerDef].protected == PROTECT_SILK_TRAP && !IsBattleMoveStatus(move)) + isProtected = TRUE; + else if (gProtectStructs[battlerDef].protected == PROTECT_KINGS_SHIELD && !IsBattleMoveStatus(move)) + isProtected = TRUE; + else if (IsSideProtected(battlerDef, PROTECT_QUICK_GUARD) && GetChosenMovePriority(battlerAtk, GetBattlerAbility(battlerAtk)) > 0) + isProtected = TRUE; + else if (IsSideProtected(battlerDef, PROTECT_MAT_BLOCK) && !IsBattleMoveStatus(move)) + isProtected = TRUE; + else + isProtected = FALSE; + + if (isProtected) + gBattleStruct->missStringId[battlerDef] = gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; + + return isProtected; } -static inline u32 TryBoosterEnergy(u32 battler, enum ItemCaseId caseID) +u32 GetProtectType(enum ProtectMethod method) { - if (gDisableStructs[battler].boosterEnergyActivates || gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - return ITEM_NO_EFFECT; - - if (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !((gBattleWeather & B_WEATHER_SUN) && HasWeatherEffect())) - || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN))) + switch (method) { - PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); - gBattlerAbility = gBattleScripting.battler = battler; - gDisableStructs[battler].boosterEnergyActivates = TRUE; - if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) - { - BattleScriptExecute(BattleScript_BoosterEnergyEnd2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BoosterEnergyRet; - } - return ITEM_EFFECT_OTHER; + case PROTECT_NONE: + return PROTECT_TYPE_NONE; + case PROTECT_NORMAL: + case PROTECT_SPIKY_SHIELD: + case PROTECT_KINGS_SHIELD: + case PROTECT_BANEFUL_BUNKER: + case PROTECT_BURNING_BULWARK: + case PROTECT_OBSTRUCT: + case PROTECT_SILK_TRAP: + case PROTECT_MAX_GUARD: + return PROTECT_TYPE_SINGLE; + case PROTECT_WIDE_GUARD: + case PROTECT_QUICK_GUARD: + case PROTECT_CRAFTY_SHIELD: + case PROTECT_MAT_BLOCK: + return PROTECT_TYPE_SIDE; } - return ITEM_NO_EFFECT; + return FALSE; } -u32 RestoreWhiteHerbStats(u32 battler) +enum InverseBattleCheck { - u32 i, effect = 0; + INVERSE_BATTLE, + NOT_INVERSE_BATTLE +}; - for (i = 0; i < NUM_BATTLE_STATS; i++) - { - if (gBattleMons[battler].statStages[i] < DEFAULT_STAT_STAGE) - { - gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; - effect = ITEM_STATS_CHANGE; - } - } - if (effect != 0) +enum IronBallCheck +{ + CHECK_IRON_BALL, + IGNORE_IRON_BALL +}; + +// Only called directly when calculating damage type effectiveness, and Iron Ball's type effectiveness mechanics +static bool32 IsBattlerGroundedInverseCheck(u32 battler, enum Ability ability, enum HoldEffect holdEffect, enum InverseBattleCheck checkInverse, bool32 isAnticipation) +{ + if (holdEffect == HOLD_EFFECT_IRON_BALL) + return TRUE; + if (gFieldStatuses & STATUS_FIELD_GRAVITY && isAnticipation == FALSE) + return TRUE; + if (B_ROOTED_GROUNDING >= GEN_4 && gBattleMons[battler].volatiles.root) + return TRUE; + if (gBattleMons[battler].volatiles.smackDown) + return TRUE; + if (gBattleMons[battler].volatiles.telekinesis) + return FALSE; + if (gBattleMons[battler].volatiles.magnetRise) + return FALSE; + if (holdEffect == HOLD_EFFECT_AIR_BALLOON) + return FALSE; + if (ability == ABILITY_LEVITATE) + return FALSE; + if (IS_BATTLER_OF_TYPE(battler, TYPE_FLYING) && (checkInverse != INVERSE_BATTLE || !FlagGet(B_FLAG_INVERSE_BATTLE))) + return FALSE; + return TRUE; +} + +bool32 IsBattlerGrounded(u32 battler, enum Ability ability, enum HoldEffect holdEffect) +{ + return IsBattlerGroundedInverseCheck(battler, ability, holdEffect, NOT_INVERSE_BATTLE, FALSE); +} + +u32 GetMoveSlot(u16 *moves, u32 move) +{ + u32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) { - gLastUsedItem = gBattleMons[battler].item; - gBattleScripting.battler = battler; - gPotentialItemEffectBattler = battler; + if (moves[i] == move) + break; } - return effect; + return i; } -static u8 ItemEffectMoveEnd(u32 battler, enum ItemHoldEffect holdEffect) +u32 GetBattlerWeight(u32 battler) { - u8 effect = 0; + u32 i; + u32 weight = GetSpeciesWeight(gBattleMons[battler].species); + enum Ability ability = GetBattlerAbility(battler); + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); + + if (ability == ABILITY_HEAVY_METAL) + weight *= 2; + else if (ability == ABILITY_LIGHT_METAL) + weight /= 2; + + if (holdEffect == HOLD_EFFECT_FLOAT_STONE) + weight /= 2; - switch (holdEffect) + for (i = 0; i < gDisableStructs[battler].autotomizeCount; i++) { - case HOLD_EFFECT_MICLE_BERRY: - if (B_HP_BERRIES >= GEN_4) - effect = TrySetMicleBerry(battler, gLastUsedItem, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_RESTORE_HP: - if (B_HP_BERRIES >= GEN_4) - effect = ItemHealHp(battler, gLastUsedItem, ITEMEFFECT_NONE, FALSE); - break; - case HOLD_EFFECT_RESTORE_PCT_HP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = ItemHealHp(battler, gLastUsedItem, ITEMEFFECT_NONE, TRUE); - break; - case HOLD_EFFECT_RESTORE_PP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = ItemRestorePp(battler, gLastUsedItem, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_CONFUSE_SPICY: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_CONFUSE_DRY: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_CONFUSE_SWEET: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_CONFUSE_BITTER: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_CONFUSE_SOUR: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_ATTACK_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_DEFENSE_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_SPEED_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_SP_ATTACK_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_SP_DEFENSE_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_ENIGMA_BERRY: // consume and heal if hit by super effective move - effect = TrySetEnigmaBerry(battler); - break; - case HOLD_EFFECT_KEE_BERRY: // consume and boost defense if used physical move - effect = DamagedStatBoostBerryEffect(battler, STAT_DEF, DAMAGE_CATEGORY_PHYSICAL); - break; - case HOLD_EFFECT_MARANGA_BERRY: // consume and boost sp. defense if used special move - effect = DamagedStatBoostBerryEffect(battler, STAT_SPDEF, DAMAGE_CATEGORY_SPECIAL); - break; - case HOLD_EFFECT_RANDOM_STAT_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = RandomStatRaiseBerry(battler, gLastUsedItem, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_CURE_PAR: - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_PARALYSIS; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureParRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_PSN: - if (gBattleMons[battler].status1 & STATUS1_PSN_ANY && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryCurePsnRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_BRN: - if (gBattleMons[battler].status1 & STATUS1_BURN && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_BURN; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureBrnRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_FRZ: - if (gBattleMons[battler].status1 & STATUS1_FREEZE && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_FREEZE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet; - effect = ITEM_STATUS_CHANGE; - } - if (gBattleMons[battler].status1 & STATUS1_FROSTBITE && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_FROSTBITE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureFrbRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_SLP: - if (gBattleMons[battler].status1 & STATUS1_SLEEP && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_SLEEP; - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureSlpRet; - effect = ITEM_STATUS_CHANGE; - TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); - } - break; - case HOLD_EFFECT_CURE_CONFUSION: - if (gBattleMons[battler].status2 & STATUS2_CONFUSION && !UnnerveOn(battler, gLastUsedItem)) + if (weight > 1000) { - RemoveConfusionStatus(battler); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet; - effect = ITEM_EFFECT_OTHER; + weight -= 1000; } - break; - case HOLD_EFFECT_MENTAL_HERB: - if (GetMentalHerbEffect(battler)) + else if (weight <= 1000) { - gBattleScripting.savedBattler = gBattlerAttacker; - gBattlerAttacker = battler; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MentalHerbCureRet; - effect = ITEM_EFFECT_OTHER; + weight = 1; + break; } - break; - case HOLD_EFFECT_CURE_STATUS: - if ((gBattleMons[battler].status1 & STATUS1_ANY || gBattleMons[battler].status2 & STATUS2_CONFUSION) && !UnnerveOn(battler, gLastUsedItem)) - { - if (gBattleMons[battler].status1 & STATUS1_PSN_ANY) - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + } - if (gBattleMons[battler].status1 & STATUS1_SLEEP) - { - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); - } + if (weight == 0) + weight = 1; + + return weight; +} - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); +u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc) +{ + enum Stat i; + u32 count = 0; - if (gBattleMons[battler].status1 & STATUS1_BURN) - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + for (i = 0; i < NUM_BATTLE_STATS; i++) + { + if ((i == STAT_ACC || i == STAT_EVASION) && !countEvasionAcc) + continue; + if (gBattleMons[battler].statStages[i] > DEFAULT_STAT_STAGE) // Stat is increased. + count += gBattleMons[battler].statStages[i] - DEFAULT_STAT_STAGE; + } - if (gBattleMons[battler].status1 & STATUS1_FREEZE || gBattleMons[battler].status1 & STATUS1_FROSTBITE) - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + return count; +} - if (gBattleMons[battler].status2 & STATUS2_CONFUSION) - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); +bool32 BattlerHasCopyableChanges(u32 battler) +{ + u32 i; - gBattleMons[battler].status1 = 0; - RemoveConfusionStatus(battler); - BattleScriptPushCursor(); - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; - gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CRITICAL_UP: // lansat berry - if (B_BERRIES_INSTANT >= GEN_4 - && !(gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) - && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, gLastUsedItem), gLastUsedItem)) - { - gBattleMons[battler].status2 |= STATUS2_FOCUS_ENERGY; - gBattleScripting.battler = battler; - gPotentialItemEffectBattler = battler; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryFocusEnergyRet; - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_BERSERK_GENE: - effect = ConsumeBerserkGene(battler, ITEMEFFECT_NONE); - break; - case HOLD_EFFECT_MIRROR_HERB: - effect = TryConsumeMirrorHerb(battler, ITEMEFFECT_NONE); - break; - default: - break; + for (i = 0; i < NUM_BATTLE_STATS; i++) + { + if (gBattleMons[battler].statStages[i] != DEFAULT_STAT_STAGE) + return TRUE; } - return effect; + if (gBattleMons[battler].volatiles.focusEnergy + || gBattleMons[battler].volatiles.dragonCheer + || gBattleMons[battler].volatiles.bonusCritStages != 0) + return TRUE; + + return FALSE; } -static inline bool32 TryCureStatus(u32 battler, enum ItemCaseId caseId) +u32 GetMoveTargetCount(struct DamageContext *ctx) { - u32 effect = ITEM_NO_EFFECT; - u32 string = 0; + u32 battlerAtk = ctx->battlerAtk; + u32 battlerDef = ctx->battlerDef; + u32 move = ctx->move; - if ((gBattleMons[battler].status1 & STATUS1_ANY || gBattleMons[battler].status2 & STATUS2_CONFUSION) && !UnnerveOn(battler, gLastUsedItem)) - { - if (gBattleMons[battler].status1 & STATUS1_PSN_ANY) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - string++; - } - if (gBattleMons[battler].status1 & STATUS1_SLEEP) - { - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - string++; - TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); - } - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - string++; - } - if (gBattleMons[battler].status1 & STATUS1_BURN) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - string++; - } - if (gBattleMons[battler].status1 & STATUS1_FREEZE || gBattleMons[battler].status1 & STATUS1_FROSTBITE) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - string++; - } - if (gBattleMons[battler].status2 & STATUS2_CONFUSION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - string++; - } - if (string <= 1) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; - gBattleMons[battler].status1 = 0; - RemoveConfusionStatus(battler); - if (caseId == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseId == ITEMEFFECT_NORMAL) - { - BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); - } - else - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; - } - effect = ITEM_STATUS_CHANGE; - } - - return effect; -} - -u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn) -{ - u32 moveType = 0; - enum ItemEffect effect = ITEM_NO_EFFECT; - enum ItemHoldEffect battlerHoldEffect = 0, atkHoldEffect = 0; - u32 atkHoldEffectParam = 0; - u32 atkItem = 0; - - if (caseID != ITEMEFFECT_USE_LAST_ITEM) - { - gLastUsedItem = gBattleMons[battler].item; - battlerHoldEffect = GetBattlerHoldEffect(battler, TRUE); - } - - atkItem = gBattleMons[gBattlerAttacker].item; - atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - atkHoldEffectParam = GetBattlerHoldEffectParam(gBattlerAttacker); - - switch (caseID) - { - case ITEMEFFECT_NONE: - break; - case ITEMEFFECT_ON_SWITCH_IN: - case ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN: - if (!gSpecialStatuses[battler].switchInItemDone) - { - switch (battlerHoldEffect) - { - case HOLD_EFFECT_DOUBLE_PRIZE: - if (IsOnPlayerSide(battler) && !gBattleStruct->moneyMultiplierItem) - { - gBattleStruct->moneyMultiplier *= 2; - gBattleStruct->moneyMultiplierItem = 1; - } - break; - case HOLD_EFFECT_WHITE_HERB: - effect = RestoreWhiteHerbStats(battler); - if (effect != 0) - BattleScriptExecute(BattleScript_WhiteHerbEnd2); - break; - case HOLD_EFFECT_CONFUSE_SPICY: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, caseID); - break; - case HOLD_EFFECT_CONFUSE_DRY: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, caseID); - break; - case HOLD_EFFECT_CONFUSE_SWEET: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, caseID); - break; - case HOLD_EFFECT_CONFUSE_BITTER: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, caseID); - break; - case HOLD_EFFECT_CONFUSE_SOUR: - if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, caseID); - break; - case HOLD_EFFECT_ATTACK_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, caseID); - break; - case HOLD_EFFECT_DEFENSE_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, caseID); - break; - case HOLD_EFFECT_SPEED_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, caseID); - break; - case HOLD_EFFECT_SP_ATTACK_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, caseID); - break; - case HOLD_EFFECT_SP_DEFENSE_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, caseID); - break; - case HOLD_EFFECT_CRITICAL_UP: - if (B_BERRIES_INSTANT >= GEN_4 - && !(gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) - && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, gLastUsedItem), gLastUsedItem)) - { - gBattleMons[battler].status2 |= STATUS2_FOCUS_ENERGY; - gBattleScripting.battler = battler; - BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_RANDOM_STAT_UP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = RandomStatRaiseBerry(battler, gLastUsedItem, caseID); - break; - case HOLD_EFFECT_CURE_PAR: - if (B_BERRIES_INSTANT >= GEN_4 - && gBattleMons[battler].status1 & STATUS1_PARALYSIS - && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_PARALYSIS; - BattleScriptExecute(BattleScript_BerryCurePrlzEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_PSN: - if (B_BERRIES_INSTANT >= GEN_4 - && (gBattleMons[battler].status1 & STATUS1_PSN_ANY) - && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); - BattleScriptExecute(BattleScript_BerryCurePsnEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_BRN: - if (B_BERRIES_INSTANT >= GEN_4 - && (gBattleMons[battler].status1 & STATUS1_BURN) - && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_BURN; - BattleScriptExecute(BattleScript_BerryCureBrnEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_FRZ: - if (B_BERRIES_INSTANT >= GEN_4 - && (gBattleMons[battler].status1 & STATUS1_FREEZE) - && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_FREEZE; - BattleScriptExecute(BattleScript_BerryCureFrzEnd2); - effect = ITEM_STATUS_CHANGE; - } - if (B_BERRIES_INSTANT >= GEN_4 - && (gBattleMons[battler].status1 & STATUS1_FROSTBITE) - && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_FROSTBITE; - BattleScriptExecute(BattleScript_BerryCureFrbEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_SLP: - if (B_BERRIES_INSTANT >= GEN_4 - && (gBattleMons[battler].status1 & STATUS1_SLEEP) - && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_SLEEP; - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - BattleScriptExecute(BattleScript_BerryCureSlpEnd2); - effect = ITEM_STATUS_CHANGE; - TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); - } - break; - case HOLD_EFFECT_CURE_STATUS: - if (B_BERRIES_INSTANT >= GEN_4) - effect = TryCureStatus(battler, caseID); - break; - case HOLD_EFFECT_RESTORE_HP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = ItemHealHp(battler, gLastUsedItem, caseID, FALSE); - break; - case HOLD_EFFECT_RESTORE_PCT_HP: - if (B_BERRIES_INSTANT >= GEN_4) - effect = ItemHealHp(battler, gLastUsedItem, caseID, TRUE); - break; - case HOLD_EFFECT_AIR_BALLOON: - effect = ITEM_EFFECT_OTHER; - gBattleScripting.battler = battler; - BattleScriptPushCursorAndCallback(BattleScript_AirBaloonMsgIn); - RecordItemEffectBattle(battler, HOLD_EFFECT_AIR_BALLOON); - break; - case HOLD_EFFECT_ROOM_SERVICE: - if (TryRoomService(battler)) - { - BattleScriptExecute(BattleScript_ConsumableStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } - break; - case HOLD_EFFECT_SEEDS: - switch (GetBattlerHoldEffectParam(battler)) - { - case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, gLastUsedItem, caseID); - break; - case HOLD_EFFECT_PARAM_GRASSY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, gLastUsedItem, caseID); - break; - case HOLD_EFFECT_PARAM_MISTY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, gLastUsedItem, caseID); - break; - case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, gLastUsedItem, caseID); - break; - } - break; - case HOLD_EFFECT_EJECT_PACK: - effect = TryEjectPack(battler, caseID); - break; - case HOLD_EFFECT_BERSERK_GENE: - effect = ConsumeBerserkGene(battler, caseID); - break; - case HOLD_EFFECT_MIRROR_HERB: - effect = TryConsumeMirrorHerb(battler, caseID); - break; - case HOLD_EFFECT_BOOSTER_ENERGY: - effect = TryBoosterEnergy(battler, caseID); - break; - default: - break; - } - if (effect != 0) - { - gSpecialStatuses[battler].switchInItemDone = TRUE; - gBattlerAttacker = gPotentialItemEffectBattler = gBattleScripting.battler = battler; - if (effect == ITEM_STATUS_CHANGE) - { - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - } - } - } - break; - case ITEMEFFECT_NORMAL: - case ITEMEFFECT_TRY_HEALING: - if (gBattleMons[battler].hp) - { - switch (battlerHoldEffect) - { - case HOLD_EFFECT_RESTORE_HP: - if (!moveTurn) - effect = ItemHealHp(battler, gLastUsedItem, caseID, FALSE); - break; - case HOLD_EFFECT_RESTORE_PCT_HP: - if (!moveTurn) - effect = ItemHealHp(battler, gLastUsedItem, caseID, TRUE); - break; - case HOLD_EFFECT_RESTORE_PP: - if (!moveTurn) - effect = ItemRestorePp(battler, gLastUsedItem, caseID); - break; - case HOLD_EFFECT_WHITE_HERB: - effect = RestoreWhiteHerbStats(battler); - if (effect != 0) - BattleScriptExecute(BattleScript_WhiteHerbEnd2); - break; - case HOLD_EFFECT_BLACK_SLUDGE: - if (IS_BATTLER_OF_TYPE(battler, TYPE_POISON)) - { - goto LEFTOVERS; - } - else if (GetBattlerAbility(battler) != ABILITY_MAGIC_GUARD && !moveTurn) - { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - BattleScriptExecute(BattleScript_ItemHurtEnd2); - effect = ITEM_HP_CHANGE; - RecordItemEffectBattle(battler, battlerHoldEffect); - PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); - } - break; - case HOLD_EFFECT_LEFTOVERS: - LEFTOVERS: - if (gBattleMons[battler].hp < gBattleMons[battler].maxHP && !moveTurn - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) - { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - gBattleStruct->moveDamage[battler] *= -1; - BattleScriptExecute(BattleScript_ItemHealHP_End2); - effect = ITEM_HP_CHANGE; - RecordItemEffectBattle(battler, battlerHoldEffect); - } - break; - case HOLD_EFFECT_CONFUSE_SPICY: - if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, caseID); - break; - case HOLD_EFFECT_CONFUSE_DRY: - if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, caseID); - break; - case HOLD_EFFECT_CONFUSE_SWEET: - if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, caseID); - break; - case HOLD_EFFECT_CONFUSE_BITTER: - if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, caseID); - break; - case HOLD_EFFECT_CONFUSE_SOUR: - if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, caseID); - break; - case HOLD_EFFECT_ATTACK_UP: - if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, caseID); - break; - case HOLD_EFFECT_DEFENSE_UP: - if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, caseID); - break; - case HOLD_EFFECT_SPEED_UP: - if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, caseID); - break; - case HOLD_EFFECT_SP_ATTACK_UP: - if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, caseID); - break; - case HOLD_EFFECT_SP_DEFENSE_UP: - if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, caseID); - break; - case HOLD_EFFECT_CRITICAL_UP: - if (!moveTurn && !(gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) - && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, gLastUsedItem), gLastUsedItem)) - { - gBattleMons[battler].status2 |= STATUS2_FOCUS_ENERGY; - gBattleScripting.battler = battler; - BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_RANDOM_STAT_UP: - if (!moveTurn) - effect = RandomStatRaiseBerry(battler, gLastUsedItem, caseID); - break; - case HOLD_EFFECT_CURE_PAR: - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_PARALYSIS; - BattleScriptExecute(BattleScript_BerryCurePrlzEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_PSN: - if (gBattleMons[battler].status1 & STATUS1_PSN_ANY && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); - BattleScriptExecute(BattleScript_BerryCurePsnEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_BRN: - if (gBattleMons[battler].status1 & STATUS1_BURN && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_BURN; - BattleScriptExecute(BattleScript_BerryCureBrnEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_FRZ: - if (gBattleMons[battler].status1 & STATUS1_FREEZE && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_FREEZE; - BattleScriptExecute(BattleScript_BerryCureFrzEnd2); - effect = ITEM_STATUS_CHANGE; - } - if (gBattleMons[battler].status1 & STATUS1_FROSTBITE && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_FROSTBITE; - BattleScriptExecute(BattleScript_BerryCureFrbEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_SLP: - if (gBattleMons[battler].status1 & STATUS1_SLEEP && !UnnerveOn(battler, gLastUsedItem)) - { - gBattleMons[battler].status1 &= ~STATUS1_SLEEP; - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - BattleScriptExecute(BattleScript_BerryCureSlpEnd2); - effect = ITEM_STATUS_CHANGE; - TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); - } - break; - case HOLD_EFFECT_CURE_CONFUSION: - if (gBattleMons[battler].status2 & STATUS2_CONFUSION && !UnnerveOn(battler, gLastUsedItem)) - { - RemoveConfusionStatus(battler); - BattleScriptExecute(BattleScript_BerryCureConfusionEnd2); - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_CURE_STATUS: - effect = TryCureStatus(battler, caseID); - break; - case HOLD_EFFECT_MENTAL_HERB: - if (GetMentalHerbEffect(battler)) - { - gBattleScripting.savedBattler = gBattlerAttacker; - gBattlerAttacker = battler; - BattleScriptExecute(BattleScript_MentalHerbCureEnd2); - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_MICLE_BERRY: - if (!moveTurn) - effect = TrySetMicleBerry(battler, gLastUsedItem, caseID); - break; - case HOLD_EFFECT_BERSERK_GENE: - effect = ConsumeBerserkGene(battler, caseID); - break; - case HOLD_EFFECT_MIRROR_HERB: - effect = TryConsumeMirrorHerb(battler, caseID); - break; - case HOLD_EFFECT_BOOSTER_ENERGY: - effect = TryBoosterEnergy(battler, caseID); - break; - default: - break; - } - - if (effect != 0) - { - gBattlerAttacker = gPotentialItemEffectBattler = gBattleScripting.battler = battler; - if (effect == ITEM_STATUS_CHANGE) - { - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - } - } - } - break; - case ITEMEFFECT_USE_LAST_ITEM: - effect = ItemEffectMoveEnd(battler, GetItemHoldEffect(gLastUsedItem)); - gBattleScripting.overrideBerryRequirements = 2; // to exit VARIOUS_CONSUME_BERRIES - if (effect) - { - gPotentialItemEffectBattler = gBattleScripting.battler = battler; - if (effect == ITEM_STATUS_CHANGE) - { - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - } - break; - } - break; - case ITEMEFFECT_MOVE_END: - for (battler = 0; battler < gBattlersCount; battler++) - { - gLastUsedItem = gBattleMons[battler].item; - effect = ItemEffectMoveEnd(battler, GetBattlerHoldEffect(battler, TRUE)); - if (effect) - { - gPotentialItemEffectBattler = gBattleScripting.battler = battler; - if (effect == ITEM_STATUS_CHANGE) - { - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - } - break; - } - } - break; - case ITEMEFFECT_KINGSROCK: - // Occur on each hit of a multi-strike move - switch (atkHoldEffect) - { - case HOLD_EFFECT_FLINCH: - { - u16 ability = GetBattlerAbility(gBattlerAttacker); - if (B_SERENE_GRACE_BOOST >= GEN_5 && ability == ABILITY_SERENE_GRACE) - atkHoldEffectParam *= 2; - if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_RAINBOW && gCurrentMove != MOVE_SECRET_POWER) - atkHoldEffectParam *= 2; - if (IsBattlerTurnDamaged(gBattlerTarget) - && !MoveIgnoresKingsRock(gCurrentMove) - && gBattleMons[gBattlerTarget].hp - && RandomPercentage(RNG_HOLD_EFFECT_FLINCH, atkHoldEffectParam) - && ability != ABILITY_STENCH) - { - gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH; - BattleScriptPushCursor(); - SetMoveEffect(FALSE, FALSE); - BattleScriptPop(); - } - } - break; - case HOLD_EFFECT_BLUNDER_POLICY: - if (gBattleStruct->blunderPolicy - && IsBattlerAlive(gBattlerAttacker) - && CompareStat(gBattlerAttacker, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) - { - gBattleStruct->blunderPolicy = FALSE; - gLastUsedItem = atkItem; - SET_STATCHANGER(STAT_SPEED, 2, FALSE); - effect = ITEM_STATS_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AttackerItemStatRaise; - } - break; - default: - break; - } - break; - case ITEMEFFECT_LIFEORB_SHELLBELL: - // Occur after the final hit of a multi-strike move - switch (atkHoldEffect) - { - case HOLD_EFFECT_SHELL_BELL: - if (gBattleScripting.savedDmg > 0 - && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && gBattlerAttacker != gBattlerTarget - && !IsBattlerAtMaxHp(gBattlerAttacker) - && IsBattlerAlive(gBattlerAttacker) - && GetMoveEffect(gCurrentMove) != EFFECT_FUTURE_SIGHT - && GetMoveEffect(gCurrentMove) != EFFECT_PAIN_SPLIT - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) - { - gLastUsedItem = atkItem; - gPotentialItemEffectBattler = gBattlerAttacker; - gBattleScripting.battler = gBattlerAttacker; - gBattleStruct->moveDamage[gBattlerAttacker] = (gBattleScripting.savedDmg / atkHoldEffectParam) * -1; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = -1; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret; - effect = ITEM_HP_CHANGE; - } - break; - case HOLD_EFFECT_LIFE_ORB: - if (IsBattlerAlive(gBattlerAttacker) - && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && !IsBattleMoveStatus(gCurrentMove) - && (IsBattlerTurnDamaged(gBattlerTarget) || !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) // Needs the second check in case of Substitute - && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && !IsFutureSightAttackerInParty(gBattlerAttacker, gBattlerTarget, gCurrentMove)) - { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 10; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - effect = ITEM_HP_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ItemHurtRet; - gLastUsedItem = atkItem; - } - break; - case HOLD_EFFECT_THROAT_SPRAY: // Does NOT need to be a damaging move - if (IsSoundMove(gCurrentMove) - && IsBattlerAlive(gBattlerAttacker) - && IsAnyTargetAffected(gBattlerAttacker) - && CompareStat(gBattlerAttacker, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN) - && !NoAliveMonsForEitherParty()) // Don't activate if battle will end - { - gLastUsedItem = atkItem; - gBattleScripting.battler = gBattlerAttacker; - SET_STATCHANGER(STAT_SPATK, 1, FALSE); - effect = ITEM_STATS_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AttackerItemStatRaise; - } - break; - default: - break; - } - break; - case ITEMEFFECT_TARGET: - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) - { - moveType = GetBattleMoveType(gCurrentMove); - switch (battlerHoldEffect) - { - case HOLD_EFFECT_AIR_BALLOON: - if (IsBattlerTurnDamaged(gBattlerTarget)) - { - effect = ITEM_EFFECT_OTHER; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AirBaloonMsgPop; - } - break; - case HOLD_EFFECT_ROCKY_HELMET: - if (IsBattlerTurnDamaged(gBattlerTarget) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) - && IsBattlerAlive(gBattlerAttacker) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) - { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 6; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - effect = ITEM_HP_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_RockyHelmetActivates; - PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); - RecordItemEffectBattle(battler, HOLD_EFFECT_ROCKY_HELMET); - } - break; - case HOLD_EFFECT_WEAKNESS_POLICY: - if (IsBattlerAlive(battler) - && IsBattlerTurnDamaged(gBattlerTarget) - && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_SUPER_EFFECTIVE) - { - effect = ITEM_STATS_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_WeaknessPolicy; - } - break; - case HOLD_EFFECT_SNOWBALL: - if (IsBattlerAlive(battler) - && IsBattlerTurnDamaged(gBattlerTarget) - && moveType == TYPE_ICE) - { - effect = ITEM_STATS_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; - SET_STATCHANGER(STAT_ATK, 1, FALSE); - } - break; - case HOLD_EFFECT_LUMINOUS_MOSS: - if (IsBattlerAlive(battler) - && IsBattlerTurnDamaged(gBattlerTarget) - && moveType == TYPE_WATER) - { - effect = ITEM_STATS_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; - SET_STATCHANGER(STAT_SPDEF, 1, FALSE); - } - break; - case HOLD_EFFECT_CELL_BATTERY: - if (IsBattlerAlive(battler) - && IsBattlerTurnDamaged(gBattlerTarget) - && moveType == TYPE_ELECTRIC) - { - effect = ITEM_STATS_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; - SET_STATCHANGER(STAT_ATK, 1, FALSE); - } - break; - case HOLD_EFFECT_ABSORB_BULB: - if (IsBattlerAlive(battler) - && IsBattlerTurnDamaged(gBattlerTarget) - && moveType == TYPE_WATER) - { - effect = ITEM_STATS_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_TargetItemStatRaise; - SET_STATCHANGER(STAT_SPATK, 1, FALSE); - } - break; - case HOLD_EFFECT_ENIGMA_BERRY: // consume and heal if hit by super effective move - effect = TrySetEnigmaBerry(battler); - break; - case HOLD_EFFECT_JABOCA_BERRY: // consume and damage attacker if used physical move - if (IsBattlerAlive(gBattlerAttacker) - && IsBattlerTurnDamaged(gBattlerTarget) - && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) - && IsBattleMovePhysical(gCurrentMove) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) - { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - if (GetBattlerAbility(battler) == ABILITY_RIPEN) - gBattleStruct->moveDamage[gBattlerAttacker] *= 2; - - effect = ITEM_HP_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates; - PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); - RecordItemEffectBattle(battler, HOLD_EFFECT_JABOCA_BERRY); - } - break; - case HOLD_EFFECT_ROWAP_BERRY: // consume and damage attacker if used special move - if (IsBattlerAlive(gBattlerAttacker) - && IsBattlerTurnDamaged(gBattlerTarget) - && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) - && IsBattleMoveSpecial(gCurrentMove) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) - { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - if (GetBattlerAbility(battler) == ABILITY_RIPEN) - gBattleStruct->moveDamage[gBattlerAttacker] *= 2; - - effect = ITEM_HP_CHANGE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates; - PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); - RecordItemEffectBattle(battler, HOLD_EFFECT_ROWAP_BERRY); - } - break; - case HOLD_EFFECT_KEE_BERRY: // consume and boost defense if used physical move - effect = DamagedStatBoostBerryEffect(battler, STAT_DEF, DAMAGE_CATEGORY_PHYSICAL); - break; - case HOLD_EFFECT_MARANGA_BERRY: // consume and boost sp. defense if used special move - effect = DamagedStatBoostBerryEffect(battler, STAT_SPDEF, DAMAGE_CATEGORY_SPECIAL); - break; - case HOLD_EFFECT_CURE_STATUS: // only Toxic Chain's interaction with Knock Off - case HOLD_EFFECT_CURE_PSN: - if (gBattleMons[battler].status1 & STATUS1_PSN_ANY && !UnnerveOn(battler, gLastUsedItem) && GetBattlerAbility(gBattlerAttacker) == ABILITY_TOXIC_CHAIN && GetMoveEffect(gCurrentMove) == EFFECT_KNOCK_OFF) - { - gBattleScripting.battler = battler; - gBattleMons[battler].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER); - BattleScriptExecute(BattleScript_BerryCurePsnEnd2); - BtlController_EmitSetMonData(battler, 0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_STICKY_BARB: - if (IsBattlerTurnDamaged(gBattlerTarget) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS - && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) - && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) - && IsBattlerAlive(gBattlerAttacker) - && CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) - && gBattleMons[gBattlerAttacker].item == ITEM_NONE) - { - // No sticky hold checks. - gEffectBattler = battler; // gEffectBattler = target - StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker takes target's barb - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_StickyBarbTransfer; - effect = ITEM_EFFECT_OTHER; - } - break; - default: - break; - } - } - break; - case ITEMEFFECT_ORBS: - { - u16 battlerAbility = GetBattlerAbility(battler); - switch (battlerHoldEffect) - { - case HOLD_EFFECT_TOXIC_ORB: - if (CanBePoisoned(battler, battler, battlerAbility, battlerAbility)) // Can corrosion trigger toxic orb on itself? - { - effect = ITEM_STATUS_CHANGE; - gBattleMons[battler].status1 = STATUS1_TOXIC_POISON; - BattleScriptExecute(BattleScript_ToxicOrb); - RecordItemEffectBattle(battler, battlerHoldEffect); - } - break; - case HOLD_EFFECT_FLAME_ORB: - if (CanBeBurned(battler, battler, battlerAbility)) - { - effect = ITEM_STATUS_CHANGE; - gBattleMons[battler].status1 = STATUS1_BURN; - BattleScriptExecute(BattleScript_FlameOrb); - RecordItemEffectBattle(battler, battlerHoldEffect); - } - break; - case HOLD_EFFECT_STICKY_BARB: // Not an orb per se, but similar effect, and needs to NOT activate with pickpocket - if (battlerAbility != ABILITY_MAGIC_GUARD) - { - gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8; - if (gBattleStruct->moveDamage[battler] == 0) - gBattleStruct->moveDamage[battler] = 1; - BattleScriptExecute(BattleScript_ItemHurtEnd2); - effect = ITEM_HP_CHANGE; - RecordItemEffectBattle(battler, battlerHoldEffect); - PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem); - } - break; - default: - break; - } - - if (effect == ITEM_STATUS_CHANGE) - { - BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); - MarkBattlerForControllerExec(battler); - } - } - break; - case ITEMEFFECT_STATS_CHANGED: - switch (battlerHoldEffect) - { - case HOLD_EFFECT_WHITE_HERB: - effect = RestoreWhiteHerbStats(battler); - if (effect != 0) - { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; - } - break; - default: - break; - } - break; - } - - // Berry was successfully used on a Pokemon. - if (effect && (gLastUsedItem >= FIRST_BERRY_INDEX && gLastUsedItem <= LAST_BERRY_INDEX)) - gBattleStruct->partyState[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]].ateBerry = TRUE; - - return effect; -} - -void ClearVariousBattlerFlags(u32 battler) -{ - gDisableStructs[battler].furyCutterCounter = 0; - gBattleMons[battler].status2 &= ~STATUS2_DESTINY_BOND; - gStatuses3[battler] &= ~STATUS3_GRUDGE; - gStatuses4[battler] &= ~ STATUS4_GLAIVE_RUSH; -} - -void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands -{ - if (gBattleControllerExecFlags == 0) - gBattleScriptingCommandsTable[*gBattlescriptCurrInstr](); -} - -u32 SetRandomTarget(u32 battlerAtk) -{ - u32 target; - static const u8 targets[2][2] = - { - [B_SIDE_PLAYER] = {B_POSITION_OPPONENT_LEFT, B_POSITION_OPPONENT_RIGHT}, - [B_SIDE_OPPONENT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT}, - }; - - if (IsDoubleBattle()) - { - target = GetBattlerAtPosition(targets[GetBattlerSide(battlerAtk)][RandomUniform(RNG_RANDOM_TARGET, 0, 1)]); - if (!IsBattlerAlive(target)) - target ^= BIT_FLANK; - } - else - { - target = GetBattlerAtPosition(targets[GetBattlerSide(battlerAtk)][0]); - } - - return target; -} - -u32 GetBattleMoveTarget(u16 move, u8 setTarget) -{ - u8 targetBattler = 0; - u32 moveTarget, side; - u32 moveType = GetBattleMoveType(move); - - if (setTarget != NO_TARGET_OVERRIDE) - moveTarget = setTarget - 1; - else - moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); - - switch (moveTarget) - { - case MOVE_TARGET_SELECTED: - case MOVE_TARGET_OPPONENT: - side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); - if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) - { - targetBattler = gSideTimers[side].followmeTarget; - } - else - { - u32 battlerAbilityOnField = 0; - - targetBattler = SetRandomTarget(gBattlerAttacker); - if (moveType == TYPE_ELECTRIC && GetBattlerAbility(targetBattler) != ABILITY_LIGHTNING_ROD) - { - if (B_REDIRECT_ABILITY_ALLIES >= GEN_4) - battlerAbilityOnField = IsAbilityOnField(ABILITY_LIGHTNING_ROD); - else - battlerAbilityOnField = IsAbilityOnOpposingSide(targetBattler, ABILITY_LIGHTNING_ROD); - - if (battlerAbilityOnField > 0) - { - targetBattler = battlerAbilityOnField - 1; - RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability); - gSpecialStatuses[targetBattler].lightningRodRedirected = TRUE; - } - } - else if (moveType == TYPE_WATER && GetBattlerAbility(targetBattler) != ABILITY_STORM_DRAIN) - { - if (B_REDIRECT_ABILITY_ALLIES >= GEN_4) - battlerAbilityOnField = IsAbilityOnField(ABILITY_STORM_DRAIN); - else - battlerAbilityOnField = IsAbilityOnOpposingSide(targetBattler, ABILITY_STORM_DRAIN); - - if (battlerAbilityOnField > 0) - { - targetBattler = battlerAbilityOnField - 1; - RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability); - gSpecialStatuses[targetBattler].lightningRodRedirected = TRUE; - } - } - } - break; - case MOVE_TARGET_DEPENDS: - case MOVE_TARGET_BOTH: - case MOVE_TARGET_FOES_AND_ALLY: - targetBattler = GetOpposingSideBattler(gBattlerAttacker); - if (!IsBattlerAlive(targetBattler)) - targetBattler ^= BIT_FLANK; - break; - case MOVE_TARGET_OPPONENTS_FIELD: - targetBattler = GetOpposingSideBattler(gBattlerAttacker); - break; - case MOVE_TARGET_RANDOM: - side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); - if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) - targetBattler = gSideTimers[side].followmeTarget; - else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) - targetBattler = SetRandomTarget(gBattlerAttacker); - else - targetBattler = GetOpposingSideBattler(gBattlerAttacker); - break; - case MOVE_TARGET_USER: - default: - targetBattler = gBattlerAttacker; - break; - case MOVE_TARGET_ALLY: - if (IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker))) - targetBattler = BATTLE_PARTNER(gBattlerAttacker); - else - targetBattler = gBattlerAttacker; - break; - } - - gBattleStruct->moveTarget[gBattlerAttacker] = targetBattler; - - return targetBattler; -} - -u8 GetAttackerObedienceForAction() -{ - s32 rnd; - s32 calc; - u8 obedienceLevel = 0; - u8 levelReferenced; - - if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) - return OBEYS; - if (BattlerHasAi(gBattlerAttacker)) - return OBEYS; - - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_RIGHT) - return OBEYS; - if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - return OBEYS; - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - return OBEYS; - if (B_OBEDIENCE_MECHANICS < GEN_8 && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) - return OBEYS; - if (FlagGet(FLAG_BADGE08_GET)) // Rain Badge, ignore obedience altogether - return OBEYS; - - obedienceLevel = 10; - - if (FlagGet(FLAG_BADGE01_GET)) // Stone Badge - obedienceLevel = 20; - if (FlagGet(FLAG_BADGE02_GET)) // Knuckle Badge - obedienceLevel = 30; - if (FlagGet(FLAG_BADGE03_GET)) // Dynamo Badge - obedienceLevel = 40; - if (FlagGet(FLAG_BADGE04_GET)) // Heat Badge - obedienceLevel = 50; - if (FlagGet(FLAG_BADGE05_GET)) // Balance Badge - obedienceLevel = 60; - if (FlagGet(FLAG_BADGE06_GET)) // Feather Badge - obedienceLevel = 70; - if (FlagGet(FLAG_BADGE07_GET)) // Mind Badge - obedienceLevel = 80; - - if (B_OBEDIENCE_MECHANICS >= GEN_8 - && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) - levelReferenced = gBattleMons[gBattlerAttacker].metLevel; - else - levelReferenced = gBattleMons[gBattlerAttacker].level; - - if (levelReferenced <= obedienceLevel) - return OBEYS; - - rnd = Random(); - calc = (levelReferenced + obedienceLevel) * (rnd & 255) >> 8; - if (calc < obedienceLevel) - return OBEYS; - - // Clear the Z-Move flags if the battler is disobedient as to not waste the Z-Move - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) - { - gBattleStruct->gimmick.activated[gBattlerAttacker][GIMMICK_Z_MOVE] = FALSE; - gBattleStruct->gimmick.activeGimmick[GetBattlerSide(gBattlerAttacker)][gBattlerPartyIndexes[gBattlerAttacker]] = GIMMICK_NONE; - } - - // is not obedient - enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); - if (moveEffect == EFFECT_RAGE) - gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RAGE; - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (moveEffect == EFFECT_SNORE || moveEffect == EFFECT_SLEEP_TALK)) - return DISOBEYS_WHILE_ASLEEP; - - calc = (levelReferenced + obedienceLevel) * ((rnd >> 8) & 255) >> 8; - if (calc < obedienceLevel) - { - calc = CheckMoveLimitations(gBattlerAttacker, 1u << gCurrMovePos, MOVE_LIMITATIONS_ALL); - if (calc == ALL_MOVES_MASK) // all moves cannot be used - return DISOBEYS_LOAFS; - else // use a random move - do - gCurrMovePos = gChosenMovePos = MOD(Random(), MAX_MON_MOVES); - while ((1u << gCurrMovePos) & calc); - return DISOBEYS_RANDOM_MOVE; - } - else - { - obedienceLevel = levelReferenced - obedienceLevel; - - calc = ((rnd >> 16) & 255); - if (calc < obedienceLevel && CanBeSlept(gBattlerAttacker, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), NOT_BLOCKED_BY_SLEEP_CLAUSE)) - { - // try putting asleep - int i; - for (i = 0; i < gBattlersCount; i++) - if (gBattleMons[i].status2 & STATUS2_UPROAR) - break; - if (i == gBattlersCount) - return DISOBEYS_FALL_ASLEEP; - } - calc -= obedienceLevel; - if (calc < obedienceLevel) - return DISOBEYS_HITS_SELF; - else - return DISOBEYS_LOAFS; - } -} - -enum ItemHoldEffect GetBattlerHoldEffect(u32 battler, bool32 checkNegating) -{ - return GetBattlerHoldEffectInternal(battler, checkNegating, TRUE); -} - -enum ItemHoldEffect GetBattlerHoldEffectIgnoreAbility(u32 battler, bool32 checkNegating) -{ - return GetBattlerHoldEffectInternal(battler, checkNegating, FALSE); -} - -enum ItemHoldEffect GetBattlerHoldEffectInternal(u32 battler, bool32 checkNegating, bool32 checkAbility) -{ - if (checkNegating) - { - if (gStatuses3[battler] & STATUS3_EMBARGO) - return HOLD_EFFECT_NONE; - if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) - return HOLD_EFFECT_NONE; - if (checkAbility && GetBattlerAbility(battler) == ABILITY_KLUTZ && !(gStatuses3[battler] & STATUS3_GASTRO_ACID)) - return HOLD_EFFECT_NONE; - } - - gPotentialItemEffectBattler = battler; - - if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) - return gEnigmaBerries[battler].holdEffect; - else - return GetItemHoldEffect(gBattleMons[battler].item); -} - -static u32 GetBattlerItemHoldEffectParam(u32 battler, u32 item) -{ - if (item == ITEM_ENIGMA_BERRY_E_READER) - return gEnigmaBerries[battler].holdEffectParam; - else - return GetItemHoldEffectParam(item); -} - -u32 GetBattlerHoldEffectParam(u32 battler) -{ - if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) - return gEnigmaBerries[battler].holdEffectParam; - else - return GetItemHoldEffectParam(gBattleMons[battler].item); -} - -bool32 IsMoveMakingContact(u32 move, u32 battlerAtk) -{ - enum ItemHoldEffect atkHoldEffect = GetBattlerHoldEffect(battlerAtk, TRUE); - - if (!MoveMakesContact(move)) - { - if (GetMoveEffect(move) == EFFECT_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL) - return TRUE; - else - return FALSE; - } - else if ((atkHoldEffect == HOLD_EFFECT_PUNCHING_GLOVE && IsPunchingMove(move)) - || GetBattlerAbility(battlerAtk) == ABILITY_LONG_REACH) - { - return FALSE; - } - else - { - return TRUE; - } -} - -static inline bool32 IsSideProtected(u32 battler, enum ProtectMethod method) -{ - return gProtectStructs[battler].protected == method - || gProtectStructs[BATTLE_PARTNER(battler)].protected == method; -} - -bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) -{ - if (gProtectStructs[battlerDef].protected == PROTECT_NONE - && gProtectStructs[BATTLE_PARTNER(battlerDef)].protected == PROTECT_NONE) - return FALSE; - - if (gProtectStructs[battlerDef].protected != PROTECT_MAX_GUARD && !MoveIgnoresProtect(move)) - { - if (IsZMove(move) || IsMaxMove(move)) - return FALSE; // Z-Moves and Max Moves bypass protection (except Max Guard). - if (IsMoveMakingContact(move, battlerAtk) && GetBattlerAbility(battlerAtk) == ABILITY_UNSEEN_FIST) - return FALSE; - } - - bool32 isProtected = FALSE; - - if (IsSideProtected(battlerDef, PROTECT_CRAFTY_SHIELD) - && IsBattleMoveStatus(move) - && GetMoveEffect(move) != EFFECT_COACHING) - isProtected = TRUE; - else if (MoveIgnoresProtect(move)) - isProtected = FALSE; - else if (IsSideProtected(battlerDef, PROTECT_WIDE_GUARD) && IsSpreadMove(GetBattlerMoveTargetType(battlerAtk, move))) - isProtected = TRUE; - else if (gProtectStructs[battlerDef].protected == PROTECT_NORMAL) - isProtected = TRUE; - else if (gProtectStructs[battlerDef].protected == PROTECT_SPIKY_SHIELD) - isProtected = TRUE; - else if (gProtectStructs[battlerDef].protected == PROTECT_MAX_GUARD) - isProtected = TRUE; - else if (gProtectStructs[battlerDef].protected == PROTECT_BANEFUL_BUNKER) - isProtected = TRUE; - else if (gProtectStructs[battlerDef].protected == PROTECT_BURNING_BULWARK) - isProtected = TRUE; - else if (gProtectStructs[battlerDef].protected == PROTECT_OBSTRUCT && !IsBattleMoveStatus(move)) - isProtected = TRUE; - else if (gProtectStructs[battlerDef].protected == PROTECT_SILK_TRAP && !IsBattleMoveStatus(move)) - isProtected = TRUE; - else if (gProtectStructs[battlerDef].protected == PROTECT_KINGS_SHIELD && !IsBattleMoveStatus(move)) - isProtected = TRUE; - else if (IsSideProtected(battlerDef, PROTECT_QUICK_GUARD) && GetChosenMovePriority(battlerAtk, GetBattlerAbility(battlerAtk)) > 0) - isProtected = TRUE; - else if (IsSideProtected(battlerDef, PROTECT_MAT_BLOCK) && !IsBattleMoveStatus(move)) - isProtected = TRUE; - else - isProtected = FALSE; - - if (isProtected) - gBattleStruct->missStringId[battlerDef] = gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; - - return isProtected; -} - -u32 GetProtectType(enum ProtectMethod method) -{ - switch (method) - { - case PROTECT_NONE: - return PROTECT_TYPE_NONE; - case PROTECT_NORMAL: - case PROTECT_SPIKY_SHIELD: - case PROTECT_KINGS_SHIELD: - case PROTECT_BANEFUL_BUNKER: - case PROTECT_BURNING_BULWARK: - case PROTECT_OBSTRUCT: - case PROTECT_SILK_TRAP: - case PROTECT_MAX_GUARD: - return PROTECT_TYPE_SINGLE; - case PROTECT_WIDE_GUARD: - case PROTECT_QUICK_GUARD: - case PROTECT_CRAFTY_SHIELD: - case PROTECT_MAT_BLOCK: - return PROTECT_TYPE_SIDE; - } - - return FALSE; -} - -enum InverseBattleCheck -{ - INVERSE_BATTLE, - NOT_INVERSE_BATTLE -}; - -enum IronBallCheck -{ - CHECK_IRON_BALL, - IGNORE_IRON_BALL -}; - -// Only called directly when calculating damage type effectiveness, and Iron Ball's type effectiveness mechanics -static bool32 IsBattlerGroundedInverseCheck(u32 battler, enum InverseBattleCheck checkInverse, enum IronBallCheck checkIronBall) -{ - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); - - if (!(checkIronBall == IGNORE_IRON_BALL) && holdEffect == HOLD_EFFECT_IRON_BALL) - return TRUE; - if (gFieldStatuses & STATUS_FIELD_GRAVITY) - return TRUE; - if (B_ROOTED_GROUNDING >= GEN_4 && gStatuses3[battler] & STATUS3_ROOTED) - return TRUE; - if (gStatuses3[battler] & STATUS3_SMACKED_DOWN) - return TRUE; - if (gStatuses3[battler] & STATUS3_TELEKINESIS) - return FALSE; - if (gStatuses3[battler] & STATUS3_MAGNET_RISE) - return FALSE; - if (holdEffect == HOLD_EFFECT_AIR_BALLOON) - return FALSE; - if ((gAiLogicData->aiCalcInProgress ? gAiLogicData->abilities[battler] : GetBattlerAbility(battler)) == ABILITY_LEVITATE) - return FALSE; - if (IS_BATTLER_OF_TYPE(battler, TYPE_FLYING) && (!(checkInverse == INVERSE_BATTLE) || !FlagGet(B_FLAG_INVERSE_BATTLE))) - return FALSE; - return TRUE; -} - -bool32 IsBattlerGrounded(u32 battler) -{ - return IsBattlerGroundedInverseCheck(battler, NOT_INVERSE_BATTLE, CHECK_IRON_BALL); -} - -u32 GetMoveSlot(u16 *moves, u32 move) -{ - u32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (moves[i] == move) - break; - } - return i; -} - -u32 GetBattlerWeight(u32 battler) -{ - u32 i; - u32 weight = GetSpeciesWeight(gBattleMons[battler].species); - u32 ability = GetBattlerAbility(battler); - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); - - if (ability == ABILITY_HEAVY_METAL) - weight *= 2; - else if (ability == ABILITY_LIGHT_METAL) - weight /= 2; - - if (holdEffect == HOLD_EFFECT_FLOAT_STONE) - weight /= 2; - - for (i = 0; i < gDisableStructs[battler].autotomizeCount; i++) - { - if (weight > 1000) - { - weight -= 1000; - } - else if (weight <= 1000) - { - weight = 1; - break; - } - } - - if (weight == 0) - weight = 1; - - return weight; -} - -u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc) -{ - u32 i; - u32 count = 0; - - for (i = 0; i < NUM_BATTLE_STATS; i++) - { - if ((i == STAT_ACC || i == STAT_EVASION) && !countEvasionAcc) - continue; - if (gBattleMons[battler].statStages[i] > DEFAULT_STAT_STAGE) // Stat is increased. - count += gBattleMons[battler].statStages[i] - DEFAULT_STAT_STAGE; - } - - return count; -} - -u32 GetMoveTargetCount(struct DamageCalculationData *damageCalcData) -{ - u32 battlerAtk = damageCalcData->battlerAtk; - u32 battlerDef = damageCalcData->battlerDef; - u32 move = damageCalcData->move; - - switch (GetBattlerMoveTargetType(battlerAtk, move)) + switch (GetBattlerMoveTargetType(battlerAtk, move)) { case MOVE_TARGET_BOTH: return !(gAbsentBattlerFlags & (1u << battlerDef)) @@ -8032,7 +6946,7 @@ u32 CalcRolloutBasePower(u32 battlerAtk, u32 basePower, u32 rolloutTimer) u32 i; for (i = 1; i < (5 - rolloutTimer); i++) basePower *= 2; - if (gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL) + if (gBattleMons[battlerAtk].volatiles.defenseCurl) basePower *= 2; return basePower; } @@ -8045,23 +6959,58 @@ u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter) return basePower; } -static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData, u32 abilityDef, u32 weather) +static inline u32 IsFieldMudSportAffected(enum Type moveType) +{ + if (moveType == TYPE_ELECTRIC && (gFieldStatuses & STATUS_FIELD_MUDSPORT)) + return TRUE; + + if (B_SPORT_TURNS < GEN_6) + { + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + if (gBattleMons[battler].volatiles.mudSport) + return TRUE; + } + } + + return FALSE; +} + +static inline u32 IsFieldWaterSportAffected(enum Type moveType) +{ + if (moveType == TYPE_FIRE && (gFieldStatuses & STATUS_FIELD_WATERSPORT)) + return TRUE; + + if (B_SPORT_TURNS < GEN_6) + { + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + if (gBattleMons[battler].volatiles.waterSport) + return TRUE; + } + } + + return FALSE; +} + +static inline u32 CalcMoveBasePower(struct DamageContext *ctx) { - u32 battlerAtk = damageCalcData->battlerAtk; - u32 battlerDef = damageCalcData->battlerDef; - u32 move = damageCalcData->move; + u32 battlerAtk = ctx->battlerAtk; + u32 battlerDef = ctx->battlerDef; + u32 move = ctx->move; u32 i; u32 basePower = GetMovePower(move); + u32 moveEffect = GetMoveEffect(move); u32 weight, hpFraction, speed; if (GetActiveGimmick(battlerAtk) == GIMMICK_Z_MOVE) - return GetZMovePower(gBattleStruct->zmove.baseMoves[battlerAtk]); + return GetZMovePower(gCurrentMove); if (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX) return GetMaxMovePower(move); - switch (GetMoveEffect(move)) + switch (moveEffect) { case EFFECT_PLEDGE: if (gBattleStruct->pledgeMove) @@ -8107,14 +7056,11 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter; break; case EFFECT_REVENGE: - if ((gProtectStructs[battlerAtk].physicalDmg - && gProtectStructs[battlerAtk].physicalBattlerId == battlerDef) - || (gProtectStructs[battlerAtk].specialDmg - && gProtectStructs[battlerAtk].specialBattlerId == battlerDef)) + if (gProtectStructs[battlerAtk].revengeDoubled & 1u << battlerDef) basePower *= 2; break; case EFFECT_WEATHER_BALL: - if (weather & B_WEATHER_ANY) + if (ctx->weather & B_WEATHER_ANY) basePower *= 2; break; case EFFECT_PURSUIT: @@ -8126,7 +7072,7 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData break; case EFFECT_DOUBLE_POWER_ON_ARG_STATUS: // Comatose targets treated as if asleep - if ((gBattleMons[battlerDef].status1 | (STATUS1_SLEEP * (abilityDef == ABILITY_COMATOSE))) & GetMoveEffectArg_Status(move) + if ((gBattleMons[battlerDef].status1 | (STATUS1_SLEEP * (ctx->abilityDef == ABILITY_COMATOSE))) & GetMoveEffectArg_Status(move) && !((GetMoveAdditionalEffectById(move, 0)->moveEffect == MOVE_EFFECT_REMOVE_STATUS) && DoesSubstituteBlockMove(battlerAtk, battlerDef, move))) basePower *= 2; break; @@ -8134,7 +7080,7 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData basePower = gBattleMons[battlerDef].hp * basePower / gBattleMons[battlerDef].maxHP; break; case EFFECT_ASSURANCE: - if (gProtectStructs[battlerDef].physicalDmg != 0 || gProtectStructs[battlerDef].specialDmg != 0 || gProtectStructs[battlerDef].confusionSelfDmg) + if (gProtectStructs[battlerDef].assuranceDoubled) basePower *= 2; break; case EFFECT_TRUMP_CARD: @@ -8150,7 +7096,7 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData case EFFECT_ACROBATICS: if (gBattleMons[battlerAtk].item == ITEM_NONE // Edge case, because removal of items happens after damage calculation. - || (gSpecialStatuses[battlerAtk].gemBoost && GetBattlerHoldEffect(battlerAtk, FALSE) == HOLD_EFFECT_GEMS)) + || (gSpecialStatuses[battlerAtk].gemBoost && GetBattlerHoldEffect(battlerAtk) == HOLD_EFFECT_GEMS)) basePower *= 2; break; case EFFECT_LOW_KICK: @@ -8181,3283 +7127,4135 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData basePower += (CountBattlerStatIncreases(battlerAtk, TRUE) * 20); break; case EFFECT_ELECTRO_BALL: - speed = GetBattlerTotalSpeedStat(battlerAtk) / GetBattlerTotalSpeedStat(battlerDef); + speed = GetBattlerTotalSpeedStat(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk) / GetBattlerTotalSpeedStat(battlerDef, ctx->abilityDef, ctx->holdEffectDef); if (speed >= ARRAY_COUNT(sSpeedDiffPowerTable)) speed = ARRAY_COUNT(sSpeedDiffPowerTable) - 1; basePower = sSpeedDiffPowerTable[speed]; break; case EFFECT_GYRO_BALL: - basePower = ((25 * GetBattlerTotalSpeedStat(battlerDef)) / GetBattlerTotalSpeedStat(battlerAtk)) + 1; - if (basePower > 150) - basePower = 150; - break; + { + u32 attackerSpeed = GetBattlerTotalSpeedStat(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk); + if (attackerSpeed == 0) + { + basePower = 1; + } + else + { + basePower = ((25 * GetBattlerTotalSpeedStat(battlerDef, ctx->abilityDef, ctx->holdEffectDef)) / attackerSpeed) + 1; + if (basePower > 150) + basePower = 150; + } + break; + } case EFFECT_ECHOED_VOICE: - // gBattleStruct->sameMoveTurns incremented in ppreduce - if (gBattleStruct->sameMoveTurns[battlerAtk] != 0) + // gBattleStruct->echoedVoiceCounter incremented in EndTurnVarious called by DoEndTurnEffects + if (gBattleStruct->echoedVoiceCounter != 0) { - basePower += (basePower * gBattleStruct->sameMoveTurns[battlerAtk]); + basePower += (basePower * gBattleStruct->echoedVoiceCounter); if (basePower > 200) basePower = 200; } break; - case EFFECT_PAYBACK: - if (GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef) - && (B_PAYBACK_SWITCH_BOOST < GEN_5 || gDisableStructs[battlerDef].isFirstTurn != 2)) - basePower *= 2; + case EFFECT_PAYBACK: + if (HasBattlerActedThisTurn(battlerDef) + && (B_PAYBACK_SWITCH_BOOST < GEN_5 || gDisableStructs[battlerDef].isFirstTurn != 2)) + basePower *= 2; + break; + case EFFECT_BOLT_BEAK: + if (!HasBattlerActedThisTurn(battlerDef) + || gDisableStructs[battlerDef].isFirstTurn == 2) + basePower *= 2; + break; + case EFFECT_FUSION_COMBO: + if (move == gLastUsedMove) + break; + // fallthrough + case EFFECT_ROUND: + // don't double power due to previous turn's Round/Fusion move + if (gCurrentTurnActionNumber != 0 + && gActionsByTurnOrder[gCurrentTurnActionNumber - 1] == B_ACTION_USE_MOVE + && GetMoveEffect(gLastUsedMove) == moveEffect) + basePower *= 2; + break; + case EFFECT_LASH_OUT: + if (gProtectStructs[battlerAtk].lashOutAffected) + basePower *= 2; + break; + case EFFECT_MISTY_EXPLOSION: + if (IsBattlerTerrainAffected(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk, STATUS_FIELD_MISTY_TERRAIN)) + basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); + break; + case EFFECT_DYNAMAX_DOUBLE_DMG: + if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) + basePower *= 2; + break; + case EFFECT_HIDDEN_POWER: + { + if (B_HIDDEN_POWER_DMG < GEN_6) + { + u8 powerBits = ((gBattleMons[battlerAtk].hpIV & 2) >> 1) + | ((gBattleMons[battlerAtk].attackIV & 2) << 0) + | ((gBattleMons[battlerAtk].defenseIV & 2) << 1) + | ((gBattleMons[battlerAtk].speedIV & 2) << 2) + | ((gBattleMons[battlerAtk].spAttackIV & 2) << 3) + | ((gBattleMons[battlerAtk].spDefenseIV & 2) << 4); + + basePower = (40 * powerBits) / 63 + 30; + } + break; + } + case EFFECT_GRAV_APPLE: + if (gFieldStatuses & STATUS_FIELD_GRAVITY) + basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); + break; + case EFFECT_TERRAIN_PULSE: + if (IsBattlerTerrainAffected(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk, STATUS_FIELD_TERRAIN_ANY)) + basePower *= 2; + break; + case EFFECT_EXPANDING_FORCE: + if (IsBattlerTerrainAffected(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk, STATUS_FIELD_PSYCHIC_TERRAIN)) + basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); + break; + case EFFECT_RISING_VOLTAGE: + if (IsBattlerTerrainAffected(battlerDef, ctx->abilityDef, ctx->holdEffectDef, STATUS_FIELD_ELECTRIC_TERRAIN)) + basePower *= 2; + break; + case EFFECT_BEAT_UP: + if (GetConfig(CONFIG_BEAT_UP) >= GEN_5) + basePower = CalcBeatUpPower(); + break; + case EFFECT_PSYBLADE: + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); + break; + case EFFECT_MAX_MOVE: + basePower = GetMaxMovePower(GetChosenMoveFromPosition(battlerAtk)); + break; + case EFFECT_RAGE_FIST: + basePower += 50 * GetBattlerPartyState(battlerAtk)->timesGotHit; + basePower = (basePower > 350) ? 350 : basePower; + break; + case EFFECT_FICKLE_BEAM: + if (gBattleStruct->fickleBeamBoosted) + basePower *= 2; + break; + case EFFECT_TERA_BLAST: + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) == TYPE_STELLAR) + basePower = 100; + break; + case EFFECT_LAST_RESPECTS: + basePower += (basePower * min(100, GetBattlerSideFaintCounter(battlerAtk))); + break; + default: + break; + } + + // Move-specific base power changes + switch (move) + { + case MOVE_WATER_SHURIKEN: + if (gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH) + basePower = 20; + break; + } + + if (basePower == 0) + basePower = 1; + return basePower; +} + +static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageContext *ctx) +{ + u32 holdEffectParamAtk; + u32 basePower = CalcMoveBasePower(ctx); + u32 battlerAtk = ctx->battlerAtk; + u32 battlerDef = ctx->battlerDef; + u32 move = ctx->move; + enum Type moveType = ctx->moveType; + enum BattleMoveEffects moveEffect = GetMoveEffect(move); + + uq4_12_t holdEffectModifier; + uq4_12_t modifier = UQ_4_12(1.0); + u32 atkSide = GetBattlerSide(battlerAtk); + + // move effect + switch (moveEffect) + { + case EFFECT_FACADE: + if (gBattleMons[battlerAtk].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_PARALYSIS | STATUS1_FROSTBITE)) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_BRINE: + if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2)) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_RETALIATE: + if (gSideTimers[atkSide].retaliateTimer == 1) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_SOLAR_BEAM: + if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN | B_WEATHER_SNOW | B_WEATHER_FOG))) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + break; + case EFFECT_STOMPING_TANTRUM: + if (gBattleStruct->battlerState[battlerAtk].stompingTantrumTimer == 1) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case EFFECT_MAGNITUDE: + case EFFECT_EARTHQUAKE: + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && !IsSemiInvulnerable(battlerDef, CHECK_ALL)) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + break; + case EFFECT_KNOCK_OFF: + if (B_KNOCK_OFF_DMG >= GEN_6 + && gBattleMons[battlerDef].item != ITEM_NONE + && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + default: + break; + } + + // various effects + for (u32 i = 0; i < gProtectStructs[battlerAtk].helpingHand; i++) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + + if (gSpecialStatuses[battlerAtk].gemBoost) + modifier = uq4_12_multiply(modifier, uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12(gSpecialStatuses[battlerAtk].gemParam))); + if (moveType == TYPE_ELECTRIC && gBattleMons[battlerAtk].volatiles.chargeTimer > 0) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + if (GetMoveEffect(ctx->chosenMove) == EFFECT_ME_FIRST) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + if (IsBattlerTerrainAffected(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk, STATUS_FIELD_GRASSY_TERRAIN) && moveType == TYPE_GRASS) + modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); + if (IsBattlerTerrainAffected(battlerDef, ctx->abilityDef, ctx->holdEffectDef, STATUS_FIELD_MISTY_TERRAIN) && moveType == TYPE_DRAGON) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + if (IsBattlerTerrainAffected(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk, STATUS_FIELD_ELECTRIC_TERRAIN) && moveType == TYPE_ELECTRIC) + modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); + if (IsBattlerTerrainAffected(battlerAtk, ctx->abilityAtk, ctx->holdEffectAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && moveType == TYPE_PSYCHIC) + modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); + if (IsFieldMudSportAffected(ctx->moveType)) + modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.33 : 0.5)); + if (IsFieldWaterSportAffected(ctx->moveType)) + modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.33 : 0.5)); + + // attacker's abilities + switch (ctx->abilityAtk) + { + case ABILITY_TECHNICIAN: + if (basePower <= 60) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_FLARE_BOOST: + if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IsBattleMoveSpecial(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_TOXIC_BOOST: + if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY && IsBattleMovePhysical(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_RECKLESS: + if (moveEffect == EFFECT_RECOIL || moveEffect == EFFECT_RECOIL_IF_MISS) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); + break; + case ABILITY_IRON_FIST: + if (IsPunchingMove(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); + break; + case ABILITY_SHEER_FORCE: + if (MoveIsAffectedBySheerForce(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + break; + case ABILITY_SAND_FORCE: + if ((moveType == TYPE_STEEL || moveType == TYPE_ROCK || moveType == TYPE_GROUND) + && ctx->weather & B_WEATHER_SANDSTORM) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + break; + case ABILITY_RIVALRY: + if (AreBattlersOfSameGender(battlerAtk, battlerDef)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.25)); + else if (AreBattlersOfOppositeGender(battlerAtk, battlerDef)) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.75)); + break; + case ABILITY_ANALYTIC: + if (IsLastMonToMove(battlerAtk) && move != MOVE_FUTURE_SIGHT && move != MOVE_DOOM_DESIRE) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + break; + case ABILITY_TOUGH_CLAWS: + if (IsMoveMakingContact(battlerAtk, battlerDef, ctx->abilityAtk, ctx->holdEffectAtk, ctx->move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + break; + case ABILITY_STRONG_JAW: + if (IsBitingMove(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_MEGA_LAUNCHER: + if (IsPulseMove(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_WATER_BUBBLE: + if (moveType == TYPE_WATER) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + break; + case ABILITY_STEELWORKER: + if (moveType == TYPE_STEEL) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + case ABILITY_PIXILATE: + if (moveType == TYPE_FAIRY && gBattleStruct->battlerState[battlerAtk].ateBoost) + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + break; + case ABILITY_GALVANIZE: + if (moveType == TYPE_ELECTRIC && gBattleStruct->battlerState[battlerAtk].ateBoost) + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); break; - case EFFECT_BOLT_BEAK: - if (GetBattlerTurnOrderNum(battlerAtk) < GetBattlerTurnOrderNum(battlerDef) - || gDisableStructs[battlerDef].isFirstTurn == 2) - basePower *= 2; + case ABILITY_REFRIGERATE: + if (moveType == TYPE_ICE && gBattleStruct->battlerState[battlerAtk].ateBoost) + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); break; - case EFFECT_ROUND: - for (i = 0; i < gBattlersCount; i++) - { - if (i != battlerAtk && IsBattlerAlive(i) && GetMoveEffect(gLastUsedMove) == EFFECT_ROUND) - { - basePower *= 2; - break; - } - } + case ABILITY_AERILATE: + if (moveType == TYPE_FLYING && gBattleStruct->battlerState[battlerAtk].ateBoost) + modifier = uq4_12_multiply(modifier, UQ_4_12(GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); break; - case EFFECT_FUSION_COMBO: - if (GetMoveEffect(gLastUsedMove) == EFFECT_FUSION_COMBO && move != gLastUsedMove) - basePower *= 2; + case ABILITY_NORMALIZE: + if (moveType == TYPE_NORMAL && gBattleStruct->battlerState[battlerAtk].ateBoost && GetConfig(CONFIG_ATE_MULTIPLIER) >= GEN_7) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); break; - case EFFECT_LASH_OUT: - if (gProtectStructs[battlerAtk].lashOutAffected) - basePower *= 2; + case ABILITY_PUNK_ROCK: + if (IsSoundMove(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); break; - case EFFECT_EXPLOSION: - if (move == MOVE_MISTY_EXPLOSION && IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_MISTY_TERRAIN)) - basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); + case ABILITY_STEELY_SPIRIT: + if (moveType == TYPE_STEEL) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); break; - case EFFECT_DYNAMAX_DOUBLE_DMG: - if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) - basePower *= 2; + case ABILITY_SHARPNESS: + if (IsSlicingMove(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); break; - case EFFECT_HIDDEN_POWER: + case ABILITY_SUPREME_OVERLORD: + modifier = uq4_12_multiply(modifier, GetSupremeOverlordModifier(battlerAtk)); + break; + default: + break; + } + + // field abilities + if ((IsAbilityOnField(ABILITY_DARK_AURA) && moveType == TYPE_DARK) + || (IsAbilityOnField(ABILITY_FAIRY_AURA) && moveType == TYPE_FAIRY)) { - if (B_HIDDEN_POWER_DMG < GEN_6) + if (IsAbilityOnField(ABILITY_AURA_BREAK)) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.75)); + else + modifier = uq4_12_multiply(modifier, UQ_4_12(1.33)); + } + + // attacker partner's abilities + if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk))) { - u8 powerBits = ((gBattleMons[battlerAtk].hpIV & 2) >> 1) - | ((gBattleMons[battlerAtk].attackIV & 2) << 0) - | ((gBattleMons[battlerAtk].defenseIV & 2) << 1) - | ((gBattleMons[battlerAtk].speedIV & 2) << 2) - | ((gBattleMons[battlerAtk].spAttackIV & 2) << 3) - | ((gBattleMons[battlerAtk].spDefenseIV & 2) << 4); + case ABILITY_BATTERY: + if (IsBattleMoveSpecial(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + break; + case ABILITY_POWER_SPOT: + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + break; + case ABILITY_STEELY_SPIRIT: + if (moveType == TYPE_STEEL) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + break; + default: + break; + } + } - basePower = (40 * powerBits) / 63 + 30; + // target's abilities + switch (ctx->abilityDef) + { + case ABILITY_HEATPROOF: + case ABILITY_WATER_BUBBLE: + if (moveType == TYPE_FIRE) + { + modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + if (ctx->updateFlags) + RecordAbilityBattle(battlerDef, ctx->abilityDef); } break; - } - case EFFECT_GRAV_APPLE: - if (gFieldStatuses & STATUS_FIELD_GRAVITY) - basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); + case ABILITY_DRY_SKIN: + if (moveType == TYPE_FIRE) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.25)); break; - case EFFECT_TERRAIN_PULSE: - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_TERRAIN_ANY)) - basePower *= 2; + case ABILITY_PROTOSYNTHESIS: + { + enum Stat defHighestStat = GetParadoxBoostedStatId(battlerDef); + if (((ctx->weather & B_WEATHER_SUN && HasWeatherEffect()) || gDisableStructs[battlerDef].boosterEnergyActivated) + && ((IsBattleMovePhysical(move) && defHighestStat == STAT_DEF) || (IsBattleMoveSpecial(move) && defHighestStat == STAT_SPDEF)) + && !(gBattleMons[battlerDef].volatiles.transformed)) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); + } break; - case EFFECT_EXPANDING_FORCE: - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN)) - basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); + case ABILITY_QUARK_DRIVE: + { + u32 defHighestStat = GetParadoxBoostedStatId(battlerDef); + if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gDisableStructs[battlerDef].boosterEnergyActivated) + && ((IsBattleMovePhysical(move) && defHighestStat == STAT_DEF) || (IsBattleMoveSpecial(move) && defHighestStat == STAT_SPDEF)) + && !(gBattleMons[battlerDef].volatiles.transformed)) + modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); + } break; - case EFFECT_RISING_VOLTAGE: - if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) - basePower *= 2; + default: break; - case EFFECT_BEAT_UP: - if (B_BEAT_UP >= GEN_5) - basePower = CalcBeatUpPower(); + } + + holdEffectParamAtk = GetBattlerHoldEffectParam(battlerAtk); + if (holdEffectParamAtk > 100) + holdEffectParamAtk = 100; + + holdEffectModifier = uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12(holdEffectParamAtk)); + + // attacker's hold effect + switch (ctx->holdEffectAtk) + { + case HOLD_EFFECT_MUSCLE_BAND: + if (IsBattleMovePhysical(move)) + modifier = uq4_12_multiply(modifier, uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12_Floored(holdEffectParamAtk))); break; - case EFFECT_PSYBLADE: - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) - basePower = uq4_12_multiply(basePower, UQ_4_12(1.5)); + case HOLD_EFFECT_WISE_GLASSES: + if (IsBattleMoveSpecial(move)) + modifier = uq4_12_multiply(modifier, uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12_Floored(holdEffectParamAtk))); break; - case EFFECT_MAX_MOVE: - basePower = GetMaxMovePower(gBattleMons[battlerAtk].moves[gBattleStruct->chosenMovePositions[battlerAtk]]); + case HOLD_EFFECT_LUSTROUS_ORB: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PALKIA && (moveType == TYPE_WATER || moveType == TYPE_DRAGON)) + modifier = uq4_12_multiply(modifier, holdEffectModifier); break; - case EFFECT_RAGE_FIST: - basePower += 50 * gBattleStruct->timesGotHit[GetBattlerSide(battlerAtk)][gBattlerPartyIndexes[battlerAtk]]; - basePower = (basePower > 350) ? 350 : basePower; + case HOLD_EFFECT_ADAMANT_ORB: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_DIALGA && (moveType == TYPE_STEEL || moveType == TYPE_DRAGON)) + modifier = uq4_12_multiply(modifier, holdEffectModifier); break; - case EFFECT_FICKLE_BEAM: - if (gBattleStruct->fickleBeamBoosted) - basePower *= 2; + case HOLD_EFFECT_GRISEOUS_ORB: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_GIRATINA && (moveType == TYPE_GHOST || moveType == TYPE_DRAGON)) + modifier = uq4_12_multiply(modifier, holdEffectModifier); break; - case EFFECT_TERA_BLAST: - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) == TYPE_STELLAR) - basePower = 100; + case HOLD_EFFECT_SOUL_DEW: + if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) + && ((B_SOUL_DEW_BOOST >= GEN_7 && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON)) + || (B_SOUL_DEW_BOOST < GEN_7 && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && IsBattleMoveSpecial(move)))) + modifier = uq4_12_multiply(modifier, holdEffectModifier); break; - case EFFECT_LAST_RESPECTS: - basePower += (basePower * min(100, GetBattlerSideFaintCounter(battlerAtk))); + case HOLD_EFFECT_TYPE_POWER: + case HOLD_EFFECT_PLATE: + if (moveType == GetItemSecondaryId(gBattleMons[battlerAtk].item)) + modifier = uq4_12_multiply(modifier, holdEffectModifier); + break; + case HOLD_EFFECT_PUNCHING_GLOVE: + if (IsPunchingMove(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.1)); + break; + case HOLD_EFFECT_OGERPON_MASK: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_OGERPON) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); break; default: break; } - // Move-specific base power changes - switch (move) - { - case MOVE_WATER_SHURIKEN: - if (gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH) - basePower = 20; - break; - } + // Terastallization boosts weak, non-priority, non-multi hit moves after modifiers to 60 BP. + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA + && (moveType == GetBattlerTeraType(battlerAtk) + || (GetBattlerTeraType(battlerAtk) == TYPE_STELLAR && IsTypeStellarBoosted(battlerAtk, moveType))) + && uq4_12_multiply_by_int_half_down(modifier, basePower) < 60 + && GetMovePower(move) > 1 + && GetMoveStrikeCount(move) < 2 + && moveEffect != EFFECT_POWER_BASED_ON_USER_HP + && moveEffect != EFFECT_POWER_BASED_ON_TARGET_HP + && moveEffect != EFFECT_MULTI_HIT + && GetMovePriority(move) == 0) + { + return 60; + } + + return uq4_12_multiply_by_int_half_down(modifier, basePower); +} + +static bool32 IsRuinStatusActive(u32 fieldEffect) +{ + bool32 isNeutralizingGasOnField = IsNeutralizingGasOnField(); + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + // Mold Breaker doesn't ignore Ruin field status but Gastro Acid and Neutralizing Gas do + if (gBattleMons[battler].volatiles.gastroAcid) + continue; + if (GetBattlerHoldEffectIgnoreAbility(battler) != HOLD_EFFECT_ABILITY_SHIELD + && isNeutralizingGasOnField + && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS) + continue; + + if (GetBattlerVolatile(battler, fieldEffect)) + return TRUE; + } + + return FALSE; +} + +static inline uq4_12_t ApplyOffensiveBadgeBoost(uq4_12_t modifier, u32 battler, u32 move) +{ + if (ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_ATTACK, battler) && IsBattleMovePhysical(move)) + modifier = uq4_12_multiply_half_down(modifier, GetBadgeBoostModifier()); + if (ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_SPATK, battler) && IsBattleMoveSpecial(move)) + modifier = uq4_12_multiply_half_down(modifier, GetBadgeBoostModifier()); + return modifier; +} + +static inline uq4_12_t ApplyDefensiveBadgeBoost(uq4_12_t modifier, u32 battler, u32 move) +{ + if (ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_DEFENSE, battler) && IsBattleMovePhysical(move)) + modifier = uq4_12_multiply_half_down(modifier, GetBadgeBoostModifier()); + if (ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_SPDEF, battler) && IsBattleMoveSpecial(move)) + modifier = uq4_12_multiply_half_down(modifier, GetBadgeBoostModifier()); + return modifier; +} + +static inline u32 CalcAttackStat(struct DamageContext *ctx) +{ + u8 atkStage; + u32 atkStat; + uq4_12_t modifier; + u16 atkBaseSpeciesId; + u32 battlerAtk = ctx->battlerAtk; + u32 battlerDef = ctx->battlerDef; + u32 move = ctx->move; + enum Type moveType = ctx->moveType; + enum BattleMoveEffects moveEffect = GetMoveEffect(move); + + atkBaseSpeciesId = GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species); + + if (moveEffect == EFFECT_FOUL_PLAY) + { + if (IsBattleMovePhysical(move)) + { + atkStat = gBattleMons[battlerDef].attack; + atkStage = gBattleMons[battlerDef].statStages[STAT_ATK]; + } + else + { + atkStat = gBattleMons[battlerDef].spAttack; + atkStage = gBattleMons[battlerDef].statStages[STAT_SPATK]; + } + } + else if (moveEffect == EFFECT_BODY_PRESS) + { + if (IsBattleMovePhysical(move)) + { + atkStat = gBattleMons[battlerAtk].defense; + // Edge case: Body Press used during Wonder Room. For some reason, it still uses Defense over Sp.Def, but uses Sp.Def stat changes + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) + atkStage = gBattleMons[battlerAtk].statStages[STAT_SPDEF]; + else + atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF]; + } + else + { + atkStat = gBattleMons[battlerAtk].spDefense; + atkStage = gBattleMons[battlerAtk].statStages[STAT_SPDEF]; + } + } + else + { + if (IsBattleMovePhysical(move)) + { + atkStat = gBattleMons[battlerAtk].attack; + atkStage = gBattleMons[battlerAtk].statStages[STAT_ATK]; + } + else + { + atkStat = gBattleMons[battlerAtk].spAttack; + atkStage = gBattleMons[battlerAtk].statStages[STAT_SPATK]; + } + } + + // critical hits ignore attack stat's stage drops + if (ctx->isCrit && atkStage < DEFAULT_STAT_STAGE) + atkStage = DEFAULT_STAT_STAGE; + // pokemon with unaware ignore attack stat changes while taking damage + if (ctx->abilityDef == ABILITY_UNAWARE) + atkStage = DEFAULT_STAT_STAGE; - if (basePower == 0) - basePower = 1; - return basePower; -} + atkStat *= gStatStageRatios[atkStage][0]; + atkStat /= gStatStageRatios[atkStage][1]; -static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageCalculationData *damageCalcData, u32 atkAbility, u32 defAbility, enum ItemHoldEffect holdEffectAtk, u32 weather) -{ - u32 holdEffectParamAtk; - u32 basePower = CalcMoveBasePower(damageCalcData, defAbility, weather); - u32 battlerAtk = damageCalcData->battlerAtk; - u32 battlerDef = damageCalcData->battlerDef; - u32 move = damageCalcData->move; - u32 moveType = damageCalcData->moveType; - enum BattleMoveEffects moveEffect = GetMoveEffect(move); + // apply attack stat modifiers + modifier = UQ_4_12(1.0); - uq4_12_t holdEffectModifier; - uq4_12_t modifier = UQ_4_12(1.0); - u32 atkSide = GetBattlerSide(battlerAtk); + if (ctx->isSelfInflicted) + return uq4_12_multiply_by_int_half_down(ApplyOffensiveBadgeBoost(modifier, battlerAtk, move), atkStat); - // move effect - switch (moveEffect) + // attacker's abilities + switch (ctx->abilityAtk) { - case EFFECT_FACADE: - if (gBattleMons[battlerAtk].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_PARALYSIS | STATUS1_FROSTBITE)) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + case ABILITY_HUGE_POWER: + case ABILITY_PURE_POWER: + if (IsBattleMovePhysical(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; - case EFFECT_BRINE: - if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2)) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + case ABILITY_SLOW_START: + if (gDisableStructs[battlerAtk].slowStartTimer > 0) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); break; - case EFFECT_RETALIATE: - if (gSideTimers[atkSide].retaliateTimer == 1) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + case ABILITY_SOLAR_POWER: + if (IsBattleMoveSpecial(move) && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case EFFECT_SOLAR_BEAM: - if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN | B_WEATHER_SNOW | B_WEATHER_FOG))) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + case ABILITY_DEFEATIST: + if (gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 2)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); break; - case EFFECT_STOMPING_TANTRUM: - if (gBattleStruct->battlerState[battlerAtk].stompingTantrumTimer == 1) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE && gDisableStructs[battlerAtk].flashFireBoosted) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case EFFECT_MAGNITUDE: - case EFFECT_EARTHQUAKE: - if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); + case ABILITY_SWARM: + if (moveType == TYPE_BUG && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case EFFECT_KNOCK_OFF: - if (B_KNOCK_OFF_DMG >= GEN_6 - && gBattleMons[battlerDef].item != ITEM_NONE - && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case ABILITY_TORRENT: + if (moveType == TYPE_WATER && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - default: + case ABILITY_BLAZE: + if (moveType == TYPE_FIRE && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - } - - // various effects - if (gProtectStructs[battlerAtk].helpingHand) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - if (gSpecialStatuses[battlerAtk].gemBoost) - modifier = uq4_12_multiply(modifier, uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12(gSpecialStatuses[battlerAtk].gemParam))); - if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP && moveType == TYPE_ELECTRIC) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); - if (GetMoveEffect(gChosenMove) == EFFECT_ME_FIRST) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_GRASSY_TERRAIN) && moveType == TYPE_GRASS) - modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); - if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN) && moveType == TYPE_DRAGON) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN) && moveType == TYPE_ELECTRIC) - modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && moveType == TYPE_PSYCHIC) - modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5))); - - if (moveType == TYPE_ELECTRIC && ((gFieldStatuses & STATUS_FIELD_MUDSPORT) - || AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0))) - modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.33 : 0.5)); - if (moveType == TYPE_FIRE && ((gFieldStatuses & STATUS_FIELD_WATERSPORT) - || AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0))) - modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.33 : 0.5)); - - // attacker's abilities - switch (atkAbility) - { - case ABILITY_TECHNICIAN: - if (basePower <= 60) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case ABILITY_OVERGROW: + if (moveType == TYPE_GRASS && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case ABILITY_FLARE_BOOST: - if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IsBattleMoveSpecial(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case ABILITY_PLUS: + if (IsBattleMoveSpecial(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + enum Ability partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); + if (partnerAbility == ABILITY_MINUS + || (B_PLUS_MINUS_INTERACTION >= GEN_5 && partnerAbility == ABILITY_PLUS)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + } break; - case ABILITY_TOXIC_BOOST: - if (gBattleMons[battlerAtk].status1 & STATUS1_PSN_ANY && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case ABILITY_MINUS: + if (IsBattleMoveSpecial(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + enum Ability partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); + if (partnerAbility == ABILITY_PLUS + || (B_PLUS_MINUS_INTERACTION >= GEN_5 && partnerAbility == ABILITY_MINUS)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + } break; - case ABILITY_RECKLESS: - if (moveEffect == EFFECT_RECOIL || moveEffect == EFFECT_RECOIL_IF_MISS) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); + case ABILITY_FLOWER_GIFT: + if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN) && IsBattleMovePhysical(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case ABILITY_IRON_FIST: - if (IsPunchingMove(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); + case ABILITY_HUSTLE: + if (IsBattleMovePhysical(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case ABILITY_SHEER_FORCE: - if (MoveIsAffectedBySheerForce(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + case ABILITY_STAKEOUT: + if (gDisableStructs[battlerDef].isFirstTurn == 2) // just switched in + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; - case ABILITY_SAND_FORCE: - if ((moveType == TYPE_STEEL || moveType == TYPE_ROCK || moveType == TYPE_GROUND) - && weather & B_WEATHER_SANDSTORM) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + case ABILITY_GUTS: + if (gBattleMons[battlerAtk].status1 & STATUS1_ANY && IsBattleMovePhysical(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case ABILITY_RIVALRY: - if (AreBattlersOfSameGender(battlerAtk, battlerDef)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.25)); - else if (AreBattlersOfOppositeGender(battlerAtk, battlerDef)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.75)); + case ABILITY_TRANSISTOR: + if (moveType == TYPE_ELECTRIC) + { + if (GetConfig(CONFIG_TRANSISTOR_BOOST) >= GEN_9) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + else + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + } break; - case ABILITY_ANALYTIC: - if (GetBattlerTurnOrderNum(battlerAtk) == gBattlersCount - 1 && move != MOVE_FUTURE_SIGHT && move != MOVE_DOOM_DESIRE) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + case ABILITY_DRAGONS_MAW: + if (moveType == TYPE_DRAGON) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); break; - case ABILITY_TOUGH_CLAWS: - if (IsMoveMakingContact(move, battlerAtk)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + case ABILITY_GORILLA_TACTICS: + if (IsBattleMovePhysical(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); break; - case ABILITY_STRONG_JAW: - if (IsBitingMove(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case ABILITY_ROCKY_PAYLOAD: + if (moveType == TYPE_ROCK) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); break; - case ABILITY_MEGA_LAUNCHER: - if (IsPulseMove(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case ABILITY_PROTOSYNTHESIS: + if (!(gBattleMons[battlerAtk].volatiles.transformed)) + { + enum Stat atkHighestStat = GetParadoxBoostedStatId(battlerAtk); + if (((ctx->weather & B_WEATHER_SUN) && HasWeatherEffect()) || gDisableStructs[battlerAtk].boosterEnergyActivated) + { + if ((IsBattleMovePhysical(move) && atkHighestStat == STAT_ATK) || (IsBattleMoveSpecial(move) && atkHighestStat == STAT_SPATK)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + } + } break; - case ABILITY_WATER_BUBBLE: - if (moveType == TYPE_WATER) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + case ABILITY_QUARK_DRIVE: + if (!(gBattleMons[battlerAtk].volatiles.transformed)) + { + enum Stat atkHighestStat = GetParadoxBoostedStatId(battlerAtk); + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gDisableStructs[battlerAtk].boosterEnergyActivated) + { + if ((IsBattleMovePhysical(move) && atkHighestStat == STAT_ATK) || (IsBattleMoveSpecial(move) && atkHighestStat == STAT_SPATK)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + } + } break; - case ABILITY_STEELWORKER: - if (moveType == TYPE_STEEL) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case ABILITY_ORICHALCUM_PULSE: + if ((ctx->weather & B_WEATHER_SUN) && HasWeatherEffect() && IsBattleMovePhysical(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3333)); break; - case ABILITY_PIXILATE: - if (moveType == TYPE_FAIRY && gBattleStruct->ateBoost[battlerAtk]) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetGenConfig(GEN_CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + case ABILITY_HADRON_ENGINE: + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && IsBattleMoveSpecial(move)) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3333)); break; - case ABILITY_GALVANIZE: - if (moveType == TYPE_ELECTRIC && gBattleStruct->ateBoost[battlerAtk]) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetGenConfig(GEN_CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + default: break; - case ABILITY_REFRIGERATE: - if (moveType == TYPE_ICE && gBattleStruct->ateBoost[battlerAtk]) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetGenConfig(GEN_CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + } + + // target's abilities + switch (ctx->abilityDef) + { + case ABILITY_THICK_FAT: + if (moveType == TYPE_FIRE || moveType == TYPE_ICE) + { + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); + if (ctx->updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT); + } break; - case ABILITY_AERILATE: - if (moveType == TYPE_FLYING && gBattleStruct->ateBoost[battlerAtk]) - modifier = uq4_12_multiply(modifier, UQ_4_12(GetGenConfig(GEN_CONFIG_ATE_MULTIPLIER) >= GEN_7 ? 1.2 : 1.3)); + case ABILITY_PURIFYING_SALT: + if (moveType == TYPE_GHOST) + { + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); + if (ctx->updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_PURIFYING_SALT); + } break; - case ABILITY_NORMALIZE: - if (moveType == TYPE_NORMAL && gBattleStruct->ateBoost[battlerAtk] && GetGenConfig(GEN_CONFIG_ATE_MULTIPLIER) >= GEN_7) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); + default: + break; + } + + // ally's abilities + if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk))) + { + case ABILITY_FLOWER_GIFT: + if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerAtk), B_WEATHER_SUN) && IsBattleMovePhysical(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + break; + default: + break; + } + } + + // Ruin field effects + if (IsBattleMoveSpecial(move) && !gBattleMons[ctx->battlerAtk].volatiles.vesselOfRuin && IsRuinStatusActive(VOLATILE_VESSEL_OF_RUIN)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + + if (IsBattleMovePhysical(move) && !gBattleMons[ctx->battlerAtk].volatiles.tabletsOfRuin && IsRuinStatusActive(VOLATILE_TABLETS_OF_RUIN)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + + // attacker's hold effect + switch (ctx->holdEffectAtk) + { + case HOLD_EFFECT_THICK_CLUB: + if ((atkBaseSpeciesId == SPECIES_CUBONE || atkBaseSpeciesId == SPECIES_MAROWAK) && IsBattleMovePhysical(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; - case ABILITY_PUNK_ROCK: - if (IsSoundMove(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); + case HOLD_EFFECT_DEEP_SEA_TOOTH: + if (gBattleMons[battlerAtk].species == SPECIES_CLAMPERL && IsBattleMoveSpecial(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; - case ABILITY_STEELY_SPIRIT: - if (moveType == TYPE_STEEL) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case HOLD_EFFECT_LIGHT_BALL: + if (atkBaseSpeciesId == SPECIES_PIKACHU && (GetConfig(CONFIG_LIGHT_BALL_ATTACK_BOOST) >= GEN_4 || IsBattleMoveSpecial(move))) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; - case ABILITY_SHARPNESS: - if (IsSlicingMove(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + case HOLD_EFFECT_CHOICE_BAND: + if (IsBattleMovePhysical(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case ABILITY_SUPREME_OVERLORD: - modifier = uq4_12_multiply(modifier, GetSupremeOverlordModifier(battlerAtk)); + case HOLD_EFFECT_CHOICE_SPECS: + if (IsBattleMoveSpecial(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + break; + default: break; } - // field abilities - if ((IsAbilityOnField(ABILITY_DARK_AURA) && moveType == TYPE_DARK) - || (IsAbilityOnField(ABILITY_FAIRY_AURA) && moveType == TYPE_FAIRY)) + modifier = ApplyOffensiveBadgeBoost(modifier, battlerAtk, move); + + return uq4_12_multiply_by_int_half_down(modifier, atkStat); +} + +static bool32 CanEvolve(u32 species) +{ + u32 i; + const struct Evolution *evolutions = GetSpeciesEvolutions(species); + + if (evolutions != NULL) { - if (IsAbilityOnField(ABILITY_AURA_BREAK)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.75)); - else - modifier = uq4_12_multiply(modifier, UQ_4_12(1.33)); + for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) + { + if (evolutions[i].method + && SanitizeSpeciesId(evolutions[i].targetSpecies) != SPECIES_NONE) + return TRUE; + } } + return FALSE; +} - // attacker partner's abilities - if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) +static inline u32 CalcDefenseStat(struct DamageContext *ctx) +{ + bool32 usesDefStat; + u8 defStage; + u32 defStat, def, spDef; + uq4_12_t modifier; + u32 battlerDef = ctx->battlerDef; + u32 move = ctx->move; + enum BattleMoveEffects moveEffect = GetMoveEffect(move); + + def = gBattleMons[battlerDef].defense; + spDef = gBattleMons[battlerDef].spDefense; + + if (moveEffect == EFFECT_PSYSHOCK || IsBattleMovePhysical(move)) // uses defense stat instead of sp.def { - switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk))) + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped { - case ABILITY_BATTERY: - if (IsBattleMoveSpecial(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - break; - case ABILITY_POWER_SPOT: - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - break; - case ABILITY_STEELY_SPIRIT: - if (moveType == TYPE_STEEL) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - break; + defStat = spDef; + usesDefStat = FALSE; + } + else + { + defStat = def; + usesDefStat = TRUE; + } + defStage = gBattleMons[battlerDef].statStages[STAT_DEF]; + } + else // is special + { + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped + { + defStat = def; + usesDefStat = TRUE; + } + else + { + defStat = spDef; + usesDefStat = FALSE; } + defStage = gBattleMons[battlerDef].statStages[STAT_SPDEF]; } + // Self-destruct / Explosion cut defense in half + if (B_EXPLOSION_DEFENSE < GEN_5 && (moveEffect == EFFECT_EXPLOSION + || moveEffect == EFFECT_MISTY_EXPLOSION)) + defStat /= 2; + + // critical hits ignore positive stat changes + if (ctx->isCrit && defStage > DEFAULT_STAT_STAGE) + defStage = DEFAULT_STAT_STAGE; + // pokemon with unaware ignore defense stat changes while dealing damage + if (ctx->abilityAtk == ABILITY_UNAWARE) + defStage = DEFAULT_STAT_STAGE; + // certain moves also ignore stat changes + if (MoveIgnoresDefenseEvasionStages(move)) + defStage = DEFAULT_STAT_STAGE; + + defStat *= gStatStageRatios[defStage][0]; + defStat /= gStatStageRatios[defStage][1]; + + // apply defense stat modifiers + modifier = UQ_4_12(1.0); + + if (ctx->isSelfInflicted) + return uq4_12_multiply_by_int_half_down(ApplyDefensiveBadgeBoost(modifier, battlerDef, move), defStat); + // target's abilities - switch (defAbility) + switch (ctx->abilityDef) { - case ABILITY_HEATPROOF: - case ABILITY_WATER_BUBBLE: - if (moveType == TYPE_FIRE) + case ABILITY_MARVEL_SCALE: + if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat) { - modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); - if (damageCalcData->updateFlags) - RecordAbilityBattle(battlerDef, defAbility); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + if (ctx->updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_MARVEL_SCALE); } break; - case ABILITY_DRY_SKIN: - if (moveType == TYPE_FIRE) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.25)); - break; - case ABILITY_PROTOSYNTHESIS: + case ABILITY_FUR_COAT: + if (usesDefStat) { - u8 defHighestStat = GetHighestStatId(battlerDef); - if (((weather & B_WEATHER_SUN && HasWeatherEffect()) || gDisableStructs[battlerDef].boosterEnergyActivates) - && ((IsBattleMovePhysical(move) && defHighestStat == STAT_DEF) || (IsBattleMoveSpecial(move) && defHighestStat == STAT_SPDEF)) - && !(gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + if (ctx->updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_FUR_COAT); } break; - case ABILITY_QUARK_DRIVE: + case ABILITY_GRASS_PELT: + if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat) { - u8 defHighestStat = GetHighestStatId(battlerDef); - if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gDisableStructs[battlerDef].boosterEnergyActivates) - && ((IsBattleMovePhysical(move) && defHighestStat == STAT_DEF) || (IsBattleMoveSpecial(move) && defHighestStat == STAT_SPDEF)) - && !(gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED)) - modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + if (ctx->updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_GRASS_PELT); } break; + case ABILITY_FLOWER_GIFT: + if (gBattleMons[battlerDef].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + break; + default: + break; } - holdEffectParamAtk = GetBattlerHoldEffectParam(battlerAtk); - if (holdEffectParamAtk > 100) - holdEffectParamAtk = 100; + // ally's abilities + if (IsBattlerAlive(BATTLE_PARTNER(battlerDef))) + { + switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef))) + { + case ABILITY_FLOWER_GIFT: + if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerDef), B_WEATHER_SUN) && !usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + break; + default: + break; + } + } - holdEffectModifier = uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12(holdEffectParamAtk)); + // Ruin field effects + if (usesDefStat && !gBattleMons[ctx->battlerDef].volatiles.swordOfRuin && IsRuinStatusActive(VOLATILE_SWORD_OF_RUIN)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); - // attacker's hold effect - switch (holdEffectAtk) + if (!usesDefStat && !gBattleMons[ctx->battlerDef].volatiles.beadsOfRuin && IsRuinStatusActive(VOLATILE_BEADS_OF_RUIN)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + + // target's hold effects + switch (ctx->holdEffectDef) { - case HOLD_EFFECT_MUSCLE_BAND: - if (IsBattleMovePhysical(move)) - modifier = uq4_12_multiply(modifier, uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12_Floored(holdEffectParamAtk))); - break; - case HOLD_EFFECT_WISE_GLASSES: - if (IsBattleMoveSpecial(move)) - modifier = uq4_12_multiply(modifier, uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12_Floored(holdEffectParamAtk))); + case HOLD_EFFECT_DEEP_SEA_SCALE: + if (gBattleMons[battlerDef].species == SPECIES_CLAMPERL && !usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; - case HOLD_EFFECT_LUSTROUS_ORB: - if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PALKIA && (moveType == TYPE_WATER || moveType == TYPE_DRAGON)) - modifier = uq4_12_multiply(modifier, holdEffectModifier); + case HOLD_EFFECT_METAL_POWDER: + if (gBattleMons[battlerDef].species == SPECIES_DITTO && usesDefStat && !(gBattleMons[battlerDef].volatiles.transformed)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; - case HOLD_EFFECT_ADAMANT_ORB: - if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_DIALGA && (moveType == TYPE_STEEL || moveType == TYPE_DRAGON)) - modifier = uq4_12_multiply(modifier, holdEffectModifier); + case HOLD_EFFECT_EVIOLITE: + if (CanEvolve(gBattleMons[battlerDef].species)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case HOLD_EFFECT_GRISEOUS_ORB: - if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_GIRATINA && (moveType == TYPE_GHOST || moveType == TYPE_DRAGON)) - modifier = uq4_12_multiply(modifier, holdEffectModifier); + case HOLD_EFFECT_ASSAULT_VEST: + if (!usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case HOLD_EFFECT_SOUL_DEW: - if ((gBattleMons[battlerAtk].species == SPECIES_LATIAS || gBattleMons[battlerAtk].species == SPECIES_LATIOS) - && ((B_SOUL_DEW_BOOST >= GEN_7 && (moveType == TYPE_PSYCHIC || moveType == TYPE_DRAGON)) - || (B_SOUL_DEW_BOOST < GEN_7 && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) && IsBattleMoveSpecial(move)))) - modifier = uq4_12_multiply(modifier, holdEffectModifier); - break; - case HOLD_EFFECT_TYPE_POWER: - case HOLD_EFFECT_PLATE: - if (moveType == GetItemSecondaryId(gBattleMons[battlerAtk].item)) - modifier = uq4_12_multiply(modifier, holdEffectModifier); - break; - case HOLD_EFFECT_PUNCHING_GLOVE: - if (IsPunchingMove(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.1)); - break; - case HOLD_EFFECT_OGERPON_MASK: - if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_OGERPON) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); + if (B_SOUL_DEW_BOOST < GEN_7 + && (gBattleMons[battlerDef].species == SPECIES_LATIAS || gBattleMons[battlerDef].species == SPECIES_LATIOS) + && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + && !usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; default: break; } - // Terastallization boosts weak, non-priority, non-multi hit moves after modifiers to 60 BP. - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA - && (moveType == GetBattlerTeraType(battlerAtk) - || (GetBattlerTeraType(battlerAtk) == TYPE_STELLAR && IsTypeStellarBoosted(battlerAtk, moveType))) - && uq4_12_multiply_by_int_half_down(modifier, basePower) < 60 - && GetMovePower(move) > 1 - && GetMoveStrikeCount(move) < 2 - && moveEffect != EFFECT_POWER_BASED_ON_USER_HP - && moveEffect != EFFECT_POWER_BASED_ON_TARGET_HP - && moveEffect != EFFECT_MULTI_HIT - && GetMovePriority(move) == 0) + // sandstorm sp.def boost for rock types + if (GetConfig(CONFIG_SANDSTORM_SPDEF_BOOST) >= GEN_4 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SANDSTORM) && !usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + // snow def boost for ice types + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SNOW) && usesDefStat) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + + modifier = ApplyDefensiveBadgeBoost(modifier, battlerDef, move); + + return uq4_12_multiply_by_int_half_down(modifier, defStat); +} + +// base damage formula before adding any modifiers +static inline s32 CalculateBaseDamage(u32 power, u32 userFinalAttack, u32 level, u32 targetFinalDefense) +{ + return power * userFinalAttack * (2 * level / 5 + 2) / targetFinalDefense / 50 + 2; +} + +static inline uq4_12_t GetTargetDamageModifier(struct DamageContext *ctx) +{ + if (IsDoubleBattle()) + { + if (GetMoveTargetCount(ctx) == 2) + return B_MULTIPLE_TARGETS_DMG >= GEN_4 ? UQ_4_12(0.75) : UQ_4_12(0.5); + else if (GetMoveTargetCount(ctx) >= 3) + return B_MULTIPLE_TARGETS_DMG >= GEN_4 ? UQ_4_12(0.75) : UQ_4_12(1.0); + } + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetParentalBondModifier(u32 battlerAtk) +{ + if (gSpecialStatuses[battlerAtk].parentalBondState != PARENTAL_BOND_2ND_HIT) + return UQ_4_12(1.0); + return B_PARENTAL_BOND_DMG >= GEN_7 ? UQ_4_12(0.25) : UQ_4_12(0.5); +} + +static inline uq4_12_t GetSameTypeAttackBonusModifier(struct DamageContext *ctx) +{ + if (ctx->moveType == TYPE_MYSTERY) + return UQ_4_12(1.0); + else if (gBattleStruct->pledgeMove && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(ctx->battlerAtk), ctx->moveType)) + return (ctx->abilityAtk == ABILITY_ADAPTABILITY) ? UQ_4_12(2.0) : UQ_4_12(1.5); + else if (!IS_BATTLER_OF_TYPE(ctx->battlerAtk, ctx->moveType) || ctx->move == MOVE_STRUGGLE || ctx->move == MOVE_NONE) + return UQ_4_12(1.0); + return (ctx->abilityAtk == ABILITY_ADAPTABILITY) ? UQ_4_12(2.0) : UQ_4_12(1.5); +} + +// Utility Umbrella holders take normal damage from what would be rain- and sun-weakened attacks. +static uq4_12_t GetWeatherDamageModifier(struct DamageContext *ctx) +{ + if (ctx->weather == B_WEATHER_NONE) + return UQ_4_12(1.0); + if (GetMoveEffect(ctx->move) == EFFECT_HYDRO_STEAM && (ctx->weather & B_WEATHER_SUN) && ctx->holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA) + return UQ_4_12(1.5); + if (ctx->holdEffectDef == HOLD_EFFECT_UTILITY_UMBRELLA) + return UQ_4_12(1.0); + + if (ctx->weather & B_WEATHER_RAIN) { - return 60; + if (ctx->moveType != TYPE_FIRE && ctx->moveType != TYPE_WATER) + return UQ_4_12(1.0); + return (ctx->moveType == TYPE_FIRE) ? UQ_4_12(0.5) : UQ_4_12(1.5); } + if (ctx->weather & B_WEATHER_SUN) + { + if (ctx->moveType != TYPE_FIRE && ctx->moveType != TYPE_WATER) + return UQ_4_12(1.0); + return (ctx->moveType == TYPE_WATER) ? UQ_4_12(0.5) : UQ_4_12(1.5); + } + return UQ_4_12(1.0); +} - return uq4_12_multiply_by_int_half_down(modifier, basePower); +static inline uq4_12_t GetBurnOrFrostBiteModifier(struct DamageContext *ctx) +{ + enum BattleMoveEffects moveEffect = GetMoveEffect(ctx->move); + + if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_BURN + && IsBattleMovePhysical(ctx->move) + && (GetConfig(CONFIG_BURN_FACADE_DMG) < GEN_6 || moveEffect != EFFECT_FACADE) + && ctx->abilityAtk != ABILITY_GUTS) + return UQ_4_12(0.5); + if (gBattleMons[ctx->battlerAtk].status1 & STATUS1_FROSTBITE + && IsBattleMoveSpecial(ctx->move) + && (GetConfig(CONFIG_BURN_FACADE_DMG) < GEN_6 || moveEffect != EFFECT_FACADE)) + return UQ_4_12(0.5); + return UQ_4_12(1.0); } -static inline u32 CalcAttackStat(struct DamageCalculationData *damageCalcData, u32 atkAbility, u32 defAbility, enum ItemHoldEffect holdEffectAtk, u32 weather) +static inline uq4_12_t GetCriticalModifier(bool32 isCrit) { - u8 atkStage; - u32 atkStat; - uq4_12_t modifier; - u16 atkBaseSpeciesId; - u32 battlerAtk = damageCalcData->battlerAtk; - u32 battlerDef = damageCalcData->battlerDef; - u32 move = damageCalcData->move; - u32 moveType = damageCalcData->moveType; - enum BattleMoveEffects moveEffect = GetMoveEffect(move); + if (isCrit) + return GetConfig(CONFIG_CRIT_MULTIPLIER) >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0); + return UQ_4_12(1.0); +} - atkBaseSpeciesId = GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species); +static inline uq4_12_t GetGlaiveRushModifier(u32 battlerDef) +{ + if (gBattleMons[battlerDef].volatiles.glaiveRush) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} - if (moveEffect == EFFECT_FOUL_PLAY) +static inline uq4_12_t GetZMaxMoveAgainstProtectionModifier(struct DamageContext *ctx) +{ + if (!IsZMove(ctx->move) && !IsMaxMove(ctx->move)) + return UQ_4_12(1.0); + + u32 protected = gProtectStructs[ctx->battlerDef].protected; + if (GetProtectType(protected) == PROTECT_TYPE_SINGLE && protected != PROTECT_MAX_GUARD) + return UQ_4_12(0.25); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetMinimizeModifier(u32 move, u32 battlerDef) +{ + if (MoveIncreasesPowerToMinimizedTargets(move) && gBattleMons[battlerDef].volatiles.minimize) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetUndergroundModifier(u32 move, u32 battlerDef) +{ + if (MoveDamagesUnderground(move) && gBattleMons[battlerDef].volatiles.semiInvulnerable == STATE_UNDERGROUND) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetDiveModifier(u32 move, u32 battlerDef) +{ + if (MoveDamagesUnderWater(move) && gBattleMons[battlerDef].volatiles.semiInvulnerable == STATE_UNDERWATER) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetAirborneModifier(u32 move, u32 battlerDef) +{ + if (MoveDamagesAirborneDoubleDamage(move) && gBattleMons[battlerDef].volatiles.semiInvulnerable == STATE_ON_AIR) + return UQ_4_12(2.0); + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetScreensModifier(struct DamageContext *ctx) +{ + u32 sideStatus = gSideStatuses[GetBattlerSide(ctx->battlerDef)]; + bool32 lightScreen = (sideStatus & SIDE_STATUS_LIGHTSCREEN) && IsBattleMoveSpecial(ctx->move); + bool32 reflect = (sideStatus & SIDE_STATUS_REFLECT) && IsBattleMovePhysical(ctx->move); + bool32 auroraVeil = sideStatus & SIDE_STATUS_AURORA_VEIL; + + if (ctx->isCrit || gProtectStructs[ctx->battlerAtk].confusionSelfDmg) { - if (IsBattleMovePhysical(move)) - { - atkStat = gBattleMons[battlerDef].attack; - atkStage = gBattleMons[battlerDef].statStages[STAT_ATK]; - } - else - { - atkStat = gBattleMons[battlerDef].spAttack; - atkStage = gBattleMons[battlerDef].statStages[STAT_SPATK]; - } + return UQ_4_12(1.0); } - else if (moveEffect == EFFECT_BODY_PRESS) + if (ctx->abilityAtk == ABILITY_INFILTRATOR) { - if (IsBattleMovePhysical(move)) - { - atkStat = gBattleMons[battlerAtk].defense; - // Edge case: Body Press used during Wonder Room. For some reason, it still uses Defense over Sp.Def, but uses Sp.Def stat changes - if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) - atkStage = gBattleMons[battlerAtk].statStages[STAT_SPDEF]; - else - atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF]; - } - else - { - atkStat = gBattleMons[battlerAtk].spDefense; - atkStage = gBattleMons[battlerAtk].statStages[STAT_SPDEF]; - } + if (ctx->updateFlags) + RecordAbilityBattle(ctx->battlerAtk, ctx->abilityDef); + return UQ_4_12(1.0); } - else + if (reflect || lightScreen || auroraVeil) { - if (IsBattleMovePhysical(move)) - { - atkStat = gBattleMons[battlerAtk].attack; - atkStage = gBattleMons[battlerAtk].statStages[STAT_ATK]; - } - else - { - atkStat = gBattleMons[battlerAtk].spAttack; - atkStage = gBattleMons[battlerAtk].statStages[STAT_SPATK]; - } + return (IsDoubleBattle()) ? UQ_4_12(0.667) : UQ_4_12(0.5); } + return UQ_4_12(1.0); +} - // critical hits ignore attack stat's stage drops - if (damageCalcData->isCrit && atkStage < DEFAULT_STAT_STAGE) - atkStage = DEFAULT_STAT_STAGE; - // pokemon with unaware ignore attack stat changes while taking damage - if (defAbility == ABILITY_UNAWARE) - atkStage = DEFAULT_STAT_STAGE; - - atkStat *= gStatStageRatios[atkStage][0]; - atkStat /= gStatStageRatios[atkStage][1]; - - // apply attack stat modifiers - modifier = UQ_4_12(1.0); +static inline uq4_12_t GetCollisionCourseElectroDriftModifier(u32 move, uq4_12_t typeEffectivenessModifier) +{ + if (GetMoveEffect(move) == EFFECT_COLLISION_COURSE && typeEffectivenessModifier >= UQ_4_12(2.0)) + return UQ_4_12(1.3333); + return UQ_4_12(1.0); +} - // attacker's abilities - switch (atkAbility) +static inline uq4_12_t GetAttackerAbilitiesModifier(u32 battlerAtk, uq4_12_t typeEffectivenessModifier, bool32 isCrit, enum Ability abilityAtk) +{ + switch (abilityAtk) { - case ABILITY_HUGE_POWER: - case ABILITY_PURE_POWER: - if (IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); - break; - case ABILITY_SLOW_START: - if (gDisableStructs[battlerAtk].slowStartTimer > gBattleTurnCounter) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); - break; - case ABILITY_SOLAR_POWER: - if (IsBattleMoveSpecial(move) && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - case ABILITY_DEFEATIST: - if (gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 2)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); - break; - case ABILITY_FLASH_FIRE: - if (moveType == TYPE_FIRE && gDisableStructs[battlerAtk].flashFireBoosted) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - case ABILITY_SWARM: - if (moveType == TYPE_BUG && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + case ABILITY_NEUROFORCE: + if (typeEffectivenessModifier >= UQ_4_12(2.0)) + return UQ_4_12(1.25); break; - case ABILITY_TORRENT: - if (moveType == TYPE_WATER && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + case ABILITY_SNIPER: + if (isCrit) + return UQ_4_12(1.5); break; - case ABILITY_BLAZE: - if (moveType == TYPE_FIRE && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + case ABILITY_TINTED_LENS: + if (typeEffectivenessModifier <= UQ_4_12(0.5)) + return UQ_4_12(2.0); break; - case ABILITY_OVERGROW: - if (moveType == TYPE_GRASS && gBattleMons[battlerAtk].hp <= (gBattleMons[battlerAtk].maxHP / 3)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + default: break; - case ABILITY_PLUS: - if (IsBattleMoveSpecial(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + } + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetDefenderAbilitiesModifier(struct DamageContext *ctx) +{ + bool32 recordAbility = FALSE; + uq4_12_t modifier = UQ_4_12(1.0); + + switch (ctx->abilityDef) + { + case ABILITY_MULTISCALE: + case ABILITY_SHADOW_SHIELD: + if (IsBattlerAtMaxHp(ctx->battlerDef)) { - u32 partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); - if (partnerAbility == ABILITY_MINUS - || (B_PLUS_MINUS_INTERACTION >= GEN_5 && partnerAbility == ABILITY_PLUS)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + modifier = UQ_4_12(0.5); + recordAbility = TRUE; } break; - case ABILITY_MINUS: - if (IsBattleMoveSpecial(move) && IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) + case ABILITY_FILTER: + case ABILITY_SOLID_ROCK: + case ABILITY_PRISM_ARMOR: + if (ctx->typeEffectivenessModifier >= UQ_4_12(2.0)) { - u32 partnerAbility = GetBattlerAbility(BATTLE_PARTNER(battlerAtk)); - if (partnerAbility == ABILITY_PLUS - || (B_PLUS_MINUS_INTERACTION >= GEN_5 && partnerAbility == ABILITY_MINUS)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + modifier = UQ_4_12(0.75); + recordAbility = TRUE; } break; - case ABILITY_FLOWER_GIFT: - if (gBattleMons[battlerAtk].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN) && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - case ABILITY_HUSTLE: - if (IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - case ABILITY_STAKEOUT: - if (gDisableStructs[battlerDef].isFirstTurn == 2) // just switched in - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); - break; - case ABILITY_GUTS: - if (gBattleMons[battlerAtk].status1 & STATUS1_ANY && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - case ABILITY_TRANSISTOR: - if (moveType == TYPE_ELECTRIC) + case ABILITY_FLUFFY: + if (ctx->moveType == TYPE_FIRE && !IsMoveMakingContact(ctx->battlerAtk, ctx->battlerDef, ABILITY_NONE, ctx->holdEffectAtk, ctx->move)) { - if (B_TRANSISTOR_BOOST >= GEN_9) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - else - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); + modifier = UQ_4_12(2.0); + recordAbility = TRUE; } - break; - case ABILITY_DRAGONS_MAW: - if (moveType == TYPE_DRAGON) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - break; - case ABILITY_GORILLA_TACTICS: - if (IsBattleMovePhysical(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - break; - case ABILITY_ROCKY_PAYLOAD: - if (moveType == TYPE_ROCK) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); - break; - case ABILITY_PROTOSYNTHESIS: - if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) + if (ctx->moveType != TYPE_FIRE && IsMoveMakingContact(ctx->battlerAtk, ctx->battlerDef, ABILITY_NONE, ctx->holdEffectAtk, ctx->move)) { - u32 atkHighestStat = GetHighestStatId(battlerAtk); - if (((weather & B_WEATHER_SUN) && HasWeatherEffect()) || gDisableStructs[battlerAtk].boosterEnergyActivates) - { - if ((IsBattleMovePhysical(move) && atkHighestStat == STAT_ATK) || (IsBattleMoveSpecial(move) && atkHighestStat == STAT_SPATK)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - } + modifier = UQ_4_12(0.5); + recordAbility = TRUE; } break; - case ABILITY_QUARK_DRIVE: - if (!(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) + case ABILITY_PUNK_ROCK: + if (IsSoundMove(ctx->move)) { - u32 atkHighestStat = GetHighestStatId(battlerAtk); - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gDisableStructs[battlerAtk].boosterEnergyActivates) - { - if ((IsBattleMovePhysical(move) && atkHighestStat == STAT_ATK) || (IsBattleMoveSpecial(move) && atkHighestStat == STAT_SPATK)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); - } + modifier = UQ_4_12(0.5); + recordAbility = TRUE; } break; - case ABILITY_ORICHALCUM_PULSE: - if ((weather & B_WEATHER_SUN) && HasWeatherEffect() && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3333)); - break; - case ABILITY_HADRON_ENGINE: - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && IsBattleMoveSpecial(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3333)); - break; - } - - // target's abilities - switch (defAbility) - { - case ABILITY_THICK_FAT: - if (moveType == TYPE_FIRE || moveType == TYPE_ICE) + case ABILITY_ICE_SCALES: + if (IsBattleMoveSpecial(ctx->move)) { - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); - if (damageCalcData->updateFlags) - RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT); + modifier = UQ_4_12(0.5); + recordAbility = TRUE; } break; + default: + break; } - // ally's abilities - if (IsBattlerAlive(BATTLE_PARTNER(battlerAtk))) - { - switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk))) - { - case ABILITY_FLOWER_GIFT: - if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerAtk), B_WEATHER_SUN) && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - } - } + if (recordAbility && ctx->updateFlags) + RecordAbilityBattle(ctx->battlerAtk, ctx->abilityDef); - // field abilities - if (IsAbilityOnField(ABILITY_VESSEL_OF_RUIN) && atkAbility != ABILITY_VESSEL_OF_RUIN && IsBattleMoveSpecial(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + return modifier; +} - if (IsAbilityOnField(ABILITY_TABLETS_OF_RUIN) && atkAbility != ABILITY_TABLETS_OF_RUIN && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); +static inline uq4_12_t GetDefenderPartnerAbilitiesModifier(u32 battlerPartnerDef) +{ + if (!IsBattlerAlive(battlerPartnerDef)) + return UQ_4_12(1.0); - // attacker's hold effect - switch (holdEffectAtk) + switch (GetBattlerAbility(battlerPartnerDef)) { - case HOLD_EFFECT_THICK_CLUB: - if ((atkBaseSpeciesId == SPECIES_CUBONE || atkBaseSpeciesId == SPECIES_MAROWAK) && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + case ABILITY_FRIEND_GUARD: + return UQ_4_12(0.75); break; - case HOLD_EFFECT_DEEP_SEA_TOOTH: - if (gBattleMons[battlerAtk].species == SPECIES_CLAMPERL && IsBattleMoveSpecial(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + default: break; - case HOLD_EFFECT_LIGHT_BALL: - if (atkBaseSpeciesId == SPECIES_PIKACHU && (B_LIGHT_BALL_ATTACK_BOOST >= GEN_4 || IsBattleMoveSpecial(move))) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + } + return UQ_4_12(1.0); +} + +static inline uq4_12_t GetAttackerItemsModifier(u32 battlerAtk, uq4_12_t typeEffectivenessModifier, enum HoldEffect holdEffectAtk) +{ + u32 metronomeTurns; + uq4_12_t metronomeBoostBase; + switch (holdEffectAtk) + { + case HOLD_EFFECT_METRONOME: + metronomeBoostBase = PercentToUQ4_12(GetBattlerHoldEffectParam(battlerAtk)); + metronomeTurns = min(gBattleStruct->metronomeItemCounter[battlerAtk], 5); + // according to bulbapedia this is the "correct" way to calculate the metronome boost + // due to the limited domain of damage numbers it will never really matter whether this is off by one + return uq4_12_add(UQ_4_12(1.0), metronomeBoostBase * metronomeTurns); break; - case HOLD_EFFECT_CHOICE_BAND: - if (IsBattleMovePhysical(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + case HOLD_EFFECT_EXPERT_BELT: + if (typeEffectivenessModifier >= UQ_4_12(2.0)) + return UQ_4_12(1.2); break; - case HOLD_EFFECT_CHOICE_SPECS: - if (IsBattleMoveSpecial(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + case HOLD_EFFECT_LIFE_ORB: + return UQ_4_12_FLOORED(1.3); break; default: break; } - - // The offensive stats of a Player's PokΓ©mon are boosted by x1.1 (+10%) if they have the corresponding flags set (eg. Badges) - if (ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_ATTACK, battlerAtk) && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.1)); - if (ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_SPATK, battlerAtk) && IsBattleMoveSpecial(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.1)); - - return uq4_12_multiply_by_int_half_down(modifier, atkStat); + return UQ_4_12(1.0); } -static bool32 CanEvolve(u32 species) +static inline uq4_12_t GetDefenderItemsModifier(struct DamageContext *ctx) { - u32 i; - const struct Evolution *evolutions = GetSpeciesEvolutions(species); - - if (evolutions != NULL) + switch (ctx->holdEffectDef) { - for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) + case HOLD_EFFECT_RESIST_BERRY: + if (IsUnnerveBlocked(ctx->battlerDef, gBattleMons[ctx->battlerDef].item)) + return UQ_4_12(1.0); + if (ctx->moveType == GetBattlerHoldEffectParam(ctx->battlerDef) && (ctx->moveType == TYPE_NORMAL || ctx->typeEffectivenessModifier >= UQ_4_12(2.0))) { - if (evolutions[i].method - && SanitizeSpeciesId(evolutions[i].targetSpecies) != SPECIES_NONE) - return TRUE; + if (ctx->updateFlags) + gSpecialStatuses[ctx->battlerDef].berryReduced = TRUE; + return (ctx->abilityDef == ABILITY_RIPEN) ? UQ_4_12(0.25) : UQ_4_12(0.5); } + break; + default: + break; } - return FALSE; + return UQ_4_12(1.0); } -static inline u32 CalcDefenseStat(struct DamageCalculationData *damageCalcData, u32 atkAbility, u32 defAbility, enum ItemHoldEffect holdEffectDef, u32 weather) +#define DAMAGE_MULTIPLY_MODIFIER(modifier) do { \ + finalModifier = uq4_12_multiply_half_down(modifier, finalModifier); \ +} while (0) + +// Calculates the "other" modifier which accounts for held items, abilities, +// or very specific interactions of moves that are not handled in the basic +// damage calculation. It is implemented as described by bulbapedia: +// https://bulbapedia.bulbagarden.net/wiki/Damage#Generation_V_onward +// Please Note: Fixed Point Multiplication is not associative. +// The order of operations is relevant. +static inline uq4_12_t GetOtherModifiers(struct DamageContext *ctx) { - bool32 usesDefStat; - u8 defStage; - u32 defStat, def, spDef; - uq4_12_t modifier; - u32 battlerDef = damageCalcData->battlerDef; - u32 move = damageCalcData->move; - u32 moveType = damageCalcData->moveType; - enum BattleMoveEffects moveEffect = GetMoveEffect(move); + uq4_12_t finalModifier = UQ_4_12(1.0); + u32 battlerDefPartner = BATTLE_PARTNER(ctx->battlerDef); + u32 unmodifiedAttackerSpeed = gBattleMons[ctx->battlerAtk].speed; + u32 unmodifiedDefenderSpeed = gBattleMons[ctx->battlerDef].speed; + + //TODO: Behemoth Blade, Behemoth Bash, Dynamax Cannon (Dynamax) + DAMAGE_MULTIPLY_MODIFIER(GetMinimizeModifier(ctx->move, ctx->battlerDef)); + DAMAGE_MULTIPLY_MODIFIER(GetUndergroundModifier(ctx->move, ctx->battlerDef)); + DAMAGE_MULTIPLY_MODIFIER(GetDiveModifier(ctx->move, ctx->battlerDef)); + DAMAGE_MULTIPLY_MODIFIER(GetAirborneModifier(ctx->move, ctx->battlerDef)); + DAMAGE_MULTIPLY_MODIFIER(GetScreensModifier(ctx)); + DAMAGE_MULTIPLY_MODIFIER(GetCollisionCourseElectroDriftModifier(ctx->move, ctx->typeEffectivenessModifier)); - if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped + if (unmodifiedAttackerSpeed >= unmodifiedDefenderSpeed) { - def = gBattleMons[battlerDef].spDefense; - spDef = gBattleMons[battlerDef].defense; + DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(ctx->battlerAtk, ctx->typeEffectivenessModifier, ctx->isCrit, ctx->abilityAtk)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(ctx)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner)); + DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(ctx->battlerAtk, ctx->typeEffectivenessModifier, ctx->holdEffectAtk)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(ctx)); } else { - def = gBattleMons[battlerDef].defense; - spDef = gBattleMons[battlerDef].spDefense; + DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(ctx)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner)); + DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(ctx->battlerAtk, ctx->typeEffectivenessModifier, ctx->isCrit, ctx->abilityAtk)); + DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(ctx)); + DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(ctx->battlerAtk, ctx->typeEffectivenessModifier, ctx->holdEffectAtk)); } + return finalModifier; +} - if (moveEffect == EFFECT_PSYSHOCK || IsBattleMovePhysical(move)) // uses defense stat instead of sp.def +#undef DAMAGE_ACCUMULATE_MULTIPLIER + +#define DAMAGE_APPLY_MODIFIER(modifier) do { \ + dmg = uq4_12_multiply_by_int_half_down(modifier, dmg); \ +} while (0) + +static inline s32 DoMoveDamageCalcVars(struct DamageContext *ctx) +{ + s32 dmg; + u32 userFinalAttack; + u32 targetFinalDefense; + + if (ctx->fixedBasePower) + gBattleMovePower = ctx->fixedBasePower; + else + gBattleMovePower = CalcMoveBasePowerAfterModifiers(ctx); + + userFinalAttack = CalcAttackStat(ctx); + targetFinalDefense = CalcDefenseStat(ctx); + + dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, gBattleMons[ctx->battlerAtk].level, targetFinalDefense); + DAMAGE_APPLY_MODIFIER(GetTargetDamageModifier(ctx)); + DAMAGE_APPLY_MODIFIER(GetParentalBondModifier(ctx->battlerAtk)); + DAMAGE_APPLY_MODIFIER(GetWeatherDamageModifier(ctx)); + DAMAGE_APPLY_MODIFIER(GetCriticalModifier(ctx->isCrit)); + DAMAGE_APPLY_MODIFIER(GetGlaiveRushModifier(ctx->battlerDef)); + + if (ctx->randomFactor) { - defStat = def; - defStage = gBattleMons[battlerDef].statStages[STAT_DEF]; - usesDefStat = TRUE; + dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); + dmg /= 100; } - else // is special + else // Apply rest of modifiers in the ai function { - defStat = spDef; - defStage = gBattleMons[battlerDef].statStages[STAT_SPDEF]; - usesDefStat = FALSE; + if (dmg == 0) + dmg = 1; + return dmg; } - // Self-destruct / Explosion cut defense in half - if (B_EXPLOSION_DEFENSE < GEN_5 && moveEffect == EFFECT_EXPLOSION) - defStat /= 2; + dmg = ApplyModifiersAfterDmgRoll(ctx, dmg); - // critical hits ignore positive stat changes - if (damageCalcData->isCrit && defStage > DEFAULT_STAT_STAGE) - defStage = DEFAULT_STAT_STAGE; - // pokemon with unaware ignore defense stat changes while dealing damage - if (atkAbility == ABILITY_UNAWARE) - defStage = DEFAULT_STAT_STAGE; - // certain moves also ignore stat changes - if (MoveIgnoresDefenseEvasionStages(move)) - defStage = DEFAULT_STAT_STAGE; + if (dmg == 0) + dmg = 1; + return dmg; +} - defStat *= gStatStageRatios[defStage][0]; - defStat /= gStatStageRatios[defStage][1]; +s32 ApplyModifiersAfterDmgRoll(struct DamageContext *ctx, s32 dmg) +{ + if (GetActiveGimmick(ctx->battlerAtk) == GIMMICK_TERA) + DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(ctx)); + else + DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(ctx)); + DAMAGE_APPLY_MODIFIER(ctx->typeEffectivenessModifier); + DAMAGE_APPLY_MODIFIER(GetBurnOrFrostBiteModifier(ctx)); + DAMAGE_APPLY_MODIFIER(GetZMaxMoveAgainstProtectionModifier(ctx)); + DAMAGE_APPLY_MODIFIER(GetOtherModifiers(ctx)); - // apply defense stat modifiers - modifier = UQ_4_12(1.0); + return dmg; +} - // target's abilities - switch (defAbility) +s32 DoFixedDamageMoveCalc(struct DamageContext *ctx) +{ + s32 dmg = 0; + s32 randDamage; + + switch (GetMoveEffect(ctx->move)) { - case ABILITY_MARVEL_SCALE: - if (gBattleMons[battlerDef].status1 & STATUS1_ANY && usesDefStat) - { - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - if (damageCalcData->updateFlags) - RecordAbilityBattle(battlerDef, ABILITY_MARVEL_SCALE); - } + case EFFECT_LEVEL_DAMAGE: + dmg = gBattleMons[ctx->battlerAtk].level; break; - case ABILITY_FUR_COAT: - if (usesDefStat) - { - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); - if (damageCalcData->updateFlags) - RecordAbilityBattle(battlerDef, ABILITY_FUR_COAT); - } + case EFFECT_PSYWAVE: + randDamage = B_PSYWAVE_DMG >= GEN_5 ? (Random() % 101) : ((Random() % 11) * 10); + dmg = gBattleMons[ctx->battlerAtk].level * (randDamage + 50) / 100; break; - case ABILITY_GRASS_PELT: - if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && usesDefStat) - { - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - if (damageCalcData->updateFlags) - RecordAbilityBattle(battlerDef, ABILITY_GRASS_PELT); - } + case EFFECT_FIXED_HP_DAMAGE: + dmg = GetMoveFixedHPDamage(ctx->move); break; - case ABILITY_FLOWER_GIFT: - if (gBattleMons[battlerDef].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + case EFFECT_FIXED_PERCENT_DAMAGE: + dmg = GetNonDynamaxHP(ctx->battlerDef) * GetMoveDamagePercentage(ctx->move) / 100; break; - case ABILITY_PURIFYING_SALT: - if (moveType == TYPE_GHOST) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + case EFFECT_FINAL_GAMBIT: + dmg = GetNonDynamaxHP(ctx->battlerAtk); + break; + case EFFECT_BEAT_UP: + if (GetConfig(CONFIG_BEAT_UP) < GEN_5) + dmg = CalcBeatUpDamage(ctx); + else + return INT32_MAX; break; + default: + return INT32_MAX; } - // ally's abilities - if (IsBattlerAlive(BATTLE_PARTNER(battlerDef))) - { - switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef))) - { - case ABILITY_FLOWER_GIFT: - if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(BATTLE_PARTNER(battlerDef), B_WEATHER_SUN) && !usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - } - } + gBattleStruct->moveResultFlags[ctx->battlerDef] &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE); - // field abilities - if (IsAbilityOnField(ABILITY_SWORD_OF_RUIN) && defAbility != ABILITY_SWORD_OF_RUIN && usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + if (dmg == 0) + dmg = 1; - if (IsAbilityOnField(ABILITY_BEADS_OF_RUIN) && defAbility != ABILITY_BEADS_OF_RUIN && !usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.75)); + return dmg; +} - // target's hold effects - switch (holdEffectDef) - { - case HOLD_EFFECT_DEEP_SEA_SCALE: - if (gBattleMons[battlerDef].species == SPECIES_CLAMPERL && !usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); - break; - case HOLD_EFFECT_METAL_POWDER: - if (gBattleMons[battlerDef].species == SPECIES_DITTO && usesDefStat && !(gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); - break; - case HOLD_EFFECT_EVIOLITE: - if (CanEvolve(gBattleMons[battlerDef].species)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - case HOLD_EFFECT_ASSAULT_VEST: - if (!usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - case HOLD_EFFECT_SOUL_DEW: - if (B_SOUL_DEW_BOOST < GEN_7 - && (gBattleMons[battlerDef].species == SPECIES_LATIAS || gBattleMons[battlerDef].species == SPECIES_LATIOS) - && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - && !usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - break; - default: - break; +static inline s32 DoMoveDamageCalc(struct DamageContext *ctx) +{ + if (ctx->typeEffectivenessModifier == UQ_4_12(0.0)) + return 0; + + s32 dmg = DoFixedDamageMoveCalc(ctx); + if (dmg != INT32_MAX) + return dmg; + + ctx->abilityAtk = GetBattlerAbility(ctx->battlerAtk); + ctx->abilityDef = GetBattlerAbility(ctx->battlerDef); + ctx->holdEffectDef = GetBattlerHoldEffect(ctx->battlerDef); + ctx->holdEffectAtk = GetBattlerHoldEffect(ctx->battlerAtk); + + return DoMoveDamageCalcVars(ctx); +} + +static inline s32 DoFutureSightAttackDamageCalcVars(struct DamageContext *ctx) +{ + s32 dmg; + u32 userFinalAttack; + u32 targetFinalDefense; + u32 battlerAtk = ctx->battlerAtk; + u32 battlerDef = ctx->battlerDef; + u32 move = ctx->move; + enum Type moveType = ctx->moveType; + + struct Pokemon *party = GetBattlerParty(battlerAtk); + struct Pokemon *partyMon = &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]]; + u32 partyMonLevel = GetMonData(partyMon, MON_DATA_LEVEL, NULL); + u32 partyMonSpecies = GetMonData(partyMon, MON_DATA_SPECIES, NULL); + gBattleMovePower = GetMovePower(move); + + if (IsBattleMovePhysical(move)) + userFinalAttack = GetMonData(partyMon, MON_DATA_ATK, NULL); + else + userFinalAttack = GetMonData(partyMon, MON_DATA_SPATK, NULL); + + targetFinalDefense = CalcDefenseStat(ctx); + dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, partyMonLevel, targetFinalDefense); + + DAMAGE_APPLY_MODIFIER(GetCriticalModifier(ctx->isCrit)); + + if (ctx->randomFactor) + { + dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); + dmg /= 100; } - // sandstorm sp.def boost for rock types - if (B_SANDSTORM_SPDEF_BOOST >= GEN_4 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SANDSTORM) && !usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); - // snow def boost for ice types - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SNOW) && usesDefStat) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); + // Same type attack bonus + if (GetSpeciesType(partyMonSpecies, 0) == moveType || GetSpeciesType(partyMonSpecies, 1) == moveType) + DAMAGE_APPLY_MODIFIER(UQ_4_12(1.5)); + else + DAMAGE_APPLY_MODIFIER(UQ_4_12(1.0)); + DAMAGE_APPLY_MODIFIER(ctx->typeEffectivenessModifier); - // The offensive stats of a Player's PokΓ©mon are boosted by x1.1 (+10%) if they have the corresponding flags set (eg. Badges) - if (ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_DEFENSE, battlerDef) && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.1)); - if (ShouldGetStatBadgeBoost(B_FLAG_BADGE_BOOST_SPDEF, battlerDef) && IsBattleMoveSpecial(move)) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.1)); + if (dmg == 0) + dmg = 1; - return uq4_12_multiply_by_int_half_down(modifier, defStat); + return dmg; } -// base damage formula before adding any modifiers -static inline s32 CalculateBaseDamage(u32 power, u32 userFinalAttack, u32 level, u32 targetFinalDefense) +static inline s32 DoFutureSightAttackDamageCalc(struct DamageContext *ctx) { - return power * userFinalAttack * (2 * level / 5 + 2) / targetFinalDefense / 50 + 2; -} + if (ctx->typeEffectivenessModifier == UQ_4_12(0.0)) + return 0; -static inline uq4_12_t GetTargetDamageModifier(struct DamageCalculationData *damageCalcData) -{ - if (IsDoubleBattle() && GetMoveTargetCount(damageCalcData) >= 2) - return B_MULTIPLE_TARGETS_DMG >= GEN_4 ? UQ_4_12(0.75) : UQ_4_12(0.5); - return UQ_4_12(1.0); + return DoFutureSightAttackDamageCalcVars(ctx); } -static inline uq4_12_t GetParentalBondModifier(u32 battlerAtk) -{ - if (gSpecialStatuses[battlerAtk].parentalBondState != PARENTAL_BOND_2ND_HIT) - return UQ_4_12(1.0); - return B_PARENTAL_BOND_DMG >= GEN_7 ? UQ_4_12(0.25) : UQ_4_12(0.5); -} +#undef DAMAGE_APPLY_MODIFIER -static inline uq4_12_t GetSameTypeAttackBonusModifier(struct DamageCalculationData *damageCalcData, u32 abilityAtk) +static u32 GetWeather(void) { - u32 battlerAtk = damageCalcData->battlerAtk; - u32 move = damageCalcData->move; - u32 moveType = damageCalcData->moveType; - - if (moveType == TYPE_MYSTERY) - return UQ_4_12(1.0); - else if (gBattleStruct->pledgeMove && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), moveType)) - return (abilityAtk == ABILITY_ADAPTABILITY) ? UQ_4_12(2.0) : UQ_4_12(1.5); - else if (!IS_BATTLER_OF_TYPE(battlerAtk, moveType) || move == MOVE_STRUGGLE || move == MOVE_NONE) - return UQ_4_12(1.0); - return (abilityAtk == ABILITY_ADAPTABILITY) ? UQ_4_12(2.0) : UQ_4_12(1.5); + if (gBattleWeather == B_WEATHER_NONE || !HasWeatherEffect()) + return B_WEATHER_NONE; + else + return gBattleWeather; } -// Utility Umbrella holders take normal damage from what would be rain- and sun-weakened attacks. -static uq4_12_t GetWeatherDamageModifier(struct DamageCalculationData *damageCalcData, enum ItemHoldEffect holdEffectAtk, enum ItemHoldEffect holdEffectDef, u32 weather) +bool32 IsFutureSightAttackerInParty(u32 battlerAtk, u32 battlerDef, u32 move) { - u32 move = damageCalcData->move; - u32 moveType = damageCalcData->moveType; - - if (weather == B_WEATHER_NONE) - return UQ_4_12(1.0); - if (GetMoveEffect(move) == EFFECT_HYDRO_STEAM && (weather & B_WEATHER_SUN) && holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA) - return UQ_4_12(1.5); - if (holdEffectDef == HOLD_EFFECT_UTILITY_UMBRELLA) - return UQ_4_12(1.0); + if (GetMoveEffect(move) != EFFECT_FUTURE_SIGHT) + return FALSE; - if (weather & B_WEATHER_RAIN) - { - if (moveType != TYPE_FIRE && moveType != TYPE_WATER) - return UQ_4_12(1.0); - return (moveType == TYPE_FIRE) ? UQ_4_12(0.5) : UQ_4_12(1.5); - } - if (weather & B_WEATHER_SUN) + struct Pokemon *party = GetBattlerParty(battlerAtk); + if (IsDoubleBattle()) { - if (moveType != TYPE_FIRE && moveType != TYPE_WATER) - return UQ_4_12(1.0); - return (moveType == TYPE_WATER) ? UQ_4_12(0.5) : UQ_4_12(1.5); + return &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]] != &party[gBattlerPartyIndexes[battlerAtk]] + && &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]] != &party[gBattlerPartyIndexes[BATTLE_PARTNER(battlerAtk)]]; } - return UQ_4_12(1.0); + + return &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]] != &party[gBattlerPartyIndexes[battlerAtk]]; } -static inline uq4_12_t GetBurnOrFrostBiteModifier(struct DamageCalculationData *damageCalcData, u32 abilityAtk) +s32 CalculateMoveDamage(struct DamageContext *ctx) { - u32 battlerAtk = damageCalcData->battlerAtk; - u32 move = damageCalcData->move; - enum BattleMoveEffects moveEffect = GetMoveEffect(move); + ctx->weather = GetWeather(); + ctx->abilityAtk = GetBattlerAbility(ctx->battlerAtk); + ctx->abilityDef = GetBattlerAbility(ctx->battlerDef); + ctx->holdEffectAtk = GetBattlerHoldEffect(ctx->battlerAtk); + ctx->holdEffectDef = GetBattlerHoldEffect(ctx->battlerDef); - if (gBattleMons[battlerAtk].status1 & STATUS1_BURN - && IsBattleMovePhysical(move) - && (B_BURN_FACADE_DMG < GEN_6 || moveEffect != EFFECT_FACADE) - && abilityAtk != ABILITY_GUTS) - return UQ_4_12(0.5); - if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE - && IsBattleMoveSpecial(move) - && (B_BURN_FACADE_DMG < GEN_6 || moveEffect != EFFECT_FACADE)) - return UQ_4_12(0.5); - return UQ_4_12(1.0); -} + ctx->typeEffectivenessModifier = CalcTypeEffectivenessMultiplier(ctx); -static inline uq4_12_t GetCriticalModifier(bool32 isCrit) -{ - if (isCrit) - return GetGenConfig(GEN_CONFIG_CRIT_MULTIPLIER) >= GEN_6 ? UQ_4_12(1.5) : UQ_4_12(2.0); - return UQ_4_12(1.0); -} + if (IsFutureSightAttackerInParty(ctx->battlerAtk, ctx->battlerDef, ctx->move)) + return DoFutureSightAttackDamageCalc(ctx); -static inline uq4_12_t GetGlaiveRushModifier(u32 battlerDef) -{ - if (gStatuses4[battlerDef] & STATUS4_GLAIVE_RUSH) - return UQ_4_12(2.0); - return UQ_4_12(1.0); + return DoMoveDamageCalc(ctx); } -static inline uq4_12_t GetZMaxMoveAgainstProtectionModifier(struct DamageCalculationData *damageCalcData) +// for AI so that typeEffectivenessModifier, weather, abilities and holdEffects are calculated only once +s32 CalculateMoveDamageVars(struct DamageContext *ctx) { - if (!IsZMove(damageCalcData->move) && !IsMaxMove(damageCalcData->move)) - return UQ_4_12(1.0); + s32 dmg = DoFixedDamageMoveCalc(ctx); + if (dmg != INT32_MAX) + return dmg; - u32 protected = gProtectStructs[damageCalcData->battlerDef].protected; - if (protected != PROTECT_NONE - && protected != PROTECT_WIDE_GUARD - && protected != PROTECT_QUICK_GUARD - && protected != PROTECT_CRAFTY_SHIELD - && protected != PROTECT_MAT_BLOCK - && protected != PROTECT_MAX_GUARD) - return UQ_4_12(0.25); - return UQ_4_12(1.0); + return DoMoveDamageCalcVars(ctx); } -static inline uq4_12_t GetMinimizeModifier(u32 move, u32 battlerDef) +static inline void MulByTypeEffectiveness(struct DamageContext *ctx, uq4_12_t *modifier, enum Type defType) { - if (MoveIncreasesPowerToMinimizedTargets(move) && gStatuses3[battlerDef] & STATUS3_MINIMIZED) - return UQ_4_12(2.0); - return UQ_4_12(1.0); -} + uq4_12_t mod = GetTypeModifier(ctx->moveType, defType); -static inline uq4_12_t GetUndergroundModifier(u32 move, u32 battlerDef) -{ - if (MoveDamagesUnderground(move) && gStatuses3[battlerDef] & STATUS3_UNDERGROUND) - return UQ_4_12(2.0); - return UQ_4_12(1.0); -} + if (mod == UQ_4_12(0.0) && ctx->holdEffectDef == HOLD_EFFECT_RING_TARGET) + { + mod = UQ_4_12(1.0); + if (ctx->updateFlags) + RecordItemEffectBattle(ctx->battlerDef, HOLD_EFFECT_RING_TARGET); + } + else if ((ctx->moveType == TYPE_FIGHTING || ctx->moveType == TYPE_NORMAL) && defType == TYPE_GHOST && gBattleMons[ctx->battlerDef].volatiles.foresight && mod == UQ_4_12(0.0)) + { + mod = UQ_4_12(1.0); + } + else if ((ctx->moveType == TYPE_FIGHTING || ctx->moveType == TYPE_NORMAL) && defType == TYPE_GHOST + && (ctx->abilityAtk == ABILITY_SCRAPPY || ctx->abilityAtk == ABILITY_MINDS_EYE) + && mod == UQ_4_12(0.0)) + { + mod = UQ_4_12(1.0); + if (ctx->updateFlags) + RecordAbilityBattle(ctx->battlerAtk, ctx->abilityAtk); + } -static inline uq4_12_t GetDiveModifier(u32 move, u32 battlerDef) -{ - if (MoveDamagesUnderWater(move) && gStatuses3[battlerDef] & STATUS3_UNDERWATER) - return UQ_4_12(2.0); - return UQ_4_12(1.0); -} + if (ctx->moveType == TYPE_PSYCHIC && defType == TYPE_DARK && gBattleMons[ctx->battlerDef].volatiles.miracleEye && mod == UQ_4_12(0.0)) + mod = UQ_4_12(1.0); + if (GetMoveEffect(ctx->move) == EFFECT_SUPER_EFFECTIVE_ON_ARG && defType == GetMoveArgType(ctx->move) && !ctx->isAnticipation) + mod = UQ_4_12(2.0); + if (ctx->moveType == TYPE_GROUND && defType == TYPE_FLYING && IsBattlerGrounded(ctx->battlerDef, ctx->abilityDef, ctx->holdEffectDef) && mod == UQ_4_12(0.0)) + mod = UQ_4_12(1.0); + if (ctx->moveType == TYPE_STELLAR && GetActiveGimmick(ctx->battlerDef) == GIMMICK_TERA) + mod = UQ_4_12(2.0); -static inline uq4_12_t GetAirborneModifier(u32 move, u32 battlerDef) -{ - if (MoveDamagesAirborneDoubleDamage(move) && gStatuses3[battlerDef] & STATUS3_ON_AIR) - return UQ_4_12(2.0); - return UQ_4_12(1.0); -} + // B_WEATHER_STRONG_WINDS weakens Super Effective moves against Flying-type PokΓ©mon + if (gBattleWeather & B_WEATHER_STRONG_WINDS && HasWeatherEffect() && !ctx->isAnticipation) + { + if (defType == TYPE_FLYING && mod >= UQ_4_12(2.0)) + mod = UQ_4_12(1.0); + } -static inline uq4_12_t GetScreensModifier(u32 move, u32 battlerAtk, u32 battlerDef, bool32 isCrit, u32 abilityAtk) -{ - u32 sideStatus = gSideStatuses[GetBattlerSide(battlerDef)]; - bool32 lightScreen = (sideStatus & SIDE_STATUS_LIGHTSCREEN) && IsBattleMoveSpecial(move); - bool32 reflect = (sideStatus & SIDE_STATUS_REFLECT) && IsBattleMovePhysical(move); - bool32 auroraVeil = sideStatus & SIDE_STATUS_AURORA_VEIL; + if (gSpecialStatuses[ctx->battlerDef].distortedTypeMatchups || (mod > UQ_4_12(0.0) && ShouldTeraShellDistortTypeMatchups(ctx->move, ctx->battlerDef, ctx->abilityDef))) + { + mod = UQ_4_12(0.5); + if (ctx->updateFlags) + { + RecordAbilityBattle(ctx->battlerDef, ctx->abilityDef); + gSpecialStatuses[ctx->battlerDef].distortedTypeMatchups = TRUE; + gSpecialStatuses[ctx->battlerDef].teraShellAbilityDone = TRUE; + } + } - if (isCrit || abilityAtk == ABILITY_INFILTRATOR || gProtectStructs[battlerAtk].confusionSelfDmg) - return UQ_4_12(1.0); - if (reflect || lightScreen || auroraVeil) - return (IsDoubleBattle()) ? UQ_4_12(0.667) : UQ_4_12(0.5); - return UQ_4_12(1.0); + *modifier = uq4_12_multiply(*modifier, mod); } -static inline uq4_12_t GetCollisionCourseElectroDriftModifier(u32 move, uq4_12_t typeEffectivenessModifier) +static inline void TryNoticeIllusionInTypeEffectiveness(u32 move, enum Type moveType, u32 battlerAtk, u32 battlerDef, uq4_12_t resultingModifier, u32 illusionSpecies) { - if (GetMoveEffect(move) == EFFECT_COLLISION_COURSE && typeEffectivenessModifier >= UQ_4_12(2.0)) - return UQ_4_12(1.3333); - return UQ_4_12(1.0); + // Check if the type effectiveness would've been different if the pokemon really had the types as the disguise. + uq4_12_t presumedModifier = UQ_4_12(1.0); + + struct DamageContext ctx = {0}; + ctx.battlerAtk = battlerAtk; + ctx.battlerDef = battlerDef; + ctx.move = ctx.chosenMove = move; + ctx.moveType = moveType; + ctx.updateFlags = FALSE; + ctx.abilityAtk = GetBattlerAbility(battlerAtk); + ctx.abilityDef = ABILITY_ILLUSION; + ctx.holdEffectAtk = GetBattlerHoldEffect(battlerAtk); + ctx.holdEffectDef = GetBattlerHoldEffect(battlerDef); + + MulByTypeEffectiveness(&ctx, &presumedModifier, GetSpeciesType(illusionSpecies, 0)); + if (GetSpeciesType(illusionSpecies, 1) != GetSpeciesType(illusionSpecies, 0)) + MulByTypeEffectiveness(&ctx, &presumedModifier, GetSpeciesType(illusionSpecies, 1)); + + if (presumedModifier != resultingModifier) + RecordAbilityBattle(ctx.battlerDef, ABILITY_ILLUSION); } -static inline uq4_12_t GetAttackerAbilitiesModifier(u32 battlerAtk, uq4_12_t typeEffectivenessModifier, bool32 isCrit, u32 abilityAtk) +void UpdateMoveResultFlags(uq4_12_t modifier, u16 *resultFlags) { - switch (abilityAtk) + if (modifier == UQ_4_12(0.0)) { - case ABILITY_NEUROFORCE: - if (typeEffectivenessModifier >= UQ_4_12(2.0)) - return UQ_4_12(1.25); - break; - case ABILITY_SNIPER: - if (isCrit) - return UQ_4_12(1.5); - break; - case ABILITY_TINTED_LENS: - if (typeEffectivenessModifier <= UQ_4_12(0.5)) - return UQ_4_12(2.0); - break; + *resultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; + *resultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE); + gBattleStruct->blunderPolicy = FALSE; // Don't activate if missed + } + else if (modifier == UQ_4_12(1.0)) + { + *resultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); + } + else if (modifier > UQ_4_12(1.0)) + { + *resultFlags |= MOVE_RESULT_SUPER_EFFECTIVE; + *resultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); + } + else //if (modifier < UQ_4_12(1.0)) + { + *resultFlags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; + *resultFlags &= ~(MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); } - return UQ_4_12(1.0); } -static inline uq4_12_t GetDefenderAbilitiesModifier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, uq4_12_t typeEffectivenessModifier, u32 abilityDef) +static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(struct DamageContext *ctx, uq4_12_t modifier) { - switch (abilityDef) + u32 illusionSpecies; + enum Type types[3]; + GetBattlerTypes(ctx->battlerDef, FALSE, types); + + MulByTypeEffectiveness(ctx, &modifier, types[0]); + if (types[1] != types[0]) + MulByTypeEffectiveness(ctx, &modifier, types[1]); + if (types[2] != TYPE_MYSTERY && types[2] != types[1] && types[2] != types[0]) + MulByTypeEffectiveness(ctx, &modifier, types[2]); + if (ctx->moveType == TYPE_FIRE && gDisableStructs[ctx->battlerDef].tarShot) + modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + + if (ctx->updateFlags && (illusionSpecies = GetIllusionMonSpecies(ctx->battlerDef))) + TryNoticeIllusionInTypeEffectiveness(ctx->move, ctx->moveType, ctx->battlerAtk, ctx->battlerDef, modifier, illusionSpecies); + + if (GetMoveCategory(ctx->move) == DAMAGE_CATEGORY_STATUS && ctx->move != MOVE_THUNDER_WAVE) { - case ABILITY_MULTISCALE: - case ABILITY_SHADOW_SHIELD: - if (IsBattlerAtMaxHp(battlerDef)) - return UQ_4_12(0.5); - break; - case ABILITY_FILTER: - case ABILITY_SOLID_ROCK: - case ABILITY_PRISM_ARMOR: - if (typeEffectivenessModifier >= UQ_4_12(2.0)) - return UQ_4_12(0.75); - break; - case ABILITY_FLUFFY: - if (!IsMoveMakingContact(move, battlerAtk) && moveType == TYPE_FIRE) - return UQ_4_12(2.0); - if (IsMoveMakingContact(move, battlerAtk) && moveType != TYPE_FIRE) - return UQ_4_12(0.5); - break; - case ABILITY_PUNK_ROCK: - if (IsSoundMove(move)) - return UQ_4_12(0.5); - break; - case ABILITY_ICE_SCALES: - if (IsBattleMoveSpecial(move)) - return UQ_4_12(0.5); - break; + modifier = UQ_4_12(1.0); + if (B_GLARE_GHOST < GEN_4 && ctx->move == MOVE_GLARE && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_GHOST)) + modifier = UQ_4_12(0.0); + } + else if (ctx->moveType == TYPE_GROUND && !IsBattlerGroundedInverseCheck(ctx->battlerDef, ctx->abilityDef, ctx->holdEffectDef, INVERSE_BATTLE, ctx->isAnticipation) && !(MoveIgnoresTypeIfFlyingAndUngrounded(ctx->move))) + { + modifier = UQ_4_12(0.0); + if (ctx->updateFlags && ctx->abilityDef == ABILITY_LEVITATE) + { + gBattleStruct->moveResultFlags[ctx->battlerDef] |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE); + gLastUsedAbility = ABILITY_LEVITATE; + gLastLandedMoves[ctx->battlerDef] = 0; + gBattleStruct->missStringId[ctx->battlerDef] = B_MSG_GROUND_MISS; + RecordAbilityBattle(ctx->battlerDef, ABILITY_LEVITATE); + } + } + else if (GetConfig(CONFIG_SHEER_COLD_IMMUNITY) >= GEN_7 && GetMoveEffect(ctx->move) == EFFECT_SHEER_COLD && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_ICE)) + { + modifier = UQ_4_12(0.0); } - return UQ_4_12(1.0); -} -static inline uq4_12_t GetDefenderPartnerAbilitiesModifier(u32 battlerPartnerDef) -{ - if (!IsBattlerAlive(battlerPartnerDef)) - return UQ_4_12(1.0); + // Thousand Arrows ignores type modifiers for flying mons + if (MoveIgnoresTypeIfFlyingAndUngrounded(ctx->move) + && !IsBattlerGrounded(ctx->battlerDef, ctx->abilityDef, ctx->holdEffectDef) + && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_FLYING)) + { + modifier = UQ_4_12(1.0); + } - switch (GetBattlerAbility(battlerPartnerDef)) + // Iron Ball ignores type modifiers for flying-type mons if it is the only source of grounding + if (GetConfig(CONFIG_IRON_BALL) >= GEN_5 + && ctx->moveType == TYPE_GROUND + && ctx->holdEffectDef == HOLD_EFFECT_IRON_BALL + && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_FLYING) + && !IsBattlerGrounded(ctx->battlerDef, ctx->abilityDef, HOLD_EFFECT_NONE) // We want to ignore Iron Ball so skip item check + && !FlagGet(B_FLAG_INVERSE_BATTLE)) { - case ABILITY_FRIEND_GUARD: - return UQ_4_12(0.75); - break; + modifier = UQ_4_12(1.0); } - return UQ_4_12(1.0); -} -static inline uq4_12_t GetAttackerItemsModifier(u32 battlerAtk, uq4_12_t typeEffectivenessModifier, enum ItemHoldEffect holdEffectAtk) -{ - u32 metronomeTurns; - uq4_12_t metronomeBoostBase; - switch (holdEffectAtk) + if (((ctx->abilityDef == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0)) + || (ctx->abilityDef == ABILITY_TELEPATHY && ctx->battlerDef == BATTLE_PARTNER(ctx->battlerAtk))) + && GetMovePower(ctx->move) != 0) { - case HOLD_EFFECT_METRONOME: - metronomeBoostBase = PercentToUQ4_12(GetBattlerHoldEffectParam(battlerAtk)); - metronomeTurns = min(gBattleStruct->sameMoveTurns[battlerAtk], 5); - // according to bulbapedia this is the "correct" way to calculate the metronome boost - // due to the limited domain of damage numbers it will never really matter whether this is off by one - return uq4_12_add(UQ_4_12(1.0), metronomeBoostBase * metronomeTurns); - break; - case HOLD_EFFECT_EXPERT_BELT: - if (typeEffectivenessModifier >= UQ_4_12(2.0)) - return UQ_4_12(1.2); - break; - case HOLD_EFFECT_LIFE_ORB: - return UQ_4_12_FLOORED(1.3); - break; - default: - break; + modifier = UQ_4_12(0.0); + if (ctx->updateFlags) + { + gLastUsedAbility = gBattleMons[ctx->battlerDef].ability; + gBattleStruct->moveResultFlags[ctx->battlerDef] |= MOVE_RESULT_MISSED; + gLastLandedMoves[ctx->battlerDef] = 0; + gBattleStruct->missStringId[ctx->battlerDef] = B_MSG_AVOIDED_DMG; + RecordAbilityBattle(ctx->battlerDef, gBattleMons[ctx->battlerDef].ability); + } } - return UQ_4_12(1.0); + + if (ctx->updateFlags) + TryInitializeFirstSTABMoveTrainerSlide(ctx->battlerDef, ctx->battlerAtk, ctx->moveType); + + return modifier; } -static inline uq4_12_t GetDefenderItemsModifier(struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityDef, enum ItemHoldEffect holdEffectDef) +uq4_12_t CalcTypeEffectivenessMultiplier(struct DamageContext *ctx) { - u32 battlerDef = damageCalcData->battlerDef; - u32 moveType = damageCalcData->moveType; - - u32 holdEffectDefParam = GetBattlerHoldEffectParam(battlerDef); - u32 itemDef = gBattleMons[battlerDef].item; + uq4_12_t modifier = UQ_4_12(1.0); - switch (holdEffectDef) + if (ctx->move != MOVE_STRUGGLE && ctx->moveType != TYPE_MYSTERY) { - case HOLD_EFFECT_RESIST_BERRY: - if (UnnerveOn(battlerDef, itemDef)) - return UQ_4_12(1.0); - if (moveType == holdEffectDefParam && (moveType == TYPE_NORMAL || typeEffectivenessModifier >= UQ_4_12(2.0))) + modifier = CalcTypeEffectivenessMultiplierInternal(ctx, modifier); + if (GetMoveEffect(ctx->move) == EFFECT_TWO_TYPED_MOVE && !ctx->isAnticipation) { - if (damageCalcData->updateFlags) - gSpecialStatuses[battlerDef].berryReduced = TRUE; - return (abilityDef == ABILITY_RIPEN) ? UQ_4_12(0.25) : UQ_4_12(0.5); + ctx->moveType = GetMoveArgType(ctx->move); + modifier = CalcTypeEffectivenessMultiplierInternal(ctx, modifier); } - break; - default: - break; } - return UQ_4_12(1.0); -} -#define DAMAGE_MULTIPLY_MODIFIER(modifier) do { \ - finalModifier = uq4_12_multiply_half_down(modifier, finalModifier); \ -} while (0) + if (ctx->updateFlags) + UpdateMoveResultFlags(modifier, &gBattleStruct->moveResultFlags[ctx->battlerDef]); + return modifier; +} -// Calculates the "other" modifier which accounts for held items, abilities, -// or very specific interactions of moves that are not handled in the basic -// damage calculation. It is implemented as described by bulbapedia: -// https://bulbapedia.bulbagarden.net/wiki/Damage#Generation_V_onward -// Please Note: Fixed Point Multiplication is not associative. -// The order of operations is relevant. -static inline uq4_12_t GetOtherModifiers(struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, - u32 abilityAtk, u32 abilityDef, enum ItemHoldEffect holdEffectAtk, enum ItemHoldEffect holdEffectDef) +uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, enum Ability abilityDef) { - u32 battlerAtk = damageCalcData->battlerAtk; - u32 battlerDef = damageCalcData->battlerDef; - u32 move = damageCalcData->move; - u32 moveType = damageCalcData->moveType; - u32 isCrit = damageCalcData->isCrit; - - uq4_12_t finalModifier = UQ_4_12(1.0); - u32 battlerDefPartner = BATTLE_PARTNER(battlerDef); - u32 unmodifiedAttackerSpeed = gBattleMons[battlerAtk].speed; - u32 unmodifiedDefenderSpeed = gBattleMons[battlerDef].speed; - //TODO: Behemoth Blade, Behemoth Bash, Dynamax Cannon (Dynamax) - DAMAGE_MULTIPLY_MODIFIER(GetMinimizeModifier(move, battlerDef)); - DAMAGE_MULTIPLY_MODIFIER(GetUndergroundModifier(move, battlerDef)); - DAMAGE_MULTIPLY_MODIFIER(GetDiveModifier(move, battlerDef)); - DAMAGE_MULTIPLY_MODIFIER(GetAirborneModifier(move, battlerDef)); - DAMAGE_MULTIPLY_MODIFIER(GetScreensModifier(move, battlerAtk, battlerDef, isCrit, abilityAtk)); - DAMAGE_MULTIPLY_MODIFIER(GetCollisionCourseElectroDriftModifier(move, typeEffectivenessModifier)); + uq4_12_t modifier = UQ_4_12(1.0); + enum Type moveType = GetBattleMoveType(move); - if (unmodifiedAttackerSpeed >= unmodifiedDefenderSpeed) + if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY) { - DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(battlerAtk, typeEffectivenessModifier, isCrit, abilityAtk)); - DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier, abilityDef)); - DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner)); - DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(battlerAtk, typeEffectivenessModifier, holdEffectAtk)); - DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(damageCalcData, typeEffectivenessModifier, abilityDef, holdEffectDef)); + struct DamageContext ctx = {0}; + ctx.move = ctx.chosenMove = move; + ctx.moveType = moveType; + ctx.updateFlags = FALSE; + ctx.abilityDef = abilityDef; + + MulByTypeEffectiveness(&ctx, &modifier, GetSpeciesType(speciesDef, 0)); + if (GetSpeciesType(speciesDef, 1) != GetSpeciesType(speciesDef, 0)) + MulByTypeEffectiveness(&ctx, &modifier, GetSpeciesType(speciesDef, 1)); + + if (ctx.moveType == TYPE_GROUND && abilityDef == ABILITY_LEVITATE && !(gFieldStatuses & STATUS_FIELD_GRAVITY)) + modifier = UQ_4_12(0.0); + if (abilityDef == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0) && GetMovePower(move) != 0) + modifier = UQ_4_12(0.0); } - else + + return modifier; +} + +static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier) +{ + switch (multiplier) { - DAMAGE_MULTIPLY_MODIFIER(GetDefenderAbilitiesModifier(move, moveType, battlerAtk, battlerDef, typeEffectivenessModifier, abilityDef)); - DAMAGE_MULTIPLY_MODIFIER(GetDefenderPartnerAbilitiesModifier(battlerDefPartner)); - DAMAGE_MULTIPLY_MODIFIER(GetAttackerAbilitiesModifier(battlerAtk, typeEffectivenessModifier, isCrit, abilityAtk)); - DAMAGE_MULTIPLY_MODIFIER(GetDefenderItemsModifier(damageCalcData, typeEffectivenessModifier, abilityDef, holdEffectDef)); - DAMAGE_MULTIPLY_MODIFIER(GetAttackerItemsModifier(battlerAtk, typeEffectivenessModifier, holdEffectAtk)); + case UQ_4_12(0.0): + case UQ_4_12(0.5): + return UQ_4_12(2.0); + case UQ_4_12(2.0): + return UQ_4_12(0.5); + case UQ_4_12(1.0): + default: + return UQ_4_12(1.0); } - return finalModifier; } -#undef DAMAGE_ACCUMULATE_MULTIPLIER - -#define DAMAGE_APPLY_MODIFIER(modifier) do { \ - dmg = uq4_12_multiply_by_int_half_down(modifier, dmg); \ -} while (0) - -static inline s32 DoMoveDamageCalcVars(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, u32 weather, - enum ItemHoldEffect holdEffectAtk, enum ItemHoldEffect holdEffectDef, u32 abilityAtk, u32 abilityDef) +uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, enum Type moveType) { - s32 dmg; - u32 userFinalAttack; - u32 targetFinalDefense; - u32 battlerAtk = damageCalcData->battlerAtk; - u32 battlerDef = damageCalcData->battlerDef; - - if (fixedBasePower) - gBattleMovePower = fixedBasePower; - else - gBattleMovePower = CalcMoveBasePowerAfterModifiers(damageCalcData, abilityAtk, abilityDef, holdEffectAtk, weather); + uq4_12_t modifier = UQ_4_12(1.0); + enum Ability abilityDef = GetMonAbility(mon); + u16 speciesDef = GetMonData(mon, MON_DATA_SPECIES); + enum Type type1 = GetSpeciesType(speciesDef, 0); + enum Type type2 = GetSpeciesType(speciesDef, 1); - userFinalAttack = CalcAttackStat(damageCalcData, abilityAtk, abilityDef, holdEffectAtk, weather); - targetFinalDefense = CalcDefenseStat(damageCalcData, abilityAtk, abilityDef, holdEffectDef, weather); + if (moveType == TYPE_MYSTERY) + return modifier; - dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, gBattleMons[battlerAtk].level, targetFinalDefense); - DAMAGE_APPLY_MODIFIER(GetTargetDamageModifier(damageCalcData)); - DAMAGE_APPLY_MODIFIER(GetParentalBondModifier(battlerAtk)); - DAMAGE_APPLY_MODIFIER(GetWeatherDamageModifier(damageCalcData, holdEffectAtk, holdEffectDef, weather)); - DAMAGE_APPLY_MODIFIER(GetCriticalModifier(damageCalcData->isCrit)); - DAMAGE_APPLY_MODIFIER(GetGlaiveRushModifier(battlerDef)); + struct DamageContext ctx = {0}; + ctx.move = ctx.chosenMove = MOVE_POUND; + ctx.moveType = moveType; + ctx.updateFlags = FALSE; - if (damageCalcData->randomFactor) - { - dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); - dmg /= 100; - } - else // Apply rest of modifiers in the ai function - { - if (dmg == 0) - dmg = 1; - return dmg; - } + MulByTypeEffectiveness(&ctx, &modifier, type1); + if (type2 != type1) + MulByTypeEffectiveness(&ctx, &modifier, type2); - dmg = ApplyModifiersAfterDmgRoll(dmg, damageCalcData, typeEffectivenessModifier, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef); + if ((modifier <= UQ_4_12(1.0) && abilityDef == ABILITY_WONDER_GUARD) + || CanAbilityAbsorbMove(0, 0, abilityDef, MOVE_NONE, moveType, CHECK_TRIGGER)) + modifier = UQ_4_12(0.0); - if (dmg == 0) - dmg = 1; - return dmg; + return modifier; } -s32 ApplyModifiersAfterDmgRoll(s32 dmg, struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityAtk, u32 abilityDef, enum ItemHoldEffect holdEffectAtk, enum ItemHoldEffect holdEffectDef) +uq4_12_t GetTypeModifier(enum Type atkType, enum Type defType) { - if (GetActiveGimmick(damageCalcData->battlerAtk) == GIMMICK_TERA) - DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(damageCalcData->battlerAtk, damageCalcData->moveType)); - else - DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(damageCalcData, abilityAtk)); - DAMAGE_APPLY_MODIFIER(typeEffectivenessModifier); - DAMAGE_APPLY_MODIFIER(GetBurnOrFrostBiteModifier(damageCalcData, abilityAtk)); - DAMAGE_APPLY_MODIFIER(GetZMaxMoveAgainstProtectionModifier(damageCalcData)); - DAMAGE_APPLY_MODIFIER(GetOtherModifiers(damageCalcData, typeEffectivenessModifier, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef)); - - return dmg; + if (B_FLAG_INVERSE_BATTLE != 0 && FlagGet(B_FLAG_INVERSE_BATTLE)) + return GetInverseTypeMultiplier(gTypeEffectivenessTable[atkType][defType]); + return gTypeEffectivenessTable[atkType][defType]; } -static inline s32 DoFixedDamageMoveCalc(struct DamageCalculationData *damageCalcData) +s32 GetStealthHazardDamageByTypesAndHP(enum TypeSideHazard hazardType, enum Type type1, enum Type type2, u32 maxHp) { s32 dmg = 0; - s32 randDamage; + uq4_12_t modifier = UQ_4_12(1.0); + + modifier = uq4_12_multiply(modifier, GetTypeModifier((u8)hazardType, type1)); + if (type2 != type1) + modifier = uq4_12_multiply(modifier, GetTypeModifier((u8)hazardType, type2)); - switch (GetMoveEffect(damageCalcData->move)) + switch (modifier) { - case EFFECT_LEVEL_DAMAGE: - dmg = gBattleMons[damageCalcData->battlerAtk].level; + case UQ_4_12(0.0): + dmg = 0; break; - case EFFECT_PSYWAVE: - randDamage = B_PSYWAVE_DMG >= GEN_6 ? (Random() % 101) : ((Random() % 11) * 10); - dmg = gBattleMons[damageCalcData->battlerAtk].level * (randDamage + 50) / 100; + case UQ_4_12(0.25): + dmg = maxHp / 32; + if (dmg == 0) + dmg = 1; break; - case EFFECT_FIXED_DAMAGE_ARG: - dmg = GetMoveFixedDamage(damageCalcData->move); + case UQ_4_12(0.5): + dmg = maxHp / 16; + if (dmg == 0) + dmg = 1; break; - case EFFECT_SUPER_FANG: - dmg = GetNonDynamaxHP(damageCalcData->battlerDef) / 2; + case UQ_4_12(1.0): + dmg = maxHp / 8; + if (dmg == 0) + dmg = 1; + break; + case UQ_4_12(2.0): + dmg = maxHp / 4; + if (dmg == 0) + dmg = 1; + break; + case UQ_4_12(4.0): + dmg = maxHp / 2; + if (dmg == 0) + dmg = 1; break; - default: - return INT32_MAX; } - gBattleStruct->moveResultFlags[damageCalcData->battlerDef] &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE); - - if (dmg == 0) - dmg = 1; - return dmg; } -static inline s32 DoMoveDamageCalc(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, u32 weather) +s32 GetStealthHazardDamage(enum TypeSideHazard hazardType, u32 battler) { - enum ItemHoldEffect holdEffectAtk, holdEffectDef; - u32 abilityAtk, abilityDef; + enum Type types[3]; + GetBattlerTypes(battler, FALSE, types); + u32 maxHp = gBattleMons[battler].maxHP; - if (typeEffectivenessModifier == UQ_4_12(0.0)) - return 0; + return GetStealthHazardDamageByTypesAndHP(hazardType, types[0], types[1], maxHp); +} - s32 dmg = DoFixedDamageMoveCalc(damageCalcData); - if (dmg != INT32_MAX) - return dmg; +bool32 IsPartnerMonFromSameTrainer(u32 battler) +{ + if (!IsOnPlayerSide(battler)) + return !(gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS); + else + return !(gBattleTypeFlags & BATTLE_TYPE_MULTI); +} - holdEffectAtk = GetBattlerHoldEffect(damageCalcData->battlerAtk, TRUE); - holdEffectDef = GetBattlerHoldEffect(damageCalcData->battlerDef, TRUE); - abilityAtk = GetBattlerAbility(damageCalcData->battlerAtk); - abilityDef = GetBattlerAbility(damageCalcData->battlerDef); +bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId) +{ + u32 i; + const struct FormChange *formChanges = GetSpeciesFormChanges(species); - return DoMoveDamageCalcVars(damageCalcData, fixedBasePower, typeEffectivenessModifier, weather, holdEffectAtk, holdEffectDef, abilityAtk, abilityDef); + for (i = 0; formChanges != NULL && formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) + { + enum FormChanges method = formChanges[i].method; + switch (method) + { + case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM: + case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: + case FORM_CHANGE_BATTLE_ULTRA_BURST: + case FORM_CHANGE_ITEM_HOLD: + case FORM_CHANGE_BEGIN_BATTLE: + if (formChanges[i].param1 == heldItemId) + return TRUE; + break; + default: + break; + } + } + return FALSE; } -static inline s32 DoFutureSightAttackDamageCalcVars(struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, - u32 weather, enum ItemHoldEffect holdEffectDef, u32 abilityDef) +bool32 CanMegaEvolve(u32 battler) { - s32 dmg; - u32 userFinalAttack; - u32 targetFinalDefense; - u32 battlerAtk = damageCalcData->battlerAtk; - u32 battlerDef = damageCalcData->battlerDef; - u32 move = damageCalcData->move; - u32 moveType = damageCalcData->moveType; + enum HoldEffect holdEffect = GetBattlerHoldEffectIgnoreNegation(battler); - struct Pokemon *party = GetBattlerParty(battlerAtk); - struct Pokemon *partyMon = &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]]; - u32 partyMonLevel = GetMonData(partyMon, MON_DATA_LEVEL, NULL); - u32 partyMonSpecies = GetMonData(partyMon, MON_DATA_SPECIES, NULL); - gBattleMovePower = GetMovePower(move); + // Check if Player has a Mega Ring. + if (!TESTING + && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_MEGA_RING, 1)) + return FALSE; - if (IsBattleMovePhysical(move)) - userFinalAttack = GetMonData(partyMon, MON_DATA_ATK, NULL); - else - userFinalAttack = GetMonData(partyMon, MON_DATA_SPATK, NULL); + // Check if Trainer has already Mega Evolved. + if (HasTrainerUsedGimmick(battler, GIMMICK_MEGA)) + return FALSE; - targetFinalDefense = CalcDefenseStat(damageCalcData, ABILITY_NONE, abilityDef, holdEffectDef, weather); - dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, partyMonLevel, targetFinalDefense); + // Check if battler has another gimmick active. + if (GetActiveGimmick(battler) != GIMMICK_NONE) + return FALSE; - DAMAGE_APPLY_MODIFIER(GetCriticalModifier(damageCalcData->isCrit)); + // Check if battler is currently held by Sky Drop. + if (gBattleMons[battler].volatiles.semiInvulnerable == STATE_SKY_DROP) + return FALSE; - if (damageCalcData->randomFactor) - { - dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); - dmg /= 100; - } + // Check if battler is holding a Z-Crystal. + if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + return FALSE; - // Same type attack bonus - if (gSpeciesInfo[partyMonSpecies].types[0] == moveType || gSpeciesInfo[partyMonSpecies].types[1] == moveType) - DAMAGE_APPLY_MODIFIER(UQ_4_12(1.5)); - else - DAMAGE_APPLY_MODIFIER(UQ_4_12(1.0)); - DAMAGE_APPLY_MODIFIER(typeEffectivenessModifier); + // Check if there is an entry in the form change table for regular Mega Evolution and battler is holding Mega Stone. + if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != gBattleMons[battler].species && holdEffect == HOLD_EFFECT_MEGA_STONE) + return TRUE; - if (dmg == 0) - dmg = 1; + // Check if there is an entry in the form change table for Wish Mega Evolution. + if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != gBattleMons[battler].species) + return TRUE; - return dmg; + // No checks passed, the mon CAN'T mega evolve. + return FALSE; } -static inline s32 DoFutureSightAttackDamageCalc(struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 weather) +bool32 CanUltraBurst(u32 battler) { - enum ItemHoldEffect holdEffectDef; - u32 abilityDef; + enum HoldEffect holdEffect = GetBattlerHoldEffectIgnoreNegation(battler); - if (typeEffectivenessModifier == UQ_4_12(0.0)) - return 0; + // Check if Player has a Z-Ring + if (!TESTING && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT + || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) + return FALSE; - holdEffectDef = GetBattlerHoldEffect(damageCalcData->battlerDef, TRUE); - abilityDef = GetBattlerAbility(damageCalcData->battlerDef); + // Check if Trainer has already Ultra Bursted. + if (HasTrainerUsedGimmick(battler, GIMMICK_ULTRA_BURST)) + return FALSE; - return DoFutureSightAttackDamageCalcVars(damageCalcData, typeEffectivenessModifier, weather, holdEffectDef, abilityDef); -} + // Check if battler has another gimmick active. + if (GetActiveGimmick(battler) != GIMMICK_NONE) + return FALSE; -#undef DAMAGE_APPLY_MODIFIER + // Check if mon is currently held by Sky Drop + if (gBattleMons[battler].volatiles.semiInvulnerable == STATE_SKY_DROP) + return FALSE; -static u32 GetWeather(void) + // Check if there is an entry in the form change table for Ultra Burst and battler is holding a Z-Crystal. + if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_ULTRA_BURST) != gBattleMons[battler].species && holdEffect == HOLD_EFFECT_Z_CRYSTAL) + return TRUE; + + // No checks passed, the mon CAN'T ultra burst. + return FALSE; +} + +void ActivateMegaEvolution(u32 battler) { - if (gBattleWeather == B_WEATHER_NONE || !HasWeatherEffect()) - return B_WEATHER_NONE; + gLastUsedItem = gBattleMons[battler].item; + SetActiveGimmick(battler, GIMMICK_MEGA); + if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != gBattleMons[battler].species) + BattleScriptExecute(BattleScript_WishMegaEvolution); else - return gBattleWeather; + BattleScriptExecute(BattleScript_MegaEvolution); } -bool32 IsFutureSightAttackerInParty(u32 battlerAtk, u32 battlerDef, u32 move) +void ActivateUltraBurst(u32 battler) { - if (GetMoveEffect(move) != EFFECT_FUTURE_SIGHT) - return FALSE; - - struct Pokemon *party = GetBattlerParty(battlerAtk); - if (IsDoubleBattle()) - { - return &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]] != &party[gBattlerPartyIndexes[battlerAtk]] - && &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]] != &party[gBattlerPartyIndexes[BATTLE_PARTNER(battlerAtk)]]; - } - - return &party[gWishFutureKnock.futureSightPartyIndex[battlerDef]] != &party[gBattlerPartyIndexes[battlerAtk]]; + gLastUsedItem = gBattleMons[battler].item; + SetActiveGimmick(battler, GIMMICK_ULTRA_BURST); + BattleScriptExecute(BattleScript_UltraBurst); } -s32 CalculateMoveDamage(struct DamageCalculationData *damageCalcData, u32 fixedBasePower) +bool32 IsBattlerMegaEvolved(u32 battler) { - u32 typeEffectivenessMultiplier = CalcTypeEffectivenessMultiplier(damageCalcData->move, - damageCalcData->moveType, - damageCalcData->battlerAtk, - damageCalcData->battlerDef, - GetBattlerAbility(damageCalcData->battlerDef), - damageCalcData->updateFlags); - - if (IsFutureSightAttackerInParty(damageCalcData->battlerAtk, damageCalcData->battlerDef, damageCalcData->move)) - return DoFutureSightAttackDamageCalc(damageCalcData, typeEffectivenessMultiplier, GetWeather()); - - return DoMoveDamageCalc(damageCalcData, fixedBasePower, typeEffectivenessMultiplier, GetWeather()); + // While Transform does copy stats and visuals, it shouldn't be counted as true Mega Evolution. + if (gBattleMons[battler].volatiles.transformed) + return FALSE; + return (gSpeciesInfo[gBattleMons[battler].species].isMegaEvolution); } -// for AI so that typeEffectivenessModifier, weather, abilities and holdEffects are calculated only once -s32 CalculateMoveDamageVars(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, - u32 weather, enum ItemHoldEffect holdEffectAtk, enum ItemHoldEffect holdEffectDef, u32 abilityAtk, u32 abilityDef) +bool32 IsBattlerPrimalReverted(u32 battler) { - s32 dmg = DoFixedDamageMoveCalc(damageCalcData); - if (dmg != INT32_MAX) - return dmg; - - return DoMoveDamageCalcVars(damageCalcData, fixedBasePower, typeEffectivenessModifier, weather, - holdEffectAtk, holdEffectDef, abilityAtk, abilityDef); + // While Transform does copy stats and visuals, it shouldn't be counted as true Primal Revesion. + if (gBattleMons[battler].volatiles.transformed) + return FALSE; + return (gSpeciesInfo[gBattleMons[battler].species].isPrimalReversion); } -static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 moveType, u32 battlerDef, u32 defAbility, u32 defType, u32 battlerAtk, bool32 recordAbilities) +bool32 IsBattlerUltraBursted(u32 battler) { - uq4_12_t mod = GetTypeModifier(moveType, defType); - u32 abilityAtk = GetBattlerAbility(battlerAtk); - - if (mod == UQ_4_12(0.0) && GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_RING_TARGET) - { - mod = UQ_4_12(1.0); - if (recordAbilities) - RecordItemEffectBattle(battlerDef, HOLD_EFFECT_RING_TARGET); - } - else if ((moveType == TYPE_FIGHTING || moveType == TYPE_NORMAL) && defType == TYPE_GHOST && gBattleMons[battlerDef].status2 & STATUS2_FORESIGHT && mod == UQ_4_12(0.0)) - { - mod = UQ_4_12(1.0); - } - else if ((moveType == TYPE_FIGHTING || moveType == TYPE_NORMAL) && defType == TYPE_GHOST - && (abilityAtk == ABILITY_SCRAPPY || abilityAtk == ABILITY_MINDS_EYE) - && mod == UQ_4_12(0.0)) - { - mod = UQ_4_12(1.0); - if (recordAbilities) - RecordAbilityBattle(battlerAtk, abilityAtk); - } + // While Transform does copy stats and visuals, it shouldn't be counted as true Ultra Burst. + if (gBattleMons[battler].volatiles.transformed) + return FALSE; + return (gSpeciesInfo[gBattleMons[battler].species].isUltraBurst); +} - if (moveType == TYPE_PSYCHIC && defType == TYPE_DARK && gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED && mod == UQ_4_12(0.0)) - mod = UQ_4_12(1.0); - if (GetMoveEffect(move) == EFFECT_SUPER_EFFECTIVE_ON_ARG && defType == GetMoveArgType(move)) - mod = UQ_4_12(2.0); - if (moveType == TYPE_GROUND && defType == TYPE_FLYING && IsBattlerGrounded(battlerDef) && mod == UQ_4_12(0.0)) - mod = UQ_4_12(1.0); - if (moveType == TYPE_STELLAR && GetActiveGimmick(battlerDef) == GIMMICK_TERA) - mod = UQ_4_12(2.0); +bool32 IsBattlerInTeraForm(u32 battler) +{ + // While Transform does copy stats and visuals, it shouldn't be counted as a true Tera Form. + if (gBattleMons[battler].volatiles.transformed) + return FALSE; + return (gSpeciesInfo[gBattleMons[battler].species].isTeraForm); +} - // B_WEATHER_STRONG_WINDS weakens Super Effective moves against Flying-type PokΓ©mon - if (gBattleWeather & B_WEATHER_STRONG_WINDS && HasWeatherEffect()) - { - if (defType == TYPE_FLYING && mod >= UQ_4_12(2.0)) - mod = UQ_4_12(1.0); - } +// Returns SPECIES_NONE if no form change is possible +u16 GetBattleFormChangeTargetSpecies(u32 battler, enum FormChanges method) +{ + u32 i; + u32 species = gBattleMons[battler].species; + u32 targetSpecies = species; + const struct FormChange *formChanges = GetSpeciesFormChanges(species); + struct Pokemon *mon = GetBattlerMon(battler); + u16 heldItem = gBattleMons[battler].item; - if (gSpecialStatuses[battlerDef].distortedTypeMatchups || (mod > UQ_4_12(0.0) && ShouldTeraShellDistortTypeMatchups(move, battlerDef, defAbility))) + for (i = 0; formChanges != NULL && formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) { - mod = UQ_4_12(0.5); - if (recordAbilities) + if (method == formChanges[i].method && species != formChanges[i].targetSpecies) { - RecordAbilityBattle(battlerDef, defAbility); - gSpecialStatuses[battlerDef].distortedTypeMatchups = TRUE; - gSpecialStatuses[battlerDef].teraShellAbilityDone = TRUE; + switch (method) + { + case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM: + case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: + case FORM_CHANGE_BATTLE_ULTRA_BURST: + if (heldItem == formChanges[i].param1) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE: + if (gBattleMons[battler].moves[0] == formChanges[i].param1 + || gBattleMons[battler].moves[1] == formChanges[i].param1 + || gBattleMons[battler].moves[2] == formChanges[i].param1 + || gBattleMons[battler].moves[3] == formChanges[i].param1) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_SWITCH: + if (formChanges[i].param1 == GetBattlerAbility(battler) || formChanges[i].param1 == ABILITY_NONE) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_HP_PERCENT: + if (formChanges[i].param1 == GetBattlerAbility(battler)) + { + // We multiply by 100 to make sure that integer division doesn't mess with the health check. + u32 hpCheck = gBattleMons[battler].hp * 100 * 100 / gBattleMons[battler].maxHP; + switch(formChanges[i].param2) + { + case HP_HIGHER_THAN: + if (hpCheck > formChanges[i].param3 * 100) + targetSpecies = formChanges[i].targetSpecies; + break; + case HP_LOWER_EQ_THAN: + if (hpCheck <= formChanges[i].param3 * 100) + targetSpecies = formChanges[i].targetSpecies; + break; + } + } + break; + case FORM_CHANGE_BATTLE_GIGANTAMAX: + if (GetMonData(mon, MON_DATA_GIGANTAMAX_FACTOR)) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_WEATHER: + // Check if there is a required ability and if the battler's ability does not match it + // or is suppressed. If so, revert to the no weather form. + if (formChanges[i].param2 + && GetBattlerAbility(battler) != formChanges[i].param2 + && formChanges[i].param1 == B_WEATHER_NONE) + { + targetSpecies = formChanges[i].targetSpecies; + } + // We need to revert the weather form if the field is under Air Lock, too. + else if (!HasWeatherEffect() && formChanges[i].param1 == B_WEATHER_NONE) + { + targetSpecies = formChanges[i].targetSpecies; + } + // Otherwise, just check for a match between the weather and the form change table. + // Added a check for whether the weather is in effect to prevent end-of-turn soft locks with Cloud Nine / Air Lock + else if (((gBattleWeather & formChanges[i].param1) && HasWeatherEffect()) + || (gBattleWeather == B_WEATHER_NONE && formChanges[i].param1 == B_WEATHER_NONE)) + { + targetSpecies = formChanges[i].targetSpecies; + } + break; + case FORM_CHANGE_BATTLE_TURN_END: + case FORM_CHANGE_HIT_BY_MOVE: + if (formChanges[i].param1 == GetBattlerAbility(battler)) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_STATUS: + if (gBattleMons[battler].status1 & formChanges[i].param1) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_TERASTALLIZATION: + if (GetBattlerTeraType(battler) == formChanges[i].param1) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_BEFORE_MOVE: + case FORM_CHANGE_BATTLE_AFTER_MOVE: + if (formChanges[i].param1 == gCurrentMove + && (formChanges[i].param2 == ABILITY_NONE || formChanges[i].param2 == GetBattlerAbility(battler))) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY: + if (formChanges[i].param1 == GetBattleMoveCategory(gCurrentMove) + && (formChanges[i].param2 == ABILITY_NONE || formChanges[i].param2 == GetBattlerAbility(battler))) + targetSpecies = formChanges[i].targetSpecies; + break; + default: + break; + } } } - *modifier = uq4_12_multiply(*modifier, mod); + return targetSpecies; } -static inline void TryNoticeIllusionInTypeEffectiveness(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, uq4_12_t resultingModifier, u32 illusionSpecies) +static bool32 CanBattlerFormChange(u32 battler, enum FormChanges method) { - // Check if the type effectiveness would've been different if the pokemon really had the types as the disguise. - uq4_12_t presumedModifier = UQ_4_12(1.0); - MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, ABILITY_ILLUSION, gSpeciesInfo[illusionSpecies].types[0], battlerAtk, FALSE); - if (gSpeciesInfo[illusionSpecies].types[1] != gSpeciesInfo[illusionSpecies].types[0]) - MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, ABILITY_ILLUSION, gSpeciesInfo[illusionSpecies].types[1], battlerAtk, FALSE); - - if (presumedModifier != resultingModifier) - RecordAbilityBattle(battlerDef, ABILITY_ILLUSION); -} + // Can't change form if transformed. + if (gBattleMons[battler].volatiles.transformed + && B_TRANSFORM_FORM_CHANGES >= GEN_5) + return FALSE; -void UpdateMoveResultFlags(uq4_12_t modifier, u16 *resultFlags) -{ - if (modifier == UQ_4_12(0.0)) - { - *resultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE; - *resultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE); - gBattleStruct->blunderPolicy = FALSE; // Don't activate if missed - } - else if (modifier == UQ_4_12(1.0)) - { - *resultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); - } - else if (modifier > UQ_4_12(1.0)) - { - *resultFlags |= MOVE_RESULT_SUPER_EFFECTIVE; - *resultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); - } - else //if (modifier < UQ_4_12(1.0)) + switch (method) { - *resultFlags |= MOVE_RESULT_NOT_VERY_EFFECTIVE; - *resultFlags &= ~(MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_DOESNT_AFFECT_FOE); + case FORM_CHANGE_END_BATTLE: + if (IsBattlerPrimalReverted(battler)) + return TRUE; + // Fallthrough + case FORM_CHANGE_FAINT: + if (IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler) || IsBattlerInTeraForm(battler) || IsGigantamaxed(battler)) + return TRUE; + break; + case FORM_CHANGE_BATTLE_SWITCH: + if (IsGigantamaxed(battler)) + return TRUE; + else if (GetActiveGimmick(battler) == GIMMICK_TERA && GetBattlerAbility(battler) == ABILITY_HUNGER_SWITCH) + return FALSE; + break; + default: + break; } + return DoesSpeciesHaveFormChangeMethod(gBattleMons[battler].species, method); } -static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, bool32 recordAbilities, uq4_12_t modifier, u32 defAbility) +bool32 TryRevertPartyMonFormChange(u32 partyIndex) { - u32 illusionSpecies; - u32 types[3]; - GetBattlerTypes(battlerDef, FALSE, types); + bool32 changedForm = FALSE; - MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, defAbility, types[0], battlerAtk, recordAbilities); - if (types[1] != types[0]) - MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, defAbility, types[1], battlerAtk, recordAbilities); - if (types[2] != TYPE_MYSTERY && types[2] != types[1] && types[2] != types[0]) - MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, defAbility, types[2], battlerAtk, recordAbilities); - if (moveType == TYPE_FIRE && gDisableStructs[battlerDef].tarShot) - modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); + // Appeared in battle and didn't faint + if (gBattleStruct->partyState[B_SIDE_PLAYER][partyIndex].sentOut && GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL) != 0) + changedForm = TryFormChange(partyIndex, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE_ENVIRONMENT); + + if (!changedForm) + changedForm = TryFormChange(partyIndex, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE); + + // Clear original species field + gBattleStruct->partyState[B_SIDE_PLAYER][partyIndex].changedSpecies = SPECIES_NONE; + + return changedForm; +} + +bool32 TryBattleFormChange(u32 battler, enum FormChanges method) +{ + u32 monId = gBattlerPartyIndexes[battler]; + struct Pokemon *party = GetBattlerParty(battler); + u32 currentSpecies = GetMonData(&party[monId], MON_DATA_SPECIES); + u32 targetSpecies; - if (recordAbilities && (illusionSpecies = GetIllusionMonSpecies(battlerDef))) - TryNoticeIllusionInTypeEffectiveness(move, moveType, battlerAtk, battlerDef, modifier, illusionSpecies); + if (!CanBattlerFormChange(battler, method)) + return FALSE; - if (GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS && move != MOVE_THUNDER_WAVE) + targetSpecies = GetBattleFormChangeTargetSpecies(battler, method); + if (targetSpecies == currentSpecies) + targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); + if (targetSpecies != currentSpecies && targetSpecies != SPECIES_NONE) { - modifier = UQ_4_12(1.0); - if (B_GLARE_GHOST < GEN_4 && move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) - modifier = UQ_4_12(0.0); + // Saves the original species on the first form change. + + if (GetBattlerPartyState(battler)->changedSpecies == SPECIES_NONE) + GetBattlerPartyState(battler)->changedSpecies = gBattleMons[battler].species; + + TryToSetBattleFormChangeMoves(&party[monId], method); + SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); + gBattleMons[battler].species = targetSpecies; + RecalcBattlerStats(battler, &party[monId], method == FORM_CHANGE_BATTLE_GIGANTAMAX); + return TRUE; } - else if (moveType == TYPE_GROUND && !IsBattlerGroundedInverseCheck(battlerDef, INVERSE_BATTLE, CHECK_IRON_BALL) && !(MoveIgnoresTypeIfFlyingAndUngrounded(move))) + else if (GetBattlerPartyState(battler)->changedSpecies != SPECIES_NONE) { - modifier = UQ_4_12(0.0); - if (recordAbilities && defAbility == ABILITY_LEVITATE) + bool32 restoreSpecies = FALSE; + + switch (method) { - gBattleStruct->moveResultFlags[battlerDef] |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE); - gLastUsedAbility = ABILITY_LEVITATE; - gLastLandedMoves[battlerDef] = 0; - gBattleStruct->missStringId[battlerDef] = B_MSG_GROUND_MISS; - RecordAbilityBattle(battlerDef, ABILITY_LEVITATE); + case FORM_CHANGE_END_BATTLE: + restoreSpecies = TRUE; + break; + case FORM_CHANGE_FAINT: + if (IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler) || IsBattlerInTeraForm(battler) || IsGigantamaxed(battler)) + restoreSpecies = TRUE; + break; + case FORM_CHANGE_BATTLE_SWITCH: + if (IsGigantamaxed(battler)) + restoreSpecies = TRUE; + break; + default: + break; } - } - else if (B_SHEER_COLD_IMMUNITY >= GEN_7 && move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) - { - modifier = UQ_4_12(0.0); - } - - // Thousand Arrows ignores type modifiers for flying mons - if (!IsBattlerGrounded(battlerDef) - && MoveIgnoresTypeIfFlyingAndUngrounded(move) - && IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING)) - { - modifier = UQ_4_12(1.0); - } - - // Iron Ball ignores type modifiers for flying-type mons if it is the only source of grounding - if (B_IRON_BALL >= GEN_5 - && moveType == TYPE_GROUND - && IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING) - && GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_IRON_BALL - && !IsBattlerGroundedInverseCheck(battlerDef, NOT_INVERSE_BATTLE, IGNORE_IRON_BALL) - && !FlagGet(B_FLAG_INVERSE_BATTLE)) - { - modifier = UQ_4_12(1.0); - } - if (((defAbility == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0)) - || (defAbility == ABILITY_TELEPATHY && battlerDef == BATTLE_PARTNER(battlerAtk))) - && GetMovePower(move) != 0) - { - modifier = UQ_4_12(0.0); - if (recordAbilities) + if (restoreSpecies) { - gLastUsedAbility = gBattleMons[battlerDef].ability; - gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_MISSED; - gLastLandedMoves[battlerDef] = 0; - gBattleStruct->missStringId[battlerDef] = B_MSG_AVOIDED_DMG; - RecordAbilityBattle(battlerDef, gBattleMons[battlerDef].ability); + enum Ability abilityForm = gBattleMons[battler].ability; + // Reverts the original species + TryToSetBattleFormChangeMoves(&party[monId], method); + u32 changedSpecies = GetBattlerPartyState(battler)->changedSpecies; + SetMonData(&party[monId], MON_DATA_SPECIES, &changedSpecies); + RecalcBattlerStats(battler, &party[monId], method == FORM_CHANGE_BATTLE_GIGANTAMAX); + // Battler data is not updated with regular form's ability, not doing so could cause wrong ability activation. + if (method == FORM_CHANGE_FAINT) + gBattleMons[battler].ability = abilityForm; + return TRUE; } } - if (recordAbilities) - TryInitializeFirstSTABMoveTrainerSlide(battlerDef, battlerAtk, moveType); - - return modifier; + return FALSE; } -uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u32 defAbility, bool32 recordAbilities) +bool32 DoBattlersShareType(u32 battler1, u32 battler2) { - uq4_12_t modifier = UQ_4_12(1.0); + s32 i; + enum Type types1[3], types2[3]; + GetBattlerTypes(battler1, FALSE, types1); + GetBattlerTypes(battler2, FALSE, types2); - if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY) + if (types1[2] == TYPE_MYSTERY) + types1[2] = types1[0]; + if (types2[2] == TYPE_MYSTERY) + types2[2] = types2[0]; + + for (i = 0; i < 3; i++) { - modifier = CalcTypeEffectivenessMultiplierInternal(move, moveType, battlerAtk, battlerDef, recordAbilities, modifier, defAbility); - if (GetMoveEffect(move) == EFFECT_TWO_TYPED_MOVE) - modifier = CalcTypeEffectivenessMultiplierInternal(move, GetMoveArgType(move), battlerAtk, battlerDef, recordAbilities, modifier, defAbility); + if (types1[i] == types2[0] || types1[i] == types2[1] || types1[i] == types2[2]) + return TRUE; } - if (recordAbilities) - UpdateMoveResultFlags(modifier, &gBattleStruct->moveResultFlags[battlerDef]); - return modifier; + return FALSE; } -uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef) +bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId) { - uq4_12_t modifier = UQ_4_12(1.0); - u32 moveType = GetBattleMoveType(move); - - if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY) - { - MulByTypeEffectiveness(&modifier, move, moveType, 0, 0, gSpeciesInfo[speciesDef].types[0], 0, FALSE); - if (gSpeciesInfo[speciesDef].types[1] != gSpeciesInfo[speciesDef].types[0]) - MulByTypeEffectiveness(&modifier, move, moveType, 0, 0, gSpeciesInfo[speciesDef].types[1], 0, FALSE); - - if (moveType == TYPE_GROUND && abilityDef == ABILITY_LEVITATE && !(gFieldStatuses & STATUS_FIELD_GRAVITY)) - modifier = UQ_4_12(0.0); - if (abilityDef == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0) && GetMovePower(move) != 0) - modifier = UQ_4_12(0.0); - } + u16 species = gBattleMons[battler].species; + enum HoldEffect holdEffect = GetItemHoldEffect(itemId); - return modifier; + if (ItemIsMail(itemId)) + return FALSE; + else if (itemId == ITEM_ENIGMA_BERRY_E_READER) + return FALSE; + else if (DoesSpeciesUseHoldItemToChangeForm(species, itemId)) + return FALSE; + else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + return FALSE; + else if (holdEffect == HOLD_EFFECT_BOOSTER_ENERGY + && (gSpeciesInfo[gBattleMons[battler].species].isParadox || gSpeciesInfo[gBattleMons[gBattlerTarget].species].isParadox)) + return FALSE; + else + return TRUE; } -static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier) +u32 GetBattlerVisualSpecies(u32 battler) { - switch (multiplier) - { - case UQ_4_12(0.0): - case UQ_4_12(0.5): - return UQ_4_12(2.0); - case UQ_4_12(2.0): - return UQ_4_12(0.5); - case UQ_4_12(1.0): - default: - return UQ_4_12(1.0); - } + u32 illusionSpecies = GetIllusionMonSpecies(battler); + if (illusionSpecies != SPECIES_NONE) + return illusionSpecies; + return gBattleMons[battler].species; } -uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, u8 moveType) +bool32 TryClearIllusion(u32 battler, enum AbilityEffect caseID) { - uq4_12_t modifier = UQ_4_12(1.0); - u16 abilityDef = GetMonAbility(mon); - u16 speciesDef = GetMonData(mon, MON_DATA_SPECIES); - u8 type1 = gSpeciesInfo[speciesDef].types[0]; - u8 type2 = gSpeciesInfo[speciesDef].types[1]; - - if (moveType != TYPE_MYSTERY) - { - MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, 0, type1, 0, FALSE); - if (type2 != type1) - MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, 0, type2, 0, FALSE); - - if ((modifier <= UQ_4_12(1.0) && abilityDef == ABILITY_WONDER_GUARD) - || (moveType == TYPE_FIRE && abilityDef == ABILITY_FLASH_FIRE) - || (moveType == TYPE_GRASS && abilityDef == ABILITY_SAP_SIPPER) - || (moveType == TYPE_GROUND && (abilityDef == ABILITY_LEVITATE - || abilityDef == ABILITY_EARTH_EATER)) - || (moveType == TYPE_WATER && (abilityDef == ABILITY_WATER_ABSORB - || abilityDef == ABILITY_DRY_SKIN - || abilityDef == ABILITY_STORM_DRAIN)) - || (moveType == TYPE_ELECTRIC && (abilityDef == ABILITY_LIGHTNING_ROD // TODO: Add Gen 3/4 config check - || abilityDef == ABILITY_VOLT_ABSORB - || abilityDef == ABILITY_MOTOR_DRIVE))) - { - modifier = UQ_4_12(0.0); - } - } - return modifier; -} + if (gBattleStruct->illusion[battler].state != ILLUSION_ON) + return FALSE; + if (GetBattlerAbility(battler) == ABILITY_ILLUSION && IsBattlerAlive(battler)) + return FALSE; -uq4_12_t GetTypeModifier(u32 atkType, u32 defType) -{ - if (B_FLAG_INVERSE_BATTLE != 0 && FlagGet(B_FLAG_INVERSE_BATTLE)) - return GetInverseTypeMultiplier(gTypeEffectivenessTable[atkType][defType]); - return gTypeEffectivenessTable[atkType][defType]; + gBattleScripting.battler = battler; + if (caseID == ABILITYEFFECT_ON_SWITCHIN) + BattleScriptPushCursorAndCallback(BattleScript_IllusionOffEnd3); + else + BattleScriptCall(BattleScript_IllusionOff); + return TRUE; } -s32 GetStealthHazardDamageByTypesAndHP(enum TypeSideHazard hazardType, u8 type1, u8 type2, u32 maxHp) +struct Pokemon *GetIllusionMonPtr(u32 battler) { - s32 dmg = 0; - uq4_12_t modifier = UQ_4_12(1.0); - - modifier = uq4_12_multiply(modifier, GetTypeModifier((u8)hazardType, type1)); - if (type2 != type1) - modifier = uq4_12_multiply(modifier, GetTypeModifier((u8)hazardType, type2)); - - switch (modifier) - { - case UQ_4_12(0.0): - dmg = 0; - break; - case UQ_4_12(0.25): - dmg = maxHp / 32; - if (dmg == 0) - dmg = 1; - break; - case UQ_4_12(0.5): - dmg = maxHp / 16; - if (dmg == 0) - dmg = 1; - break; - case UQ_4_12(1.0): - dmg = maxHp / 8; - if (dmg == 0) - dmg = 1; - break; - case UQ_4_12(2.0): - dmg = maxHp / 4; - if (dmg == 0) - dmg = 1; - break; - case UQ_4_12(4.0): - dmg = maxHp / 2; - if (dmg == 0) - dmg = 1; - break; - } + if (gBattleStruct->illusion[battler].state == ILLUSION_NOT_SET) + SetIllusionMon(GetBattlerMon(battler), battler); + if (gBattleStruct->illusion[battler].state != ILLUSION_ON) + return NULL; - return dmg; + return gBattleStruct->illusion[battler].mon; } -s32 GetStealthHazardDamage(enum TypeSideHazard hazardType, u32 battler) +void ClearIllusionMon(u32 battler) { - u32 types[3]; - GetBattlerTypes(battler, FALSE, types); - u32 maxHp = gBattleMons[battler].maxHP; - - return GetStealthHazardDamageByTypesAndHP(hazardType, types[0], types[1], maxHp); + memset(&gBattleStruct->illusion[battler], 0, sizeof(gBattleStruct->illusion[battler])); } -bool32 IsPartnerMonFromSameTrainer(u32 battler) +u32 GetIllusionMonSpecies(u32 battler) { - if (!IsOnPlayerSide(battler) && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - return FALSE; - else if (IsOnPlayerSide(battler) && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - return FALSE; - else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - return FALSE; - else - return TRUE; + struct Pokemon *illusionMon = GetIllusionMonPtr(battler); + if (illusionMon != NULL) + return GetMonData(illusionMon, MON_DATA_SPECIES); + return SPECIES_NONE; } -bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId) +u32 GetIllusionMonPartyId(struct Pokemon *party, struct Pokemon *mon, struct Pokemon *partnerMon, u32 battler) { - u32 i; - const struct FormChange *formChanges = GetSpeciesFormChanges(species); + s32 partyEnd=6; + s32 partyStart=0; - for (i = 0; formChanges != NULL && formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) + // Adjust party search range for Multibattles and Player vs two-trainers + if ((GetBattlerSide(battler) == B_SIDE_PLAYER && (gBattleTypeFlags & BATTLE_TYPE_MULTI)) + || (GetBattlerSide(battler) == B_SIDE_OPPONENT && (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS))) + { + if ((GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT) || (GetBattlerPosition(battler) == B_POSITION_OPPONENT_LEFT)) + { + partyEnd = 3; + partyStart = 0; + } + else + { + partyEnd = 6; + partyStart = 3; + } + } + + // Find last alive non-egg pokemon. + for (s32 id = partyEnd - 1; id >= partyStart; id--) { - enum FormChanges method = formChanges[i].method; - switch (method) + if (GetMonData(&party[id], MON_DATA_SANITY_HAS_SPECIES) + && GetMonData(&party[id], MON_DATA_HP) + && !GetMonData(&party[id], MON_DATA_IS_EGG)) { - case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM: - case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: - case FORM_CHANGE_BATTLE_ULTRA_BURST: - case FORM_CHANGE_ITEM_HOLD: - case FORM_CHANGE_BEGIN_BATTLE: - if (formChanges[i].param1 == heldItemId) - return TRUE; - break; - default: - break; + u32 species = GetMonData(&party[id], MON_DATA_SPECIES); + if (species == SPECIES_TERAPAGOS_STELLAR || (species >= SPECIES_OGERPON_TEAL_TERA && species <= SPECIES_OGERPON_CORNERSTONE_TERA)) + continue; + if (&party[id] != mon && &party[id] != partnerMon) + return id; + else // If this pokemon or its partner is last in the party, ignore Illusion. + return PARTY_SIZE; } } - return FALSE; + return PARTY_SIZE; } -bool32 CanMegaEvolve(u32 battler) +bool32 SetIllusionMon(struct Pokemon *mon, u32 battler) { - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, FALSE); - - // Check if Player has a Mega Ring. - if (!TESTING - && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) - && !CheckBagHasItem(ITEM_MEGA_RING, 1)) - return FALSE; - - // Check if Trainer has already Mega Evolved. - if (HasTrainerUsedGimmick(battler, GIMMICK_MEGA)) - return FALSE; - - // Check if battler has another gimmick active. - if (GetActiveGimmick(battler) != GIMMICK_NONE) - return FALSE; + struct Pokemon *party, *partnerMon; + u32 id; - // Check if battler is currently held by Sky Drop. - if (gStatuses3[battler] & STATUS3_SKY_DROPPED) + gBattleStruct->illusion[battler].state = ILLUSION_OFF; + if (GetMonAbility(mon) != ABILITY_ILLUSION) return FALSE; - // Check if battler is holding a Z-Crystal. - if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) - return FALSE; + party = GetBattlerParty(battler); - // Check if there is an entry in the form change table for regular Mega Evolution and battler is holding Mega Stone. - if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != gBattleMons[battler].species && holdEffect == HOLD_EFFECT_MEGA_STONE) - return TRUE; + if (IsBattlerAlive(BATTLE_PARTNER(battler))) + partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]; + else + partnerMon = mon; - // Check if there is an entry in the form change table for Wish Mega Evolution. - if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != gBattleMons[battler].species) + id = GetIllusionMonPartyId(party, mon, partnerMon, battler); + if (id != PARTY_SIZE) + { + gBattleStruct->illusion[battler].state = ILLUSION_ON; + gBattleStruct->illusion[battler].mon = &party[id]; return TRUE; + } - // No checks passed, the mon CAN'T mega evolve. return FALSE; } -bool32 CanUltraBurst(u32 battler) +u32 TryImmunityAbilityHealStatus(u32 battler, enum AbilityEffect caseID) { - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, FALSE); - - // Check if Player has a Z-Ring - if (!TESTING && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT - || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) - && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) - return FALSE; - - // Check if Trainer has already Ultra Bursted. - if (HasTrainerUsedGimmick(battler, GIMMICK_ULTRA_BURST)) - return FALSE; - - // Check if battler has another gimmick active. - if (GetActiveGimmick(battler) != GIMMICK_NONE) - return FALSE; + u32 effect = 0; + switch (GetBattlerAbilityIgnoreMoldBreaker(battler)) + { + case ABILITY_IMMUNITY: + case ABILITY_PASTEL_VEIL: + if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON | STATUS1_TOXIC_COUNTER)) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + effect = 1; + } + break; + case ABILITY_OWN_TEMPO: + if (gBattleMons[battler].volatiles.confusionTurns > 0) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); + effect = 2; + } + break; + case ABILITY_LIMBER: + if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + effect = 1; + } + break; + case ABILITY_INSOMNIA: + case ABILITY_VITAL_SPIRIT: + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + { + TryDeactivateSleepClause(GetBattlerSide(battler), gBattlerPartyIndexes[battler]); + gBattleMons[battler].volatiles.nightmare = FALSE; + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + effect = 1; + } + break; + case ABILITY_WATER_VEIL: + case ABILITY_WATER_BUBBLE: + case ABILITY_THERMAL_EXCHANGE: + if (gBattleMons[battler].status1 & STATUS1_BURN) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + effect = 1; + } + break; + case ABILITY_MAGMA_ARMOR: + if (gBattleMons[battler].status1 & (STATUS1_FREEZE | STATUS1_FROSTBITE)) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + effect = 1; + } + break; + case ABILITY_OBLIVIOUS: + if (gBattleMons[battler].volatiles.infatuation) + effect = 3; + else if (GetConfig(CONFIG_OBLIVIOUS_TAUNT) >= GEN_6 && gDisableStructs[battler].tauntTimer != 0) + effect = 4; + break; + } - // Check if mon is currently held by Sky Drop - if (gStatuses3[battler] & STATUS3_SKY_DROPPED) - return FALSE; + if (effect != 0) + { + switch (effect) + { + case 1: // status cleared + gBattleMons[battler].status1 = 0; + if (caseID == ABILITYEFFECT_ON_SWITCHIN_IMMUNITIES) + BattleScriptExecute(BattleScript_AbilityCuredStatusEnd3); + else + BattleScriptCall(BattleScript_AbilityCuredStatus); + break; + case 2: // get rid of confusion + RemoveConfusionStatus(battler); + if (caseID == ABILITYEFFECT_ON_SWITCHIN_IMMUNITIES) + BattleScriptExecute(BattleScript_AbilityCuredStatusEnd3); + else + BattleScriptCall(BattleScript_AbilityCuredStatus); + break; + case 3: // get rid of infatuation + gBattleMons[battler].volatiles.infatuation = 0; + if (caseID == ABILITYEFFECT_ON_SWITCHIN_IMMUNITIES) + BattleScriptExecute(BattleScript_AbilityCuredStatusEnd3); + else + BattleScriptCall(BattleScript_AbilityCuredStatus); + break; + case 4: // get rid of taunt + gDisableStructs[battler].tauntTimer = 0; + if (caseID == ABILITYEFFECT_ON_SWITCHIN_IMMUNITIES) + BattleScriptExecute(BattleScript_AbilityCuredStatusEnd3); + else + BattleScriptCall(BattleScript_AbilityCuredStatus); + break; + } - // Check if there is an entry in the form change table for Ultra Burst and battler is holding a Z-Crystal. - if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_ULTRA_BURST) != gBattleMons[battler].species && holdEffect == HOLD_EFFECT_Z_CRYSTAL) - return TRUE; + gBattleScripting.battler = gBattlerAbility = battler; + BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1); + MarkBattlerForControllerExec(battler); + return effect; + } - // No checks passed, the mon CAN'T ultra burst. - return FALSE; + return 0; } -void ActivateMegaEvolution(u32 battler) +uq4_12_t GetBadgeBoostModifier(void) { - gLastUsedItem = gBattleMons[battler].item; - SetActiveGimmick(battler, GIMMICK_MEGA); - if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != gBattleMons[battler].species) - BattleScriptExecute(BattleScript_WishMegaEvolution); + if (GetConfig(CONFIG_BADGE_BOOST) < GEN_3) + return UQ_4_12(1.125); else - BattleScriptExecute(BattleScript_MegaEvolution); + return UQ_4_12(1.1); } -void ActivateUltraBurst(u32 battler) +bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler) { - gLastUsedItem = gBattleMons[battler].item; - SetActiveGimmick(battler, GIMMICK_ULTRA_BURST); - BattleScriptExecute(BattleScript_UltraBurst); + if (GetConfig(CONFIG_BADGE_BOOST) <= GEN_3 && badgeFlag != 0) + { + if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) + return FALSE; + else if (!IsOnPlayerSide(battler)) + return FALSE; + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && TRAINER_BATTLE_PARAM.opponentA == TRAINER_SECRET_BASE) + return FALSE; + else if (FlagGet(badgeFlag)) + return TRUE; + } + return FALSE; } -bool32 IsBattlerMegaEvolved(u32 battler) +static enum DamageCategory SwapMoveDamageCategory(u32 move) { - // While Transform does copy stats and visuals, it shouldn't be counted as true Mega Evolution. - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - return FALSE; - return (gSpeciesInfo[gBattleMons[battler].species].isMegaEvolution); + if (GetMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) + return DAMAGE_CATEGORY_SPECIAL; + return DAMAGE_CATEGORY_PHYSICAL; } -bool32 IsBattlerPrimalReverted(u32 battler) +/* + The Global States gBattleStruct->categoryOverride and gBattleStruct->swapDamageCategory + can be removed but a lot of function arguments (battlerAtk and battlerDef) have to be added for this, about 50+. + This is potentially a good change because it is less likely to cause bugs in the future. +*/ +enum DamageCategory GetBattleMoveCategory(u32 move) { - // While Transform does copy stats and visuals, it shouldn't be counted as true Primal Revesion. - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - return FALSE; - return (gSpeciesInfo[gBattleMons[battler].species].isPrimalReversion); -} + if (gMain.inBattle) + { + if (gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast + return SwapMoveDamageCategory(move); + if (IsZMove(move) || IsMaxMove(move)) // TODO: Might be buggy depending on when this is called. + return gBattleStruct->categoryOverride; + if (IsBattleMoveStatus(move)) + return DAMAGE_CATEGORY_STATUS; + } -bool32 IsBattlerUltraBursted(u32 battler) -{ - // While Transform does copy stats and visuals, it shouldn't be counted as true Ultra Burst. - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - return FALSE; - return (gSpeciesInfo[gBattleMons[battler].species].isUltraBurst); + if (B_PHYSICAL_SPECIAL_SPLIT < GEN_4) + return gTypesInfo[GetBattleMoveType(move)].damageCategory; + + return GetMoveCategory(move); } -bool32 IsBattlerInTeraForm(u32 battler) +void SetDynamicMoveCategory(u32 battlerAtk, u32 battlerDef, u32 move) { - // While Transform does copy stats and visuals, it shouldn't be counted as a true Tera Form. - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - return FALSE; - return (gSpeciesInfo[gBattleMons[battler].species].isTeraForm); + switch (GetMoveEffect(move)) + { + case EFFECT_PHOTON_GEYSER: + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL); + break; + case EFFECT_SHELL_SIDE_ARM: + if (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL) + gBattleStruct->swapDamageCategory = TRUE; + break; + case EFFECT_TERA_BLAST: + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) + gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; + break; + case EFFECT_TERA_STARSTORM: + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GET_BASE_SPECIES_ID(GetMonData(GetBattlerMon(battlerAtk), MON_DATA_SPECIES)) == SPECIES_TERAPAGOS) + gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; + break; + default: + gBattleStruct->swapDamageCategory = FALSE; + break; + } } -// Returns SPECIES_NONE if no form change is possible -u16 GetBattleFormChangeTargetSpecies(u32 battler, enum FormChanges method) +static bool32 TryRemoveScreens(u32 battler) { - u32 i; - u32 species = gBattleMons[battler].species; - u32 targetSpecies = species; - const struct FormChange *formChanges = GetSpeciesFormChanges(species); - struct Pokemon *mon = GetBattlerMon(battler); - u16 heldItem = gBattleMons[battler].item; + bool32 removed = FALSE; + u32 battlerSide = GetBattlerSide(battler); + u8 enemySide = GetBattlerSide(BATTLE_OPPOSITE(battler)); - for (i = 0; formChanges != NULL && formChanges[i].method != FORM_CHANGE_TERMINATOR; i++) + // try to remove from battler's side + if (gSideStatuses[battlerSide] & SIDE_STATUS_SCREEN_ANY) { - if (method == formChanges[i].method && species != formChanges[i].targetSpecies) - { - switch (method) - { - case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM: - case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: - case FORM_CHANGE_BATTLE_ULTRA_BURST: - if (heldItem == formChanges[i].param1) - targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE: - if (gBattleMons[battler].moves[0] == formChanges[i].param1 - || gBattleMons[battler].moves[1] == formChanges[i].param1 - || gBattleMons[battler].moves[2] == formChanges[i].param1 - || gBattleMons[battler].moves[3] == formChanges[i].param1) - targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_BATTLE_SWITCH: - if (formChanges[i].param1 == GetBattlerAbility(battler) || formChanges[i].param1 == ABILITY_NONE) - targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_BATTLE_HP_PERCENT: - if (formChanges[i].param1 == GetBattlerAbility(battler)) - { - // We multiply by 100 to make sure that integer division doesn't mess with the health check. - u32 hpCheck = gBattleMons[battler].hp * 100 * 100 / gBattleMons[battler].maxHP; - switch(formChanges[i].param2) - { - case HP_HIGHER_THAN: - if (hpCheck > formChanges[i].param3 * 100) - targetSpecies = formChanges[i].targetSpecies; - break; - case HP_LOWER_EQ_THAN: - if (hpCheck <= formChanges[i].param3 * 100) - targetSpecies = formChanges[i].targetSpecies; - break; - } - } - break; - case FORM_CHANGE_BATTLE_GIGANTAMAX: - if (GetMonData(mon, MON_DATA_GIGANTAMAX_FACTOR)) - targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_BATTLE_WEATHER: - // Check if there is a required ability and if the battler's ability does not match it - // or is suppressed. If so, revert to the no weather form. - if (formChanges[i].param2 - && GetBattlerAbility(battler) != formChanges[i].param2 - && formChanges[i].param1 == B_WEATHER_NONE) - { - targetSpecies = formChanges[i].targetSpecies; - } - // We need to revert the weather form if the field is under Air Lock, too. - else if (!HasWeatherEffect() && formChanges[i].param1 == B_WEATHER_NONE) - { - targetSpecies = formChanges[i].targetSpecies; - } - // Otherwise, just check for a match between the weather and the form change table. - // Added a check for whether the weather is in effect to prevent end-of-turn soft locks with Cloud Nine / Air Lock - else if (((gBattleWeather & formChanges[i].param1) && HasWeatherEffect()) - || (gBattleWeather == B_WEATHER_NONE && formChanges[i].param1 == B_WEATHER_NONE)) - { - targetSpecies = formChanges[i].targetSpecies; - } - break; - case FORM_CHANGE_BATTLE_TURN_END: - case FORM_CHANGE_HIT_BY_MOVE: - if (formChanges[i].param1 == GetBattlerAbility(battler)) - targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_STATUS: - if (gBattleMons[battler].status1 & formChanges[i].param1) - targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_BATTLE_TERASTALLIZATION: - if (GetBattlerTeraType(battler) == formChanges[i].param1) - targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_BATTLE_BEFORE_MOVE: - if (formChanges[i].param1 == gCurrentMove - && (formChanges[i].param2 == ABILITY_NONE || formChanges[i].param2 == GetBattlerAbility(battler))) - targetSpecies = formChanges[i].targetSpecies; - break; - case FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY: - if (formChanges[i].param1 == GetBattleMoveCategory(gCurrentMove) - && (formChanges[i].param2 == ABILITY_NONE || formChanges[i].param2 == GetBattlerAbility(battler))) - targetSpecies = formChanges[i].targetSpecies; - break; - default: - break; - } - } + gSideStatuses[battlerSide] &= ~SIDE_STATUS_SCREEN_ANY; + removed = TRUE; } - return targetSpecies; + // try to remove from battler opponent's side + if (gSideStatuses[enemySide] & SIDE_STATUS_SCREEN_ANY) + { + gSideStatuses[enemySide] &= ~SIDE_STATUS_SCREEN_ANY; + removed = TRUE; + } + + return removed; +} + +// Photon Geyser, Light That Burns the Sky, Tera Blast +enum DamageCategory GetCategoryBasedOnStats(u32 battler) +{ + u32 attack = gBattleMons[battler].attack; + u32 spAttack = gBattleMons[battler].spAttack; + + attack = attack * gStatStageRatios[gBattleMons[battler].statStages[STAT_ATK]][0]; + attack = attack / gStatStageRatios[gBattleMons[battler].statStages[STAT_ATK]][1]; + + spAttack = spAttack * gStatStageRatios[gBattleMons[battler].statStages[STAT_SPATK]][0]; + spAttack = spAttack / gStatStageRatios[gBattleMons[battler].statStages[STAT_SPATK]][1]; + + if (spAttack >= attack) + return DAMAGE_CATEGORY_SPECIAL; + else + return DAMAGE_CATEGORY_PHYSICAL; } -bool32 CanBattlerFormChange(u32 battler, enum FormChanges method) +static u32 GetFlingPowerFromItemId(u32 itemId) { - // Can't change form if transformed. - if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED - && B_TRANSFORM_FORM_CHANGES >= GEN_5) - return FALSE; - // Mega Evolved and Ultra Bursted PokΓ©mon should always revert to normal upon fainting or ending the battle. - if ((IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler) || IsBattlerInTeraForm(battler)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) - return TRUE; - else if (IsBattlerPrimalReverted(battler) && (method == FORM_CHANGE_END_BATTLE)) - return TRUE; - // Gigantamaxed Pokemon should revert upon fainting, switching, or ending the battle. - else if (IsGigantamaxed(battler) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_BATTLE_SWITCH || method == FORM_CHANGE_END_BATTLE)) - return TRUE; - return DoesSpeciesHaveFormChangeMethod(gBattleMons[battler].species, method); + if (gItemsInfo[itemId].pocket == POCKET_TM_HM) + { + u32 power = GetMovePower(ItemIdToBattleMoveId(itemId)); + if (power > 1) + return power; + return 10; // Status moves and moves with variable power always return 10 power. + } + else + return GetItemFlingPower(itemId); } -bool32 TryBattleFormChange(u32 battler, enum FormChanges method) +bool32 CanFling(u32 battler) { - u32 monId = gBattlerPartyIndexes[battler]; - u32 side = GetBattlerSide(battler); - struct Pokemon *party = GetBattlerParty(battler); - u32 currentSpecies = GetMonData(&party[monId], MON_DATA_SPECIES); - u32 targetSpecies; + u16 item = gBattleMons[battler].item; - if (!CanBattlerFormChange(battler, method)) + if (item == ITEM_NONE + || (GetConfig(CONFIG_KLUTZ_FLING_INTERACTION) >= GEN_5 && GetBattlerAbility(battler) == ABILITY_KLUTZ) + || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM + || gBattleMons[battler].volatiles.embargo + || GetFlingPowerFromItemId(item) == 0 + || !CanBattlerGetOrLoseItem(battler, item)) return FALSE; - targetSpecies = GetBattleFormChangeTargetSpecies(battler, method); - if (targetSpecies == currentSpecies) - targetSpecies = GetFormChangeTargetSpecies(&party[monId], method, 0); - if (targetSpecies != currentSpecies) - { - // Saves the original species on the first form change. - if (gBattleStruct->changedSpecies[side][monId] == SPECIES_NONE) - gBattleStruct->changedSpecies[side][monId] = gBattleMons[battler].species; - - TryToSetBattleFormChangeMoves(&party[monId], method); - SetMonData(&party[monId], MON_DATA_SPECIES, &targetSpecies); - gBattleMons[battler].species = targetSpecies; - RecalcBattlerStats(battler, &party[monId], method == FORM_CHANGE_BATTLE_GIGANTAMAX); - return TRUE; - } - else if (gBattleStruct->changedSpecies[side][monId] != SPECIES_NONE) - { - bool32 restoreSpecies = FALSE; + return TRUE; +} - // Mega Evolved and Ultra Bursted PokΓ©mon should always revert to normal upon fainting or ending the battle, so no need to add it to the form change tables. - if ((IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler) || IsBattlerInTeraForm(battler)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) - restoreSpecies = TRUE; +// Sort an array of battlers by speed +// Useful for effects like pickpocket, eject button, red card, dancer +void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast) +{ + int i, j, currSpeed, currBattler; + u16 speeds[MAX_BATTLERS_COUNT] = {0}; - // Unlike Megas, Primal Reversion isn't canceled on fainting. - else if (IsBattlerPrimalReverted(battler) && (method == FORM_CHANGE_END_BATTLE)) - restoreSpecies = TRUE; + for (i = 0; i < gBattlersCount; i++) + { + u32 battler = battlers[i]; + speeds[i] = GetBattlerTotalSpeedStat(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler)); + } - // Gigantamax Pokemon have their forms reverted after fainting, switching, or ending the battle. - else if (IsGigantamaxed(battler) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_BATTLE_SWITCH || method == FORM_CHANGE_END_BATTLE)) - restoreSpecies = TRUE; + for (i = 1; i < gBattlersCount; i++) + { + currBattler = battlers[i]; + currSpeed = speeds[i]; + j = i - 1; - if (restoreSpecies) + if (slowToFast) { - u32 abilityForm = gBattleMons[battler].ability; - // Reverts the original species - TryToSetBattleFormChangeMoves(&party[monId], method); - SetMonData(&party[monId], MON_DATA_SPECIES, &gBattleStruct->changedSpecies[side][monId]); - RecalcBattlerStats(battler, &party[monId], method == FORM_CHANGE_BATTLE_GIGANTAMAX); - // Battler data is not updated with regular form's ability, not doing so could cause wrong ability activation. - if (method == FORM_CHANGE_FAINT) - gBattleMons[battler].ability = abilityForm; - return TRUE; + while (j >= 0 && speeds[j] > currSpeed) + { + battlers[j + 1] = battlers[j]; + speeds[j + 1] = speeds[j]; + j = j - 1; + } + } + else + { + while (j >= 0 && speeds[j] < currSpeed) + { + battlers[j + 1] = battlers[j]; + speeds[j + 1] = speeds[j]; + j = j - 1; + } } - } - return FALSE; + battlers[j + 1] = currBattler; + speeds[j + 1] = currSpeed; + } } -bool32 DoBattlersShareType(u32 battler1, u32 battler2) +void TryRestoreHeldItems(void) { - s32 i; - u32 types1[3], types2[3]; - GetBattlerTypes(battler1, FALSE, types1); - GetBattlerTypes(battler2, FALSE, types2); - - if (types1[2] == TYPE_MYSTERY) - types1[2] = types1[0]; - if (types2[2] == TYPE_MYSTERY) - types2[2] = types2[0]; + u32 i; + bool32 returnNPCItems = B_RETURN_STOLEN_NPC_ITEMS >= GEN_5 && gBattleTypeFlags & BATTLE_TYPE_TRAINER; - for (i = 0; i < 3; i++) + for (i = 0; i < PARTY_SIZE; i++) { - if (types1[i] == types2[0] || types1[i] == types2[1] || types1[i] == types2[2]) - return TRUE; - } + // Check if held items should be restored after battle based on generation + if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9 || gBattleStruct->itemLost[B_SIDE_PLAYER][i].stolen || returnNPCItems) + { + u16 lostItem = gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem; - return FALSE; + // Check if the lost item is a berry and the mon is not holding it + if (GetItemPocket(lostItem) == POCKET_BERRIES && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) != lostItem) + lostItem = ITEM_NONE; + + // Check if the lost item should be restored + if ((lostItem != ITEM_NONE || returnNPCItems) && GetItemPocket(lostItem) != POCKET_BERRIES) + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &lostItem); + } + } } -bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId) +bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item) { - u16 species = gBattleMons[battler].species; - enum ItemHoldEffect holdEffect = GetItemHoldEffect(itemId); + enum BattleSide stealerSide = GetBattlerSide(battlerStealing); - if (ItemIsMail(itemId)) + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) return FALSE; - else if (itemId == ITEM_ENIGMA_BERRY_E_READER) + + // Check if the battler trying to steal should be able to + if (stealerSide == B_SIDE_OPPONENT + && !(gBattleTypeFlags & + (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_SECRET_BASE + | (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE ? BATTLE_TYPE_TRAINER : 0) + ))) + { return FALSE; - else if (DoesSpeciesUseHoldItemToChangeForm(species, itemId)) + } + else if (!(gBattleTypeFlags & + (BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_FRONTIER + | BATTLE_TYPE_LINK + | BATTLE_TYPE_RECORDED_LINK + | BATTLE_TYPE_SECRET_BASE)) + && (gWishFutureKnock.knockedOffMons[stealerSide] & (1u << gBattlerPartyIndexes[battlerStealing]))) + { return FALSE; - else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) + } + + // It's supposed to pop before trying to steal but this also works + if (GetItemHoldEffect(item) == HOLD_EFFECT_AIR_BALLOON) return FALSE; - else if (holdEffect == HOLD_EFFECT_BOOSTER_ENERGY - && (gSpeciesInfo[gBattleMons[battler].species].isParadox || gSpeciesInfo[gBattleMons[gBattlerTarget].species].isParadox)) + + if (!CanBattlerGetOrLoseItem(battlerItem, item) // Battler with item cannot have it stolen + || !CanBattlerGetOrLoseItem(battlerStealing, item)) // Stealer cannot take the item return FALSE; - else - return TRUE; + + return TRUE; } -u32 GetBattlerVisualSpecies(u32 battler) +void TrySaveExchangedItem(u32 battler, u16 stolenItem) { - u32 illusionSpecies = GetIllusionMonSpecies(battler); - if (illusionSpecies != SPECIES_NONE) - return illusionSpecies; - return gBattleMons[battler].species; + // Because BtlController_EmitSetMonData does SetMonData, we need to save the stolen item only if it matches the battler's original + // So, if the player steals an item during battle and has it stolen from it, it will not end the battle with it (naturally) + if (B_TRAINERS_KNOCK_OFF_ITEMS == FALSE) + return; + // If regular trainer battle and mon's original item matches what is being stolen, save it to be restored at end of battle + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER + && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + && IsOnPlayerSide(battler) + && stolenItem == gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].originalItem) + gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].stolen = TRUE; } -bool32 TryClearIllusion(u32 battler, u32 caseID) +bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes) { - if (gBattleStruct->illusion[battler].state != ILLUSION_ON) - return FALSE; - if (GetBattlerAbility(battler) == ABILITY_ILLUSION && IsBattlerAlive(battler)) - return FALSE; - - gBattleScripting.battler = battler; - if (caseID == ABILITYEFFECT_ON_SWITCHIN) + bool32 ret = TRUE; + enum HoldEffect holdEffect = GetBattlerHoldEffect(battler); + if (toxicSpikes && holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS && !IS_BATTLER_OF_TYPE(battler, TYPE_POISON)) { - BattleScriptPushCursorAndCallback(BattleScript_IllusionOffEnd3); + ret = FALSE; + RecordItemEffectBattle(battler, holdEffect); } - else + else if (holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS) { - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_IllusionOff; + ret = FALSE; + RecordItemEffectBattle(battler, holdEffect); } - return TRUE; + return ret; } -struct Pokemon *GetIllusionMonPtr(u32 battler) +bool32 IsSheerForceAffected(u16 move, enum Ability ability) { - if (gBattleStruct->illusion[battler].state == ILLUSION_NOT_SET) - { - if (IsOnPlayerSide(battler)) - SetIllusionMon(GetBattlerMon(battler), battler); - else - SetIllusionMon(GetBattlerMon(battler), battler); - } - if (gBattleStruct->illusion[battler].state != ILLUSION_ON) - return NULL; - - return gBattleStruct->illusion[battler].mon; + return ability == ABILITY_SHEER_FORCE && MoveIsAffectedBySheerForce(move); } -void ClearIllusionMon(u32 battler) +// This function is the body of "jumpifstat", but can be used dynamically in a function +bool32 CompareStat(u32 battler, enum Stat statId, u8 cmpTo, u8 cmpKind, enum Ability ability) { - memset(&gBattleStruct->illusion[battler], 0, sizeof(gBattleStruct->illusion[battler])); -} + bool32 ret = FALSE; + u8 statValue = gBattleMons[battler].statStages[statId]; -u32 GetIllusionMonSpecies(u32 battler) -{ - struct Pokemon *illusionMon = GetIllusionMonPtr(battler); - if (illusionMon != NULL) - return GetMonData(illusionMon, MON_DATA_SPECIES); - return SPECIES_NONE; -} + // Because this command is used as a way of checking if a stat can be lowered/raised, + // we need to do some modification at run-time. + if (ability == ABILITY_CONTRARY) + { + if (cmpKind == CMP_GREATER_THAN) + cmpKind = CMP_LESS_THAN; + else if (cmpKind == CMP_LESS_THAN) + cmpKind = CMP_GREATER_THAN; -u32 GetIllusionMonPartyId(struct Pokemon *party, struct Pokemon *mon, struct Pokemon *partnerMon) -{ - s32 id; - // Find last alive non-egg pokemon. - for (id = PARTY_SIZE - 1; id >= 0; id--) + if (cmpTo == MIN_STAT_STAGE) + cmpTo = MAX_STAT_STAGE; + else if (cmpTo == MAX_STAT_STAGE) + cmpTo = MIN_STAT_STAGE; + } + + switch (cmpKind) { - if (GetMonData(&party[id], MON_DATA_SANITY_HAS_SPECIES) - && GetMonData(&party[id], MON_DATA_HP) - && !GetMonData(&party[id], MON_DATA_IS_EGG)) - { - u32 species = GetMonData(&party[id], MON_DATA_SPECIES); - if (species == SPECIES_TERAPAGOS_STELLAR || (species >= SPECIES_OGERPON_TEAL_TERA && species <= SPECIES_OGERPON_CORNERSTONE_TERA)) - continue; - if (&party[id] != mon && &party[id] != partnerMon) - return id; - else // If this pokemon or its partner is last in the party, ignore Illusion. - return PARTY_SIZE; - } + case CMP_EQUAL: + if (statValue == cmpTo) + ret = TRUE; + break; + case CMP_NOT_EQUAL: + if (statValue != cmpTo) + ret = TRUE; + break; + case CMP_GREATER_THAN: + if (statValue > cmpTo) + ret = TRUE; + break; + case CMP_LESS_THAN: + if (statValue < cmpTo) + ret = TRUE; + break; + case CMP_COMMON_BITS: + if (statValue & cmpTo) + ret = TRUE; + break; + case CMP_NO_COMMON_BITS: + if (!(statValue & cmpTo)) + ret = TRUE; + break; } - return PARTY_SIZE; + + return ret; } -bool32 SetIllusionMon(struct Pokemon *mon, u32 battler) +bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget) { - struct Pokemon *party, *partnerMon; - u32 id; - - gBattleStruct->illusion[battler].state = ILLUSION_OFF; - if (GetMonAbility(mon) != ABILITY_ILLUSION) + if (GetConfig(CONFIG_PRANKSTER_DARK_TYPES) < GEN_7) + return FALSE; + if (!gProtectStructs[battlerPrankster].pranksterElevated) + return FALSE; + if (IsBattlerAlly(battlerPrankster, battlerDef)) + return FALSE; + if (checkTarget && (GetBattlerMoveTargetType(battlerPrankster, move) & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_DEPENDS))) + return FALSE; + if (!IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK)) + return FALSE; + if (IsSemiInvulnerable(battlerDef, CHECK_ALL)) return FALSE; - party = GetBattlerParty(battler); + return TRUE; +} - if (IsBattlerAlive(BATTLE_PARTNER(battler))) - partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]]; - else - partnerMon = mon; +bool32 CantPickupItem(u32 battler) +{ + // Used by RandomUniformExcept() for RNG_PICKUP + if (battler == gBattlerAttacker && (GetConfig(CONFIG_PICKUP_WILD) < GEN_9 || gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK))) + return TRUE; + return !(IsBattlerAlive(battler) && GetBattlerPartyState(battler)->usedHeldItem && gBattleStruct->battlerState[battler].canPickupItem); +} - id = GetIllusionMonPartyId(party, mon, partnerMon); - if (id != PARTY_SIZE) +bool32 PickupHasValidTarget(u32 battler) +{ + u32 i; + for (i = 0; i < gBattlersCount; i++) { - gBattleStruct->illusion[battler].state = ILLUSION_ON; - gBattleStruct->illusion[battler].mon = &party[id]; - return TRUE; + if (!CantPickupItem(i)) + return TRUE; } - return FALSE; } -bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler) +bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags) { - if (B_BADGE_BOOST == GEN_3 && badgeFlag != 0) + if (gBattleWeather & weatherFlags && HasWeatherEffect()) { - if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) - return FALSE; - else if (!IsOnPlayerSide(battler)) - return FALSE; - else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && TRAINER_BATTLE_PARAM.opponentA == TRAINER_SECRET_BASE) - return FALSE; - else if (FlagGet(badgeFlag)) - return TRUE; + // given weather is active -> check if its sun, rain against utility umbrella (since only 1 weather can be active at once) + if (gBattleWeather & (B_WEATHER_SUN | B_WEATHER_RAIN) && GetBattlerHoldEffect(battler) == HOLD_EFFECT_UTILITY_UMBRELLA) + return FALSE; // utility umbrella blocks sun, rain effects + + return TRUE; } return FALSE; } -static u32 SwapMoveDamageCategory(u32 move) +// Gets move target before redirection effects etc. are applied +// Possible return values are defined in battle.h following MOVE_TARGET_SELECTED +// TODO: Add args: ability and hold effect +u32 GetBattlerMoveTargetType(u32 battler, u32 move) { - if (GetMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) - return DAMAGE_CATEGORY_SPECIAL; - return DAMAGE_CATEGORY_PHYSICAL; + enum BattleMoveEffects effect = GetMoveEffect(move); + if (effect == EFFECT_CURSE && !IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + return MOVE_TARGET_USER; + if (effect == EFFECT_EXPANDING_FORCE && IsBattlerTerrainAffected(battler, GetBattlerAbility(battler), GetBattlerHoldEffect(battler), STATUS_FIELD_PSYCHIC_TERRAIN)) + return MOVE_TARGET_BOTH; + if (effect == EFFECT_TERA_STARSTORM && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR) + return MOVE_TARGET_BOTH; + + return GetMoveTarget(move); } -/* - The Global States gBattleStruct->categoryOverride and gBattleStruct->swapDamageCategory - can be removed but a lot of function arguments (battlerAtk and battlerDef) have to be added for this, about 50+. - This is potentially a good change because it is less likely to cause bugs in the future. -*/ -u32 GetBattleMoveCategory(u32 move) +bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move) { - if (gMain.inBattle) - { - if (gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast - return SwapMoveDamageCategory(move); - if (IsZMove(move) || IsMaxMove(move)) // TODO: Might be buggy depending on when this is called. - return gBattleStruct->categoryOverride; - if (IsBattleMoveStatus(move)) - return DAMAGE_CATEGORY_STATUS; - } - - if (B_PHYSICAL_SPECIAL_SPLIT <= GEN_4) - return gTypesInfo[GetBattleMoveType(move)].damageCategory; + if (GetMoveEffect(move) == EFFECT_HIT_ENEMY_HEAL_ALLY + && IsBattlerAlly(battlerAtk, battlerDef) + && gBattleMons[battlerAtk].volatiles.healBlock) + return FALSE; // PokΓ©mon affected by Heal Block cannot target allies with Pollen Puff + if (IsBattlerAlly(battlerAtk, battlerDef) && (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX + || IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX))) + return FALSE; - return GetMoveCategory(move); + return TRUE; } -void SetDynamicMoveCategory(u32 battlerAtk, u32 battlerDef, u32 move) +static void SetRandomMultiHitCounter() { - switch (GetMoveEffect(move)) - { - case EFFECT_PHOTON_GEYSER: - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL); - break; - case EFFECT_SHELL_SIDE_ARM: - if (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL) - gBattleStruct->swapDamageCategory = TRUE; - break; - case EFFECT_TERA_BLAST: - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) - gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; - break; - case EFFECT_TERA_STARSTORM: - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GET_BASE_SPECIES_ID(GetMonData(GetBattlerMon(battlerAtk), MON_DATA_SPECIES)) == SPECIES_TERAPAGOS) - gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; - break; - default: - gBattleStruct->swapDamageCategory = FALSE; - break; - } + if (GetBattlerHoldEffect(gBattlerAttacker) == HOLD_EFFECT_LOADED_DICE) + gMultiHitCounter = RandomUniform(RNG_LOADED_DICE, 4, 5); + else if (GetConfig(CONFIG_MULTI_HIT_CHANCE) >= GEN_5) + gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 7, 7, 3, 3); // 35%: 2 hits, 35%: 3 hits, 15% 4 hits, 15% 5 hits. + else + gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 3, 3, 1, 1); // 37.5%: 2 hits, 37.5%: 3 hits, 12.5% 4 hits, 12.5% 5 hits. } -static bool32 TryRemoveScreens(u32 battler) +void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon) { - bool32 removed = FALSE; - u32 battlerSide = GetBattlerSide(battler); - u8 enemySide = GetBattlerSide(BATTLE_OPPOSITE(battler)); - - // try to remove from battler's side - if (gSideStatuses[battlerSide] & SIDE_STATUS_SCREEN_ANY) - { - gSideStatuses[battlerSide] &= ~SIDE_STATUS_SCREEN_ANY; - removed = TRUE; - } - - // try to remove from battler opponent's side - if (gSideStatuses[enemySide] & SIDE_STATUS_SCREEN_ANY) - { - gSideStatuses[enemySide] &= ~SIDE_STATUS_SCREEN_ANY; - removed = TRUE; - } + gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL); + gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP); + gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP); + gBattleMons[battler].attack = GetMonData(mon, MON_DATA_ATK); + gBattleMons[battler].defense = GetMonData(mon, MON_DATA_DEF); + gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED); + gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK); + gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF); +} - return removed; +void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon) +{ + gBattleMons[battler].ability = GetMonAbility(mon); + gBattleMons[battler].types[0] = GetSpeciesType(gBattleMons[battler].species, 0); + gBattleMons[battler].types[1] = GetSpeciesType(gBattleMons[battler].species, 1); + gBattleMons[battler].types[2] = TYPE_MYSTERY; } -static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler) +void RecalcBattlerStats(u32 battler, struct Pokemon *mon, bool32 isDynamaxing) { - for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + u32 hp = GetMonData(mon, MON_DATA_HP); + u32 oldMaxHp = GetMonData(mon, MON_DATA_MAX_HP); + CalculateMonStats(mon); + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && gChosenActionByBattler[battler] != B_ACTION_SWITCH) { - if (battler == battlerDef || IsBattlerAlly(battler, battlerDef)) - continue; - - if (!IsBattlerAlive(battlerDef)) - continue; - - u32 ability = GetBattlerAbility(battlerDef); - switch (ability) + ApplyDynamaxHPMultiplier(mon); + u32 newMaxHp = GetMonData(mon, MON_DATA_MAX_HP); + if (!isDynamaxing) { - case ABILITY_UNNERVE: - case ABILITY_AS_ONE_ICE_RIDER: - case ABILITY_AS_ONE_SHADOW_RIDER: - return TRUE; + if (newMaxHp > oldMaxHp) // restore hp gained from changing form, without this, dynamaxed form changes are calculated incorrectly + { + hp += (newMaxHp - oldMaxHp); + SetMonData(mon, MON_DATA_HP, &hp); + } + else + { + SetMonData(mon, MON_DATA_HP, &hp); + } } } + CopyMonLevelAndBaseStatsToBattleMon(battler, mon); + CopyMonAbilityAndTypesToBattleMon(battler, mon); +} - return FALSE; +void RemoveConfusionStatus(u32 battler) +{ + gBattleMons[battler].volatiles.confusionTurns = 0; + gBattleMons[battler].volatiles.infiniteConfusion = FALSE; } -// Photon Geyser, Light That Burns the Sky, Tera Blast -u8 GetCategoryBasedOnStats(u32 battler) +u8 GetBattlerGender(u32 battler) { - u32 attack = gBattleMons[battler].attack; - u32 spAttack = gBattleMons[battler].spAttack; + return GetGenderFromSpeciesAndPersonality(gBattleMons[battler].species, + gBattleMons[battler].personality); +} - attack = attack * gStatStageRatios[gBattleMons[battler].statStages[STAT_ATK]][0]; - attack = attack / gStatStageRatios[gBattleMons[battler].statStages[STAT_ATK]][1]; +bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2) +{ + u8 gender1 = GetBattlerGender(battler1); + u8 gender2 = GetBattlerGender(battler2); - spAttack = spAttack * gStatStageRatios[gBattleMons[battler].statStages[STAT_SPATK]][0]; - spAttack = spAttack / gStatStageRatios[gBattleMons[battler].statStages[STAT_SPATK]][1]; + return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 != gender2); +} - if (spAttack >= attack) - return DAMAGE_CATEGORY_SPECIAL; - else - return DAMAGE_CATEGORY_PHYSICAL; +bool32 AreBattlersOfSameGender(u32 battler1, u32 battler2) +{ + u8 gender1 = GetBattlerGender(battler1); + u8 gender2 = GetBattlerGender(battler2); + + return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 == gender2); } -static u32 GetFlingPowerFromItemId(u32 itemId) +u32 CalcSecondaryEffectChance(u32 battler, enum Ability battlerAbility, const struct AdditionalEffect *additionalEffect) { - if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08) - { - u32 power = GetMovePower(ItemIdToBattleMoveId(itemId)); - if (power > 1) - return power; - return 10; // Status moves and moves with variable power always return 10 power. - } - else - return GetItemFlingPower(itemId); + bool8 hasSereneGrace = (battlerAbility == ABILITY_SERENE_GRACE); + bool8 hasRainbow = (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_RAINBOW) != 0; + u16 secondaryEffectChance = additionalEffect->chance; + + if (hasRainbow && hasSereneGrace && additionalEffect->moveEffect == MOVE_EFFECT_FLINCH) + return secondaryEffectChance * 2; + + if (hasSereneGrace) + secondaryEffectChance *= 2; + if (hasRainbow && additionalEffect->moveEffect != MOVE_EFFECT_SECRET_POWER) + secondaryEffectChance *= 2; + + return secondaryEffectChance; } -bool32 CanFling(u32 battler) +bool32 MoveEffectIsGuaranteed(u32 battler, enum Ability battlerAbility, const struct AdditionalEffect *additionalEffect) { - u16 item = gBattleMons[battler].item; + return additionalEffect->chance == 0 || CalcSecondaryEffectChance(battler, battlerAbility, additionalEffect) >= 100; +} - if (item == ITEM_NONE - || (B_KLUTZ_FLING_INTERACTION >= GEN_5 && GetBattlerAbility(battler) == ABILITY_KLUTZ) - || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM - || gStatuses3[battler] & STATUS3_EMBARGO - || GetFlingPowerFromItemId(item) == 0 - || !CanBattlerGetOrLoseItem(battler, item)) +bool32 IsGen6ExpShareEnabled(void) +{ + if (I_EXP_SHARE_FLAG <= TEMP_FLAGS_END) return FALSE; - return TRUE; + return FlagGet(I_EXP_SHARE_FLAG); } -// Sort an array of battlers by speed -// Useful for effects like pickpocket, eject button, red card, dancer -void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast) -{ - int i, j, currSpeed, currBattler; - u16 speeds[MAX_BATTLERS_COUNT] = {0}; - - for (i = 0; i < gBattlersCount; i++) - speeds[i] = GetBattlerTotalSpeedStat(battlers[i]); - for (i = 1; i < gBattlersCount; i++) +bool32 MoveHasAdditionalEffect(u32 move, u32 moveEffect) +{ + u32 i; + u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); + for (i = 0; i < numAdditionalEffects; i++) { - currBattler = battlers[i]; - currSpeed = speeds[i]; - j = i - 1; - - if (slowToFast) - { - while (j >= 0 && speeds[j] > currSpeed) - { - battlers[j + 1] = battlers[j]; - speeds[j + 1] = speeds[j]; - j = j - 1; - } - } - else - { - while (j >= 0 && speeds[j] < currSpeed) - { - battlers[j + 1] = battlers[j]; - speeds[j + 1] = speeds[j]; - j = j - 1; - } - } - - battlers[j + 1] = currBattler; - speeds[j + 1] = currSpeed; + const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); + if (additionalEffect->moveEffect == moveEffect && additionalEffect->self == FALSE) + return TRUE; } + return FALSE; } -void TryRestoreHeldItems(void) +bool32 MoveHasAdditionalEffectWithChance(u32 move, u32 moveEffect, u32 chance) { u32 i; - bool32 returnNPCItems = B_RETURN_STOLEN_NPC_ITEMS >= GEN_5 && gBattleTypeFlags & BATTLE_TYPE_TRAINER; - - for (i = 0; i < PARTY_SIZE; i++) + u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); + for (i = 0; i < numAdditionalEffects; i++) { - // Check if held items should be restored after battle based on generation - if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9 || gBattleStruct->itemLost[B_SIDE_PLAYER][i].stolen || returnNPCItems) - { - u16 lostItem = gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem; - - // Check if the lost item is a berry and the mon is not holding it - if (GetItemPocket(lostItem) == POCKET_BERRIES && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) != lostItem) - lostItem = ITEM_NONE; - - // Check if the lost item should be restored - if ((lostItem != ITEM_NONE || returnNPCItems) && GetItemPocket(lostItem) != POCKET_BERRIES) - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &lostItem); - } + const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); + if (additionalEffect->moveEffect == moveEffect && additionalEffect->chance == chance) + return TRUE; } + return FALSE; } -bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item) +bool32 MoveHasAdditionalEffectSelf(u32 move, u32 moveEffect) { - u8 stealerSide = GetBattlerSide(battlerStealing); - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) - return FALSE; - - // Check if the battler trying to steal should be able to - if (stealerSide == B_SIDE_OPPONENT - && !(gBattleTypeFlags & - (BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_LINK - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_SECRET_BASE - | (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE ? BATTLE_TYPE_TRAINER : 0) - ))) - { - return FALSE; - } - else if (!(gBattleTypeFlags & - (BATTLE_TYPE_EREADER_TRAINER - | BATTLE_TYPE_FRONTIER - | BATTLE_TYPE_LINK - | BATTLE_TYPE_RECORDED_LINK - | BATTLE_TYPE_SECRET_BASE)) - && (gWishFutureKnock.knockedOffMons[stealerSide] & (1u << gBattlerPartyIndexes[battlerStealing]))) + u32 i; + u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); + for (i = 0; i < numAdditionalEffects; i++) { - return FALSE; + const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); + if (additionalEffect->moveEffect == moveEffect && additionalEffect->self == TRUE) + return TRUE; } - - // It's supposed to pop before trying to steal but this also works - if (GetItemHoldEffect(item) == HOLD_EFFECT_AIR_BALLOON) - return FALSE; - - if (!CanBattlerGetOrLoseItem(battlerItem, item) // Battler with item cannot have it stolen - || !CanBattlerGetOrLoseItem(battlerStealing, item)) // Stealer cannot take the item - return FALSE; - - return TRUE; + return FALSE; } -void TrySaveExchangedItem(u32 battler, u16 stolenItem) +bool32 IsMoveEffectRemoveSpeciesType(u32 move, u32 moveEffect, u32 argument) { - // Because BtlController_EmitSetMonData does SetMonData, we need to save the stolen item only if it matches the battler's original - // So, if the player steals an item during battle and has it stolen from it, it will not end the battle with it (naturally) - if (B_TRAINERS_KNOCK_OFF_ITEMS == FALSE) - return; - // If regular trainer battle and mon's original item matches what is being stolen, save it to be restored at end of battle - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER - && !(gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - && IsOnPlayerSide(battler) - && stolenItem == gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].originalItem) - gBattleStruct->itemLost[B_SIDE_PLAYER][gBattlerPartyIndexes[battler]].stolen = TRUE; + return (GetMoveArgType(move) == argument) && MoveHasAdditionalEffectSelf(move, moveEffect); } -bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes) +bool32 MoveHasChargeTurnAdditionalEffect(u32 move) { - bool32 ret = TRUE; - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); - if (toxicSpikes && holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS && !IS_BATTLER_OF_TYPE(battler, TYPE_POISON)) - { - ret = FALSE; - RecordItemEffectBattle(battler, holdEffect); - } - else if (holdEffect == HOLD_EFFECT_HEAVY_DUTY_BOOTS) + u32 i; + u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); + for (i = 0; i < numAdditionalEffects; i++) { - ret = FALSE; - RecordItemEffectBattle(battler, holdEffect); + if (GetMoveAdditionalEffectById(move, i)->onChargeTurnOnly) + return TRUE; } - return ret; + return FALSE; } -bool32 TestIfSheerForceAffected(u32 battler, u16 move) +bool32 MoveIsAffectedBySheerForce(u32 move) { - return GetBattlerAbility(battler) == ABILITY_SHEER_FORCE && MoveIsAffectedBySheerForce(move); + u32 i; + u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); + for (i = 0; i < numAdditionalEffects; i++) + { + const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); + if ((additionalEffect->chance > 0) != additionalEffect->sheerForceOverride) + return TRUE; + } + return FALSE; } -// This function is the body of "jumpifstat", but can be used dynamically in a function -bool32 CompareStat(u32 battler, u8 statId, u8 cmpTo, u8 cmpKind) +bool8 CanMonParticipateInSkyBattle(struct Pokemon *mon) { - bool32 ret = FALSE; - u8 statValue = gBattleMons[battler].statStages[statId]; + u16 species = GetMonData(mon, MON_DATA_SPECIES); + u16 monAbilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL); - // Because this command is used as a way of checking if a stat can be lowered/raised, - // we need to do some modification at run-time. - if (GetBattlerAbility(battler) == ABILITY_CONTRARY) + bool8 hasLevitateAbility = GetSpeciesAbility(species, monAbilityNum) == ABILITY_LEVITATE; + bool8 isFlyingType = GetSpeciesType(species, 0) == TYPE_FLYING || GetSpeciesType(species, 1) == TYPE_FLYING; + bool8 monIsValidAndNotEgg = GetMonData(mon, MON_DATA_SANITY_HAS_SPECIES) && !GetMonData(mon, MON_DATA_IS_EGG); + + if (monIsValidAndNotEgg) { - if (cmpKind == CMP_GREATER_THAN) - cmpKind = CMP_LESS_THAN; - else if (cmpKind == CMP_LESS_THAN) - cmpKind = CMP_GREATER_THAN; + if ((hasLevitateAbility || isFlyingType) && !IsMonBannedFromSkyBattles(species)) + return TRUE; + } + return FALSE; +} - if (cmpTo == MIN_STAT_STAGE) - cmpTo = MAX_STAT_STAGE; - else if (cmpTo == MAX_STAT_STAGE) - cmpTo = MIN_STAT_STAGE; +bool8 IsMonBannedFromSkyBattles(u16 species) +{ + switch (species) + { +#if B_SKY_BATTLE_STRICT_ELIGIBILITY == TRUE + case SPECIES_SPEAROW: + case SPECIES_FARFETCHD: + case SPECIES_DODUO: + case SPECIES_DODRIO: + case SPECIES_HOOTHOOT: + case SPECIES_NATU: + case SPECIES_MURKROW: + case SPECIES_DELIBIRD: + case SPECIES_TAILLOW: + case SPECIES_STARLY: + case SPECIES_CHATOT: + case SPECIES_SHAYMIN: + case SPECIES_PIDOVE: + case SPECIES_ARCHEN: + case SPECIES_DUCKLETT: + case SPECIES_RUFFLET: + case SPECIES_VULLABY: + case SPECIES_FLETCHLING: + case SPECIES_HAWLUCHA: + case SPECIES_ROWLET: + case SPECIES_PIKIPEK: +#endif + case SPECIES_EGG: + return TRUE; + default: + return FALSE; } +} - switch (cmpKind) +void GetBattlerTypes(u32 battler, bool32 ignoreTera, enum Type types[static 3]) +{ + // Terastallization. + bool32 isTera = GetActiveGimmick(battler) == GIMMICK_TERA; + if (!ignoreTera && isTera) { - case CMP_EQUAL: - if (statValue == cmpTo) - ret = TRUE; - break; - case CMP_NOT_EQUAL: - if (statValue != cmpTo) - ret = TRUE; - break; - case CMP_GREATER_THAN: - if (statValue > cmpTo) - ret = TRUE; - break; - case CMP_LESS_THAN: - if (statValue < cmpTo) - ret = TRUE; - break; - case CMP_COMMON_BITS: - if (statValue & cmpTo) - ret = TRUE; - break; - case CMP_NO_COMMON_BITS: - if (!(statValue & cmpTo)) - ret = TRUE; - break; + enum Type teraType = GetBattlerTeraType(battler); + if (teraType != TYPE_STELLAR) + { + types[0] = types[1] = types[2] = teraType; + return; + } } - return ret; + types[0] = gBattleMons[battler].types[0]; + types[1] = gBattleMons[battler].types[1]; + types[2] = gBattleMons[battler].types[2]; + + // Roost. + if (!isTera && gDisableStructs[battler].roostActive) + { + if (types[0] == TYPE_FLYING && types[1] == TYPE_FLYING) + types[0] = types[1] = B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY; + else if (types[0] == TYPE_FLYING) + types[0] = TYPE_MYSTERY; + else if (types[1] == TYPE_FLYING) + types[1] = TYPE_MYSTERY; + } } -void BufferStatChange(u32 battler, u8 statId, enum StringID stringId) +enum Type GetBattlerType(u32 battler, u32 typeIndex, bool32 ignoreTera) { - bool32 hasContrary = (GetBattlerAbility(battler) == ABILITY_CONTRARY); + enum Type types[3]; + GetBattlerTypes(battler, ignoreTera, types); + return types[typeIndex]; +} - PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); - if (stringId == STRINGID_STATFELL) - { - if (hasContrary) - PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE) - else - PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATFELL) - } - else if (stringId == STRINGID_STATROSE) - { - if (hasContrary) - PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATFELL) - else - PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE) - } - else +void RemoveBattlerType(u32 battler, enum Type type) +{ + u32 i; + if (GetActiveGimmick(battler) == GIMMICK_TERA) // don't remove type if Terastallized + return; + for (i = 0; i < 3; i++) { - PREPARE_STRING_BUFFER(gBattleTextBuff2, stringId) + if (*(u8 *)(&gBattleMons[battler].types[0] + i) == type) + *(u8 *)(&gBattleMons[battler].types[0] + i) = TYPE_MYSTERY; } } -bool32 TryRoomService(u32 battler) +void SetShellSideArmCategory(void) { - if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && CompareStat(battler, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN)) - { - BufferStatChange(battler, STAT_SPEED, STRINGID_STATFELL); - gEffectBattler = gBattleScripting.battler = battler; - SET_STATCHANGER(STAT_SPEED, 1, TRUE); - gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + STAT_SPEED; - gBattleScripting.animArg2 = 0; - gLastUsedItem = gBattleMons[battler].item; - return TRUE; - } - else + u32 battlerAtk, battlerDef; + u32 attackerAtkStat; + u32 targetDefStat; + u32 attackerSpAtkStat; + u32 targetSpDefStat; + u8 statStage; + u32 physical; + u32 special; + u32 power = GetMovePower(MOVE_SHELL_SIDE_ARM); + + // Don't run this check for Safari Battles. Because player's stats are zeroed out, this performs division by zero which previously would crash on certain emulators in Safari Zone. + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + return; + + for (battlerAtk = 0; battlerAtk < gBattlersCount; battlerAtk++) { - return FALSE; + attackerAtkStat = gBattleMons[battlerAtk].attack; + statStage = gBattleMons[battlerAtk].statStages[STAT_ATK]; + attackerAtkStat *= gStatStageRatios[statStage][0]; + attackerAtkStat /= gStatStageRatios[statStage][1]; + + attackerSpAtkStat = gBattleMons[battlerAtk].spAttack; + statStage = gBattleMons[battlerAtk].statStages[STAT_SPATK]; + attackerSpAtkStat *= gStatStageRatios[statStage][0]; + attackerSpAtkStat /= gStatStageRatios[statStage][1]; + + for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { + if (battlerAtk == battlerDef) + continue; + + targetDefStat = gBattleMons[battlerDef].defense; + statStage = gBattleMons[battlerDef].statStages[STAT_DEF]; + targetDefStat *= gStatStageRatios[statStage][0]; + targetDefStat /= gStatStageRatios[statStage][1]; + if (targetDefStat == 0) + targetDefStat = 1; + + physical = ((((2 * gBattleMons[battlerAtk].level / 5 + 2) * power * attackerAtkStat) / targetDefStat) / 50); + + targetSpDefStat = gBattleMons[battlerDef].spDefense; + statStage = gBattleMons[battlerDef].statStages[STAT_SPDEF]; + targetSpDefStat *= gStatStageRatios[statStage][0]; + targetSpDefStat /= gStatStageRatios[statStage][1]; + if (targetSpDefStat == 0) + targetSpDefStat = 1; + + special = ((((2 * gBattleMons[battlerAtk].level / 5 + 2) * power * attackerSpAtkStat) / targetSpDefStat) / 50); + + if ((physical > special) || (physical == special && RandomPercentage(RNG_SHELL_SIDE_ARM, 50))) + gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] = DAMAGE_CATEGORY_PHYSICAL; + else + gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] = DAMAGE_CATEGORY_SPECIAL; + } } } -bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget) +bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef) { - if (B_PRANKSTER_DARK_TYPES < GEN_7) - return FALSE; - if (!gProtectStructs[battlerPrankster].pranksterElevated) - return FALSE; - if (IsBattlerAlly(battlerPrankster, battlerDef)) - return FALSE; - if (checkTarget && (GetBattlerMoveTargetType(battlerPrankster, move) & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_DEPENDS))) - return FALSE; - if (!IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK)) - return FALSE; - if (gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE) - return FALSE; - - return TRUE; + return (IsDoubleBattle() + && IsBattlerAlive(BATTLE_PARTNER(battlerDef)) + && battlerDef != BATTLE_PARTNER(battlerAtk)); } -u16 GetUsedHeldItem(u32 battler) +static inline bool32 DoesBattlerHaveAbilityImmunity(u32 battlerAtk, u32 battlerDef, enum Type moveType) { - return gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]; + enum Ability abilityDef = GetBattlerAbility(battlerDef); + + return CanAbilityBlockMove(battlerAtk, battlerDef, GetBattlerAbility(battlerAtk), abilityDef, gCurrentMove, CHECK_TRIGGER) + || CanAbilityAbsorbMove(battlerAtk, battlerDef, abilityDef, gCurrentMove, moveType, CHECK_TRIGGER); } -bool32 CantPickupItem(u32 battler) +bool32 TargetFullyImmuneToCurrMove(u32 battlerAtk, u32 battlerDef) { - // Used by RandomUniformExcept() for RNG_PICKUP - if (battler == gBattlerAttacker && (B_PICKUP_WILD < GEN_9 || gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK))) - return TRUE; - return !(IsBattlerAlive(battler) && GetUsedHeldItem(battler) && gBattleStruct->battlerState[battler].canPickupItem); + enum Type moveType = GetBattleMoveType(gCurrentMove); + return ((CalcTypeEffectivenessMultiplierHelper(gCurrentMove, moveType, battlerAtk, battlerDef, GetBattlerAbility(battlerAtk), GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) + || IsBattlerProtected(battlerAtk, battlerDef, gCurrentMove) + || !BreaksThroughSemiInvulnerablity(battlerDef, gCurrentMove) + || DoesBattlerHaveAbilityImmunity(battlerAtk, battlerDef, moveType)); } -bool32 PickupHasValidTarget(u32 battler) +enum Type GetBattleMoveType(u32 move) { - u32 i; - for (i = 0; i < gBattlersCount; i++) - { - if (!CantPickupItem(i)) - return TRUE; - } - return FALSE; + if (gMain.inBattle && gBattleStruct->dynamicMoveType) + return gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; + else if (B_UPDATED_MOVE_TYPES < GEN_5 + && (move == MOVE_BEAT_UP + || move == MOVE_FUTURE_SIGHT + || move == MOVE_DOOM_DESIRE)) + return TYPE_MYSTERY; + return GetMoveType(move); } -bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags) +void TryActivateSleepClause(u32 battler, u32 indexInParty) { - if (gBattleWeather & weatherFlags && HasWeatherEffect()) + if (gBattleStruct->battlerState[battler].sleepClauseEffectExempt) { - // given weather is active -> check if its sun, rain against utility umbrella (since only 1 weather can be active at once) - if (gBattleWeather & (B_WEATHER_SUN | B_WEATHER_RAIN) && GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_UTILITY_UMBRELLA) - return FALSE; // utility umbrella blocks sun, rain effects - - return TRUE; + gBattleStruct->battlerState[battler].sleepClauseEffectExempt = FALSE; + return; } - return FALSE; + + if (IsSleepClauseEnabled()) + gBattleStruct->monCausingSleepClause[GetBattlerSide(battler)] = indexInParty; } -// Gets move target before redirection effects etc. are applied -// Possible return values are defined in battle.h following MOVE_TARGET_SELECTED -u32 GetBattlerMoveTargetType(u32 battler, u32 move) +void TryDeactivateSleepClause(u32 battlerSide, u32 indexInParty) { - enum BattleMoveEffects effect = GetMoveEffect(move); - if (effect == EFFECT_CURSE && !IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) - return MOVE_TARGET_USER; - if (effect == EFFECT_EXPANDING_FORCE && IsBattlerTerrainAffected(battler, STATUS_FIELD_PSYCHIC_TERRAIN)) - return MOVE_TARGET_BOTH; - if (effect == EFFECT_TERA_STARSTORM && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR) - return MOVE_TARGET_BOTH; - - return GetMoveTarget(move); + // If the pokemon on the given side at the given index in the party is the one causing Sleep Clause to be active, + // set monCausingSleepClause[battlerSide] = PARTY_SIZE, which means Sleep Clause is not active for the given side + if (IsSleepClauseEnabled() && gBattleStruct->monCausingSleepClause[battlerSide] == indexInParty) + gBattleStruct->monCausingSleepClause[battlerSide] = PARTY_SIZE; } -bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move) +bool32 IsSleepClauseActiveForSide(u32 battlerSide) { - if (GetMoveEffect(move) == EFFECT_HIT_ENEMY_HEAL_ALLY - && IsBattlerAlly(battlerAtk, battlerDef) - && gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) - return FALSE; // PokΓ©mon affected by Heal Block cannot target allies with Pollen Puff - if (IsBattlerAlly(battlerAtk, battlerDef) && (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX - || IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX))) - return FALSE; + // If monCausingSleepClause[battlerSide] == PARTY_SIZE, Sleep Clause is not active for the given side. + // If monCausingSleepClause[battlerSide] < PARTY_SIZE, it means it is storing the index of the mon that is causing Sleep Clause to be active, + // from which it follows that Sleep Clause is active. + return (IsSleepClauseEnabled() && (gBattleStruct->monCausingSleepClause[battlerSide] < PARTY_SIZE)); +} - return TRUE; +bool32 IsSleepClauseEnabled() +{ + if (B_SLEEP_CLAUSE) + return TRUE; + if (FlagGet(B_FLAG_SLEEP_CLAUSE)) + return TRUE; + return FALSE; } -static void SetRandomMultiHitCounter() +void ClearDamageCalcResults(void) { - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LOADED_DICE) - gMultiHitCounter = RandomUniform(RNG_LOADED_DICE, 4, 5); - else if (GetGenConfig(GEN_CONFIG_MULTI_HIT_CHANCE) >= GEN_5) - gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 7, 7, 3, 3); // 35%: 2 hits, 35%: 3 hits, 15% 4 hits, 15% 5 hits. + for (u32 battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + gBattleStruct->moveDamage[battler] = 0; + gBattleStruct->critChance[battler] = 0; + gBattleStruct->moveResultFlags[battler] = 0; + gBattleStruct->noResultString[battler] = CAN_DAMAGE; + gBattleStruct->missStringId[battler] = 0; + gSpecialStatuses[battler].criticalHit = FALSE; + } + + gBattleStruct->doneDoublesSpreadHit = FALSE; + gBattleStruct->calculatedDamageDone = FALSE; + gBattleStruct->calculatedSpreadMoveAccuracy = FALSE; + gBattleStruct->printedStrongWindsWeakenedAttack = FALSE; + gBattleStruct->numSpreadTargets = 0; + gBattleScripting.savedDmg = 0; + if (gCurrentMove != MOVE_NONE) + gBattleStruct->moldBreakerActive = IsMoldBreakerTypeAbility(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) || MoveIgnoresTargetAbility(gCurrentMove); else - gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 3, 3, 1, 1); // 37.5%: 2 hits, 37.5%: 3 hits, 12.5% 4 hits, 12.5% 5 hits. + gBattleStruct->moldBreakerActive = FALSE; } -void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon) +bool32 DoesDestinyBondFail(u32 battler) { - gBattleMons[battler].level = GetMonData(mon, MON_DATA_LEVEL); - gBattleMons[battler].hp = GetMonData(mon, MON_DATA_HP); - gBattleMons[battler].maxHP = GetMonData(mon, MON_DATA_MAX_HP); - gBattleMons[battler].attack = GetMonData(mon, MON_DATA_ATK); - gBattleMons[battler].defense = GetMonData(mon, MON_DATA_DEF); - gBattleMons[battler].speed = GetMonData(mon, MON_DATA_SPEED); - gBattleMons[battler].spAttack = GetMonData(mon, MON_DATA_SPATK); - gBattleMons[battler].spDefense = GetMonData(mon, MON_DATA_SPDEF); + return GetConfig(CONFIG_DESTINY_BOND_FAIL) >= GEN_7 && gBattleMons[battler].volatiles.destinyBond; } -void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon) +// This check has always to be the last in a condtion statement because of the recording of AI data. +bool32 IsMoveEffectBlockedByTarget(enum Ability ability) { - gBattleMons[battler].ability = GetMonAbility(mon); - gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].types[2] = TYPE_MYSTERY; + if (ability == ABILITY_SHIELD_DUST) + { + RecordAbilityBattle(gBattlerTarget, ability); + return TRUE; + } + else if (GetBattlerHoldEffect(gBattlerTarget) == HOLD_EFFECT_COVERT_CLOAK) + { + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_COVERT_CLOAK); + return TRUE; + } + + return FALSE; } -void RecalcBattlerStats(u32 battler, struct Pokemon *mon, bool32 isDynamaxing) +bool32 IsPursuitTargetSet(void) { - u32 hp = GetMonData(mon, MON_DATA_HP); - u32 oldMaxHp = GetMonData(mon, MON_DATA_MAX_HP); - CalculateMonStats(mon); - if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && gChosenActionByBattler[battler] != B_ACTION_SWITCH) + for (u32 battler = 0; battler < gBattlersCount; battler++) { - ApplyDynamaxHPMultiplier(mon); - u32 newMaxHp = GetMonData(mon, MON_DATA_MAX_HP); - if (!isDynamaxing) - { - if (newMaxHp > oldMaxHp) // restore hp gained from changing form, without this, dynamaxed form changes are calculated incorrectly - { - hp += (newMaxHp - oldMaxHp); - SetMonData(mon, MON_DATA_HP, &hp); - } - else - { - SetMonData(mon, MON_DATA_HP, &hp); - } - } + if (gBattleStruct->battlerState[battler].pursuitTarget) + return TRUE; } - CopyMonLevelAndBaseStatsToBattleMon(battler, mon); - CopyMonAbilityAndTypesToBattleMon(battler, mon); + return FALSE; +} + +void ClearPursuitValues(void) +{ + for (u32 i = 0; i < gBattlersCount; i++) + gBattleStruct->battlerState[i].pursuitTarget = FALSE; + gBattleStruct->pursuitStoredSwitch = PARTY_SIZE; } -void RemoveConfusionStatus(u32 battler) +void ClearPursuitValuesIfSet(u32 battler) { - gBattleMons[battler].status2 &= ~STATUS2_CONFUSION; - gStatuses4[battler] &= ~STATUS4_INFINITE_CONFUSION; + if (gBattleStruct->battlerState[battler].pursuitTarget) + ClearPursuitValues(); } -static bool32 CanBeInfinitelyConfused(u32 battler) +bool32 HasWeatherEffect(void) { - if (GetBattlerAbility(battler) == ABILITY_OWN_TEMPO - || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN) - || gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) + for (u32 battler = 0; battler < gBattlersCount; battler++) { - return FALSE; + if (!IsBattlerAlive(battler)) + continue; + + enum Ability ability = GetBattlerAbility(battler); + switch (ability) + { + case ABILITY_CLOUD_NINE: + case ABILITY_AIR_LOCK: + return FALSE; + default: + break; + } } + return TRUE; } -u8 GetBattlerGender(u32 battler) +void UpdateStallMons(void) { - return GetGenderFromSpeciesAndPersonality(gBattleMons[battler].species, - gBattleMons[battler].personality); + if (IsBattlerTurnDamaged(gBattlerTarget) || IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) || GetMoveCategory(gCurrentMove) == DAMAGE_CATEGORY_STATUS) + return; + if (!IsDoubleBattle() || GetMoveTarget(gCurrentMove) == MOVE_TARGET_SELECTED) + { + enum Type moveType = GetBattleMoveType(gCurrentMove); // Probably doesn't handle dynamic move types right now + enum Ability abilityAtk = GetBattlerAbility(gBattlerAttacker); + enum Ability abilityDef = GetBattlerAbility(gBattlerTarget); + if (CanAbilityAbsorbMove(gBattlerAttacker, gBattlerTarget, abilityDef, gCurrentMove, moveType, CHECK_TRIGGER)) + { + gAiBattleData->playerStallMons[gBattlerPartyIndexes[gBattlerTarget]]++; + } + else if (CanAbilityBlockMove(gBattlerAttacker, gBattlerTarget, abilityAtk, abilityDef, gCurrentMove, CHECK_TRIGGER)) + { + gAiBattleData->playerStallMons[gBattlerPartyIndexes[gBattlerTarget]]++; + } + else if (AI_GetMoveEffectiveness(gCurrentMove, gBattlerAttacker, gBattlerTarget) == 0) + { + gAiBattleData->playerStallMons[gBattlerPartyIndexes[gBattlerTarget]]++; + } + } + // Handling for moves that target multiple opponents in doubles not handled currently } -bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2) +bool32 TrySwitchInEjectPack(enum EjectPackTiming timing) { - u8 gender1 = GetBattlerGender(battler1); - u8 gender2 = GetBattlerGender(battler2); + // Because sorting the battlers by speed takes lots of cycles, it's better to just check if any of the battlers has the Eject items. + u32 ejectPackBattlers = 0; + u32 numEjectPackBattlers = 0; - return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 != gender2); -} + for (u32 i = 0; i < gBattlersCount; i++) + { + if (gDisableStructs[i].tryEjectPack + && GetBattlerHoldEffect(i) == HOLD_EFFECT_EJECT_PACK + && IsBattlerAlive(i) + && CountUsablePartyMons(i) > 0) + { + ejectPackBattlers |= 1u << i; + numEjectPackBattlers++; + } + } -bool32 AreBattlersOfSameGender(u32 battler1, u32 battler2) -{ - u8 gender1 = GetBattlerGender(battler1); - u8 gender2 = GetBattlerGender(battler2); + if (numEjectPackBattlers == 0) + return FALSE; - return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 == gender2); -} + u8 battlers[4] = {0, 1, 2, 3}; + if (numEjectPackBattlers > 1) + SortBattlersBySpeed(battlers, FALSE); -u32 CalcSecondaryEffectChance(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect) -{ - bool8 hasSereneGrace = (battlerAbility == ABILITY_SERENE_GRACE); - bool8 hasRainbow = (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_RAINBOW) != 0; - u16 secondaryEffectChance = additionalEffect->chance; + for (u32 i = 0; i < gBattlersCount; i++) + gDisableStructs[i].tryEjectPack = FALSE; - if (hasRainbow && hasSereneGrace && additionalEffect->moveEffect == MOVE_EFFECT_FLINCH) - return secondaryEffectChance * 2; + for (u32 i = 0; i < gBattlersCount; i++) + { + u32 battler = battlers[i]; - if (hasSereneGrace) - secondaryEffectChance *= 2; - if (hasRainbow && additionalEffect->moveEffect != MOVE_EFFECT_SECRET_POWER) - secondaryEffectChance *= 2; + if (!(ejectPackBattlers & 1u << battler)) + continue; - return secondaryEffectChance; -} + gBattleScripting.battler = battler; + gLastUsedItem = gBattleMons[battler].item; + if (timing == FIRST_TURN) + BattleScriptPushCursorAndCallback(BattleScript_EjectPackActivate_End3); + else if (timing == END_TURN) + BattleScriptExecute(BattleScript_EjectPackActivate_End2); + else + BattleScriptCall(BattleScript_EjectPackActivate_Ret); + gAiLogicData->ejectPackSwitch = TRUE; + return TRUE; + } -bool32 MoveEffectIsGuaranteed(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect) -{ - return additionalEffect->chance == 0 || CalcSecondaryEffectChance(battler, battlerAbility, additionalEffect) >= 100; + return FALSE; } -bool32 IsGen6ExpShareEnabled(void) -{ - if (I_EXP_SHARE_FLAG <= TEMP_FLAGS_END) - return FALSE; +#define UNPACK_VOLATILE_GETTERS(_enum, _fieldName, _typeMaxValue, ...) case _enum: return gBattleMons[battler].volatiles._fieldName; - return FlagGet(I_EXP_SHARE_FLAG); +// Gets the value of a volatile status flag for a certain battler +// Primarily used for the debug menu and scripts. Outside of it explicit references are preferred +u32 GetBattlerVolatile(u32 battler, enum Volatile _volatile) +{ + switch (_volatile) + { + VOLATILE_DEFINITIONS(UNPACK_VOLATILE_GETTERS) + /* Expands to: + case VOLATILE_CONFUSION: + return gBattleMons[battler].volatiles.confusionTurns; + */ + default: // Invalid volatile status + return 0; + } } +#define UNPACK_VOLATILE_SETTERS(_enum, _fieldName, _typeMaxValue, ...) case _enum: gBattleMons[battler].volatiles._fieldName = min(GET_VOLATILE_MAXIMUM(_typeMaxValue), newValue); break; -bool32 MoveHasAdditionalEffect(u32 move, u32 moveEffect) +// Sets the value of a volatile status flag for a certain battler +// Primarily used for the debug menu and scripts. Outside of it explicit references are preferred +void SetMonVolatile(u32 battler, enum Volatile _volatile, u32 newValue) { - u32 i; - u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); - for (i = 0; i < numAdditionalEffects; i++) + switch (_volatile) { - const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); - if (additionalEffect->moveEffect == moveEffect && additionalEffect->self == FALSE) - return TRUE; + VOLATILE_DEFINITIONS(UNPACK_VOLATILE_SETTERS) + /* Expands to: + case VOLATILE_CONFUSION: + gBattleMons[battler].volatiles.confusionTurns = min(MAX_BITS(3), newValue); + break; + */ + default: // Invalid volatile status + return; } - return FALSE; } -bool32 MoveHasAdditionalEffectWithChance(u32 move, u32 moveEffect, u32 chance) +bool32 ItemHealMonVolatile(u32 battler, u16 itemId) { - u32 i; - u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); - for (i = 0; i < numAdditionalEffects; i++) + bool32 statusChanged = FALSE; + const u8 *effect = GetItemEffect(itemId); + if (effect[3] & ITEM3_STATUS_ALL) { - const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); - if (additionalEffect->moveEffect == moveEffect && additionalEffect->chance == chance) - return TRUE; + statusChanged = (gBattleMons[battler].volatiles.infatuation || gBattleMons[battler].volatiles.confusionTurns > 0 || gBattleMons[battler].volatiles.infiniteConfusion); + gBattleMons[battler].volatiles.infatuation = 0; + gBattleMons[battler].volatiles.confusionTurns = 0; + gBattleMons[battler].volatiles.infiniteConfusion = FALSE; } - return FALSE; + else if (effect[0] & ITEM0_INFATUATION) + { + statusChanged = !!gBattleMons[battler].volatiles.infatuation; + gBattleMons[battler].volatiles.infatuation = 0; + } + else if (effect[3] & ITEM3_CONFUSION) + { + statusChanged = (gBattleMons[battler].volatiles.confusionTurns > 0 || gBattleMons[battler].volatiles.infiniteConfusion); + gBattleMons[battler].volatiles.confusionTurns = 0; + gBattleMons[battler].volatiles.infiniteConfusion = FALSE; + } + + return statusChanged; } -bool32 MoveHasAdditionalEffectSelf(u32 move, u32 moveEffect) +// Hazards are added to a queue and applied based in order (FIFO) +void PushHazardTypeToQueue(u32 side, enum Hazards hazardType) { - u32 i; - u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); - for (i = 0; i < numAdditionalEffects; i++) + if (!IsHazardOnSide(side, hazardType)) // Failsafe + gBattleStruct->hazardsQueue[side][gBattleStruct->numHazards[side]++] = hazardType; +} + +bool32 IsHazardOnSide(u32 side, enum Hazards hazardType) +{ + for (u32 i = 0; i < HAZARDS_MAX_COUNT; i++) { - const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); - if (additionalEffect->moveEffect == moveEffect && additionalEffect->self == TRUE) + if (gBattleStruct->hazardsQueue[side][i] == hazardType) return TRUE; } return FALSE; } -bool32 IsMoveEffectRemoveSpeciesType(u32 move, u32 moveEffect, u32 argument) +bool32 AreAnyHazardsOnSide(u32 side) { - return (GetMoveArgType(move) == argument) && MoveHasAdditionalEffectSelf(move, moveEffect); + return gBattleStruct->numHazards[side] > 0; } -bool32 MoveHasChargeTurnAdditionalEffect(u32 move) +bool32 IsHazardOnSideAndClear(u32 side, enum Hazards hazardType) { - u32 i; - u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); - for (i = 0; i < numAdditionalEffects; i++) + for (u32 i = 0; i < HAZARDS_MAX_COUNT; i++) { - if (GetMoveAdditionalEffectById(move, i)->onChargeTurnOnly) + if (gBattleStruct->hazardsQueue[side][i] == hazardType) + { + gBattleStruct->hazardsQueue[side][i] = HAZARDS_NONE; + if (hazardType == HAZARDS_SPIKES) + gSideTimers[side].spikesAmount = 0; + else if (hazardType == HAZARDS_TOXIC_SPIKES) + gSideTimers[side].toxicSpikesAmount = 0; return TRUE; + } } return FALSE; } -bool32 MoveIsAffectedBySheerForce(u32 move) +void RemoveAllHazardsFromField(u32 side) +{ + gSideTimers[side].spikesAmount = 0; + gSideTimers[side].toxicSpikesAmount = 0; + gBattleStruct->numHazards[side] = 0; + for (u32 i = 0; i < HAZARDS_MAX_COUNT; i++) + gBattleStruct->hazardsQueue[side][i] = HAZARDS_NONE; +} + +void RemoveHazardFromField(u32 side, enum Hazards hazardType) { u32 i; - u32 numAdditionalEffects = GetMoveAdditionalEffectCount(move); - for (i = 0; i < numAdditionalEffects; i++) + for (i = 0; i < HAZARDS_MAX_COUNT; i++) { - const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i); - if (additionalEffect->sheerForceBoost == SHEER_FORCE_NO_BOOST) - continue; - - if (additionalEffect->chance > 0) - return TRUE; - if (additionalEffect->sheerForceBoost == SHEER_FORCE_BOOST) - return TRUE; + if (gBattleStruct->hazardsQueue[side][i] == hazardType) + { + gBattleStruct->hazardsQueue[side][i] = HAZARDS_NONE; + gBattleStruct->numHazards[side]--; + if (hazardType == HAZARDS_SPIKES) + gSideTimers[side].spikesAmount = 0; + else if (hazardType == HAZARDS_TOXIC_SPIKES) + gSideTimers[side].toxicSpikesAmount = 0; + break; + } + } + while (i < HAZARDS_MAX_COUNT) + { + if (i+1 == HAZARDS_MAX_COUNT) + { + gBattleStruct->hazardsQueue[side][i] = HAZARDS_NONE; + break; + } + gBattleStruct->hazardsQueue[side][i] = gBattleStruct->hazardsQueue[side][i+1]; + i++; } - return FALSE; } -bool8 CanMonParticipateInSkyBattle(struct Pokemon *mon) +bool32 CanMoveSkipAccuracyCalc(u32 battlerAtk, u32 battlerDef, enum Ability abilityAtk, enum Ability abilityDef, u32 move, enum FunctionCallOption option) { - u16 species = GetMonData(mon, MON_DATA_SPECIES); - u16 monAbilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL); - - bool8 hasLevitateAbility = gSpeciesInfo[species].abilities[monAbilityNum] == ABILITY_LEVITATE; - bool8 isFlyingType = gSpeciesInfo[species].types[0] == TYPE_FLYING || gSpeciesInfo[species].types[1] == TYPE_FLYING; - bool8 monIsValidAndNotEgg = GetMonData(mon, MON_DATA_SANITY_HAS_SPECIES) && !GetMonData(mon, MON_DATA_IS_EGG); + bool32 effect = FALSE; + enum Ability ability = ABILITY_NONE; + enum BattleMoveEffects moveEffect = GetMoveEffect(move); + u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); - if (monIsValidAndNotEgg) + if ((gBattleMons[battlerDef].volatiles.lockOn && gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) + || (GetConfig(CONFIG_TOXIC_NEVER_MISS) >= GEN_6 && nonVolatileStatus == MOVE_EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) + || gBattleMons[battlerDef].volatiles.glaiveRush) { - if ((hasLevitateAbility || isFlyingType) && !IsMonBannedFromSkyBattles(species)) - return TRUE; + effect = TRUE; } - return FALSE; -} - -bool8 IsMonBannedFromSkyBattles(u16 species) -{ - switch (species) + // If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits. + else if (abilityAtk == ABILITY_NO_GUARD + && gBattleMons[battlerDef].volatiles.semiInvulnerable != STATE_COMMANDER + && (moveEffect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[battlerDef] == SKY_DROP_NO_TARGET)) { -#if B_SKY_BATTLE_STRICT_ELIGIBILITY == TRUE - case SPECIES_SPEAROW: - case SPECIES_FARFETCHD: - case SPECIES_DODUO: - case SPECIES_DODRIO: - case SPECIES_HOOTHOOT: - case SPECIES_NATU: - case SPECIES_MURKROW: - case SPECIES_DELIBIRD: - case SPECIES_TAILLOW: - case SPECIES_STARLY: - case SPECIES_CHATOT: - case SPECIES_SHAYMIN: - case SPECIES_PIDOVE: - case SPECIES_ARCHEN: - case SPECIES_DUCKLETT: - case SPECIES_RUFFLET: - case SPECIES_VULLABY: - case SPECIES_FLETCHLING: - case SPECIES_HAWLUCHA: - case SPECIES_ROWLET: - case SPECIES_PIKIPEK: -#endif - case SPECIES_EGG: - return TRUE; - default: - return FALSE; + effect = TRUE; + ability = ABILITY_NO_GUARD; } -} - -void GetBattlerTypes(u32 battler, bool32 ignoreTera, u32 types[static 3]) -{ - // Terastallization. - bool32 isTera = GetActiveGimmick(battler) == GIMMICK_TERA; - if (!ignoreTera && isTera) + // If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits. + else if (abilityDef == ABILITY_NO_GUARD + && (moveEffect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[battlerDef] == SKY_DROP_NO_TARGET)) { - u32 teraType = GetBattlerTeraType(battler); - if (teraType != TYPE_STELLAR) + effect = TRUE; + ability = ABILITY_NO_GUARD; + } + // If the target is under the effects of Telekinesis, and the move isn't a OH-KO move, move hits. + else if (gBattleMons[battlerDef].volatiles.telekinesis + && !IsSemiInvulnerable(battlerDef, CHECK_ALL) + && moveEffect != EFFECT_OHKO + && moveEffect != EFFECT_SHEER_COLD) + { + effect = TRUE; + } + else if (gBattleStruct->battlerState[battlerDef].pursuitTarget) + { + effect = TRUE; + } + else if (GetActiveGimmick(battlerAtk) == GIMMICK_Z_MOVE && !IsSemiInvulnerable(battlerDef, CHECK_ALL)) + { + effect = TRUE; + } + else if (!BreaksThroughSemiInvulnerablity(battlerDef, move)) + { + if (option == RUN_SCRIPT) { - types[0] = types[1] = types[2] = teraType; - return; + gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_MISSED; + effect = TRUE; + } + else + { + effect = FALSE; } } + else if (B_MINIMIZE_DMG_ACC >= GEN_6 + && gBattleMons[battlerDef].volatiles.minimize + && MoveIncreasesPowerToMinimizedTargets(move)) + { + effect = TRUE; + } + else if (GetMoveAccuracy(move) == 0) + { + effect = TRUE; + } - types[0] = gBattleMons[battler].types[0]; - types[1] = gBattleMons[battler].types[1]; - types[2] = gBattleMons[battler].types[2]; - - // Roost. - if (!isTera && gDisableStructs[battler].roostActive) + if (!effect && HasWeatherEffect()) { - if (types[0] == TYPE_FLYING && types[1] == TYPE_FLYING) - types[0] = types[1] = B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY; - else if (types[0] == TYPE_FLYING) - types[0] = TYPE_MYSTERY; - else if (types[1] == TYPE_FLYING) - types[1] = TYPE_MYSTERY; + if (MoveAlwaysHitsInRain(move) && IsBattlerWeatherAffected(battlerDef, B_WEATHER_RAIN)) + effect = TRUE; + else if ((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && MoveAlwaysHitsInHailSnow(move)) + effect = TRUE; + + if (effect) + return effect; } + + if (ability != ABILITY_NONE && option == RUN_SCRIPT) + RecordAbilityBattle(battlerAtk, ABILITY_NO_GUARD); + + return effect; } -u32 GetBattlerType(u32 battler, u32 typeIndex, bool32 ignoreTera) +u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, enum Ability atkAbility, enum Ability defAbility, enum HoldEffect atkHoldEffect, enum HoldEffect defHoldEffect) { - u32 types[3]; - GetBattlerTypes(battler, ignoreTera, types); - return types[typeIndex]; -} + u32 calc, moveAcc; + s8 buff, accStage, evasionStage; + u32 atkParam = GetBattlerHoldEffectParam(battlerAtk); + u32 defParam = GetBattlerHoldEffectParam(battlerDef); + + gPotentialItemEffectBattler = battlerDef; + accStage = gBattleMons[battlerAtk].statStages[STAT_ACC]; + evasionStage = gBattleMons[battlerDef].statStages[STAT_EVASION]; + if (atkAbility == ABILITY_UNAWARE || atkAbility == ABILITY_KEEN_EYE || atkAbility == ABILITY_MINDS_EYE + || (GetConfig(CONFIG_ILLUMINATE_EFFECT) >= GEN_9 && atkAbility == ABILITY_ILLUMINATE)) + evasionStage = DEFAULT_STAT_STAGE; + if (MoveIgnoresDefenseEvasionStages(move)) + evasionStage = DEFAULT_STAT_STAGE; + if (defAbility == ABILITY_UNAWARE) + accStage = DEFAULT_STAT_STAGE; + + if (gBattleMons[battlerDef].volatiles.foresight || gBattleMons[battlerDef].volatiles.miracleEye) + buff = accStage; + else + buff = accStage + DEFAULT_STAT_STAGE - evasionStage; + + if (buff < MIN_STAT_STAGE) + buff = MIN_STAT_STAGE; + if (buff > MAX_STAT_STAGE) + buff = MAX_STAT_STAGE; + + moveAcc = GetMoveAccuracy(move); + // Check Thunder and Hurricane on sunny weather. + if (IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && MoveHas50AccuracyInSun(move)) + moveAcc = 50; + // Check Wonder Skin. + if (defAbility == ABILITY_WONDER_SKIN && IsBattleMoveStatus(move) && moveAcc > 50) + moveAcc = 50; + + calc = gAccuracyStageRatios[buff].dividend * moveAcc; + calc /= gAccuracyStageRatios[buff].divisor; + + // Attacker's ability + switch (atkAbility) + { + case ABILITY_COMPOUND_EYES: + calc = (calc * 130) / 100; // 1.3 compound eyes boost + break; + case ABILITY_VICTORY_STAR: + calc = (calc * 110) / 100; // 1.1 victory star boost + break; + case ABILITY_HUSTLE: + if (IsBattleMovePhysical(move)) + calc = (calc * 80) / 100; // 1.2 hustle loss + break; + default: + break; + } -void RemoveBattlerType(u32 battler, u8 type) -{ - u32 i; - if (GetActiveGimmick(battler) == GIMMICK_TERA) // don't remove type if Terastallized - return; - for (i = 0; i < 3; i++) + // Target's ability + switch (defAbility) { - if (*(u8 *)(&gBattleMons[battler].types[0] + i) == type) - *(u8 *)(&gBattleMons[battler].types[0] + i) = TYPE_MYSTERY; + case ABILITY_SAND_VEIL: + if (gBattleWeather & B_WEATHER_SANDSTORM && HasWeatherEffect()) + calc = (calc * 80) / 100; // 1.2 sand veil loss + break; + case ABILITY_SNOW_CLOAK: + if ((gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) && HasWeatherEffect()) + calc = (calc * 80) / 100; // 1.2 snow cloak loss + break; + case ABILITY_TANGLED_FEET: + if (gBattleMons[battlerDef].volatiles.confusionTurns) + calc = (calc * 50) / 100; // 1.5 tangled feet loss + break; + default: + break; } -} -void SetShellSideArmCategory(void) -{ - u32 battlerAtk, battlerDef; - u32 attackerAtkStat; - u32 targetDefStat; - u32 attackerSpAtkStat; - u32 targetSpDefStat; - u8 statStage; - u32 physical; - u32 special; - u32 power = GetMovePower(MOVE_SHELL_SIDE_ARM); + // Attacker's ally's ability + u32 atkAlly = BATTLE_PARTNER(battlerAtk); + switch (GetBattlerAbility(atkAlly)) + { + case ABILITY_VICTORY_STAR: + if (IsBattlerAlive(atkAlly)) + calc = (calc * 110) / 100; // 1.1 ally's victory star boost + break; + default: + break; + } - // Don't run this check for Safari Battles. Because player's stats are zeroed out, this performs division by zero which previously would crash on certain emulators in Safari Zone. - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - return; + // Attacker's hold effect + switch (atkHoldEffect) + { + case HOLD_EFFECT_WIDE_LENS: + calc = (calc * (100 + atkParam)) / 100; + break; + case HOLD_EFFECT_ZOOM_LENS: + if (HasBattlerActedThisTurn(battlerDef)) + calc = (calc * (100 + atkParam)) / 100; + break; + default: + break; + } - for (battlerAtk = 0; battlerAtk < gBattlersCount; battlerAtk++) + // Target's hold effect + switch (defHoldEffect) { - attackerAtkStat = gBattleMons[battlerAtk].attack; - statStage = gBattleMons[battlerAtk].statStages[STAT_ATK]; - attackerAtkStat *= gStatStageRatios[statStage][0]; - attackerAtkStat /= gStatStageRatios[statStage][1]; + case HOLD_EFFECT_EVASION_UP: + calc = (calc * (100 - defParam)) / 100; + break; + default: + break; + } - attackerSpAtkStat = gBattleMons[battlerAtk].spAttack; - statStage = gBattleMons[battlerAtk].statStages[STAT_SPATK]; - attackerSpAtkStat *= gStatStageRatios[statStage][0]; - attackerSpAtkStat /= gStatStageRatios[statStage][1]; + if (gBattleStruct->battlerState[battlerAtk].usedMicleBerry) + { + // TODO: Is this true? + if (atkAbility == ABILITY_RIPEN) + calc = (calc * 140) / 100; // ripen gives 40% acc boost + else + calc = (calc * 120) / 100; // 20% acc boost + } - for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) - { - if (battlerAtk == battlerDef) - continue; + if (gFieldStatuses & STATUS_FIELD_GRAVITY) + calc = (calc * 5) / 3; // 1.66 Gravity acc boost - targetDefStat = gBattleMons[battlerDef].defense; - statStage = gBattleMons[battlerDef].statStages[STAT_DEF]; - targetDefStat *= gStatStageRatios[statStage][0]; - targetDefStat /= gStatStageRatios[statStage][1]; + if (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(battlerDef) == AFFECTION_FIVE_HEARTS) + calc = (calc * 90) / 100; - physical = ((((2 * gBattleMons[battlerAtk].level / 5 + 2) * power * attackerAtkStat) / targetDefStat) / 50); + if (HasWeatherEffect() && gBattleWeather & B_WEATHER_FOG) + calc = (calc * 60) / 100; // modified by 3/5 - targetSpDefStat = gBattleMons[battlerDef].spDefense; - statStage = gBattleMons[battlerDef].statStages[STAT_SPDEF]; - targetSpDefStat *= gStatStageRatios[statStage][0]; - targetSpDefStat /= gStatStageRatios[statStage][1]; + return calc; +} - special = ((((2 * gBattleMons[battlerAtk].level / 5 + 2) * power * attackerSpAtkStat) / targetSpDefStat) / 50); +bool32 IsSemiInvulnerable(u32 battler, enum SemiInvulnerableExclusion excludeCommander) +{ + if (gBattleMons[battler].volatiles.semiInvulnerable == STATE_COMMANDER) + return excludeCommander != EXCLUDE_COMMANDER; + return gBattleMons[battler].volatiles.semiInvulnerable != STATE_NONE; +} - if ((physical > special) || (physical == special && RandomPercentage(RNG_SHELL_SIDE_ARM, 50))) - gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] = DAMAGE_CATEGORY_PHYSICAL; - else - gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] = DAMAGE_CATEGORY_SPECIAL; - } +bool32 BreaksThroughSemiInvulnerablity(u32 battler, u32 move) +{ + switch (gBattleMons[battler].volatiles.semiInvulnerable) + { + case STATE_UNDERGROUND: + return MoveDamagesUnderground(move); + case STATE_UNDERWATER: + return MoveDamagesUnderWater(move); + case STATE_ON_AIR: + case STATE_SKY_DROP: + return MoveDamagesAirborne(move) || MoveDamagesAirborneDoubleDamage(move); + case STATE_PHANTOM_FORCE: + return FALSE; + case STATE_COMMANDER: + return FALSE; + case STATE_NONE: + return TRUE; } + + return FALSE; } -bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef) +bool32 HasPartnerTrainer(u32 battler) { - return (IsDoubleBattle() - && IsBattlerAlive(BATTLE_PARTNER(battlerDef)) - && battlerDef != BATTLE_PARTNER(battlerAtk)); + if ((GetBattlerSide(battler) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_PLAYER_HAS_PARTNER) + || (GetBattlerSide(battler) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)) + return TRUE; + else + return FALSE; } -static inline bool32 DoesBattlerHaveAbilityImmunity(u32 battlerAtk, u32 battlerDef, u32 moveType) +static bool32 IsOpposingSideEmpty(u32 battler) { - u32 abilityDef = GetBattlerAbility(battlerDef); + u32 oppositeBattler = BATTLE_OPPOSITE(battler); - return CanAbilityBlockMove(battlerAtk, battlerDef, GetBattlerAbility(battlerAtk), abilityDef, gCurrentMove, ABILITY_CHECK_TRIGGER) - || CanAbilityAbsorbMove(battlerAtk, battlerDef, abilityDef, gCurrentMove, moveType, ABILITY_CHECK_TRIGGER); -} + if (IsBattlerAlive(oppositeBattler)) + return FALSE; -bool32 TargetFullyImmuneToCurrMove(u32 battlerAtk, u32 battlerDef) -{ - u32 moveType = GetBattleMoveType(gCurrentMove); - return ((CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, battlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) - || IsBattlerProtected(battlerAtk, battlerDef, gCurrentMove) - || IsSemiInvulnerable(battlerDef, gCurrentMove) - || DoesBattlerHaveAbilityImmunity(battlerAtk, battlerDef, moveType)); + if (!IsDoubleBattle()) + return TRUE; + + if (IsBattlerAlive(BATTLE_PARTNER(oppositeBattler))) + return FALSE; + return TRUE; } -u32 GetBattleMoveType(u32 move) +bool32 IsAffectedByPowderMove(u32 battler, u32 ability, enum HoldEffect holdEffect) { - if (gMain.inBattle && gBattleStruct->dynamicMoveType) - return gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; - else if (B_UPDATED_MOVE_TYPES < GEN_5 - && (move == MOVE_BEAT_UP - || move == MOVE_FUTURE_SIGHT - || move == MOVE_DOOM_DESIRE)) - return TYPE_MYSTERY; - return GetMoveType(move); + if ((GetConfig(CONFIG_POWDER_OVERCOAT) >= GEN_6 && ability == ABILITY_OVERCOAT) + || (GetConfig(CONFIG_POWDER_GRASS) >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GRASS)) + || holdEffect == HOLD_EFFECT_SAFETY_GOGGLES) + return FALSE; + return TRUE; } -void TryActivateSleepClause(u32 battler, u32 indexInParty) +static u32 GetMirrorMoveMove(void) { - if (gBattleStruct->battlerState[battler].sleepClauseEffectExempt) + s32 i, validMovesCount; + u16 move = MOVE_NONE; + u16 validMoves[MAX_BATTLERS_COUNT] = {0}; + + for (validMovesCount = 0, i = 0; i < gBattlersCount; i++) { - gBattleStruct->battlerState[battler].sleepClauseEffectExempt = FALSE; - return; + if (i != gBattlerAttacker) + { + move = gBattleStruct->lastTakenMoveFrom[gBattlerAttacker][i]; + if (move != MOVE_NONE && move != MOVE_UNAVAILABLE) + { + validMoves[validMovesCount] = move; + validMovesCount++; + } + } } - if (IsSleepClauseEnabled()) - gBattleStruct->monCausingSleepClause[GetBattlerSide(battler)] = indexInParty; -} + move = gBattleStruct->lastTakenMove[gBattlerAttacker]; + if ((move == MOVE_NONE || move == MOVE_UNAVAILABLE) && validMovesCount != 0) + move = validMoves[Random() % validMovesCount]; -void TryDeactivateSleepClause(u32 battlerSide, u32 indexInParty) -{ - // If the pokemon on the given side at the given index in the party is the one causing Sleep Clause to be active, - // set monCausingSleepClause[battlerSide] = PARTY_SIZE, which means Sleep Clause is not active for the given side - if (IsSleepClauseEnabled() && gBattleStruct->monCausingSleepClause[battlerSide] == indexInParty) - gBattleStruct->monCausingSleepClause[battlerSide] = PARTY_SIZE; + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IsBattleMoveStatus(move)) + move = GetTypeBasedZMove(move); + + return move; } -bool32 IsSleepClauseActiveForSide(u32 battlerSide) +static bool32 InvalidMetronomeMove(u32 move) { - // If monCausingSleepClause[battlerSide] == PARTY_SIZE, Sleep Clause is not active for the given side. - // If monCausingSleepClause[battlerSide] < PARTY_SIZE, it means it is storing the index of the mon that is causing Sleep Clause to be active, - // from which it follows that Sleep Clause is active. - return (IsSleepClauseEnabled() && (gBattleStruct->monCausingSleepClause[battlerSide] < PARTY_SIZE)); + return GetMoveEffect(move) == EFFECT_PLACEHOLDER + || IsMoveMetronomeBanned(move); } -bool32 IsSleepClauseEnabled() +static u32 GetMetronomeMove(void) { - if (B_SLEEP_CLAUSE) - return TRUE; - if (FlagGet(B_FLAG_SLEEP_CLAUSE)) - return TRUE; - return FALSE; + u32 move = MOVE_NONE; + +#if B_METRONOME_MOVES >= GEN_9 + u32 moveCount = MOVES_COUNT_GEN9; +#elif B_METRONOME_MOVES >= GEN_8 + u32 moveCount = MOVES_COUNT_GEN8; +#elif B_METRONOME_MOVES >= GEN_7 + u32 moveCount = MOVES_COUNT_GEN7; +#elif B_METRONOME_MOVES >= GEN_6 + u32 moveCount = MOVES_COUNT_GEN6; +#elif B_METRONOME_MOVES >= GEN_5 + u32 moveCount = MOVES_COUNT_GEN5; +#elif B_METRONOME_MOVES >= GEN_4 + u32 moveCount = MOVES_COUNT_GEN4; +#elif B_METRONOME_MOVES >= GEN_3 + u32 moveCount = MOVES_COUNT_GEN3; +#elif B_METRONOME_MOVES >= GEN_2 + u32 moveCount = MOVES_COUNT_GEN2; +#else + u32 moveCount = MOVES_COUNT_GEN1; +#endif + + move = RandomUniformExcept(RNG_METRONOME, 1, moveCount - 1, InvalidMetronomeMove); + return move; } -void ClearDamageCalcResults(void) +static u32 GetAssistMove(void) { - for (u32 battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + u32 move = MOVE_NONE; + s32 chooseableMovesNo = 0; + struct Pokemon *party; + u16 *validMoves = Alloc(sizeof(u16) * PARTY_SIZE * MAX_MON_MOVES); + + if (validMoves != NULL) { - gBattleStruct->moveDamage[battler] = 0; - gBattleStruct->critChance[battler] = 0; - gBattleStruct->moveResultFlags[battler] = 0; - gBattleStruct->noResultString[battler] = 0; - gBattleStruct->missStringId[battler] = 0; - gSpecialStatuses[battler].criticalHit = FALSE; + party = GetBattlerParty(gBattlerAttacker); + + for (u32 monId = 0; monId < PARTY_SIZE; monId++) + { + if (monId == gBattlerPartyIndexes[gBattlerAttacker]) + continue; + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) + continue; + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) + continue; + + for (u32 moveId = 0; moveId < MAX_MON_MOVES; moveId++) + { + u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); + + if (IsMoveAssistBanned(move)) + continue; + + validMoves[chooseableMovesNo++] = move; + } + } } - gBattleStruct->doneDoublesSpreadHit = FALSE; - gBattleStruct->calculatedDamageDone = FALSE; - gBattleStruct->calculatedSpreadMoveAccuracy = FALSE; - gBattleStruct->printedStrongWindsWeakenedAttack = FALSE; - gBattleStruct->numSpreadTargets = 0; + if (chooseableMovesNo) + move = validMoves[Random() % chooseableMovesNo]; + + TRY_FREE_AND_SET_NULL(validMoves); + + return move; } -bool32 DoesDestinyBondFail(u32 battler) +u32 GetNaturePowerMove(u32 battler) { - if (B_DESTINY_BOND_FAIL >= GEN_7 - && GetMoveEffect(gLastLandedMoves[battler]) == EFFECT_DESTINY_BOND - && GetMoveEffect(gLastResultingMoves[battler]) == EFFECT_DESTINY_BOND) - return TRUE; - return FALSE; + u32 move = gBattleEnvironmentInfo[gBattleEnvironment].naturePower; + if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + move = MOVE_MOONBLAST; + else if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + move = MOVE_THUNDERBOLT; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + move = MOVE_ENERGY_BALL; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + move = MOVE_PSYCHIC; + else if (gBattleEnvironmentInfo[gBattleEnvironment].naturePower == MOVE_NONE) + move = MOVE_TRI_ATTACK; + + return move; } -// This check has always to be the last in a condtion statement because of the recording of AI data. -bool32 IsMoveEffectBlockedByTarget(u32 ability) +static u32 GetSleepTalkMove(void) { - if (ability == ABILITY_SHIELD_DUST) - { - RecordAbilityBattle(gBattlerTarget, ability); - return TRUE; - } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_COVERT_CLOAK) + u32 move = MOVE_NONE; + + u32 i, unusableMovesBits = 0, movePosition; + + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_COMATOSE + && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)) + return move; + + for (i = 0; i < MAX_MON_MOVES; i++) { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_COVERT_CLOAK); - return TRUE; + if (IsMoveSleepTalkBanned(gBattleMons[gBattlerAttacker].moves[i]) + || gBattleMoveEffects[GetMoveEffect(gBattleMons[gBattlerAttacker].moves[i])].twoTurnEffect) + unusableMovesBits |= (1 << (i)); } - return FALSE; -} + unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP | MOVE_LIMITATION_CHOICE_ITEM)); + if (unusableMovesBits == ALL_MOVES_MASK) // all 4 moves cannot be chosen + return move; -bool32 IsPursuitTargetSet(void) -{ - for (u32 battler = 0; battler < gBattlersCount; battler++) + // Set Sleep Talk as used move, so it works with Last Resort. + gDisableStructs[gBattlerAttacker].usedMoves |= 1u << gCurrMovePos; + do { - if (gBattleStruct->battlerState[battler].pursuitTarget) - return TRUE; - } - return FALSE; + movePosition = MOD(Random(), MAX_MON_MOVES); + } while ((1u << movePosition) & unusableMovesBits); + + move = gBattleMons[gBattlerAttacker].moves[movePosition]; + gCurrMovePos = movePosition; + + return move; } -void ClearPursuitValues(void) +static u32 GetCopyCatMove(void) { - for (u32 i = 0; i < gBattlersCount; i++) - gBattleStruct->battlerState[i].pursuitTarget = FALSE; - gBattleStruct->pursuitStoredSwitch = PARTY_SIZE; + if (gLastUsedMove == MOVE_NONE + || gLastUsedMove == MOVE_UNAVAILABLE + || IsMoveCopycatBanned(gLastUsedMove) + || IsZMove(gLastUsedMove)) + return MOVE_NONE; + + return gLastUsedMove; } -void ClearPursuitValuesIfSet(u32 battler) +static u32 GetMeFirstMove(void) { - if (gBattleStruct->battlerState[battler].pursuitTarget) - ClearPursuitValues(); + u32 move = GetChosenMoveFromPosition(gBattlerTarget); + + if (IsBattleMoveStatus(move) + || IsMoveMeFirstBanned(move) + || HasBattlerActedThisTurn(gBattlerTarget)) + return MOVE_NONE; + + return move; } -bool32 HasWeatherEffect(void) +void RemoveAbilityFlags(u32 battler) { - for (u32 battler = 0; battler < gBattlersCount; battler++) + switch (GetBattlerAbility(battler)) { - if (!IsBattlerAlive(battler)) - continue; - - u32 ability = GetBattlerAbility(battler); - switch (ability) - { - case ABILITY_CLOUD_NINE: - case ABILITY_AIR_LOCK: - return FALSE; - } + case ABILITY_FLASH_FIRE: + gDisableStructs[battler].flashFireBoosted = FALSE; + break; + case ABILITY_VESSEL_OF_RUIN: + gBattleMons[battler].volatiles.vesselOfRuin = FALSE; + break; + case ABILITY_TABLETS_OF_RUIN: + gBattleMons[battler].volatiles.tabletsOfRuin = FALSE; + break; + case ABILITY_SWORD_OF_RUIN: + gBattleMons[battler].volatiles.swordOfRuin = FALSE; + break; + case ABILITY_BEADS_OF_RUIN: + gBattleMons[battler].volatiles.beadsOfRuin = FALSE; + break; + default: + break; } - - return TRUE; } -static bool32 IsAnyTargetAffected(u32 battlerAtk) +bool32 IsAnyTargetTurnDamaged(u32 battlerAtk) { for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { - if (battlerAtk == battlerDef) + if (battlerDef == battlerAtk) continue; - - if (!(gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT)) + if (IsBattlerTurnDamaged(battlerDef)) return TRUE; } return FALSE; } -void UpdateStallMons(void) +bool32 IsAllowedToUseBag(void) { - if (IsBattlerTurnDamaged(gBattlerTarget) || IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) || gMovesInfo[gCurrentMove].category == DAMAGE_CATEGORY_STATUS) - return; - if (!IsDoubleBattle() || gMovesInfo[gCurrentMove].target == MOVE_TARGET_SELECTED) + switch(VarGet(B_VAR_NO_BAG_USE)) { - u32 moveType = GetBattleMoveType(gCurrentMove); // Probably doesn't handle dynamic move types right now - u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); - u32 abilityDef = GetBattlerAbility(gBattlerTarget); - if (CanAbilityAbsorbMove(gBattlerAttacker, gBattlerTarget, abilityDef, gCurrentMove, moveType, ABILITY_CHECK_TRIGGER)) - { - gAiBattleData->playerStallMons[gBattlerPartyIndexes[gBattlerTarget]]++; - } - else if (CanAbilityBlockMove(gBattlerAttacker, gBattlerTarget, abilityAtk, abilityDef, gCurrentMove, ABILITY_CHECK_TRIGGER)) - { - gAiBattleData->playerStallMons[gBattlerPartyIndexes[gBattlerTarget]]++; - } - else if (AI_GetMoveEffectiveness(gCurrentMove, gBattlerAttacker, gBattlerTarget) == 0) - { - gAiBattleData->playerStallMons[gBattlerPartyIndexes[gBattlerTarget]]++; - } + case NO_BAG_RESTRICTION: + return TRUE; + case NO_BAG_AGAINST_TRAINER: //True in wild battle; False in trainer battle + return (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER)); + case NO_BAG_IN_BATTLE: + return FALSE; + default: + return TRUE; // Undefined Behavior } - // Handling for moves that target multiple opponents in doubles not handled currently } -bool32 TryRestoreHPBerries(u32 battler, enum ItemCaseId caseId) +bool32 IsMimikyuDisguised(u32 battler) { - if (gItemsInfo[gBattleMons[battler].item].pocket == POCKET_BERRIES - || GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_RESTORE_HP) // Edge case for Berry Juice - { - if (ItemBattleEffects(caseId, battler, FALSE)) - return TRUE; - } - return FALSE; + return gBattleMons[battler].species == SPECIES_MIMIKYU_DISGUISED + || gBattleMons[battler].species == SPECIES_MIMIKYU_TOTEM_DISGUISED; } diff --git a/src/battle_util2.c b/src/battle_util2.c index fd2312bb5b9b..3f252713009a 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -95,17 +95,10 @@ void AdjustFriendshipOnBattleFaint(u8 battler) opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); } - if (gBattleMons[opposingBattlerId].level > gBattleMons[battler].level) - { - if (gBattleMons[opposingBattlerId].level - gBattleMons[battler].level > 29) - AdjustFriendship(GetBattlerMon(battler), FRIENDSHIP_EVENT_FAINT_LARGE); - else - AdjustFriendship(GetBattlerMon(battler), FRIENDSHIP_EVENT_FAINT_SMALL); - } + if (gBattleMons[opposingBattlerId].level - gBattleMons[battler].level > 29) + AdjustFriendship(GetBattlerMon(battler), FRIENDSHIP_EVENT_FAINT_LARGE); else - { AdjustFriendship(GetBattlerMon(battler), FRIENDSHIP_EVENT_FAINT_SMALL); - } } void SwitchPartyOrderInGameMulti(u8 battler, u8 arg1) @@ -139,11 +132,11 @@ u32 BattlePalace_TryEscapeStatus(u8 battler) if (UproarWakeUpCheck(battler)) { // Wake up from Uproar + gEffectBattler = battler; gBattleMons[battler].status1 &= ~(STATUS1_SLEEP); - gBattleMons[battler].status2 &= ~(STATUS2_NIGHTMARE); - BattleScriptPushCursor(); + gBattleMons[battler].volatiles.nightmare = FALSE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP_UPROAR; - gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; + BattleScriptCall(BattleScript_MoveUsedWokeUp); effect = 2; } else @@ -170,10 +163,9 @@ u32 BattlePalace_TryEscapeStatus(u8 battler) else { // Wake up - gBattleMons[battler].status2 &= ~(STATUS2_NIGHTMARE); - BattleScriptPushCursor(); + gBattleMons[battler].volatiles.nightmare = FALSE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WOKE_UP; - gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; + BattleScriptCall(BattleScript_MoveUsedWokeUp); effect = 2; } } @@ -192,8 +184,7 @@ u32 BattlePalace_TryEscapeStatus(u8 battler) { // Unfreeze gBattleMons[battler].status1 &= ~(STATUS1_FREEZE); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; + BattleScriptCall(BattleScript_MoveUsedUnfroze); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DEFROSTED; } effect = 2; diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 53df466af8ee..4b517ccc8f38 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -36,7 +36,6 @@ #include "constants/songs.h" #include "constants/items.h" #include "constants/species.h" -#include "constants/hold_effects.h" #include "constants/battle_string_ids.h" #include "constants/battle_move_effects.h" #include "constants/abilities.h" @@ -113,7 +112,7 @@ bool32 IsZMove(u32 move) bool32 CanUseZMove(u32 battler) { - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, FALSE); + enum HoldEffect holdEffect = GetBattlerHoldEffectIgnoreNegation(battler); // Check if Player has Z-Power Ring. if (!TESTING && (battler == B_POSITION_PLAYER_LEFT @@ -144,7 +143,7 @@ bool32 CanUseZMove(u32 battler) u32 GetUsableZMove(u32 battler, u32 move) { u32 item = gBattleMons[battler].item; - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, FALSE); + enum HoldEffect holdEffect = GetBattlerHoldEffectIgnoreNegation(battler); if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) { @@ -161,14 +160,13 @@ u32 GetUsableZMove(u32 battler, u32 move) void ActivateZMove(u32 battler) { - gBattleStruct->zmove.baseMoves[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; SetActiveGimmick(battler, GIMMICK_Z_MOVE); } bool32 IsViableZMove(u32 battler, u32 move) { u32 item; - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, FALSE); + enum HoldEffect holdEffect = GetBattlerHoldEffectIgnoreNegation(battler); int moveSlotIndex; item = gBattleMons[battler].item; @@ -420,7 +418,7 @@ static void ZMoveSelectionDisplayPpNumber(u32 battler) static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) { u8 *txtPtr, *end; - u32 zMoveType = GetBattleMoveType(zMove); + enum Type zMoveType = GetBattleMoveType(zMove); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); *(txtPtr)++ = EXT_CTRL_CODE_BEGIN; @@ -438,7 +436,7 @@ static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) void SetZEffect(void) { u32 i; - u32 effect = GetMoveZEffect(gBattleStruct->zmove.baseMoves[gBattlerAttacker]); + u32 effect = GetMoveZEffect(gChosenMove); if (effect == Z_EFFECT_CURSE) { @@ -486,9 +484,9 @@ void SetZEffect(void) break; } case Z_EFFECT_BOOST_CRITS: - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY_ANY)) + if (!(gBattleMons[gBattlerAttacker].volatiles.dragonCheer || gBattleMons[gBattlerAttacker].volatiles.focusEnergy)) { - gBattleMons[gBattlerAttacker].status2 |= STATUS2_FOCUS_ENERGY; + gBattleMons[gBattlerAttacker].volatiles.focusEnergy = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_BOOST_CRITS; BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); gBattlescriptCurrInstr = BattleScript_ZEffectPrintString; @@ -508,7 +506,7 @@ void SetZEffect(void) case Z_EFFECT_RECOVER_HP: if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP) { - gBattleStruct->moveDamage[gBattlerAttacker] = (-1) * gBattleMons[gBattlerAttacker].maxHP; + SetHealAmount(gBattlerAttacker, gBattleMons[gBattlerAttacker].maxHP); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_RECOVER_HP; BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH); gBattlescriptCurrInstr = BattleScript_RecoverHPZMove; @@ -549,7 +547,8 @@ u32 GetZMovePower(u32 move) { if (GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS) return 0; - if (GetMoveEffect(move) == EFFECT_OHKO) + enum BattleMoveEffects moveEffect = GetMoveEffect(move); + if (moveEffect == EFFECT_OHKO || moveEffect == EFFECT_SHEER_COLD) return 180; u32 power = GetMoveZPowerOverride(move); @@ -568,4 +567,3 @@ u32 GetZMovePower(u32 move) else if (power >= 60) return 120; else return 100; } - diff --git a/src/berry_blender.c b/src/berry_blender.c index 547520812628..adb28dab072a 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -940,7 +940,7 @@ static bool8 LoadBerryBlenderGfx(void) { case 0: sBerryBlender->tilesBuffer = AllocZeroed(GetDecompressedDataSize(gBerryBlenderCenter_Gfx) + 100); - LZDecompressWram(gBerryBlenderCenter_Gfx, sBerryBlender->tilesBuffer); + DecompressDataWithHeaderWram(gBerryBlenderCenter_Gfx, sBerryBlender->tilesBuffer); sBerryBlender->loadGfxState++; break; case 1: @@ -954,7 +954,7 @@ static bool8 LoadBerryBlenderGfx(void) sBerryBlender->loadGfxState++; break; case 3: - LZDecompressWram(gBerryBlenderOuter_Gfx, sBerryBlender->tilesBuffer); + DecompressDataWithHeaderWram(gBerryBlenderOuter_Gfx, sBerryBlender->tilesBuffer); sBerryBlender->loadGfxState++; break; case 4: @@ -962,7 +962,7 @@ static bool8 LoadBerryBlenderGfx(void) sBerryBlender->loadGfxState++; break; case 5: - LZDecompressWram(gBerryBlenderOuter_Tilemap, sBerryBlender->tilesBuffer); + DecompressDataWithHeaderWram(gBerryBlenderOuter_Tilemap, sBerryBlender->tilesBuffer); sBerryBlender->loadGfxState++; break; case 6: @@ -2432,6 +2432,7 @@ static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *p } // Factor in max RPM and round + multiuseVar = maxRPM / 333 + 100; for (i = 0; i < FLAVOR_COUNT; i++) { s32 remainder; diff --git a/src/berry_crush.c b/src/berry_crush.c index 3a2274f189e1..e3927d8780ae 100644 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -4,6 +4,7 @@ #include "berry_powder.h" #include "bg.h" #include "decompress.h" +#include "digit_obj_util.h" #include "dynamic_placeholder_text_util.h" #include "event_data.h" #include "gpu_regs.h" @@ -17,11 +18,10 @@ #include "malloc.h" #include "math_util.h" #include "menu.h" +#include "minigame_countdown.h" #include "overworld.h" #include "palette.h" -#include "minigame_countdown.h" #include "random.h" -#include "digit_obj_util.h" #include "save.h" #include "scanline_effect.h" #include "script.h" @@ -582,13 +582,13 @@ static const u32 sPressingSpeedConversionTable[] = static const u16 sCrusherBase_Pal[] = INCBIN_U16("graphics/berry_crush/crusher_base.gbapal"); static const u16 sEffects_Pal[] = INCBIN_U16("graphics/berry_crush/effects.gbapal"); static const u16 sTimerDigits_Pal[] = INCBIN_U16("graphics/berry_crush/timer_digits.gbapal"); -static const u32 sCrusherBase_Gfx[] = INCBIN_U32("graphics/berry_crush/crusher_base.4bpp.lz"); -static const u32 sImpact_Gfx[] = INCBIN_U32("graphics/berry_crush/impact.4bpp.lz"); -static const u32 sSparkle_Gfx[] = INCBIN_U32("graphics/berry_crush/sparkle.4bpp.lz"); -static const u32 sTimerDigits_Gfx[] = INCBIN_U32("graphics/berry_crush/timer_digits.4bpp.lz"); -static const u8 sCrusherTop_Tilemap[] = INCBIN_U8("graphics/berry_crush/crusher_top.bin.lz"); -static const u8 sContainerCap_Tilemap[] = INCBIN_U8("graphics/berry_crush/container_cap.bin.lz"); -static const u8 sBg_Tilemap[] = INCBIN_U8("graphics/berry_crush/bg.bin.lz"); +static const u32 sCrusherBase_Gfx[] = INCBIN_U32("graphics/berry_crush/crusher_base.4bpp.smol"); +static const u32 sImpact_Gfx[] = INCBIN_U32("graphics/berry_crush/impact.4bpp.smol"); +static const u32 sSparkle_Gfx[] = INCBIN_U32("graphics/berry_crush/sparkle.4bpp.smol"); +static const u32 sTimerDigits_Gfx[] = INCBIN_U32("graphics/berry_crush/timer_digits.4bpp.smol"); +static const u8 sCrusherTop_Tilemap[] = INCBIN_U8("graphics/berry_crush/crusher_top.bin.smolTM"); +static const u8 sContainerCap_Tilemap[] = INCBIN_U8("graphics/berry_crush/container_cap.bin.smolTM"); +static const u8 sBg_Tilemap[] = INCBIN_U8("graphics/berry_crush/bg.bin.smolTM"); // Takes the number of players - 2 and a player id and returns the // index into sPlayerCoords where that player should be seated @@ -1157,18 +1157,7 @@ static void SetNamesAndTextSpeed(struct BerryCrushGame *game) game->players[i].name[PLAYER_NAME_LENGTH] = EOS; } - switch (gSaveBlock2Ptr->optionsTextSpeed) - { - case OPTIONS_TEXT_SPEED_SLOW: - game->textSpeed = 8; - break; - case OPTIONS_TEXT_SPEED_MID: - game->textSpeed = 4; - break; - case OPTIONS_TEXT_SPEED_FAST: - game->textSpeed = 1; - break; - } + game->textSpeed = GetPlayerTextSpeedDelay(); } static s32 ShowGameDisplay(void) diff --git a/src/berry_fix_graphics.c b/src/berry_fix_graphics.c index 80510a4ce173..3fd4fccd3ced 100644 --- a/src/berry_fix_graphics.c +++ b/src/berry_fix_graphics.c @@ -1,5 +1,6 @@ #include "global.h" #include "graphics.h" +#include "decompress.h" // Duplicate of sBerryFixGraphics in berry_fix_program.c static const struct { @@ -41,8 +42,8 @@ static void UNUSED LoadBerryFixGraphics(u32 idx) REG_BG0HOFS = 0; REG_BG0VOFS = 0; REG_BLDCNT = 0; - LZ77UnCompVram(sBerryFixGraphics[idx].gfx, (void *)BG_CHAR_ADDR(0)); - LZ77UnCompVram(sBerryFixGraphics[idx].tilemap, (void *)BG_SCREEN_ADDR(31)); + DecompressDataWithHeaderVram(sBerryFixGraphics[idx].gfx, (void *)BG_CHAR_ADDR(0)); + DecompressDataWithHeaderVram(sBerryFixGraphics[idx].tilemap, (void *)BG_SCREEN_ADDR(31)); CpuCopy16(sBerryFixGraphics[idx].pltt, (void *)BG_PLTT, BG_PLTT_SIZE); REG_BG0CNT = BGCNT_SCREENBASE(31); REG_DISPCNT = DISPCNT_BG0_ON; diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index 98938c78b57c..ab624add2ed6 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -12,6 +12,7 @@ #include "text.h" #include "menu.h" #include "m4a.h" +#include "decompress.h" #include "constants/rgb.h" enum { @@ -366,8 +367,8 @@ static void BerryFix_SetScene(int scene) break; } CopyBgTilemapBufferToVram(0); - LZ77UnCompVram(sBerryFixGraphics[scene].gfx, (void *)BG_CHAR_ADDR(1)); - LZ77UnCompVram(sBerryFixGraphics[scene].tilemap, (void *)BG_SCREEN_ADDR(31)); + DecompressDataWithHeaderVram(sBerryFixGraphics[scene].gfx, (void *)BG_CHAR_ADDR(1)); + DecompressDataWithHeaderVram(sBerryFixGraphics[scene].tilemap, (void *)BG_SCREEN_ADDR(31)); // These palettes range in size from 32-48 colors, so the below is interpreting whatever // follows the palette (by default, the corresponding tiles) as the remaining 80-96. CpuCopy32(sBerryFixGraphics[scene].palette, (void *)BG_PLTT, PLTT_SIZEOF(128)); diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 7bc486f3fabf..6f0467f332c9 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -335,12 +335,12 @@ static bool8 LoadBerryTagGfx(void) case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - LZDecompressWram(gBerryTag_Gfx, sBerryTag->tilemapBuffers[0]); + DecompressDataWithHeaderWram(gBerryTag_Gfx, sBerryTag->tilemapBuffers[0]); sBerryTag->gfxState++; } break; case 2: - LZDecompressWram(gBerryTag_Tilemap, sBerryTag->tilemapBuffers[2]); + DecompressDataWithHeaderWram(gBerryTag_Tilemap, sBerryTag->tilemapBuffers[2]); sBerryTag->gfxState++; break; case 3: @@ -563,9 +563,9 @@ static void Task_HandleInput(u8 taskId) static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) { s16 *data = gTasks[taskId].data; - s16 currPocketPosition = gBagPosition.scrollPosition[BERRIES_POCKET] + gBagPosition.cursorPosition[BERRIES_POCKET]; + s16 currPocketPosition = gBagPosition.scrollPosition[POCKET_BERRIES] + gBagPosition.cursorPosition[POCKET_BERRIES]; u32 newPocketPosition = currPocketPosition + toMove; - if (newPocketPosition < ITEM_TO_BERRY(LAST_BERRY_INDEX) && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != ITEM_NONE) + if (newPocketPosition < ITEM_TO_BERRY(LAST_BERRY_INDEX) && GetBagItemId(POCKET_BERRIES, newPocketPosition) != ITEM_NONE) { if (toMove < 0) tBgOp = BG_COORD_SUB; @@ -581,11 +581,11 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) static void HandleBagCursorPositionChange(s8 toMove) { - u16 *scrollPos = &gBagPosition.scrollPosition[BERRIES_POCKET]; - u16 *cursorPos = &gBagPosition.cursorPosition[BERRIES_POCKET]; + u16 *scrollPos = &gBagPosition.scrollPosition[POCKET_BERRIES]; + u16 *cursorPos = &gBagPosition.cursorPosition[POCKET_BERRIES]; if (toMove > 0) { - if (*cursorPos < 4 || BagGetItemIdByPocketPosition(POCKET_BERRIES, *scrollPos + 8) == 0) + if (*cursorPos < 4 || GetBagItemId(POCKET_BERRIES, *scrollPos + 8) == 0) *cursorPos += toMove; else *scrollPos += toMove; @@ -598,7 +598,7 @@ static void HandleBagCursorPositionChange(s8 toMove) *scrollPos += toMove; } - sBerryTag->berryId = ItemIdToBerryType(BagGetItemIdByPocketPosition(POCKET_BERRIES, *scrollPos + *cursorPos)); + sBerryTag->berryId = ItemIdToBerryType(GetBagItemId(POCKET_BERRIES, *scrollPos + *cursorPos)); } #define DISPLAY_SPEED 16 diff --git a/src/bg.c b/src/bg.c index ab7b48c58d89..9080adf22c7a 100644 --- a/src/bg.c +++ b/src/bg.c @@ -5,6 +5,7 @@ #include "gpu_regs.h" #include "malloc.h" #include "menu.h" +#include "decompress.h" #define DISPCNT_ALL_BG_AND_MODE_BITS (DISPCNT_BG_ALL_ON | 0x7) @@ -874,7 +875,7 @@ void CopyToBgTilemapBuffer(u32 bg, const void *src, u32 mode, u32 destOffset) if (mode != 0) CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); else - LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); + DecompressDataWithHeaderWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); } } @@ -910,8 +911,6 @@ void CopyBgTilemapBufferToVram(u32 bg) void CopyToBgTilemapBufferRect(u32 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height) { - u16 destX16; - u16 destY16; u16 mode; if (!IsInvalidBg(bg) && !IsTileMapOutsideWram(bg)) @@ -921,11 +920,11 @@ void CopyToBgTilemapBufferRect(u32 bg, const void *src, u8 destX, u8 destY, u8 w case BG_TYPE_NORMAL: { const u16 *srcCopy = src; - for (destY16 = destY; destY16 < (destY + height); destY16++) + for (u32 j = destY; j < (destY + height); j++) { - for (destX16 = destX; destX16 < (destX + width); destX16++) + for (u32 i = destX; i < (destX + width); i++) { - ((u16 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; + ((u16 *)sGpuBgConfigs2[bg].tilemap)[((j * 0x20) + i)] = *srcCopy++; } } break; @@ -934,11 +933,11 @@ void CopyToBgTilemapBufferRect(u32 bg, const void *src, u8 destX, u8 destY, u8 w { const u8 *srcCopy = src; mode = GetBgMetricAffineMode(bg, 0x1); - for (destY16 = destY; destY16 < (destY + height); destY16++) + for (u32 j = destY; j < (destY + height); j++) { - for (destX16 = destX; destX16 < (destX + width); destX16++) + for (u32 i = destX; i < (destX + width); i++) { - ((u8 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; + ((u8 *)sGpuBgConfigs2[bg].tilemap)[((j * mode) + i)] = *srcCopy++; } } break; @@ -957,7 +956,6 @@ void CopyRectToBgTilemapBufferRect(u32 bg, const void *src, u8 srcX, u8 srcY, u8 u16 screenWidth, screenHeight, screenSize; u16 var; const void *srcPtr; - u16 i, j; if (!IsInvalidBg(bg) && !IsTileMapOutsideWram(bg)) { @@ -968,11 +966,11 @@ void CopyRectToBgTilemapBufferRect(u32 bg, const void *src, u8 srcX, u8 srcY, u8 { case BG_TYPE_NORMAL: srcPtr = src + ((srcY * srcWidth) + srcX) * 2; - for (i = destY; i < (destY + rectHeight); i++) + for (u32 j = destY; j < (destY + rectHeight); j++) { - for (j = destX; j < (destX + rectWidth); j++) + for (u32 i = destX; i < (destX + rectWidth); i++) { - u16 index = GetTileMapIndexFromCoords(j, i, screenSize, screenWidth, screenHeight); + u16 index = GetTileMapIndexFromCoords(i, j, screenSize, screenWidth, screenHeight); CopyTileMapEntry(srcPtr, sGpuBgConfigs2[bg].tilemap + (index * 2), palette1, tileOffset, palette2); srcPtr += 2; } @@ -982,11 +980,11 @@ void CopyRectToBgTilemapBufferRect(u32 bg, const void *src, u8 srcX, u8 srcY, u8 case BG_TYPE_AFFINE: srcPtr = src + ((srcY * srcWidth) + srcX); var = GetBgMetricAffineMode(bg, 0x1); - for (i = destY; i < (destY + rectHeight); i++) + for (u32 j = destY; j < (destY + rectHeight); j++) { - for (j = destX; j < (destX + rectWidth); j++) + for (u32 i = destX; i < (destX + rectWidth); i++) { - *(u8 *)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8 *)(srcPtr) + tileOffset; + *(u8 *)(sGpuBgConfigs2[bg].tilemap + ((var * j) + i)) = *(u8 *)(srcPtr) + tileOffset; srcPtr++; } srcPtr += (srcWidth - rectWidth); @@ -998,8 +996,6 @@ void CopyRectToBgTilemapBufferRect(u32 bg, const void *src, u8 srcX, u8 srcY, u8 void FillBgTilemapBufferRect_Palette0(u32 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height) { - u16 x16; - u16 y16; u16 mode; if (!IsInvalidBg(bg) && !IsTileMapOutsideWram(bg)) @@ -1007,21 +1003,21 @@ void FillBgTilemapBufferRect_Palette0(u32 bg, u16 tileNum, u8 x, u8 y, u8 width, switch (GetBgType(bg)) { case BG_TYPE_NORMAL: - for (y16 = y; y16 < (y + height); y16++) + for (u32 j = y; j < (y + height); j++) { - for (x16 = x; x16 < (x + width); x16++) + for (u32 i = x; i < (x + width); i++) { - ((u16 *)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum; + ((u16 *)sGpuBgConfigs2[bg].tilemap)[((j * 0x20) + i)] = tileNum; } } break; case BG_TYPE_AFFINE: mode = GetBgMetricAffineMode(bg, 0x1); - for (y16 = y; y16 < (y + height); y16++) + for (u32 j = y; j < (y + height); j++) { - for (x16 = x; x16 < (x + width); x16++) + for (u32 i = x; i < (x + width); i++) { - ((u8 *)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum; + ((u8 *)sGpuBgConfigs2[bg].tilemap)[((j * mode) + i)] = tileNum; } } break; @@ -1040,7 +1036,6 @@ void WriteSequenceToBgTilemapBuffer(u32 bg, u16 firstTileNum, u8 x, u8 y, u8 wid u16 mode2; u16 attribute; u16 mode3; - u16 x16, y16; if (!IsInvalidBg(bg) && !IsTileMapOutsideWram(bg)) { @@ -1050,22 +1045,22 @@ void WriteSequenceToBgTilemapBuffer(u32 bg, u16 firstTileNum, u8 x, u8 y, u8 wid switch (GetBgType(bg)) { case BG_TYPE_NORMAL: - for (y16 = y; y16 < (y + height); y16++) + for (u32 j = y; j < (y + height); j++) { - for (x16 = x; x16 < (x + width); x16++) + for (u32 i = x; i < (x + width); i++) { - CopyTileMapEntry(&firstTileNum, &((u16 *)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0); + CopyTileMapEntry(&firstTileNum, &((u16 *)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(i, j, attribute, mode, mode2)], paletteSlot, 0, 0); firstTileNum = (firstTileNum & 0xFC00) + ((firstTileNum + tileNumDelta) & 0x3FF); } } break; case BG_TYPE_AFFINE: mode3 = GetBgMetricAffineMode(bg, 0x1); - for (y16 = y; y16 < (y + height); y16++) + for (u32 j = y; j < (y + height); j++) { - for (x16 = x; x16 < (x + width); x16++) + for (u32 i = x; i < (x + width); i++) { - ((u8 *)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum; + ((u8 *)sGpuBgConfigs2[bg].tilemap)[(j * mode3) + i] = firstTileNum; firstTileNum = (firstTileNum & 0xFC00) + ((firstTileNum + tileNumDelta) & 0x3FF); } } diff --git a/src/bike.c b/src/bike.c index afc3099ab7e8..3f4181f12913 100644 --- a/src/bike.c +++ b/src/bike.c @@ -5,9 +5,9 @@ #include "fieldmap.h" #include "field_specials.h" #include "metatile_behavior.h" +#include "oras_dowse.h" #include "overworld.h" #include "sound.h" -#include "constants/map_types.h" #include "constants/songs.h" // this file's functions @@ -1004,6 +1004,7 @@ void GetOnOffBike(u8 transitionFlags) } else { + EndORASDowsing(); SetPlayerAvatarTransitionFlags(transitionFlags); Overworld_SetSavedMusic(MUS_CYCLING); Overworld_ChangeMusicTo(MUS_CYCLING); diff --git a/src/braille.c b/src/braille.c index 91872b88a0bd..310384ba32f5 100644 --- a/src/braille.c +++ b/src/braille.c @@ -1,18 +1,12 @@ #include "global.h" #include "main.h" -#include "window.h" #include "text.h" #include "sound.h" +#include "window.h" // This file handles the braille font. // For printing braille messages, see ScrCmd_braillemessage -ALIGNED(4) -static const u8 sScrollDistances[] = { - [OPTIONS_TEXT_SPEED_SLOW] = 1, - [OPTIONS_TEXT_SPEED_MID] = 2, - [OPTIONS_TEXT_SPEED_FAST] = 4, -}; static const u16 sFont_Braille[] = INCBIN_U16("graphics/fonts/braille.fwjpnfont"); static void DecompressGlyph_Braille(u16); @@ -22,6 +16,7 @@ u16 FontFunc_Braille(struct TextPrinter *textPrinter) u16 char_; struct TextPrinterSubStruct *subStruct; subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); + u32 scrollSpeed = GetPlayerTextScrollSpeed(); switch (textPrinter->state) { @@ -164,15 +159,15 @@ u16 FontFunc_Braille(struct TextPrinter *textPrinter) case RENDER_STATE_SCROLL: if (textPrinter->scrollDistance) { - if (textPrinter->scrollDistance < sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]) + if (textPrinter->scrollDistance < scrollSpeed) { ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); textPrinter->scrollDistance = 0; } else { - ScrollWindow(textPrinter->printerTemplate.windowId, 0, sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed], PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->scrollDistance -= sScrollDistances[gSaveBlock2Ptr->optionsTextSpeed]; + ScrollWindow(textPrinter->printerTemplate.windowId, 0, scrollSpeed, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); + textPrinter->scrollDistance -= scrollSpeed; } CopyWindowToVram(textPrinter->printerTemplate.windowId, COPYWIN_GFX); } diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 31497e137c62..217f62d2c7b3 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -81,9 +81,9 @@ void DoBrailleDigEffect(void) MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft); MapGridSetMetatileIdAt(10 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight); - MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_IMPASSABLE); MapGridSetMetatileIdAt(10 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid); - MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_IMPASSABLE); DrawWholeMapView(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_BRAILLE_DIG); @@ -207,9 +207,9 @@ static void DoBrailleRegirockEffect(void) MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft); MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); MapGridSetMetatileIdAt(9 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight); - MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_IMPASSABLE); MapGridSetMetatileIdAt(8 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid); - MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_IMPASSABLE); DrawWholeMapView(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED); @@ -247,9 +247,9 @@ static void DoBrailleRegisteelEffect(void) MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft); MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); MapGridSetMetatileIdAt(9 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight); - MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_IMPASSABLE); MapGridSetMetatileIdAt(8 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid); - MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_IMPASSABLE); DrawWholeMapView(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED); diff --git a/src/cable_car.c b/src/cable_car.c index b5d3d0f53f6f..3ff3faf971b6 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -131,11 +131,11 @@ static const struct BgTemplate sBgTemplates[4] = { }, }; -static const u16 sGround_Tilemap[] = INCBIN_U16("graphics/cable_car/ground.bin.lz"); -static const u16 sTrees_Tilemap[] = INCBIN_U16("graphics/cable_car/trees.bin.lz"); -static const u16 sBgMountains_Tilemap[] = INCBIN_U16("graphics/cable_car/bg_mountains.bin.lz"); +static const u16 sGround_Tilemap[] = INCBIN_U16("graphics/cable_car/ground.bin.smolTM"); +static const u16 sTrees_Tilemap[] = INCBIN_U16("graphics/cable_car/trees.bin.smolTM"); +static const u16 sBgMountains_Tilemap[] = INCBIN_U16("graphics/cable_car/bg_mountains.bin.smolTM"); static const u16 sPylonTop_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_top.bin"); -static const u16 sPylonPole_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_pole.bin.lz"); +static const u16 sPylonPole_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_pole.bin.smolTM"); static const struct CompressedSpriteSheet sSpriteSheets[] = { { gCableCar_Gfx, 0x800, TAG_CABLE_CAR }, diff --git a/src/clock.c b/src/clock.c index f0a632c9ff21..2440f5b5a606 100644 --- a/src/clock.c +++ b/src/clock.c @@ -1,18 +1,19 @@ #include "global.h" +#include "berry.h" #include "clock.h" +#include "dewford_trend.h" #include "event_data.h" -#include "rtc.h" -#include "time_events.h" #include "field_specials.h" -#include "lottery_corner.h" -#include "dewford_trend.h" -#include "tv.h" #include "field_weather.h" -#include "berry.h" #include "main.h" +#include "lottery_corner.h" #include "overworld.h" +#include "rtc.h" +#include "time_events.h" +#include "tv.h" #include "wallclock.h" #include "constants/form_change_types.h" +#include "apricorn_tree.h" static void UpdatePerDay(struct Time *localTime); static void UpdatePerMinute(struct Time *localTime); @@ -55,6 +56,7 @@ static void UpdatePerDay(struct Time *localTime) SetShoalItemFlag(daysSince); SetRandomLotteryNumber(daysSince); UpdateDaysPassedSinceFormChange(daysSince); + DailyResetApricornTrees(); *days = localTime->days; } } diff --git a/src/contest.c b/src/contest.c index da11859dee7c..fcebf53aba9b 100644 --- a/src/contest.c +++ b/src/contest.c @@ -360,10 +360,32 @@ EWRAM_DATA u8 gCurContestWinnerSaveIdx = 0; // IWRAM common vars. COMMON_DATA rng_value_t gContestRngValue = {0}; -extern const u8 gText_LinkStandby4[]; +const u8 gText_LinkStandby4[] = COMPOUND_STRING("Link standby!"); extern const u8 gText_BDot[]; extern const u8 gText_CDot[]; -extern void (*const gContestEffectFuncs[])(void); + +//Text +const u8 gText_AppealNumWhichMoveWillBePlayed[] = COMPOUND_STRING("Appeal no. {STR_VAR_1}!\nWhich move will be played?"); +const u8 gText_AppealNumButItCantParticipate[] = COMPOUND_STRING("Appeal no. {STR_VAR_1}!\nBut it can't participate!"); +const u8 gText_MonAppealedWithMove[] = COMPOUND_STRING("{STR_VAR_1} appealed with\n{STR_VAR_2}!"); +const u8 gText_MonWasWatchingOthers[] = COMPOUND_STRING("{STR_VAR_1} was watching\nthe others.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_AllOutOfAppealTime[] = COMPOUND_STRING("We're all out of\nAppeal Time!{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_JudgeLookedAtMonExpectantly[] = COMPOUND_STRING("The JUDGE looked at\n{STR_VAR_1} expectantly.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_AppealComboWentOverWell[] = COMPOUND_STRING("The appeal combo went\nover well.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_AppealComboWentOverVeryWell[] = COMPOUND_STRING("The appeal combo went\nover very well.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_AppealComboWentOverExcellently[] = COMPOUND_STRING("The appeal combo went\nover excellently.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_MonWasTooNervousToMove[] = COMPOUND_STRING("{STR_VAR_1} was too\nnervous to move.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_CouldntImproveItsCondition[] = COMPOUND_STRING("But it couldn't improve\nits condition…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_BadConditionResultedInWeakAppeal[] = COMPOUND_STRING("Its bad condition\nresulted in a weak appeal.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_MonWasUnaffected[] = COMPOUND_STRING("{STR_VAR_1} was\nunaffected.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_RepeatedAppeal[] = COMPOUND_STRING("{STR_VAR_1} disappointed\nby repeating an appeal.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_MonsXWentOverGreat[] = COMPOUND_STRING("{STR_VAR_1}'s {STR_VAR_3}\nwent over great.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_MonsXDidntGoOverWell[] = COMPOUND_STRING("{STR_VAR_1}'s {STR_VAR_3}\ndidn't go over well here…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_MonsXGotTheCrowdGoing[] = COMPOUND_STRING("{STR_VAR_1}'s {STR_VAR_3}\ngot the crowd going.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_MonCantAppealNextTurn[] = COMPOUND_STRING("{STR_VAR_1} can't appeal\nnext turn…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_AttractedCrowdsAttention[] = COMPOUND_STRING("It attracted the crowd's\nattention.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_CrowdContinuesToWatchMon[] = COMPOUND_STRING("The crowd continues to\nwatch {STR_VAR_3}.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); +const u8 gText_MonsMoveIsIgnored[] = COMPOUND_STRING("{STR_VAR_1}'s\n{STR_VAR_2} is ignored.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"); static const u8 sSliderHeartYPositions[CONTESTANT_COUNT] = { @@ -688,84 +710,57 @@ static const u16 sText_Pal[] = INCBIN_U16("graphics/contest/text.gbapal"); #include "data/contest_text_tables.h" -const u8 *const gContestEffectDescriptionPointers[] = -{ - [CONTEST_EFFECT_HIGHLY_APPEALING] = COMPOUND_STRING("A highly appealing move."), - [CONTEST_EFFECT_USER_MORE_EASILY_STARTLED] = COMPOUND_STRING("After this move, the user is\nmore easily startled."), - [CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES] = COMPOUND_STRING("Makes a great appeal, but\nallows no more to the end."), - [CONTEST_EFFECT_REPETITION_NOT_BORING] = COMPOUND_STRING("Can be repeatedly used\nwithout boring the JUDGE."), - [CONTEST_EFFECT_AVOID_STARTLE_ONCE] = COMPOUND_STRING("Can avoid being startled\nby others once."), - [CONTEST_EFFECT_AVOID_STARTLE] = COMPOUND_STRING("Can avoid being startled\nby others."), - [CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY] = COMPOUND_STRING("Can avoid being startled\nby others a little."), - [CONTEST_EFFECT_USER_LESS_EASILY_STARTLED] = COMPOUND_STRING("After this move, the user is\nless likely to be startled."), - [CONTEST_EFFECT_STARTLE_FRONT_MON] = COMPOUND_STRING("Slightly startles the\nPOKΓ©MON in front."), - [CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS] = COMPOUND_STRING("Slightly startles those\nthat have made appeals."), - [CONTEST_EFFECT_STARTLE_PREV_MON] = COMPOUND_STRING("Startles the POKΓ©MON that\nappealed before the user."), - [CONTEST_EFFECT_STARTLE_PREV_MONS] = COMPOUND_STRING("Startles all POKΓ©MON that\nhave done their appeals."), - [CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON] = COMPOUND_STRING("Badly startles the\nPOKΓ©MON in front."), - [CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS] = COMPOUND_STRING("Badly startles those that\nhave made appeals."), - [CONTEST_EFFECT_STARTLE_PREV_MON_2] = COMPOUND_STRING("Startles the POKΓ©MON that\nappealed before the user."), - [CONTEST_EFFECT_STARTLE_PREV_MONS_2] = COMPOUND_STRING("Startles all POKΓ©MON that\nhave done their appeals."), - [CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION] = COMPOUND_STRING("Shifts the JUDGE's\nattention from others."), - [CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION] = COMPOUND_STRING("Startles the POKΓ©MON that\nhas the JUDGE's attention."), - [CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN] = COMPOUND_STRING("Jams the others, and misses\none turn of appeals."), - [CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL] = COMPOUND_STRING("Startles POKΓ©MON that\nmade a same-type appeal."), - [CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL] = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made COOL appeals."), - [CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL] = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made BEAUTY appeals."), - [CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL] = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made CUTE appeals."), - [CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL] = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made SMART appeals."), - [CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL] = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made TOUGH appeals."), - [CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS] = COMPOUND_STRING("Makes one POKΓ©MON after\nthe user nervous."), - [CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS] = COMPOUND_STRING("Makes all POKΓ©MON after\nthe user nervous."), - [CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS] = COMPOUND_STRING("Worsens the condition of\nthose that made appeals."), - [CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION] = COMPOUND_STRING("Badly startles POKΓ©MON in\ngood condition."), - [CONTEST_EFFECT_BETTER_IF_FIRST] = COMPOUND_STRING("The appeal works great if\nperformed first."), - [CONTEST_EFFECT_BETTER_IF_LAST] = COMPOUND_STRING("The appeal works great if\nperformed last."), - [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES] = COMPOUND_STRING("Makes the appeal as good\nas those before it."), - [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE] = COMPOUND_STRING("Makes the appeal as good\nas the one before it."), - [CONTEST_EFFECT_BETTER_WHEN_LATER] = COMPOUND_STRING("The appeal works better\nthe later it is performed."), - [CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING] = COMPOUND_STRING("The appeal's quality varies\ndepending on its timing."), - [CONTEST_EFFECT_BETTER_IF_SAME_TYPE] = COMPOUND_STRING("Works well if it's the same\ntype as the one before."), - [CONTEST_EFFECT_BETTER_IF_DIFF_TYPE] = COMPOUND_STRING("Works well if different in\ntype than the one before."), - [CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL] = COMPOUND_STRING("Affected by how well the\nappeal in front goes."), - [CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS] = COMPOUND_STRING("Ups the user's condition.\nHelps prevent nervousness."), - [CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION] = COMPOUND_STRING("The appeal works well if the\nuser's condition is good."), - [CONTEST_EFFECT_NEXT_APPEAL_EARLIER] = COMPOUND_STRING("The next appeal can be\nmade earlier next turn."), - [CONTEST_EFFECT_NEXT_APPEAL_LATER] = COMPOUND_STRING("The next appeal can be\nmade later next turn."), - [CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER] = COMPOUND_STRING("Makes the next turn's order\nmore easily scrambled."), - [CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER] = COMPOUND_STRING("Scrambles the order of\nappeals on the next turn."), - [CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST] = COMPOUND_STRING("An appeal that excites the\naudience in any CONTEST."), - [CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS] = COMPOUND_STRING("Badly startles all POKΓ©MON\nthat made good appeals."), - [CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED] = COMPOUND_STRING("The appeal works best the\nmore the crowd is excited."), - [CONTEST_EFFECT_DONT_EXCITE_AUDIENCE] = COMPOUND_STRING("Temporarily stops the\ncrowd from growing excited."), -}; - -const u8 *const gContestMoveTypeTextPointers[] = +const struct ContestCategory gContestCategoryInfo[CONTEST_CATEGORIES_COUNT + 1] = { - [CONTEST_CATEGORY_COOL] = COMPOUND_STRING("COOL"), - [CONTEST_CATEGORY_BEAUTY] = COMPOUND_STRING("BEAUTY"), - [CONTEST_CATEGORY_CUTE] = COMPOUND_STRING("CUTE"), - [CONTEST_CATEGORY_SMART] = COMPOUND_STRING("SMART"), - [CONTEST_CATEGORY_TOUGH] = COMPOUND_STRING("TOUGH"), -}; + [CONTEST_CATEGORY_COOL] = + { + .name = COMPOUND_STRING("COOL"), + .condition = COMPOUND_STRING("coolness"), + .generic = COMPOUND_STRING("COOL Move"), + .negativeTrait = COMPOUND_STRING("shyness"), + .palette = 13, + }, -static const u8 *const sContestConditions[] = -{ - [CONTEST_CATEGORY_COOL] = COMPOUND_STRING("coolness"), - [CONTEST_CATEGORY_BEAUTY] = COMPOUND_STRING("beauty"), - [CONTEST_CATEGORY_CUTE] = COMPOUND_STRING("cuteness"), - [CONTEST_CATEGORY_SMART] = COMPOUND_STRING("smartness"), - [CONTEST_CATEGORY_TOUGH] = COMPOUND_STRING("toughness"), -}; + [CONTEST_CATEGORY_BEAUTY] = + { + .name = COMPOUND_STRING("BEAUTY"), + .condition = COMPOUND_STRING("beauty"), + .generic = COMPOUND_STRING("BEAUTY Move"), + .negativeTrait = COMPOUND_STRING("anxiety"), + .palette = 14, + }, -static const u8 *const sInvalidContestMoveNames[] = -{ - [CONTEST_CATEGORY_COOL] = COMPOUND_STRING("COOL Move"), - [CONTEST_CATEGORY_BEAUTY] = COMPOUND_STRING("BEAUTY Move"), - [CONTEST_CATEGORY_CUTE] = COMPOUND_STRING("CUTE Move"), - [CONTEST_CATEGORY_SMART] = COMPOUND_STRING("SMART Move"), - [CONTEST_CATEGORY_TOUGH] = COMPOUND_STRING("TOUGH Move"), - [CONTEST_CATEGORIES_COUNT] = COMPOUND_STRING("???"), + [CONTEST_CATEGORY_CUTE] = + { + .name = COMPOUND_STRING("CUTE"), + .condition = COMPOUND_STRING("cuteness"), + .generic = COMPOUND_STRING("CUTE Move"), + .negativeTrait = COMPOUND_STRING("laziness"), + .palette = 14, + }, + + [CONTEST_CATEGORY_SMART] = + { + .name = COMPOUND_STRING("SMART"), + .condition = COMPOUND_STRING("smartness"), + .generic = COMPOUND_STRING("SMART Move"), + .negativeTrait = COMPOUND_STRING("hesitancy"), + .palette = 15, + }, + + [CONTEST_CATEGORY_TOUGH] = + { + .name = COMPOUND_STRING("TOUGH"), + .condition = COMPOUND_STRING("toughness"), + .generic = COMPOUND_STRING("TOUGH Move"), + .negativeTrait = COMPOUND_STRING("fear"), + .palette = 13, + }, + + [CONTEST_CATEGORIES_COUNT] = + { + .generic = COMPOUND_STRING("???"), + }, }; // Takes the .attentionLevel of a contestant as an index. @@ -1133,8 +1128,8 @@ void LoadContestBgAfterMoveAnim(void) { s32 i; - LZDecompressVram(gContestInterfaceGfx, (void *)VRAM); - LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); + DecompressDataWithHeaderVram(gContestInterfaceGfx, (void *)VRAM); + DecompressDataWithHeaderVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); CopyToBgTilemapBuffer(3, gContestAudienceTilemap, 0, 0); CopyBgTilemapBufferToVram(3); LoadPalette(gContestInterfaceAudiencePalette, BG_PLTT_OFFSET, BG_PLTT_SIZE); @@ -1414,10 +1409,10 @@ static bool8 SetupContestGraphics(u8 *stateVar) RequestDma3Fill(0, (void *)VRAM + 0x10000, 0x8000, 1); break; case 1: - LZDecompressVram(gContestInterfaceGfx, (void *)VRAM); + DecompressDataWithHeaderVram(gContestInterfaceGfx, (void *)VRAM); break; case 2: - LZDecompressVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); + DecompressDataWithHeaderVram(gContestAudienceGfx, (void *)(BG_SCREEN_ADDR(4))); DmaCopyLarge32(3, (void *)(BG_SCREEN_ADDR(4)), eUnzippedContestAudience_Gfx, 0x2000, 0x1000); break; case 3: @@ -1914,7 +1909,7 @@ static void Task_DoAppeals(u8 taskId) if (eContestantStatus[contestant].currMove < MOVES_COUNT) StringCopy(gStringVar2, GetMoveName(eContestantStatus[contestant].currMove)); else - StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[contestant].moveCategory]); + StringCopy(gStringVar2, gContestCategoryInfo[eContestantStatus[contestant].moveCategory].generic); StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove); Contest_StartTextPrinter(gStringVar4, TRUE); gTasks[taskId].tState = APPEALSTATE_WAIT_USED_MOVE_MSG; @@ -2310,7 +2305,7 @@ static void Task_DoAppeals(u8 taskId) } else { - StringCopy(gStringVar3, sContestConditions[GetMoveContestCategory(eContestantStatus[contestant].currMove)]); + StringCopy(gStringVar3, gContestCategoryInfo[GetMoveContestCategory(eContestantStatus[contestant].currMove)].condition); } if (r3 > 0 && eContestantStatus[contestant].repeatedMove) @@ -3330,7 +3325,7 @@ static void PrintContestMoveDescription(u16 move) ContestBG_FillBoxWithTile(0, TILE_FILLED_JAM_HEART, 0x15, 0x20, numHearts, 0x01, 0x11); FillWindowPixelBuffer(WIN_MOVE_DESCRIPTION, PIXEL_FILL(0)); - Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[GetMoveContestEffect(move)]); + Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffects[GetMoveContestEffect(move)].description); Contest_PrintTextToBg0WindowStd(WIN_SLASH, gText_Slash); } @@ -4559,7 +4554,7 @@ static void CalculateAppealMoveImpact(u8 contestant) && !AreMovesContestCombo(eContestantStatus[contestant].prevMove, eContestantStatus[contestant].currMove)) eContestantStatus[contestant].hasJudgesAttention = FALSE; - gContestEffectFuncs[effect](); + gContestEffects[effect].function(); if (eContestantStatus[contestant].conditionMod == CONDITION_GAIN) eContestantStatus[contestant].appeal += eContestantStatus[contestant].condition - 10; @@ -4664,16 +4659,7 @@ static void PrintAppealMoveResultText(u8 contestant, u8 stringId) { StringCopy(gStringVar1, gContestMons[contestant].nickname); StringCopy(gStringVar2, GetMoveName(eContestantStatus[contestant].currMove)); - if (GetMoveContestCategory(eContestantStatus[eContestAppealResults.contestant].currMove) == CONTEST_CATEGORY_COOL) - StringCopy(gStringVar3, gText_Contest_Shyness); - else if (GetMoveContestCategory(eContestantStatus[eContestAppealResults.contestant].currMove) == CONTEST_CATEGORY_BEAUTY) - StringCopy(gStringVar3, gText_Contest_Anxiety); - else if (GetMoveContestCategory(eContestantStatus[eContestAppealResults.contestant].currMove) == CONTEST_CATEGORY_CUTE) - StringCopy(gStringVar3, gText_Contest_Laziness); - else if (GetMoveContestCategory(eContestantStatus[eContestAppealResults.contestant].currMove) == CONTEST_CATEGORY_SMART) - StringCopy(gStringVar3, gText_Contest_Hesitancy); - else - StringCopy(gStringVar3, gText_Contest_Fear); + StringCopy(gStringVar3, gContestCategoryInfo[GetMoveContestCategory(eContestantStatus[eContestAppealResults.contestant].currMove)].negativeTrait); StringExpandPlaceholders(gStringVar4, sAppealResultTexts[stringId]); ContestClearGeneralTextWindow(); Contest_StartTextPrinter(gStringVar4, TRUE); @@ -5411,7 +5397,7 @@ static void SetMoveSpecificAnimData(u8 contestant) switch (move) { case MOVE_CURSE: - if (gSpeciesInfo[species].types[0] == TYPE_GHOST || gSpeciesInfo[species].types[1] == TYPE_GHOST) + if (GetSpeciesType(species, 0) == TYPE_GHOST || GetSpeciesType(species, 1) == TYPE_GHOST) gAnimMoveTurn = 0; else gAnimMoveTurn = 1; diff --git a/src/contest_ai.c b/src/contest_ai.c index 77f27fcc916a..8d4a347280ae 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -1199,7 +1199,7 @@ static void ContestAICmd_if_condition_not_eq(void) static void ContestAICmd_get_used_combo_starter(void) { - u16 result = FALSE; + bool32 result = FALSE; u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]); if (IsContestantAllowedToCombo(contestant)) diff --git a/src/contest_effect.c b/src/contest_effect.c index 51416ba14a76..3190e9844346 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -133,7 +133,7 @@ static void ContestEffect_UserLessEasilyStartled(void) SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING); } -// Slightly startles the POKοΏ½MON in front. +// Badly startles the PokΓ©mon in front. static void ContestEffect_StartleFrontMon(void) { u8 idx = 0; @@ -611,6 +611,7 @@ static void ContestEffect_BetterWhenLater(void) } // The appeal's quality varies depending on its timing. +// Despite the name, it seems to be random and not based on timing static void ContestEffect_QualityDependsOnTiming(void) { u8 rval = Random() % 10; diff --git a/src/contest_painting.c b/src/contest_painting.c index cb78caac265c..cbf6fd6297d4 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -42,63 +42,38 @@ static void PrintContestPaintingCaption(u8, u8); static void VBlankCB_ContestPainting(void); static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]); -extern const u8 gContestHallPaintingCaption[]; -extern const u8 gContestCoolness[]; -extern const u8 gContestBeauty[]; -extern const u8 gContestCuteness[]; -extern const u8 gContestSmartness[]; -extern const u8 gContestToughness[]; -extern const u8 gContestRankNormal[]; -extern const u8 gContestRankSuper[]; -extern const u8 gContestRankHyper[]; -extern const u8 gContestRankMaster[]; -extern const u8 gContestLink[]; -extern const u8 gContestPaintingCool1[]; -extern const u8 gContestPaintingCool2[]; -extern const u8 gContestPaintingCool3[]; -extern const u8 gContestPaintingBeauty1[]; -extern const u8 gContestPaintingBeauty2[]; -extern const u8 gContestPaintingBeauty3[]; -extern const u8 gContestPaintingCute1[]; -extern const u8 gContestPaintingCute2[]; -extern const u8 gContestPaintingCute3[]; -extern const u8 gContestPaintingSmart1[]; -extern const u8 gContestPaintingSmart2[]; -extern const u8 gContestPaintingSmart3[]; -extern const u8 gContestPaintingTough1[]; -extern const u8 gContestPaintingTough2[]; -extern const u8 gContestPaintingTough3[]; - -static const u16 sPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal"); -static const u8 sPictureFrameTiles_Cool[] = INCBIN_U8("graphics/picture_frame/cool.4bpp.rl"); -static const u8 sPictureFrameTiles_Beauty[] = INCBIN_U8("graphics/picture_frame/beauty.4bpp.rl"); -static const u8 sPictureFrameTiles_Cute[] = INCBIN_U8("graphics/picture_frame/cute.4bpp.rl"); -static const u8 sPictureFrameTiles_Smart[] = INCBIN_U8("graphics/picture_frame/smart.4bpp.rl"); -static const u8 sPictureFrameTiles_Tough[] = INCBIN_U8("graphics/picture_frame/tough.4bpp.rl"); -static const u8 sPictureFrameTiles_HallLobby[] = INCBIN_U8("graphics/picture_frame/lobby.4bpp.rl"); -static const u8 sPictureFrameTilemap_Cool[] = INCBIN_U8("graphics/picture_frame/cool_map.bin.rl"); -static const u8 sPictureFrameTilemap_Beauty[] = INCBIN_U8("graphics/picture_frame/beauty_map.bin.rl"); -static const u8 sPictureFrameTilemap_Cute[] = INCBIN_U8("graphics/picture_frame/cute_map.bin.rl"); -static const u8 sPictureFrameTilemap_Smart[] = INCBIN_U8("graphics/picture_frame/smart_map.bin.rl"); -static const u8 sPictureFrameTilemap_Tough[] = INCBIN_U8("graphics/picture_frame/tough_map.bin.rl"); -static const u8 sPictureFrameTilemap_HallLobby[] = INCBIN_U8("graphics/picture_frame/lobby_map.bin.rl"); +const u8 gContestHallPaintingCaption[] = COMPOUND_STRING("{STR_VAR_1}\n{STR_VAR_2}'s {STR_VAR_3}"); + +static const u16 sPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal"); +static const u32 sPictureFrameTiles_Cool[] = INCBIN_U32("graphics/picture_frame/cool.4bpp.smol"); +static const u32 sPictureFrameTiles_Beauty[] = INCBIN_U32("graphics/picture_frame/beauty.4bpp.smol"); +static const u32 sPictureFrameTiles_Cute[] = INCBIN_U32("graphics/picture_frame/cute.4bpp.smol"); +static const u32 sPictureFrameTiles_Smart[] = INCBIN_U32("graphics/picture_frame/smart.4bpp.smol"); +static const u32 sPictureFrameTiles_Tough[] = INCBIN_U32("graphics/picture_frame/tough.4bpp.smol"); +static const u32 sPictureFrameTiles_HallLobby[] = INCBIN_U32("graphics/picture_frame/lobby.4bpp.smol"); +static const u32 sPictureFrameTilemap_Cool[] = INCBIN_U32("graphics/picture_frame/cool_map.bin.smolTM"); +static const u32 sPictureFrameTilemap_Beauty[] = INCBIN_U32("graphics/picture_frame/beauty_map.bin.smolTM"); +static const u32 sPictureFrameTilemap_Cute[] = INCBIN_U32("graphics/picture_frame/cute_map.bin.smolTM"); +static const u32 sPictureFrameTilemap_Smart[] = INCBIN_U32("graphics/picture_frame/smart_map.bin.smolTM"); +static const u32 sPictureFrameTilemap_Tough[] = INCBIN_U32("graphics/picture_frame/tough_map.bin.smolTM"); +static const u32 sPictureFrameTilemap_HallLobby[] = INCBIN_U32("graphics/picture_frame/lobby_map.bin.smolTM"); static const u8 *const sContestCategoryNames_Unused[] = { - [CONTEST_CATEGORY_COOL] = gContestCoolness, - [CONTEST_CATEGORY_BEAUTY] = gContestBeauty, - [CONTEST_CATEGORY_CUTE] = gContestCuteness, - [CONTEST_CATEGORY_SMART] = gContestSmartness, - [CONTEST_CATEGORY_TOUGH] = gContestToughness, + [CONTEST_CATEGORY_COOL] = COMPOUND_STRING("COOLNESS"), + [CONTEST_CATEGORY_BEAUTY] = COMPOUND_STRING("BEAUTY"), + [CONTEST_CATEGORY_CUTE] = COMPOUND_STRING("CUTENESS"), + [CONTEST_CATEGORY_SMART] = COMPOUND_STRING("SMARTNESS"), + [CONTEST_CATEGORY_TOUGH] = COMPOUND_STRING("TOUGHNESS"), }; static const u8 *const sContestRankNames[] = { - [CONTEST_RANK_NORMAL] = gContestRankNormal, - [CONTEST_RANK_SUPER] = gContestRankSuper, - [CONTEST_RANK_HYPER] = gContestRankHyper, - [CONTEST_RANK_MASTER] = gContestRankMaster, - [CONTEST_RANK_LINK] = gContestLink, + [CONTEST_RANK_NORMAL] = COMPOUND_STRING("NORMAL RANK"), + [CONTEST_RANK_SUPER] = COMPOUND_STRING("SUPER RANK"), + [CONTEST_RANK_HYPER] = COMPOUND_STRING("HYPER RANK"), + [CONTEST_RANK_MASTER] = COMPOUND_STRING("MASTER RANK"), + [CONTEST_RANK_LINK] = COMPOUND_STRING("LINK"), }; static const struct BgTemplate sBgTemplates[] = @@ -127,21 +102,21 @@ static const struct WindowTemplate sWindowTemplate = static const u8 *const sMuseumCaptions[NUM_PAINTING_CAPTIONS * CONTEST_CATEGORIES_COUNT] = { - [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool1, - [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool2, - [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = gContestPaintingCool3, - [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty1, - [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty2, - [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = gContestPaintingBeauty3, - [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute1, - [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute2, - [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = gContestPaintingCute3, - [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart1, - [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart2, - [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = gContestPaintingSmart3, - [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough1, - [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough2, - [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = gContestPaintingTough3, + [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = COMPOUND_STRING("Nonstop supercool--\nthe inestimable {STR_VAR_1}"), + [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = COMPOUND_STRING("Hey, there!\nThe good-looking POKΓ©MON {STR_VAR_1}"), + [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_COOL] = COMPOUND_STRING("The marvelous, wonderful, and\nvery great {STR_VAR_1}"), + [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = COMPOUND_STRING("This century's last Venus--\nthe beautiful {STR_VAR_1}"), + [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = COMPOUND_STRING("{STR_VAR_1}'s dazzling,\nglittering smile"), + [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_BEAUTY] = COMPOUND_STRING("POKΓ©MON CENTER's super idol--\nthe incomparable {STR_VAR_1}"), + [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = COMPOUND_STRING("The lovely and sweet {STR_VAR_1}"), + [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = COMPOUND_STRING("The pretty {STR_VAR_1}'s\nwinning portrait"), + [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_CUTE] = COMPOUND_STRING("Give us a wink!\nThe cutie POKΓ©MON {STR_VAR_1}"), + [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = COMPOUND_STRING("The smartness maestro--\nthe wise POKΓ©MON {STR_VAR_1}"), + [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = COMPOUND_STRING("{STR_VAR_1}--the one chosen\nabove all POKΓ©MON"), + [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_SMART] = COMPOUND_STRING("The excellent {STR_VAR_1}'s\nmoment of elegance"), + [0 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = COMPOUND_STRING("The powerfully muscular\nspeedster {STR_VAR_1}"), + [1 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = COMPOUND_STRING("The strong, stronger, and\nstrongest {STR_VAR_1}"), + [2 + NUM_PAINTING_CAPTIONS * CONTEST_CATEGORY_TOUGH] = COMPOUND_STRING("The mighty tough\nhyper POKΓ©MON {STR_VAR_1}"), }; static const struct OamData sContestPaintingMonOamData = @@ -424,24 +399,24 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 isForArtist) switch (gContestPaintingWinner->contestCategory / NUM_PAINTING_CAPTIONS) { case CONTEST_CATEGORY_COOL: - RLUnCompVram(sPictureFrameTiles_Cool, (void *)VRAM); - RLUnCompWram(sPictureFrameTilemap_Cool, gContestMonPixels); + DecompressDataWithHeaderVram(sPictureFrameTiles_Cool, (void *)VRAM); + DecompressDataWithHeaderWram(sPictureFrameTilemap_Cool, gContestMonPixels); break; case CONTEST_CATEGORY_BEAUTY: - RLUnCompVram(sPictureFrameTiles_Beauty, (void *)VRAM); - RLUnCompWram(sPictureFrameTilemap_Beauty, gContestMonPixels); + DecompressDataWithHeaderVram(sPictureFrameTiles_Beauty, (void *)VRAM); + DecompressDataWithHeaderWram(sPictureFrameTilemap_Beauty, gContestMonPixels); break; case CONTEST_CATEGORY_CUTE: - RLUnCompVram(sPictureFrameTiles_Cute, (void *)VRAM); - RLUnCompWram(sPictureFrameTilemap_Cute, gContestMonPixels); + DecompressDataWithHeaderVram(sPictureFrameTiles_Cute, (void *)VRAM); + DecompressDataWithHeaderWram(sPictureFrameTilemap_Cute, gContestMonPixels); break; case CONTEST_CATEGORY_SMART: - RLUnCompVram(sPictureFrameTiles_Smart, (void *)VRAM); - RLUnCompWram(sPictureFrameTilemap_Smart, gContestMonPixels); + DecompressDataWithHeaderVram(sPictureFrameTiles_Smart, (void *)VRAM); + DecompressDataWithHeaderWram(sPictureFrameTilemap_Smart, gContestMonPixels); break; case CONTEST_CATEGORY_TOUGH: - RLUnCompVram(sPictureFrameTiles_Tough, (void *)VRAM); - RLUnCompWram(sPictureFrameTilemap_Tough, gContestMonPixels); + DecompressDataWithHeaderVram(sPictureFrameTiles_Tough, (void *)VRAM); + DecompressDataWithHeaderWram(sPictureFrameTilemap_Tough, gContestMonPixels); break; } @@ -466,8 +441,8 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 isForArtist) else if (contestWinnerId < MUSEUM_CONTEST_WINNERS_START) { // Load Contest Hall lobby frame - RLUnCompVram(sPictureFrameTiles_HallLobby, (void *)VRAM); - RLUnCompVram(sPictureFrameTilemap_HallLobby, (void *)(BG_SCREEN_ADDR(12))); + DecompressDataWithHeaderVram(sPictureFrameTiles_HallLobby, (void *)VRAM); + DecompressDataWithHeaderVram(sPictureFrameTilemap_HallLobby, (void *)(BG_SCREEN_ADDR(12))); } else { @@ -475,24 +450,24 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 isForArtist) switch (gContestPaintingWinner->contestCategory / NUM_PAINTING_CAPTIONS) { case CONTEST_CATEGORY_COOL: - RLUnCompVram(sPictureFrameTiles_Cool, (void *)VRAM); - RLUnCompVram(sPictureFrameTilemap_Cool, (void *)(BG_SCREEN_ADDR(12))); + DecompressDataWithHeaderVram(sPictureFrameTiles_Cool, (void *)VRAM); + DecompressDataWithHeaderVram(sPictureFrameTilemap_Cool, (void *)(BG_SCREEN_ADDR(12))); break; case CONTEST_CATEGORY_BEAUTY: - RLUnCompVram(sPictureFrameTiles_Beauty, (void *)VRAM); - RLUnCompVram(sPictureFrameTilemap_Beauty, (void *)(BG_SCREEN_ADDR(12))); + DecompressDataWithHeaderVram(sPictureFrameTiles_Beauty, (void *)VRAM); + DecompressDataWithHeaderVram(sPictureFrameTilemap_Beauty, (void *)(BG_SCREEN_ADDR(12))); break; case CONTEST_CATEGORY_CUTE: - RLUnCompVram(sPictureFrameTiles_Cute, (void *)VRAM); - RLUnCompVram(sPictureFrameTilemap_Cute, (void *)(BG_SCREEN_ADDR(12))); + DecompressDataWithHeaderVram(sPictureFrameTiles_Cute, (void *)VRAM); + DecompressDataWithHeaderVram(sPictureFrameTilemap_Cute, (void *)(BG_SCREEN_ADDR(12))); break; case CONTEST_CATEGORY_SMART: - RLUnCompVram(sPictureFrameTiles_Smart, (void *)VRAM); - RLUnCompVram(sPictureFrameTilemap_Smart, (void *)(BG_SCREEN_ADDR(12))); + DecompressDataWithHeaderVram(sPictureFrameTiles_Smart, (void *)VRAM); + DecompressDataWithHeaderVram(sPictureFrameTilemap_Smart, (void *)(BG_SCREEN_ADDR(12))); break; case CONTEST_CATEGORY_TOUGH: - RLUnCompVram(sPictureFrameTiles_Tough, (void *)VRAM); - RLUnCompVram(sPictureFrameTilemap_Tough, (void *)(BG_SCREEN_ADDR(12))); + DecompressDataWithHeaderVram(sPictureFrameTiles_Tough, (void *)VRAM); + DecompressDataWithHeaderVram(sPictureFrameTilemap_Tough, (void *)(BG_SCREEN_ADDR(12))); break; } } diff --git a/src/contest_util.c b/src/contest_util.c index 66d0b575fe91..dd7070e9a33a 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -452,7 +452,7 @@ static void LoadContestResultsBgGfx(void) s8 numStars, round2Points; u16 tile1, tile2; - LZDecompressVram(gContestResults_Gfx, (void *)BG_CHAR_ADDR(0)); + DecompressDataWithHeaderVram(gContestResults_Gfx, (void *)BG_CHAR_ADDR(0)); CopyToBgTilemapBuffer(3, gContestResults_Bg_Tilemap, 0, 0); CopyToBgTilemapBuffer(2, gContestResults_Interface_Tilemap, 0, 0); CopyToBgTilemapBuffer(0, gContestResults_WinnerBanner_Tilemap, 0, 0); @@ -964,7 +964,8 @@ static void Task_ShowWinnerMonBanner(u8 taskId) static void Task_SetSeenWinnerMon(u8 taskId) { - int i, nationalDexNum; + int i; + enum NationalDexOrder nationalDexNum; if (JOY_NEW(A_BUTTON)) { @@ -1958,7 +1959,7 @@ void TryEnterContestMon(void) u16 HasMonWonThisContestBefore(void) { - u16 hasRankRibbon = FALSE; + bool32 hasRankRibbon = FALSE; struct Pokemon *mon = &gPlayerParty[gContestMonPartyIndex]; switch (gSpecialVar_ContestCategory) { diff --git a/src/credits.c b/src/credits.c index c06a6fca9b38..bfc2cda12a02 100644 --- a/src/credits.c +++ b/src/credits.c @@ -86,7 +86,7 @@ EWRAM_DATA bool8 gHasHallOfFameRecords = 0; static EWRAM_DATA struct CreditsData *sCreditsData = {0}; static const u16 sCredits_Pal[] = INCBIN_U16("graphics/credits/credits.gbapal"); -static const u32 sCreditsCopyrightEnd_Gfx[] = INCBIN_U32("graphics/credits/the_end_copyright.4bpp.lz"); +static const u32 sCreditsCopyrightEnd_Gfx[] = INCBIN_U32("graphics/credits/the_end_copyright.4bpp.smol"); static void SpriteCB_CreditsMonBg(struct Sprite *); static void Task_WaitPaletteFade(u8); @@ -538,8 +538,8 @@ static void Task_LoadShowMons(u8 taskId) ResetAllPicSprites(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 8; - LZ77UnCompVram(gBirchBagGrass_Gfx, (void *)VRAM); - LZ77UnCompVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(7))); + DecompressDataWithHeaderVram(gBirchBagGrass_Gfx, (void *)VRAM); + DecompressDataWithHeaderVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(7))); LoadPalette(gBirchBagGrass_Pal + 1, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(2 * 16 - 1)); for (i = 0; i < MON_PIC_SIZE; i++) @@ -1282,7 +1282,7 @@ static void LoadTheEndScreen(u16 tileOffsetLoad, u16 tileOffsetWrite, u16 palOff u16 baseTile; u16 i; - LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + tileOffsetLoad)); + DecompressDataWithHeaderVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + tileOffsetLoad)); LoadPalette(gIntroCopyright_Pal, palOffset, sizeof(gIntroCopyright_Pal)); baseTile = (palOffset / 16) << 12; @@ -1542,7 +1542,7 @@ static void SpriteCB_CreditsMonBg(struct Sprite *sprite) static void DeterminePokemonToShow(void) { - u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_STARTER_MON))); + enum NationalDexOrder starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_STARTER_MON))); u16 page; u16 dexNum; u16 j; diff --git a/src/data.c b/src/data.c index f5035262c59b..7b99254a8ea3 100644 --- a/src/data.c +++ b/src/data.c @@ -12,8 +12,8 @@ #include "constants/battle_ai.h" const u16 gMinigameDigits_Pal[] = INCBIN_U16("graphics/link/minigame_digits.gbapal"); -const u32 gMinigameDigits_Gfx[] = INCBIN_U32("graphics/link/minigame_digits.4bpp.lz"); -static const u32 sMinigameDigitsThin_Gfx[] = INCBIN_U32("graphics/link/minigame_digits2.4bpp.lz"); // Unused +const u32 gMinigameDigits_Gfx[] = INCBIN_U32("graphics/link/minigame_digits.4bpp.smol"); +static const u32 sMinigameDigitsThin_Gfx[] = INCBIN_U32("graphics/link/minigame_digits2.4bpp.smol"); // Unused #define BATTLER_OFFSET(i) (gHeap + 0x8000 + MON_PIC_SIZE * (i)) diff --git a/src/data/abilities.h b/src/data/abilities.h index f9a3adc96cd7..95b6a6e59152 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -1,4 +1,4 @@ -const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = +const struct AbilityInfo gAbilitiesInfo[ABILITIES_COUNT] = { [ABILITY_NONE] = { @@ -1251,6 +1251,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = .name = _("Flower Veil"), .description = COMPOUND_STRING("Protects Grass-types."), .aiRating = 0, + .breakable = TRUE, }, [ABILITY_CHEEK_POUCH] = @@ -1286,6 +1287,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = { .name = _("Bulletproof"), .description = COMPOUND_STRING("Avoids some projectiles."), + .breakable = TRUE, .aiRating = 7, }, @@ -1413,6 +1415,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = .name = _("Aura Break"), .description = COMPOUND_STRING("Reverse aura abilities."), .aiRating = 3, + .breakable = TRUE, }, [ABILITY_PRIMORDIAL_SEA] = @@ -1495,6 +1498,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = .name = _("Water Bubble"), .description = COMPOUND_STRING("Guards from fire and burns."), .aiRating = 8, + .breakable = TRUE, }, [ABILITY_STEELWORKER] = diff --git a/src/data/apricorns.h b/src/data/apricorns.h new file mode 100644 index 000000000000..4f76f3064864 --- /dev/null +++ b/src/data/apricorns.h @@ -0,0 +1,18 @@ +struct ApricornTree +{ + u8 minimum; + u8 maximum; + enum ApricornType apricornType; +}; + +const struct ApricornTree gApricornTrees[APRICORN_TREE_COUNT] = +{ + #if APRICORN_TREE_COUNT > 0 + [APRICORN_TREE_NONE] = + { + .minimum = 1, + .maximum = 1, + .apricornType = APRICORN_RED, + }, + #endif +}; diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index 038f338cb21d..2ee7f4f1b58c 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1468,6 +1468,10 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_PinkVioletOrb, 0x0080, ANIM_TAG_PINKVIO_ORB}, {gBattleAnimSpriteGfx_TeraStarstormBeam, 0x200, ANIM_TAG_STARSTORM}, {gBattleAnimSpriteGfx_SaltParticle, 0x400, ANIM_TAG_SALT_PARTICLE}, + {gBattleAnimSpriteGfx_TeraSymbol, 0x0200, ANIM_TAG_TERA_SYMBOL}, + {gBattleAnimSpriteGfx_TatsugiriCurly, 0x200, ANIM_TAG_TATSUGIRI_CURLY}, + {gBattleAnimSpriteGfx_TatsugiriDroopy, 0x200, ANIM_TAG_TATSUGIRI_DROOPY}, + {gBattleAnimSpriteGfx_TatsugiriStretchy, 0x200, ANIM_TAG_TATSUGIRI_STRETCHY}, }; const struct SpritePalette gBattleAnimPaletteTable[] = @@ -1937,6 +1941,10 @@ const struct SpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_PinkVioletOrb, ANIM_TAG_PINKVIO_ORB}, {gBattleAnimSpritePal_TeraStarstormBeam, ANIM_TAG_STARSTORM}, {gBattleAnimSpritePal_SaltParticle, ANIM_TAG_SALT_PARTICLE}, + {gBattleAnimSpritePal_TeraSymbol, ANIM_TAG_TERA_SYMBOL}, + {gBattleAnimSpritePal_TatsugiriCurly, ANIM_TAG_TATSUGIRI_CURLY}, + {gBattleAnimSpritePal_TatsugiriDroopy, ANIM_TAG_TATSUGIRI_DROOPY}, + {gBattleAnimSpritePal_TatsugiriStretchy, ANIM_TAG_TATSUGIRI_STRETCHY}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = @@ -2023,6 +2031,7 @@ const struct BattleAnimBackground gBattleAnimBackgroundTable[] = [BG_STEEL_BEAM_OPPONENT] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedOpponent}, [BG_STEEL_BEAM_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedPlayer}, [BG_CHLOROBLAST] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_Chloroblast, gBattleAnimBgTilemap_HydroCannon}, - [BG_RAINBOW] = {gBattleAnimBgImage_Rainbow, gBattleAnimBGPalette_Rainbow, gBattleAnimBgTilemap_Rainbow}, + [BG_RAINBOW_PLAYER] = {gBattleAnimBgImage_RainbowPlayer, gBattleAnimBGPalette_Rainbow, gBattleAnimBgTilemap_RainbowPlayer}, + [BG_RAINBOW_OPPONENT] = {gBattleAnimBgImage_RainbowOpponent, gBattleAnimBGPalette_Rainbow, gBattleAnimBgTilemap_RainbowOpponent}, [BG_SWAMP] = {gBattleAnimBgImage_Swamp, gBattleAnimBGPalette_Swamp, gBattleAnimBgTilemap_Swamp}, }; diff --git a/src/data/battle_environment.h b/src/data/battle_environment.h new file mode 100644 index 000000000000..5e485ad5b1c3 --- /dev/null +++ b/src/data/battle_environment.h @@ -0,0 +1,432 @@ +const u32 gBattleEnvironmentTiles_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_TallGrass[] = INCBIN_U16("graphics/battle_environment/tall_grass/palette.gbapal"); +const u32 gBattleEnvironmentTilemap_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/map.bin.smolTM"); + +const u32 gBattleEnvironmentTiles_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_LongGrass[] = INCBIN_U16("graphics/battle_environment/long_grass/palette.gbapal"); +const u32 gBattleEnvironmentTilemap_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/map.bin.smolTM"); + +const u32 gBattleEnvironmentTiles_Sand[] = INCBIN_U32("graphics/battle_environment/sand/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_Sand[] = INCBIN_U16("graphics/battle_environment/sand/palette.gbapal"); +const u32 gBattleEnvironmentTilemap_Sand[] = INCBIN_U32("graphics/battle_environment/sand/map.bin.smolTM"); + +const u32 gBattleEnvironmentTiles_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_Underwater[] = INCBIN_U16("graphics/battle_environment/underwater/palette.gbapal"); +const u32 gBattleEnvironmentTilemap_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/map.bin.smolTM"); + +const u32 gBattleEnvironmentTiles_Water[] = INCBIN_U32("graphics/battle_environment/water/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_Water[] = INCBIN_U16("graphics/battle_environment/water/palette.gbapal"); +const u32 gBattleEnvironmentTilemap_Water[] = INCBIN_U32("graphics/battle_environment/water/map.bin.smolTM"); + +const u32 gBattleEnvironmentTiles_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_PondWater[] = INCBIN_U16("graphics/battle_environment/pond_water/palette.gbapal"); +const u32 gBattleEnvironmentTilemap_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/map.bin.smolTM"); + +const u32 gBattleEnvironmentTiles_Rock[] = INCBIN_U32("graphics/battle_environment/rock/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_Rock[] = INCBIN_U16("graphics/battle_environment/rock/palette.gbapal"); +const u32 gBattleEnvironmentTilemap_Rock[] = INCBIN_U32("graphics/battle_environment/rock/map.bin.smolTM"); + +const u32 gBattleEnvironmentTiles_Cave[] = INCBIN_U32("graphics/battle_environment/cave/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_Cave[] = INCBIN_U16("graphics/battle_environment/cave/palette.gbapal"); +const u32 gBattleEnvironmentTilemap_Cave[] = INCBIN_U32("graphics/battle_environment/cave/map.bin.smolTM"); + +const u16 gBattleEnvironmentPalette_Plain[] = INCBIN_U16("graphics/battle_environment/plain/palette.gbapal"); + +const u32 gBattleEnvironmentTiles_Building[] = INCBIN_U32("graphics/battle_environment/building/tiles.4bpp.smol"); +const u16 gBattleEnvironmentPalette_Frontier[] = INCBIN_U16("graphics/battle_environment/stadium/battle_frontier.gbapal"); // this is also used for link battles +const u32 gBattleEnvironmentTilemap_Building[] = INCBIN_U32("graphics/battle_environment/building/map.bin.smolTM"); + +#define ENVIRONMENT_BACKGROUND(background) \ +{ \ + .tileset = gBattleEnvironmentTiles_##background, \ + .tilemap = gBattleEnvironmentTilemap_##background, \ + .entryTileset = gBattleEnvironmentAnimTiles_##background, \ + .entryTilemap = gBattleEnvironmentAnimTilemap_##background, \ + .palette = gBattleEnvironmentPalette_##background, \ +} + +const struct BattleEnvironment gBattleEnvironmentInfo[BATTLE_ENVIRONMENT_COUNT] = +{ + [BATTLE_ENVIRONMENT_GRASS] = + { + #if B_NATURE_POWER_MOVES >= GEN_6 + .naturePower = MOVE_ENERGY_BALL, + #elif B_NATURE_POWER_MOVES >= GEN_4 + .naturePower = MOVE_SEED_BOMB, + #else + .naturePower = MOVE_STUN_SPORE, + #endif + .secretPowerEffect = B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_SLEEP : MOVE_EFFECT_POISON, + .camouflageType = TYPE_GRASS, + .background = ENVIRONMENT_BACKGROUND(TallGrass), + }, + + [BATTLE_ENVIRONMENT_LONG_GRASS] = + { + #if B_NATURE_POWER_MOVES >= GEN_6 + .naturePower = MOVE_ENERGY_BALL, + #elif B_NATURE_POWER_MOVES >= GEN_4 + .naturePower = MOVE_SEED_BOMB, + #else + .naturePower = MOVE_RAZOR_LEAF, + #endif + .secretPowerEffect = MOVE_EFFECT_SLEEP, + .camouflageType = TYPE_GRASS, + .background = ENVIRONMENT_BACKGROUND(LongGrass), + }, + + [BATTLE_ENVIRONMENT_SAND] = + { + .naturePower = B_NATURE_POWER_MOVES >= GEN_6 ? MOVE_EARTH_POWER : MOVE_EARTHQUAKE, + .secretPowerEffect = MOVE_EFFECT_ACC_MINUS_1, + .camouflageType = TYPE_GROUND, + .background = ENVIRONMENT_BACKGROUND(Sand), + }, + + [BATTLE_ENVIRONMENT_UNDERWATER] = + { + .naturePower = MOVE_HYDRO_PUMP, + .secretPowerEffect = B_SECRET_POWER_EFFECT >= GEN_6 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_DEF_MINUS_1, + .camouflageType = TYPE_WATER, + .background = ENVIRONMENT_BACKGROUND(Underwater), + }, + + [BATTLE_ENVIRONMENT_WATER] = + { + .naturePower = B_NATURE_POWER_MOVES >= GEN_4 ? MOVE_HYDRO_PUMP : MOVE_SURF, + .secretPowerEffect = MOVE_EFFECT_ATK_MINUS_1, + .camouflageType = TYPE_WATER, + .background = ENVIRONMENT_BACKGROUND(Water), + }, + + [BATTLE_ENVIRONMENT_POND] = + { + .naturePower = B_NATURE_POWER_MOVES >= GEN_4 ? MOVE_HYDRO_PUMP : MOVE_BUBBLE_BEAM, + .secretPowerEffect = B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_SPD_MINUS_1, + .camouflageType = TYPE_WATER, + .background = ENVIRONMENT_BACKGROUND(PondWater), + }, + + [BATTLE_ENVIRONMENT_MOUNTAIN] = + { + #if B_NATURE_POWER_MOVES >= GEN_6 + .naturePower = MOVE_EARTH_POWER, + #elif B_NATURE_POWER_MOVES >= GEN_5 + .naturePower = MOVE_EARTHQUAKE, + #else + .naturePower = MOVE_ROCK_SLIDE, + #endif + #if B_SECRET_POWER_EFFECT >= GEN_5 + .secretPowerEffect = MOVE_EFFECT_ACC_MINUS_1, + #elif B_SECRET_POWER_EFFECT >= GEN_4 + .secretPowerEffect = MOVE_EFFECT_FLINCH, + #else + .secretPowerEffect = MOVE_EFFECT_CONFUSION, + #endif + .camouflageType = B_CAMOUFLAGE_TYPES >= GEN_5 ? TYPE_GROUND : TYPE_ROCK, + .background = ENVIRONMENT_BACKGROUND(Rock), + }, + + [BATTLE_ENVIRONMENT_CAVE] = + { + #if B_NATURE_POWER_MOVES >= GEN_6 + .naturePower = MOVE_POWER_GEM, + #elif B_NATURE_POWER_MOVES >= GEN_4 + .naturePower = MOVE_ROCK_SLIDE, + #else + .naturePower = MOVE_SHADOW_BALL, + #endif + .secretPowerEffect = MOVE_EFFECT_FLINCH, + .camouflageType = TYPE_ROCK, + .background = ENVIRONMENT_BACKGROUND(Cave), + }, + + [BATTLE_ENVIRONMENT_BUILDING] = + { + .naturePower = B_NATURE_POWER_MOVES >= GEN_4 ? MOVE_TRI_ATTACK : MOVE_SWIFT, + .secretPowerEffect = MOVE_EFFECT_PARALYSIS, + .camouflageType = TYPE_NORMAL, + .background = ENVIRONMENT_BACKGROUND(Building), + }, + + [BATTLE_ENVIRONMENT_PLAIN] = + { + #if B_NATURE_POWER_MOVES >= GEN_6 + .naturePower = MOVE_TRI_ATTACK, + #elif B_NATURE_POWER_MOVES >= GEN_4 + .naturePower = MOVE_EARTHQUAKE, + #else + .naturePower = MOVE_SWIFT, + #endif + .secretPowerEffect = (B_SECRET_POWER_EFFECT == GEN_4 || B_SECRET_POWER_EFFECT == GEN_5) ? MOVE_EFFECT_ACC_MINUS_1 : MOVE_EFFECT_PARALYSIS, + .camouflageType = (B_CAMOUFLAGE_TYPES == GEN_4 || B_CAMOUFLAGE_TYPES == GEN_5) ? TYPE_GROUND : TYPE_NORMAL, + .background = + { + .tileset = gBattleEnvironmentTiles_Building, + .tilemap = gBattleEnvironmentTilemap_Building, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_Plain, + }, + }, + + [BATTLE_ENVIRONMENT_FRONTIER] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Building, + .tilemap = gBattleEnvironmentTilemap_Building, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_Frontier, + }, + }, + + [BATTLE_ENVIRONMENT_GYM] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Building, + .tilemap = gBattleEnvironmentTilemap_Building, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_BuildingGym, + }, + }, + + [BATTLE_ENVIRONMENT_LEADER] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Building, + .tilemap = gBattleEnvironmentTilemap_Building, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_BuildingLeader, + }, + }, + + [BATTLE_ENVIRONMENT_MAGMA] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Stadium, + .tilemap = gBattleEnvironmentTilemap_Stadium, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_StadiumMagma, + }, + }, + + [BATTLE_ENVIRONMENT_AQUA] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Stadium, + .tilemap = gBattleEnvironmentTilemap_Stadium, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_StadiumAqua, + }, + }, + + [BATTLE_ENVIRONMENT_SIDNEY] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Stadium, + .tilemap = gBattleEnvironmentTilemap_Stadium, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_StadiumSidney, + }, + }, + + [BATTLE_ENVIRONMENT_PHOEBE] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Stadium, + .tilemap = gBattleEnvironmentTilemap_Stadium, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_StadiumPhoebe, + }, + }, + + [BATTLE_ENVIRONMENT_GLACIA] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Stadium, + .tilemap = gBattleEnvironmentTilemap_Stadium, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_StadiumGlacia, + }, + }, + + [BATTLE_ENVIRONMENT_DRAKE] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Stadium, + .tilemap = gBattleEnvironmentTilemap_Stadium, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_StadiumDrake, + }, + }, + + [BATTLE_ENVIRONMENT_CHAMPION] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Stadium, + .tilemap = gBattleEnvironmentTilemap_Stadium, + .entryTileset = gBattleEnvironmentAnimTiles_Building, + .entryTilemap = gBattleEnvironmentAnimTilemap_Building, + .palette = gBattleEnvironmentPalette_StadiumWallace, + }, + }, + + [BATTLE_ENVIRONMENT_GROUDON] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Cave, + .tilemap = gBattleEnvironmentTilemap_Cave, + .entryTileset = gBattleEnvironmentAnimTiles_Cave, + .entryTilemap = gBattleEnvironmentAnimTilemap_Cave, + .palette = gBattleEnvironmentPalette_Groudon, + }, + }, + + [BATTLE_ENVIRONMENT_KYOGRE] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Water, + .tilemap = gBattleEnvironmentTilemap_Water, + .entryTileset = gBattleEnvironmentAnimTiles_Underwater, + .entryTilemap = gBattleEnvironmentAnimTilemap_Underwater, + .palette = gBattleEnvironmentPalette_Kyogre, + }, + }, + + [BATTLE_ENVIRONMENT_RAYQUAZA] = + { + .background = + { + .tileset = gBattleEnvironmentTiles_Rayquaza, + .tilemap = gBattleEnvironmentTilemap_Rayquaza, + .entryTileset = gBattleEnvironmentAnimTiles_Rayquaza, + .entryTilemap = gBattleEnvironmentAnimTilemap_Rayquaza, + .palette = gBattleEnvironmentPalette_Rayquaza, + }, + }, + + [BATTLE_ENVIRONMENT_SOARING] = + { + .naturePower = MOVE_AIR_SLASH, + .secretPowerEffect = MOVE_EFFECT_SPD_MINUS_1, + .camouflageType = TYPE_FLYING, + }, + + [BATTLE_ENVIRONMENT_SKY_PILLAR] = + { + .naturePower = MOVE_AIR_SLASH, + .secretPowerEffect = MOVE_EFFECT_SPD_MINUS_1, + .camouflageType = TYPE_FLYING, + }, + + [BATTLE_ENVIRONMENT_BURIAL_GROUND] = + { + .naturePower = MOVE_SHADOW_BALL, + .secretPowerEffect = MOVE_EFFECT_FLINCH, + .camouflageType = TYPE_GHOST, + }, + + [BATTLE_ENVIRONMENT_PUDDLE] = + { + .naturePower = MOVE_MUD_BOMB, + .secretPowerEffect = B_SECRET_POWER_EFFECT >= GEN_5 ? MOVE_EFFECT_SPD_MINUS_1 : MOVE_EFFECT_ACC_MINUS_1, + .camouflageType = TYPE_GROUND, + }, + + [BATTLE_ENVIRONMENT_MARSH] = + { + .naturePower = MOVE_MUD_BOMB, + .secretPowerEffect = MOVE_EFFECT_SPD_MINUS_1, + .camouflageType = TYPE_GROUND, + }, + + [BATTLE_ENVIRONMENT_SWAMP] = + { + .naturePower = MOVE_MUD_BOMB, + .secretPowerEffect = MOVE_EFFECT_SPD_MINUS_1, + .camouflageType = TYPE_GROUND, + }, + + [BATTLE_ENVIRONMENT_SNOW] = + { + #if B_NATURE_POWER_MOVES >= GEN_7 + .naturePower = MOVE_ICE_BEAM, + #elif B_NATURE_POWER_MOVES >= GEN_6 + .naturePower = MOVE_FROST_BREATH, + #else + .naturePower = MOVE_BLIZZARD, + #endif + .secretPowerEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE, + .camouflageType = TYPE_ICE, + }, + + [BATTLE_ENVIRONMENT_ICE] = + { + .naturePower = MOVE_ICE_BEAM, + .secretPowerEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE, + .camouflageType = TYPE_ICE, + }, + + [BATTLE_ENVIRONMENT_VOLCANO] = + { + .naturePower = MOVE_LAVA_PLUME, + .secretPowerEffect = MOVE_EFFECT_BURN, + .camouflageType = TYPE_FIRE, + }, + + [BATTLE_ENVIRONMENT_DISTORTION_WORLD] = + { + .naturePower = MOVE_TRI_ATTACK, + .secretPowerEffect = MOVE_EFFECT_PARALYSIS, + .camouflageType = TYPE_NORMAL, + }, + + [BATTLE_ENVIRONMENT_SPACE] = + { + .naturePower = MOVE_DRACO_METEOR, + .secretPowerEffect = MOVE_EFFECT_FLINCH, + .camouflageType = TYPE_DRAGON, + }, + + [BATTLE_ENVIRONMENT_ULTRA_SPACE] = + { + .naturePower = MOVE_PSYSHOCK, + .secretPowerEffect = MOVE_EFFECT_DEF_MINUS_1, + .camouflageType = TYPE_PSYCHIC, + }, +}; + +static const struct { + u8 mapScene; + u8 battleEnvironment; +} sMapBattleSceneMapping[] = { + {MAP_BATTLE_SCENE_GYM, BATTLE_ENVIRONMENT_GYM}, + {MAP_BATTLE_SCENE_MAGMA, BATTLE_ENVIRONMENT_MAGMA}, + {MAP_BATTLE_SCENE_AQUA, BATTLE_ENVIRONMENT_AQUA}, + {MAP_BATTLE_SCENE_SIDNEY, BATTLE_ENVIRONMENT_SIDNEY}, + {MAP_BATTLE_SCENE_PHOEBE, BATTLE_ENVIRONMENT_PHOEBE}, + {MAP_BATTLE_SCENE_GLACIA, BATTLE_ENVIRONMENT_GLACIA}, + {MAP_BATTLE_SCENE_DRAKE, BATTLE_ENVIRONMENT_DRAKE}, + {MAP_BATTLE_SCENE_FRONTIER, BATTLE_ENVIRONMENT_FRONTIER} +}; diff --git a/src/data/battle_frontier/battle_pyramid_wild_requirements.h b/src/data/battle_frontier/battle_pyramid_wild_requirements.h index fd5695344ac8..6679905f58b5 100644 --- a/src/data/battle_frontier/battle_pyramid_wild_requirements.h +++ b/src/data/battle_frontier/battle_pyramid_wild_requirements.h @@ -5,9 +5,9 @@ struct BattlePyramidRequirement { const u16 *moves; /* use moves instead of effects so we don't need to find moves with said effect in our loop */ - u16 abilities[10]; + enum Ability abilities[10]; u8 nAbilities; - u8 type; + enum Type type; u8 nMoves; const u16 *evoItems; u8 nEvoItems; diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index dfca0c5232a6..24ed815aa236 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -20,6 +20,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = { .battleScript = BattleScript_EffectNonVolatileStatus, .battleTvScore = 0, // Handled within the battle TV functions + .encourageEncore = TRUE, }, [EFFECT_ABSORB] = @@ -34,6 +35,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, + [EFFECT_MISTY_EXPLOSION] = + { + .battleScript = BattleScript_EffectExplosion, + .battleTvScore = 0, // TODO: Assign points + }, + [EFFECT_DREAM_EATER] = { .battleScript = BattleScript_EffectDreamEater, @@ -43,7 +50,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_MIRROR_MOVE] = { - .battleScript = BattleScript_EffectMirrorMove, + .battleScript = BattleScript_EffectHit, .battleTvScore = 1, }, @@ -203,20 +210,26 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 7, }, + [EFFECT_SHEER_COLD] = + { + .battleScript = BattleScript_EffectOHKO, + .battleTvScore = 7, + }, + [EFFECT_FUSION_COMBO] = { .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_SUPER_FANG] = + [EFFECT_FIXED_PERCENT_DAMAGE] = { .battleScript = BattleScript_EffectHit, .battleTvScore = 5, .encourageEncore = TRUE, }, - [EFFECT_FIXED_DAMAGE_ARG] = + [EFFECT_FIXED_HP_DAMAGE] = { .battleScript = BattleScript_EffectHit, .battleTvScore = 1, @@ -386,7 +399,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_METRONOME] = { - .battleScript = BattleScript_EffectMetronome, + .battleScript = BattleScript_EffectHit, .battleTvScore = 1, }, @@ -490,7 +503,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SLEEP_TALK] = { - .battleScript = BattleScript_EffectSleepTalk, + .battleScript = BattleScript_EffectHit, .battleTvScore = 3, .encourageEncore = TRUE, }, @@ -565,6 +578,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, + [EFFECT_LUNAR_DANCE] = + { + .battleScript = BattleScript_EffectHealingWish, + .battleTvScore = 0, // TODO: Assign points + }, + [EFFECT_PROTECT] = { .battleScript = BattleScript_EffectProtect, @@ -807,14 +826,14 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_FIRST_TURN_ONLY] = { - .battleScript = BattleScript_EffectFirstTurnOnly, + .battleScript = BattleScript_EffectHit, .battleTvScore = 4, .encourageEncore = TRUE, }, [EFFECT_UPROAR] = { - .battleScript = BattleScript_EffectUproar, + .battleScript = BattleScript_EffectHit, .battleTvScore = 4, }, @@ -839,9 +858,9 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .encourageEncore = TRUE, }, - [EFFECT_WORRY_SEED] = + [EFFECT_OVERWRITE_ABILITY] = { - .battleScript = BattleScript_EffectWorrySeed, + .battleScript = BattleScript_EffectOverwriteAbility, .battleTvScore = 0, // TODO: Assign points .encourageEncore = TRUE, }, @@ -899,7 +918,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_NATURE_POWER] = { - .battleScript = BattleScript_EffectNaturePower, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -944,7 +963,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_ASSIST] = { - .battleScript = BattleScript_EffectAssist, + .battleScript = BattleScript_EffectHit, .battleTvScore = 2, }, @@ -992,6 +1011,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 2, }, + [EFFECT_STEAL_ITEM] = + { + .battleScript = BattleScript_EffectHit, + .battleTvScore = 3, + }, + [EFFECT_ENDEAVOR] = { .battleScript = BattleScript_EffectEndeavor, @@ -1374,13 +1399,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SUCKER_PUNCH] = { - .battleScript = BattleScript_EffectSuckerPunch, - .battleTvScore = 0, // TODO: Assign points - }, - - [EFFECT_SIMPLE_BEAM] = - { - .battleScript = BattleScript_EffectSimpleBeam, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -1468,7 +1487,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_ME_FIRST] = { - .battleScript = BattleScript_EffectMeFirst, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -1513,7 +1532,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_LAST_RESORT] = { - .battleScript = BattleScript_EffectLastResort, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -1564,7 +1583,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_FINAL_GAMBIT] = { - .battleScript = BattleScript_EffectFinalGambit, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -1583,7 +1602,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_COPYCAT] = { - .battleScript = BattleScript_EffectCopycat, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -1703,7 +1722,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_MAT_BLOCK] = { - .battleScript = BattleScript_EffectMatBlock, + .battleScript = BattleScript_EffectProtect, .battleTvScore = 0, // TODO: Assign points .encourageEncore = TRUE, }, @@ -1756,7 +1775,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_FAIL_IF_NOT_ARG_TYPE] = { - .battleScript = BattleScript_FailIfNotArgType, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -1786,12 +1805,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_RELIC_SONG] = - { - .battleScript = BattleScript_EffectRelicSong, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_BODY_PRESS] = { .battleScript = BattleScript_EffectHit, @@ -1869,7 +1882,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_AURA_WHEEL] = { - .battleScript = BattleScript_EffectAuraWheel, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -1960,12 +1973,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_MIND_BLOWN] = - { - .battleScript = BattleScript_EffectHit, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_CHLOROBLAST] = { .battleScript = BattleScript_EffectHit, @@ -1978,12 +1985,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_HIT_SET_REMOVE_TERRAIN] = - { - .battleScript = BattleScript_EffectHitSetRemoveTerrain, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_DARK_VOID] = { .battleScript = BattleScript_EffectDarkVoid, @@ -2127,7 +2128,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_UPPER_HAND] = { - .battleScript = BattleScript_EffectUpperHand, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points .encourageEncore = TRUE, }, @@ -2177,12 +2178,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_GUARDIAN_OF_ALOLA] = - { - .battleScript = BattleScript_DamageToQuarterTargetHP, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_SHELL_SIDE_ARM] = { .battleScript = BattleScript_EffectHit, @@ -2218,4 +2213,34 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, + + [EFFECT_LIFE_DEW] = + { + .battleScript = BattleScript_EffectLifeDew, + .battleTvScore = 0, // TODO: Assign points + }, + + [EFFECT_ICE_SPINNER] = + { + .battleScript = BattleScript_EffectHit, + .battleTvScore = 0, // TODO: Assign points + }, + + [EFFECT_STEEL_ROLLER] = + { + .battleScript = BattleScript_EffectHit, + .battleTvScore = 0, // TODO: Assign points + }, + + [EFFECT_STONE_AXE] = + { + .battleScript = BattleScript_EffectHit, + .battleTvScore = 0, // TODO: Assign points + }, + + [EFFECT_CEASELESS_EDGE] = + { + .battleScript = BattleScript_EffectHit, + .battleTvScore = 0, // TODO: Assign points + }, }; diff --git a/src/data/battle_partners.h b/src/data/battle_partners.h deleted file mode 100644 index 34e30ea083df..000000000000 --- a/src/data/battle_partners.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// DO NOT MODIFY THIS FILE! It is auto-generated from src/data/battle_partners.party -// -// If you want to modify this file set COMPETITIVE_PARTY_SYNTAX to FALSE -// in include/config/general.h and remove this notice. -// Use sed -i '/^#line/d' 'src/data/battle_partners.h' to remove #line markers. -// - -#line 1 "src/data/battle_partners.party" - -#line 1 - [DIFFICULTY_NORMAL][PARTNER_NONE] = - { -#line 3 - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, -#line 4 - .trainerPic = TRAINER_BACK_PIC_BRENDAN, - .encounterMusic_gender = -#line 6 - TRAINER_ENCOUNTER_MUSIC_MALE, - .partySize = 0, - .party = (const struct TrainerMon[]) - { - }, - }, -#line 8 - [DIFFICULTY_NORMAL][PARTNER_STEVEN] = - { -#line 9 - .trainerName = _("STEVEN"), -#line 10 - .trainerClass = TRAINER_CLASS_RIVAL, -#line 11 - .trainerPic = TRAINER_BACK_PIC_STEVEN, - .encounterMusic_gender = -#line 13 - TRAINER_ENCOUNTER_MUSIC_MALE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 15 - .species = SPECIES_METANG, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 19 - .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 6, 0), -#line 18 - .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 17 - .lvl = 42, -#line 16 - .nature = NATURE_BRAVE, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 20 - MOVE_LIGHT_SCREEN, - MOVE_PSYCHIC, - MOVE_REFLECT, - MOVE_METAL_CLAW, - }, - }, - { -#line 25 - .species = SPECIES_SKARMORY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 29 - .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 6, 252), -#line 28 - .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 27 - .lvl = 43, -#line 26 - .nature = NATURE_IMPISH, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 30 - MOVE_TOXIC, - MOVE_AERIAL_ACE, - MOVE_PROTECT, - MOVE_STEEL_WING, - }, - }, - { -#line 35 - .species = SPECIES_AGGRON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 39 - .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 6), -#line 38 - .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 37 - .lvl = 44, -#line 36 - .nature = NATURE_ADAMANT, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 40 - MOVE_THUNDER, - MOVE_PROTECT, - MOVE_SOLAR_BEAM, - MOVE_DRAGON_CLAW, - }, - }, - }, - }, diff --git a/src/data/battle_partners.party b/src/data/battle_partners.party index e1ecfe35faaf..8de1dc0f2b45 100644 --- a/src/data/battle_partners.party +++ b/src/data/battle_partners.party @@ -4,6 +4,7 @@ Class: Pkmn Trainer 1 Pic: Brendan Gender: Male Music: Male +Back Pic: Brendan === PARTNER_STEVEN === Name: STEVEN @@ -11,6 +12,8 @@ Class: Rival Pic: Steven Gender: Male Music: Male +Back Pic: Steven +AI: Basic Trainer Metang Brave Nature diff --git a/src/data/battle_pool_rules.h b/src/data/battle_pool_rules.h index b88db3c797cf..eefb101f5520 100644 --- a/src/data/battle_pool_rules.h +++ b/src/data/battle_pool_rules.h @@ -12,6 +12,8 @@ const struct PoolRules defaultPoolRules = .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, .itemClause = B_POOL_RULE_ITEM_CLAUSE, .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .megaStoneClause = B_POOL_RULE_MEGA_STONE_CLAUSE, + .zCrystalClause = B_POOL_RULE_Z_CRYSTAL_CLAUSE, }; const struct PoolRules gPoolRulesetsList[] = { @@ -20,6 +22,8 @@ const struct PoolRules gPoolRulesetsList[] = { .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, .itemClause = B_POOL_RULE_ITEM_CLAUSE, .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .megaStoneClause = B_POOL_RULE_MEGA_STONE_CLAUSE, + .zCrystalClause = B_POOL_RULE_Z_CRYSTAL_CLAUSE, .tagMaxMembers[POOL_TAG_LEAD] = 1, .tagMaxMembers[POOL_TAG_ACE] = 1, }, @@ -28,6 +32,8 @@ const struct PoolRules gPoolRulesetsList[] = { .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, .itemClause = B_POOL_RULE_ITEM_CLAUSE, .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .megaStoneClause = B_POOL_RULE_MEGA_STONE_CLAUSE, + .zCrystalClause = B_POOL_RULE_Z_CRYSTAL_CLAUSE, .tagMaxMembers[POOL_TAG_LEAD] = 2, .tagMaxMembers[POOL_TAG_ACE] = 2, }, @@ -36,6 +42,8 @@ const struct PoolRules gPoolRulesetsList[] = { .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, .itemClause = B_POOL_RULE_ITEM_CLAUSE, .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .megaStoneClause = B_POOL_RULE_MEGA_STONE_CLAUSE, + .zCrystalClause = B_POOL_RULE_Z_CRYSTAL_CLAUSE, .tagMaxMembers[POOL_TAG_LEAD] = 1, .tagMaxMembers[POOL_TAG_ACE] = 1, .tagMaxMembers[POOL_TAG_WEATHER_SETTER] = 1, @@ -48,6 +56,8 @@ const struct PoolRules gPoolRulesetsList[] = { .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, .itemClause = B_POOL_RULE_ITEM_CLAUSE, .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .megaStoneClause = B_POOL_RULE_MEGA_STONE_CLAUSE, + .zCrystalClause = B_POOL_RULE_Z_CRYSTAL_CLAUSE, .tagMaxMembers[POOL_TAG_LEAD] = 2, .tagMaxMembers[POOL_TAG_ACE] = 2, .tagMaxMembers[POOL_TAG_WEATHER_SETTER] = 1, @@ -60,6 +70,8 @@ const struct PoolRules gPoolRulesetsList[] = { .excludeForms = B_POOL_RULE_EXCLUDE_FORMS, .itemClause = B_POOL_RULE_ITEM_CLAUSE, .itemClauseExclusions = B_POOL_RULES_USE_ITEM_EXCLUSIONS, + .megaStoneClause = B_POOL_RULE_MEGA_STONE_CLAUSE, + .zCrystalClause = B_POOL_RULE_Z_CRYSTAL_CLAUSE, .tagMaxMembers[POOL_TAG_LEAD] = 2, .tagMaxMembers[POOL_TAG_ACE] = 2, .tagMaxMembers[POOL_TAG_SUPPORT] = 1, diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index ce88430bb6c2..39d6abbd5227 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -2,342 +2,422 @@ const struct ContestEffect gContestEffects[] = { [CONTEST_EFFECT_HIGHLY_APPEALING] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Quite the appealing move."), + #else + .description = COMPOUND_STRING("A highly appealing move."), + #endif .effectType = CONTEST_EFFECT_TYPE_APPEAL, .appeal = 40, .jam = 0, + .function = ContestEffect_HighlyAppealing, }, [CONTEST_EFFECT_USER_MORE_EASILY_STARTLED] = { + .description = COMPOUND_STRING("After this move, the user is\nmore easily startled."), .effectType = CONTEST_EFFECT_TYPE_APPEAL, .appeal = 60, .jam = 0, + .function = ContestEffect_UserMoreEasilyStartled, }, [CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES] = { + .description = COMPOUND_STRING("Makes a great appeal, but\nallows no more to the end."), .effectType = CONTEST_EFFECT_TYPE_APPEAL, .appeal = 80, .jam = 0, + .function = ContestEffect_GreatAppealButNoMoreMoves, }, [CONTEST_EFFECT_REPETITION_NOT_BORING] = { + .description = COMPOUND_STRING("Can be repeatedly used\nwithout boring the JUDGE."), .effectType = CONTEST_EFFECT_TYPE_APPEAL, .appeal = 30, .jam = 0, + .function = ContestEffect_RepetitionNotBoring, }, [CONTEST_EFFECT_AVOID_STARTLE_ONCE] = { + .description = COMPOUND_STRING("Can avoid being startled\nby others once."), .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE, .appeal = 20, .jam = 0, + .function = ContestEffect_AvoidStartleOnce, }, [CONTEST_EFFECT_AVOID_STARTLE] = { + .description = COMPOUND_STRING("Can avoid being startled\nby others."), .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE, .appeal = 10, .jam = 0, + .function = ContestEffect_AvoidStartle, }, [CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY] = { + .description = COMPOUND_STRING("Can avoid being startled\nby others a little."), .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE, .appeal = 30, .jam = 0, + .function = ContestEffect_AvoidStartleSlightly, }, [CONTEST_EFFECT_USER_LESS_EASILY_STARTLED] = { + .description = COMPOUND_STRING("After this move, the user is\nless likely to be startled."), .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE, .appeal = 30, .jam = 0, + .function = ContestEffect_UserLessEasilyStartled, }, [CONTEST_EFFECT_STARTLE_FRONT_MON] = { + .description = COMPOUND_STRING("Slightly startles the\nPOKΓ©MON in front."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON, .appeal = 30, .jam = 20, + .function = ContestEffect_StartleFrontMon, }, [CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS] = { + .description = COMPOUND_STRING("Slightly startles those\nthat have made appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 30, .jam = 10, + .function = ContestEffect_StartlePrevMons, }, [CONTEST_EFFECT_STARTLE_PREV_MON] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Startles the last PokΓ©mon\nto act before the user."), + #else + .description = COMPOUND_STRING("Startles the POKΓ©MON that\nappealed before the user."), + #endif .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON, .appeal = 20, .jam = 30, + .function = ContestEffect_StartleFrontMon, }, [CONTEST_EFFECT_STARTLE_PREV_MONS] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Startles all of the PokΓ©mon\nto act before the user."), + #else + .description = COMPOUND_STRING("Startles all POKΓ©MON that\nhave done their appeals."), + #endif .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 20, + .function = ContestEffect_StartlePrevMons, }, [CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON] = { + .description = COMPOUND_STRING("Badly startles the\nPOKΓ©MON in front."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON, .appeal = 10, .jam = 40, + .function = ContestEffect_StartleFrontMon, }, [CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS] = { + .description = COMPOUND_STRING("Badly startles those that\nhave made appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 10, .jam = 30, + .function = ContestEffect_StartlePrevMons, }, [CONTEST_EFFECT_STARTLE_PREV_MON_2] = { + .description = COMPOUND_STRING("Startles the POKΓ©MON that\nappealed before the user."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON, .appeal = 30, .jam = 20, + .function = ContestEffect_StartlePrevMon2, }, [CONTEST_EFFECT_STARTLE_PREV_MONS_2] = { + .description = COMPOUND_STRING("Startles all POKΓ©MON that\nhave done their appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 30, .jam = 10, + .function = ContestEffect_StartlePrevMons2, }, [CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Makes audience expect\nlittle of other contestants."), + #else + .description = COMPOUND_STRING("Shifts the JUDGE's\nattention from others."), + #endif .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 30, .jam = 0, + .function = ContestEffect_ShiftJudgeAttention, }, [CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION] = { + .description = COMPOUND_STRING("Startles the POKΓ©MON that\nhas the JUDGE's attention."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, + .function = ContestEffect_StartleMonWithJudgesAttention, }, [CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN] = { + .description = COMPOUND_STRING("Jams the others, and misses\none turn of appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 40, .jam = 40, + .function = ContestEffect_JamsOthersButMissOneTurn, }, [CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL] = { + .description = COMPOUND_STRING("Startles POKΓ©MON that\nmade a same-type appeal."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, + .function = ContestEffect_StartleMonsSameTypeAppeal, }, [CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL] = { + .description = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made COOL appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, + .function = ContestEffect_StartleMonsCoolAppeal, }, [CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL] = { + .description = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made BEAUTY appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, + .function = ContestEffect_StartleMonsBeautyAppeal, }, [CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL] = { + .description = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made CUTE appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, + .function = ContestEffect_StartleMonsCuteAppeal, }, [CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL] = { + .description = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made SMART appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, + .function = ContestEffect_StartleMonsSmartAppeal, }, [CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL] = { + .description = COMPOUND_STRING("Badly startles POKΓ©MON\nthat made TOUGH appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, + .function = ContestEffect_StartleMonsToughAppeal, }, [CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS] = { + .description = COMPOUND_STRING("Makes one POKΓ©MON after\nthe user nervous."), .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 20, .jam = 0, + .function = ContestEffect_MakeFollowingMonNervous, }, [CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Makes the remaining\nPokΓ©mon nervous."), + #else + .description = COMPOUND_STRING("Makes all POKΓ©MON after\nthe user nervous."), + #endif .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 20, .jam = 0, + .function = ContestEffect_MakeFollowingMonsNervous, }, [CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS] = { + .description = COMPOUND_STRING("Worsens the condition of\nthose that made appeals."), .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 30, .jam = 0, + .function = ContestEffect_WorsenConditionOfPrevMons, }, [CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION] = { + .description = COMPOUND_STRING("Badly startles POKΓ©MON in\ngood condition."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 30, .jam = 10, + .function = ContestEffect_BadlyStartlesMonsInGoodCondition, }, [CONTEST_EFFECT_BETTER_IF_FIRST] = { + .description = COMPOUND_STRING("The appeal works great if\nperformed first."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 20, .jam = 0, + .function = ContestEffect_BetterIfFirst, }, [CONTEST_EFFECT_BETTER_IF_LAST] = { + .description = COMPOUND_STRING("The appeal works great if\nperformed last."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 20, .jam = 0, + .function = ContestEffect_BetterIfLast, }, [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES] = { + .description = COMPOUND_STRING("Makes the appeal as good\nas those before it."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, + .function = ContestEffect_AppealAsGoodAsPrevOnes, }, [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE] = { + .description = COMPOUND_STRING("Makes the appeal as good\nas the one before it."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, + .function = ContestEffect_AppealAsGoodAsPrevOne, }, [CONTEST_EFFECT_BETTER_WHEN_LATER] = { + .description = COMPOUND_STRING("The appeal works better\nthe later it is performed."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, + .function = ContestEffect_BetterWhenLater, }, [CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Effectiveness varies\ndepending on when it is used."), + #else + .description = COMPOUND_STRING("The appeal's quality varies\ndepending on its timing."), + #endif .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, + .function = ContestEffect_QualityDependsOnTiming, }, [CONTEST_EFFECT_BETTER_IF_SAME_TYPE] = { + .description = COMPOUND_STRING("Works well if it's the same\ntype as the one before."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 20, .jam = 0, + .function = ContestEffect_BetterIfSameType, }, [CONTEST_EFFECT_BETTER_IF_DIFF_TYPE] = { + .description = COMPOUND_STRING("Works well if different in\ntype than the one before."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 20, .jam = 0, + .function = ContestEffect_BetterIfDiffType, }, [CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Affected by how well the\nprevious PokΓ©mon's move went."), + #else + .description = COMPOUND_STRING("Affected by how well the\nappeal in front goes."), + #endif .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 30, .jam = 0, + .function = ContestEffect_AffectedByPrevAppeal, }, [CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS] = { + .description = COMPOUND_STRING("Ups the user's condition.\nHelps prevent nervousness."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, + .function = ContestEffect_ImproveConditionPreventNervousness, }, [CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION] = { + .description = COMPOUND_STRING("The appeal works well if the\nuser's condition is good."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, + .function = ContestEffect_BetterWithGoodCondition, }, [CONTEST_EFFECT_NEXT_APPEAL_EARLIER] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Causes the user to move\nearlier on the next turn."), + #else + .description = COMPOUND_STRING("The next appeal can be\nmade earlier next turn."), + #endif .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER, .appeal = 30, .jam = 0, + .function = ContestEffect_NextAppealEarlier, }, [CONTEST_EFFECT_NEXT_APPEAL_LATER] = { + #if C_UPDATED_MOVE_EFFECTS >= GEN_6 + .description = COMPOUND_STRING("Causes the user to move\nlater on the next turn."), + #else + .description = COMPOUND_STRING("The next appeal can be\nmade later next turn."), + #endif .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER, .appeal = 30, .jam = 0, + .function = ContestEffect_NextAppealLater, }, [CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER] = { + .description = COMPOUND_STRING("Makes the next turn's order\nmore easily scrambled."), .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER, .appeal = 30, .jam = 0, + .function = ContestEffect_MakeScramblingTurnOrderEasier, }, [CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER] = { + .description = COMPOUND_STRING("Scrambles the order of\nappeals on the next turn."), .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER, .appeal = 30, .jam = 0, + .function = ContestEffect_ScrambleNextTurnOrder, }, [CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST] = { + .description = COMPOUND_STRING("An appeal that excites the\naudience in any CONTEST."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, - .appeal = 10, + .appeal = C_UPDATED_MOVE_EFFECTS >= GEN_6 ? 20 : 10, .jam = 0, + .function = ContestEffect_ExciteAudienceInAnyContest, }, [CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS] = { + .description = COMPOUND_STRING("Badly startles all POKΓ©MON\nthat made good appeals."), .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS, .appeal = 20, .jam = 10, + .function = ContestEffect_BadlyStartleMonsWithGoodAppeals, }, [CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED] = { + .description = COMPOUND_STRING("The appeal works best the\nmore the crowd is excited."), .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL, .appeal = 10, .jam = 0, + .function = ContestEffect_BetterWhenAudienceExcited, }, [CONTEST_EFFECT_DONT_EXCITE_AUDIENCE] = { + .description = COMPOUND_STRING("Temporarily stops the\ncrowd from growing excited."), .effectType = CONTEST_EFFECT_TYPE_WORSEN, .appeal = 30, .jam = 0, + .function = ContestEffect_DontExciteAudience, }, }; - -void (*const gContestEffectFuncs[])(void) = -{ - ContestEffect_HighlyAppealing, - ContestEffect_UserMoreEasilyStartled, - ContestEffect_GreatAppealButNoMoreMoves, - ContestEffect_RepetitionNotBoring, - ContestEffect_AvoidStartleOnce, - ContestEffect_AvoidStartle, - ContestEffect_AvoidStartleSlightly, - ContestEffect_UserLessEasilyStartled, - ContestEffect_StartleFrontMon, - ContestEffect_StartlePrevMons, - ContestEffect_StartleFrontMon, - ContestEffect_StartlePrevMons, - ContestEffect_StartleFrontMon, - ContestEffect_StartlePrevMons, - ContestEffect_StartlePrevMon2, - ContestEffect_StartlePrevMons2, - ContestEffect_ShiftJudgeAttention, - ContestEffect_StartleMonWithJudgesAttention, - ContestEffect_JamsOthersButMissOneTurn, - ContestEffect_StartleMonsSameTypeAppeal, - ContestEffect_StartleMonsCoolAppeal, - ContestEffect_StartleMonsBeautyAppeal, - ContestEffect_StartleMonsCuteAppeal, - ContestEffect_StartleMonsSmartAppeal, - ContestEffect_StartleMonsToughAppeal, - ContestEffect_MakeFollowingMonNervous, - ContestEffect_MakeFollowingMonsNervous, - ContestEffect_WorsenConditionOfPrevMons, - ContestEffect_BadlyStartlesMonsInGoodCondition, - ContestEffect_BetterIfFirst, - ContestEffect_BetterIfLast, - ContestEffect_AppealAsGoodAsPrevOnes, - ContestEffect_AppealAsGoodAsPrevOne, - ContestEffect_BetterWhenLater, - ContestEffect_QualityDependsOnTiming, - ContestEffect_BetterIfSameType, - ContestEffect_BetterIfDiffType, - ContestEffect_AffectedByPrevAppeal, - ContestEffect_ImproveConditionPreventNervousness, - ContestEffect_BetterWithGoodCondition, - ContestEffect_NextAppealEarlier, - ContestEffect_NextAppealLater, - ContestEffect_MakeScramblingTurnOrderEasier, - ContestEffect_ScrambleNextTurnOrder, - ContestEffect_ExciteAudienceInAnyContest, - ContestEffect_BadlyStartleMonsWithGoodAppeals, - ContestEffect_BetterWhenAudienceExcited, - ContestEffect_DontExciteAudience, -}; diff --git a/src/data/contest_text_tables.h b/src/data/contest_text_tables.h index 3560b2af04d6..6de163b1b53a 100644 --- a/src/data/contest_text_tables.h +++ b/src/data/contest_text_tables.h @@ -1,151 +1,73 @@ #include "global.h" // sAppealResultTexts -extern const u8 gText_BecameMoreConsciousOfOtherMons[]; -extern const u8 gText_MonCantMakeAnAppealAfterThis[]; -extern const u8 gText_SettledDownJustLittleBit[]; -extern const u8 gText_BecameObliviousToOtherMons[]; -extern const u8 gText_BecameLessAwareOfOtherMons[]; -extern const u8 gText_StoppedCaringAboutOtherMons[]; -extern const u8 gText_TriedToStartleOtherMons[]; -extern const u8 gText_TriedToDazzleOthers[]; -extern const u8 gText_JudgeLookedAwayFromMon[]; -extern const u8 gText_TriedToUnnerveNextMon[]; -extern const u8 gText_MonBecameNervous[]; -extern const u8 gText_AppealTriedToUnnerveWaitingMons[]; -extern const u8 gText_TauntedMonsDoingWell[]; -extern const u8 gText_MonRegainedItsForm[]; -extern const u8 gText_TriedToJamMonDoingWell[]; -extern const u8 gText_StandoutMonHustledEvenMore[]; -extern const u8 gText_LargelyUnnoticedMonWorkedHard[]; -extern const u8 gText_WorkedAsMuchAsMonBefore[]; -extern const u8 gText_WorkedAsMuchAsPrecedingMon[]; -extern const u8 gText_MonsAppealWasDud[]; -extern const u8 gText_MonsAppealDidNotGoWell[]; -extern const u8 gText_MonsAppealDidNotGoWell2[]; -extern const u8 gText_MonsAppealDidNotGoWell3[]; -extern const u8 gText_MonsAppealDidNotWorkVeryWell[]; -extern const u8 gText_MonsAppealWentSlightlyWell[]; -extern const u8 gText_MonsAppealWentSlightlyWell2[]; -extern const u8 gText_MonsAppealWentPrettyWell[]; -extern const u8 gText_MonsAppealWentPrettyWell2[]; -extern const u8 gText_MonsAppealWentVeryWell[]; -extern const u8 gText_MonsAppealWentExcellently[]; -extern const u8 gText_MonsAppealWentExcellently2[]; -extern const u8 gText_SameTypeAsOneBeforeGood[]; -extern const u8 gText_NotSameTypeAsOneBeforeGood[]; -extern const u8 gText_StoodOutMuchMoreThanMonBefore[]; -extern const u8 gText_DidntDoAsWellAsMonBefore[]; -extern const u8 gText_MonsConditionRoseAboveUsual[]; -extern const u8 gText_MonsHotStatusMadeGreatAppeal[]; -extern const u8 gText_MovedUpInLineForNextAppeal[]; -extern const u8 gText_MovedBackInLineForNextAppeal[]; -extern const u8 gText_ScrambledUpOrderForNextTurn[]; extern const u8 gText_JudgeLookedAtMonExpectantly[]; extern const u8 gText_AppealComboWentOverWell[]; extern const u8 gText_AppealComboWentOverVeryWell[]; extern const u8 gText_AppealComboWentOverExcellently[]; -extern const u8 gText_MonManagedToAvertGaze[]; -extern const u8 gText_MonManagedToAvoidSeeingIt[]; -extern const u8 gText_MonIsntFazedByThatSortOfThing[]; -extern const u8 gText_MonBecameALittleDistracted[]; -extern const u8 gText_TriedToStartleOtherPokemon[]; -extern const u8 gText_MonLookedDownOutOfDistraction[]; -extern const u8 gText_MonTurnedBackOutOfDistraction[]; -extern const u8 gText_MonCouldntHelpUtteringCry[]; -extern const u8 gText_MonCouldntHelpLeapingUp[]; -extern const u8 gText_MonTrippedOutOfDistraction[]; -extern const u8 gText_ButItMessedUp2[]; -extern const u8 gText_ButItFailedToMakeTargetNervous[]; -extern const u8 gText_ButItFailedToMakeAnyoneNervous[]; -extern const u8 gText_ButItWasIgnored[]; -extern const u8 gText_CouldntImproveItsCondition[]; -extern const u8 gText_BadConditionResultedInWeakAppeal[]; -extern const u8 gText_MonWasUnaffected[]; -extern const u8 gText_AttractedCrowdsAttention[]; - -// Misc, used directly -extern const u8 gText_MonAppealedWithMove[]; -extern const u8 gText_MonCantAppealNextTurn[]; -extern const u8 gText_RepeatedAppeal[]; -extern const u8 gText_MonsXDidntGoOverWell[]; -extern const u8 gText_MonsXWentOverGreat[]; -extern const u8 gText_MonsXGotTheCrowdGoing[]; -extern const u8 gText_CrowdContinuesToWatchMon[]; -extern const u8 gText_MonsMoveIsIgnored[]; -extern const u8 gText_MonWasTooNervousToMove[]; -extern const u8 gText_MonWasWatchingOthers[]; -extern const u8 gText_AllOutOfAppealTime[]; -extern const u8 gText_Contest_Shyness[]; -extern const u8 gText_Contest_Anxiety[]; -extern const u8 gText_Contest_Laziness[]; -extern const u8 gText_Contest_Hesitancy[]; -extern const u8 gText_Contest_Fear[]; -extern const u8 gText_AppealNumWhichMoveWillBePlayed[]; -extern const u8 gText_AppealNumButItCantParticipate[]; static const u8 *const sAppealResultTexts[] = { - [CONTEST_STRING_MORE_CONSCIOUS] = gText_BecameMoreConsciousOfOtherMons, - [CONTEST_STRING_NO_APPEAL] = gText_MonCantMakeAnAppealAfterThis, - [CONTEST_STRING_SETTLE_DOWN] = gText_SettledDownJustLittleBit, - [CONTEST_STRING_OBLIVIOUS_TO_OTHERS] = gText_BecameObliviousToOtherMons, - [CONTEST_STRING_LESS_AWARE] = gText_BecameLessAwareOfOtherMons, - [CONTEST_STRING_STOPPED_CARING] = gText_StoppedCaringAboutOtherMons, - [CONTEST_STRING_STARTLE_ATTEMPT] = gText_TriedToStartleOtherMons, - [CONTEST_STRING_DAZZLE_ATTEMPT] = gText_TriedToDazzleOthers, - [CONTEST_STRING_JUDGE_LOOK_AWAY2] = gText_JudgeLookedAwayFromMon, - [CONTEST_STRING_UNNERVE_ATTEMPT] = gText_TriedToUnnerveNextMon, - [CONTEST_STRING_NERVOUS] = gText_MonBecameNervous, - [CONTEST_STRING_UNNERVE_WAITING] = gText_AppealTriedToUnnerveWaitingMons, - [CONTEST_STRING_TAUNT_WELL] = gText_TauntedMonsDoingWell, - [CONTEST_STRING_REGAINED_FORM] = gText_MonRegainedItsForm, - [CONTEST_STRING_JAM_WELL] = gText_TriedToJamMonDoingWell, - [CONTEST_STRING_HUSTLE_STANDOUT] = gText_StandoutMonHustledEvenMore, - [CONTEST_STRING_WORK_HARD_UNNOTICED] = gText_LargelyUnnoticedMonWorkedHard, - [CONTEST_STRING_WORK_BEFORE] = gText_WorkedAsMuchAsMonBefore, - [CONTEST_STRING_APPEAL_NOT_WELL] = gText_MonsAppealDidNotGoWell, - [CONTEST_STRING_WORK_PRECEDING] = gText_WorkedAsMuchAsPrecedingMon, - [CONTEST_STRING_APPEAL_NOT_WELL2] = gText_MonsAppealDidNotGoWell2, - [CONTEST_STRING_APPEAL_NOT_SHOWN_WELL] = gText_MonsAppealDidNotGoWell3, - [CONTEST_STRING_APPEAL_SLIGHTLY_WELL] = gText_MonsAppealWentSlightlyWell, - [CONTEST_STRING_APPEAL_PRETTY_WELL] = gText_MonsAppealWentPrettyWell, - [CONTEST_STRING_APPEAL_EXCELLENTLY] = gText_MonsAppealWentExcellently, - [CONTEST_STRING_APPEAL_DUD] = gText_MonsAppealWasDud, - [CONTEST_STRING_APPEAL_NOT_VERY_WELL] = gText_MonsAppealDidNotWorkVeryWell, - [CONTEST_STRING_APPEAL_SLIGHTLY_WELL2] = gText_MonsAppealWentSlightlyWell2, - [CONTEST_STRING_APPEAL_PRETTY_WELL2] = gText_MonsAppealWentPrettyWell2, - [CONTEST_STRING_APPEAL_VERY_WELL] = gText_MonsAppealWentVeryWell, - [CONTEST_STRING_APPEAL_EXCELLENTLY2] = gText_MonsAppealWentExcellently2, - [CONTEST_STRING_SAME_TYPE_GOOD] = gText_SameTypeAsOneBeforeGood, - [CONTEST_STRING_DIFF_TYPE_GOOD] = gText_NotSameTypeAsOneBeforeGood, - [CONTEST_STRING_STOOD_OUT_AS_MUCH] = gText_StoodOutMuchMoreThanMonBefore, - [CONTEST_STRING_NOT_AS_WELL] = gText_DidntDoAsWellAsMonBefore, - [CONTEST_STRING_CONDITION_ROSE] = gText_MonsConditionRoseAboveUsual, - [CONTEST_STRING_HOT_STATUS] = gText_MonsHotStatusMadeGreatAppeal, - [CONTEST_STRING_MOVE_UP_LINE] = gText_MovedUpInLineForNextAppeal, - [CONTEST_STRING_MOVE_BACK_LINE] = gText_MovedBackInLineForNextAppeal, - [CONTEST_STRING_SCRAMBLE_ORDER] = gText_ScrambledUpOrderForNextTurn, + [CONTEST_STRING_MORE_CONSCIOUS] = COMPOUND_STRING("It became more conscious\nof the other POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_NO_APPEAL] = COMPOUND_STRING("{STR_VAR_1} can't make an\nappeal after this.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_SETTLE_DOWN] = COMPOUND_STRING("It settled down just a\nlittle bit.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_OBLIVIOUS_TO_OTHERS] = COMPOUND_STRING("It became oblivious to\nthe other POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_LESS_AWARE] = COMPOUND_STRING("It became less aware of\nthe other POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_STOPPED_CARING] = COMPOUND_STRING("It stopped caring about\nother POKΓ©MON much.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_STARTLE_ATTEMPT] = COMPOUND_STRING("It tried to startle the\nother POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_DAZZLE_ATTEMPT] = COMPOUND_STRING("It tried to dazzle the\nothers.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_JUDGE_LOOK_AWAY2] = COMPOUND_STRING("The JUDGE looked away\nfrom {STR_VAR_1}.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_UNNERVE_ATTEMPT] = COMPOUND_STRING("It tried to unnerve the\nnext POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_NERVOUS] = COMPOUND_STRING("{STR_VAR_1} became\nnervous.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_UNNERVE_WAITING] = COMPOUND_STRING("The appeal tried to\nunnerve waiting POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_TAUNT_WELL] = COMPOUND_STRING("It taunted POKΓ©MON\ndoing well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_REGAINED_FORM] = COMPOUND_STRING("{STR_VAR_1} regained its\nform.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_JAM_WELL] = COMPOUND_STRING("It tried to jam POKΓ©MON\ndoing well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_HUSTLE_STANDOUT] = COMPOUND_STRING("The standout {STR_VAR_1}\nhustled even more.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_WORK_HARD_UNNOTICED] = COMPOUND_STRING("The largely unnoticed\n{STR_VAR_1} worked hard.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_WORK_BEFORE] = COMPOUND_STRING("It worked as much as\nPOKΓ©MON before it.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_NOT_WELL] = COMPOUND_STRING("{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_WORK_PRECEDING] = COMPOUND_STRING("It worked as much as the\npreceding POKΓ©MON.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_NOT_WELL2] = COMPOUND_STRING("{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_NOT_SHOWN_WELL] = COMPOUND_STRING("{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_SLIGHTLY_WELL] = COMPOUND_STRING("{STR_VAR_1}'s appeal\nwent slightly well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_PRETTY_WELL] = COMPOUND_STRING("{STR_VAR_1}'s appeal\nwent pretty well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_EXCELLENTLY] = COMPOUND_STRING("{STR_VAR_1}'s appeal\nwent excellently.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_DUD] = COMPOUND_STRING("{STR_VAR_1}'s appeal was\na dud.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_NOT_VERY_WELL] = COMPOUND_STRING("{STR_VAR_1}'s appeal did\nnot work very well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_SLIGHTLY_WELL2] = COMPOUND_STRING("{STR_VAR_1}'s appeal\nwent slightly well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_PRETTY_WELL2] = COMPOUND_STRING("{STR_VAR_1}'s appeal\nwent pretty well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_VERY_WELL] = COMPOUND_STRING("{STR_VAR_1}'s appeal\nwent very well.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_APPEAL_EXCELLENTLY2] = COMPOUND_STRING("{STR_VAR_1}'s appeal\nwent excellently.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_SAME_TYPE_GOOD] = COMPOUND_STRING("It's the same type as the\nPOKΓ©MON before--good!{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_DIFF_TYPE_GOOD] = COMPOUND_STRING("It's not the same type as\nthe one before--good!{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_STOOD_OUT_AS_MUCH] = COMPOUND_STRING("It stood out much more\nthan the POKΓ©MON before.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_NOT_AS_WELL] = COMPOUND_STRING("It didn't do as well as the\nPOKΓ©MON before.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_CONDITION_ROSE] = COMPOUND_STRING("{STR_VAR_1}'s condition\nrose above usual.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_HOT_STATUS] = COMPOUND_STRING("{STR_VAR_1}'s hot status\nmade it a great appeal!{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_MOVE_UP_LINE] = COMPOUND_STRING("It moved up in line for\nthe next appeal.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_MOVE_BACK_LINE] = COMPOUND_STRING("It moved back in line once\nfor the next appeal.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), + [CONTEST_STRING_SCRAMBLE_ORDER] = COMPOUND_STRING("It scrambled up the\norder for the next turn.{PAUSE 15}{PAUSE 15}{PAUSE 15}{PAUSE 15}"), [CONTEST_STRING_JUDGE_EXPECTANTLY2] = gText_JudgeLookedAtMonExpectantly, [CONTEST_STRING_WENT_OVER_WELL] = gText_AppealComboWentOverWell, [CONTEST_STRING_WENT_OVER_VERY_WELL] = gText_AppealComboWentOverVeryWell, [CONTEST_STRING_APPEAL_COMBO_EXCELLENTLY] = gText_AppealComboWentOverExcellently, - [CONTEST_STRING_AVERT_GAZE] = gText_MonManagedToAvertGaze, - [CONTEST_STRING_AVOID_SEEING] = gText_MonManagedToAvoidSeeingIt, - [CONTEST_STRING_NOT_FAZED] = gText_MonIsntFazedByThatSortOfThing, - [CONTEST_STRING_LITTLE_DISTRACTED] = gText_MonBecameALittleDistracted, - [CONTEST_STRING_ATTEMPT_STARTLE] = gText_TriedToStartleOtherPokemon, - [CONTEST_STRING_LOOKED_DOWN] = gText_MonLookedDownOutOfDistraction, - [CONTEST_STRING_TURNED_BACK] = gText_MonTurnedBackOutOfDistraction, - [CONTEST_STRING_UTTER_CRY] = gText_MonCouldntHelpUtteringCry, - [CONTEST_STRING_LEAPT_UP] = gText_MonCouldntHelpLeapingUp, - [CONTEST_STRING_TRIPPED_OVER] = gText_MonTrippedOutOfDistraction, - [CONTEST_STRING_MESSED_UP2] = gText_ButItMessedUp2, - [CONTEST_STRING_FAILED_TARGET_NERVOUS] = gText_ButItFailedToMakeTargetNervous, - [CONTEST_STRING_FAILED_ANYONE_NERVOUS] = gText_ButItFailedToMakeAnyoneNervous, - [CONTEST_STRING_IGNORED] = gText_ButItWasIgnored, - [CONTEST_STRING_NO_CONDITION_IMPROVE] = gText_CouldntImproveItsCondition, - [CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL] = gText_BadConditionResultedInWeakAppeal, - [CONTEST_STRING_UNAFFECTED] = gText_MonWasUnaffected, - [CONTEST_STRING_ATTRACTED_ATTENTION] = gText_AttractedCrowdsAttention + [CONTEST_STRING_AVERT_GAZE] = COMPOUND_STRING("{STR_VAR_1} managed to\navert its gaze.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_AVOID_SEEING] = COMPOUND_STRING("{STR_VAR_1} managed to\navoid seeing it.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_NOT_FAZED] = COMPOUND_STRING("{STR_VAR_1} isn't fazed\nby that sort of thing.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_LITTLE_DISTRACTED] = COMPOUND_STRING("{STR_VAR_1} became a\nlittle distracted.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_ATTEMPT_STARTLE] = COMPOUND_STRING("It tried to startle the\nother POKΓ©MON.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_LOOKED_DOWN] = COMPOUND_STRING("{STR_VAR_1} looked down\nout of distraction.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_TURNED_BACK] = COMPOUND_STRING("{STR_VAR_1} turned back\nout of distraction.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_UTTER_CRY] = COMPOUND_STRING("{STR_VAR_1} couldn't help\nuttering a cry.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_LEAPT_UP] = COMPOUND_STRING("{STR_VAR_1} couldn't help\nleaping up.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_TRIPPED_OVER] = COMPOUND_STRING("{STR_VAR_1} tripped over\nout of distraction.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_MESSED_UP2] = COMPOUND_STRING("But it messed up.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_FAILED_TARGET_NERVOUS] = COMPOUND_STRING("But it failed to make\nthe target nervous.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_FAILED_ANYONE_NERVOUS] = COMPOUND_STRING("But it failed to make\nanyone nervous.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_IGNORED] = COMPOUND_STRING("But it was ignored…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_NO_CONDITION_IMPROVE] = COMPOUND_STRING("But it couldn't improve\nits condition…{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL] = COMPOUND_STRING("Its bad condition\nresulted in a weak appeal.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_UNAFFECTED] = COMPOUND_STRING("{STR_VAR_1} was\nunaffected.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}"), + [CONTEST_STRING_ATTRACTED_ATTENTION] = COMPOUND_STRING("It attracted the crowd's\nattention.{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}{PAUSE 0x0F}") }; diff --git a/src/data/debug_trainers.party b/src/data/debug_trainers.party new file mode 100644 index 000000000000..4a57d2c35ec4 --- /dev/null +++ b/src/data/debug_trainers.party @@ -0,0 +1,68 @@ +/* + +Parties for the debug menu. + +The trainer description for DEBUG_TRAINER_PLAYER is not used, +its party is given to the player whenever the Set Party action is selected, +or the Start Debug Battle action is selected. + +The debug menu will start a battle against DEBUG_TRAINER_AI when the +Start Debug Battle action is selected. + +*/ + +=== DEBUG_TRAINER_PLAYER === +Name: Player +Class: Pkmn Trainer 1 +Pic: Brendan +Gender: Male +Music: Male + +Buffie (Wobbuffet) +Brave Nature +Level: 100 +IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe +EVs: 252 Atk / 252 Def / 6 SpA +- Earthquake +- Flamethrower +- Celebrate +- Celebrate + +=== DEBUG_TRAINER_AI === +Name: Debugger +AI: Basic Trainer +Class: Rival +Battle Type: Singles +Pic: Steven +Gender: Male +Music: Male + +Metang +Brave Nature +Level: 42 +IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe +EVs: 252 Atk / 252 Def / 6 SpA +- Light Screen +- Psychic +- Reflect +- Metal Claw + +Skarmory +Impish Nature +Level: 43 +IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe +EVs: 252 HP / 6 SpA / 252 SpD +- Toxic +- Aerial Ace +- Protect +- Steel Wing + +Aggron +Adamant Nature +Level: 44 +IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe +EVs: 252 Atk / 252 SpA / 6 SpD +- Thunder +- Protect +- Solar Beam +- Dragon Claw diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h index 7173ffbe584e..369b5821a9b3 100755 --- a/src/data/field_effects/field_effect_object_template_pointers.h +++ b/src/data/field_effects/field_effect_object_template_pointers.h @@ -40,6 +40,10 @@ extern const struct SpriteTemplate gFieldEffectObjectTemplate_SlitherTracks; extern const struct SpriteTemplate gFieldEffectObjectTemplate_BugTracks; extern const struct SpriteTemplate gFieldEffectObjectTemplate_SpotTracks; extern const struct SpriteTemplate gFieldEffectObjectTemplate_CaveDust; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_RockClimbBlob; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_RockClimbDust; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_ORASDowsingBrendan; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_ORASDowsingMay; const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall, @@ -83,4 +87,8 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_TRACKS_SPOT] = &gFieldEffectObjectTemplate_SpotTracks, [FLDEFFOBJ_TRACKS_BUG] = &gFieldEffectObjectTemplate_BugTracks, [FLDEFFOBJ_CAVE_DUST] = &gFieldEffectObjectTemplate_CaveDust, + [FLDEFFOBJ_ROCK_CLIMB_BLOB] = &gFieldEffectObjectTemplate_RockClimbBlob, + [FLDEFFOBJ_ROCK_CLIMB_DUST] = &gFieldEffectObjectTemplate_RockClimbDust, + [FLDEFFOBJ_ORAS_DOWSE_BRENDAN] = &gFieldEffectObjectTemplate_ORASDowsingBrendan, + [FLDEFFOBJ_ORAS_DOWSE_MAY] = &gFieldEffectObjectTemplate_ORASDowsingMay, }; diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index 5638ea46e2da..8b37f37b61d8 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -1386,7 +1386,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = { static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPal_Npc3, FLDEFF_PAL_TAG_UNKNOWN}; // cave dust -static const struct SpriteFrameImage sPicTable_CaveDust[] = +static const struct SpriteFrameImage sPicTable_CaveDust[] = { overworld_frame(gFieldEffectObjectPic_CaveDust, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_CaveDust, 2, 2, 1), @@ -1404,3 +1404,47 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_CaveDust = { }; const struct SpritePalette gSpritePalette_CaveDust = {gFieldEffectObjectPalette_CaveDust, FLDEFF_PAL_TAG_CAVE_DUST}; +static const struct SpriteFrameImage sPicTable_RockClimbBlob[] = { + overworld_frame(gFieldEffectObjectPic_RockClimbBlob, 4, 4, 1), + overworld_frame(gFieldEffectObjectPic_RockClimbBlob, 4, 4, 0), + overworld_frame(gFieldEffectObjectPic_RockClimbBlob, 4, 4, 2), +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_RockClimbBlob = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_32x32, + .anims = sAnimTable_SurfBlob, + .images = sPicTable_RockClimbBlob, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSurfBlobFieldEffect, +}; + + +static const union AnimCmd sAnim_RockClimbDust[] = +{ + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(1, 12), + ANIMCMD_FRAME(2, 12), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimTable_RockClimbDust[] = +{ + sAnim_RockClimbDust, +}; +static const struct SpriteFrameImage sPicTable_RockClimbDust[] = { + overworld_frame(gFieldEffectObjectPic_RockClimbDust, 4, 4, 0), + overworld_frame(gFieldEffectObjectPic_RockClimbDust, 4, 4, 1), + overworld_frame(gFieldEffectObjectPic_RockClimbDust, 4, 4, 2), +}; +const struct SpriteTemplate gFieldEffectObjectTemplate_RockClimbDust = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_DUST_CLOUD, + .oam = &gObjectEventBaseOam_32x32, + .anims = sAnimTable_RockClimbDust, + .images = sPicTable_RockClimbDust, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateJumpImpactEffect, +}; + +const struct SpritePalette gSpritePalette_BigDust = {gFieldEffectPal_DustCloud, FLDEFF_PAL_TAG_DUST_CLOUD}; diff --git a/src/data/graphics/battle_environment.h b/src/data/graphics/battle_environment.h index 29339011f56c..4d271ea82d24 100644 --- a/src/data/graphics/battle_environment.h +++ b/src/data/graphics/battle_environment.h @@ -1,46 +1,8 @@ -const u32 gBattleEnvironmentTiles_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_TallGrass[] = INCBIN_U16("graphics/battle_environment/tall_grass/palette.gbapal"); -const u32 gBattleEnvironmentTilemap_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/map.bin.lz"); +const u32 gBattleEnvironmentTiles_Stadium[] = INCBIN_U32("graphics/battle_environment/stadium/tiles.4bpp.smol"); +const u32 gBattleEnvironmentTilemap_Stadium[] = INCBIN_U32("graphics/battle_environment/stadium/map.bin.smolTM"); -const u32 gBattleEnvironmentTiles_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_LongGrass[] = INCBIN_U16("graphics/battle_environment/long_grass/palette.gbapal"); -const u32 gBattleEnvironmentTilemap_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/map.bin.lz"); - -const u32 gBattleEnvironmentTiles_Sand[] = INCBIN_U32("graphics/battle_environment/sand/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_Sand[] = INCBIN_U16("graphics/battle_environment/sand/palette.gbapal"); -const u32 gBattleEnvironmentTilemap_Sand[] = INCBIN_U32("graphics/battle_environment/sand/map.bin.lz"); - -const u32 gBattleEnvironmentTiles_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_Underwater[] = INCBIN_U16("graphics/battle_environment/underwater/palette.gbapal"); -const u32 gBattleEnvironmentTilemap_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/map.bin.lz"); - -const u32 gBattleEnvironmentTiles_Water[] = INCBIN_U32("graphics/battle_environment/water/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_Water[] = INCBIN_U16("graphics/battle_environment/water/palette.gbapal"); -const u32 gBattleEnvironmentTilemap_Water[] = INCBIN_U32("graphics/battle_environment/water/map.bin.lz"); - -const u32 gBattleEnvironmentTiles_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_PondWater[] = INCBIN_U16("graphics/battle_environment/pond_water/palette.gbapal"); -const u32 gBattleEnvironmentTilemap_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/map.bin.lz"); - -const u32 gBattleEnvironmentTiles_Rock[] = INCBIN_U32("graphics/battle_environment/rock/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_Rock[] = INCBIN_U16("graphics/battle_environment/rock/palette.gbapal"); -const u32 gBattleEnvironmentTilemap_Rock[] = INCBIN_U32("graphics/battle_environment/rock/map.bin.lz"); - -const u32 gBattleEnvironmentTiles_Cave[] = INCBIN_U32("graphics/battle_environment/cave/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_Cave[] = INCBIN_U16("graphics/battle_environment/cave/palette.gbapal"); -const u32 gBattleEnvironmentTilemap_Cave[] = INCBIN_U32("graphics/battle_environment/cave/map.bin.lz"); - -const u16 gBattleEnvironmentPalette_Plain[] = INCBIN_U16("graphics/battle_environment/plain/palette.gbapal"); - -const u32 gBattleEnvironmentTiles_Building[] = INCBIN_U32("graphics/battle_environment/building/tiles.4bpp.lz"); -const u16 gBattleEnvironmentPalette_Frontier[] = INCBIN_U16("graphics/battle_environment/stadium/battle_frontier.gbapal"); // this is also used for link battles -const u32 gBattleEnvironmentTilemap_Building[] = INCBIN_U32("graphics/battle_environment/building/map.bin.lz"); - -const u32 gBattleEnvironmentTiles_Stadium[] = INCBIN_U32("graphics/battle_environment/stadium/tiles.4bpp.lz"); -const u32 gBattleEnvironmentTilemap_Stadium[] = INCBIN_U32("graphics/battle_environment/stadium/map.bin.lz"); - -const u32 gBattleEnvironmentTiles_Rayquaza[] = INCBIN_U32("graphics/battle_environment/sky/tiles.4bpp.lz"); -const u32 gBattleEnvironmentTilemap_Rayquaza[] = INCBIN_U32("graphics/battle_environment/sky/map.bin.lz"); +const u32 gBattleEnvironmentTiles_Rayquaza[] = INCBIN_U32("graphics/battle_environment/sky/tiles.4bpp.smol"); +const u32 gBattleEnvironmentTilemap_Rayquaza[] = INCBIN_U32("graphics/battle_environment/sky/map.bin.smolTM"); const u16 gBattleEnvironmentPalette_Building[] = INCBIN_U16("graphics/battle_environment/building/palette.gbapal"); @@ -57,32 +19,32 @@ const u16 gBattleEnvironmentPalette_StadiumDrake[] = INCBIN_U16("graphics/battle const u16 gBattleEnvironmentPalette_StadiumWallace[] = INCBIN_U16("graphics/battle_environment/stadium/palette7.gbapal"); const u16 gBattleEnvironmentPalette_Rayquaza[] = INCBIN_U16("graphics/battle_environment/sky/palette.gbapal"); -const u32 gBattleEnvironmentAnimTiles_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_TallGrass[] = INCBIN_U32("graphics/battle_environment/tall_grass/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_LongGrass[] = INCBIN_U32("graphics/battle_environment/long_grass/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_Sand[] = INCBIN_U32("graphics/battle_environment/sand/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_Sand[] = INCBIN_U32("graphics/battle_environment/sand/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_Sand[] = INCBIN_U32("graphics/battle_environment/sand/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_Sand[] = INCBIN_U32("graphics/battle_environment/sand/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_Underwater[] = INCBIN_U32("graphics/battle_environment/underwater/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_Water[] = INCBIN_U32("graphics/battle_environment/water/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_Water[] = INCBIN_U32("graphics/battle_environment/water/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_Water[] = INCBIN_U32("graphics/battle_environment/water/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_Water[] = INCBIN_U32("graphics/battle_environment/water/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_PondWater[] = INCBIN_U32("graphics/battle_environment/pond_water/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_Rock[] = INCBIN_U32("graphics/battle_environment/rock/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_Rock[] = INCBIN_U32("graphics/battle_environment/rock/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_Rock[] = INCBIN_U32("graphics/battle_environment/rock/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_Rock[] = INCBIN_U32("graphics/battle_environment/rock/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_Cave[] = INCBIN_U32("graphics/battle_environment/cave/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_Cave[] = INCBIN_U32("graphics/battle_environment/cave/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_Cave[] = INCBIN_U32("graphics/battle_environment/cave/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_Cave[] = INCBIN_U32("graphics/battle_environment/cave/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_Building[] = INCBIN_U32("graphics/battle_environment/building/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_Building[] = INCBIN_U32("graphics/battle_environment/building/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_Building[] = INCBIN_U32("graphics/battle_environment/building/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_Building[] = INCBIN_U32("graphics/battle_environment/building/anim_map.bin.smolTM"); -const u32 gBattleEnvironmentAnimTiles_Rayquaza[] = INCBIN_U32("graphics/battle_environment/sky/anim_tiles.4bpp.lz"); -const u32 gBattleEnvironmentAnimTilemap_Rayquaza[] = INCBIN_U32("graphics/battle_environment/sky/anim_map.bin.lz"); +const u32 gBattleEnvironmentAnimTiles_Rayquaza[] = INCBIN_U32("graphics/battle_environment/sky/anim_tiles.4bpp.smol"); +const u32 gBattleEnvironmentAnimTilemap_Rayquaza[] = INCBIN_U32("graphics/battle_environment/sky/anim_map.bin.smolTM"); diff --git a/src/data/graphics/berries.h b/src/data/graphics/berries.h index 3001337dfa35..d76a524ae1cb 100644 --- a/src/data/graphics/berries.h +++ b/src/data/graphics/berries.h @@ -1,78 +1,78 @@ -const u32 gBerryCheck_Gfx[] = INCBIN_U32("graphics/bag/check_berry.4bpp.lz"); +const u32 gBerryCheck_Gfx[] = INCBIN_U32("graphics/bag/check_berry.4bpp.smol"); const u16 gBerryCheck_Pal[] = INCBIN_U16("graphics/bag/check_berry.gbapal"); -const u32 gBerryTag_Gfx[] = INCBIN_U32("graphics/bag/berry_tag.bin.lz"); -const u32 gBerryTag_Tilemap[] = INCBIN_U32("graphics/bag/berry_tag_title.bin.lz"); +const u32 gBerryTag_Gfx[] = INCBIN_U32("graphics/bag/berry_tag.bin.smolTM"); +const u32 gBerryTag_Tilemap[] = INCBIN_U32("graphics/bag/berry_tag_title.bin.smolTM"); -const u32 gBerryCheckCircle_Gfx[] = INCBIN_U32("graphics/bag/check_berry_circle.4bpp.lz"); +const u32 gBerryCheckCircle_Gfx[] = INCBIN_U32("graphics/bag/check_berry_circle.4bpp.smol"); -const u32 gBerryPic_Cheri[] = INCBIN_U32("graphics/berries/cheri.4bpp.lz"); -const u32 gBerryPic_Chesto[] = INCBIN_U32("graphics/berries/chesto.4bpp.lz"); -const u32 gBerryPic_Pecha[] = INCBIN_U32("graphics/berries/pecha.4bpp.lz"); -const u32 gBerryPic_Rawst[] = INCBIN_U32("graphics/berries/rawst.4bpp.lz"); -const u32 gBerryPic_Aspear[] = INCBIN_U32("graphics/berries/aspear.4bpp.lz"); -const u32 gBerryPic_Leppa[] = INCBIN_U32("graphics/berries/leppa.4bpp.lz"); -const u32 gBerryPic_Oran[] = INCBIN_U32("graphics/berries/oran.4bpp.lz"); -const u32 gBerryPic_Persim[] = INCBIN_U32("graphics/berries/persim.4bpp.lz"); -const u32 gBerryPic_Lum[] = INCBIN_U32("graphics/berries/lum.4bpp.lz"); -const u32 gBerryPic_Sitrus[] = INCBIN_U32("graphics/berries/sitrus.4bpp.lz"); -const u32 gBerryPic_Figy[] = INCBIN_U32("graphics/berries/figy.4bpp.lz"); -const u32 gBerryPic_Wiki[] = INCBIN_U32("graphics/berries/wiki.4bpp.lz"); -const u32 gBerryPic_Mago[] = INCBIN_U32("graphics/berries/mago.4bpp.lz"); -const u32 gBerryPic_Aguav[] = INCBIN_U32("graphics/berries/aguav.4bpp.lz"); -const u32 gBerryPic_Iapapa[] = INCBIN_U32("graphics/berries/iapapa.4bpp.lz"); -const u32 gBerryPic_Razz[] = INCBIN_U32("graphics/berries/razz.4bpp.lz"); -const u32 gBerryPic_Bluk[] = INCBIN_U32("graphics/berries/bluk.4bpp.lz"); -const u32 gBerryPic_Nanab[] = INCBIN_U32("graphics/berries/nanab.4bpp.lz"); -const u32 gBerryPic_Wepear[] = INCBIN_U32("graphics/berries/wepear.4bpp.lz"); -const u32 gBerryPic_Pinap[] = INCBIN_U32("graphics/berries/pinap.4bpp.lz"); -const u32 gBerryPic_Pomeg[] = INCBIN_U32("graphics/berries/pomeg.4bpp.lz"); -const u32 gBerryPic_Kelpsy[] = INCBIN_U32("graphics/berries/kelpsy.4bpp.lz"); -const u32 gBerryPic_Qualot[] = INCBIN_U32("graphics/berries/qualot.4bpp.lz"); -const u32 gBerryPic_Hondew[] = INCBIN_U32("graphics/berries/hondew.4bpp.lz"); -const u32 gBerryPic_Grepa[] = INCBIN_U32("graphics/berries/grepa.4bpp.lz"); -const u32 gBerryPic_Tamato[] = INCBIN_U32("graphics/berries/tamato.4bpp.lz"); -const u32 gBerryPic_Cornn[] = INCBIN_U32("graphics/berries/cornn.4bpp.lz"); -const u32 gBerryPic_Magost[] = INCBIN_U32("graphics/berries/magost.4bpp.lz"); -const u32 gBerryPic_Rabuta[] = INCBIN_U32("graphics/berries/rabuta.4bpp.lz"); -const u32 gBerryPic_Nomel[] = INCBIN_U32("graphics/berries/nomel.4bpp.lz"); -const u32 gBerryPic_Spelon[] = INCBIN_U32("graphics/berries/spelon.4bpp.lz"); -const u32 gBerryPic_Pamtre[] = INCBIN_U32("graphics/berries/pamtre.4bpp.lz"); -const u32 gBerryPic_Watmel[] = INCBIN_U32("graphics/berries/watmel.4bpp.lz"); -const u32 gBerryPic_Durin[] = INCBIN_U32("graphics/berries/durin.4bpp.lz"); -const u32 gBerryPic_Belue[] = INCBIN_U32("graphics/berries/belue.4bpp.lz"); -const u32 gBerryPic_Chilan[] = INCBIN_U32("graphics/berries/chilan.4bpp.lz"); -const u32 gBerryPic_Occa[] = INCBIN_U32("graphics/berries/occa.4bpp.lz"); -const u32 gBerryPic_Passho[] = INCBIN_U32("graphics/berries/passho.4bpp.lz"); -const u32 gBerryPic_Wacan[] = INCBIN_U32("graphics/berries/wacan.4bpp.lz"); -const u32 gBerryPic_Rindo[] = INCBIN_U32("graphics/berries/rindo.4bpp.lz"); -const u32 gBerryPic_Yache[] = INCBIN_U32("graphics/berries/yache.4bpp.lz"); -const u32 gBerryPic_Chople[] = INCBIN_U32("graphics/berries/chople.4bpp.lz"); -const u32 gBerryPic_Kebia[] = INCBIN_U32("graphics/berries/kebia.4bpp.lz"); -const u32 gBerryPic_Shuca[] = INCBIN_U32("graphics/berries/shuca.4bpp.lz"); -const u32 gBerryPic_Coba[] = INCBIN_U32("graphics/berries/coba.4bpp.lz"); -const u32 gBerryPic_Payapa[] = INCBIN_U32("graphics/berries/payapa.4bpp.lz"); -const u32 gBerryPic_Tanga[] = INCBIN_U32("graphics/berries/tanga.4bpp.lz"); -const u32 gBerryPic_Charti[] = INCBIN_U32("graphics/berries/charti.4bpp.lz"); -const u32 gBerryPic_Kasib[] = INCBIN_U32("graphics/berries/kasib.4bpp.lz"); -const u32 gBerryPic_Haban[] = INCBIN_U32("graphics/berries/haban.4bpp.lz"); -const u32 gBerryPic_Colbur[] = INCBIN_U32("graphics/berries/colbur.4bpp.lz"); -const u32 gBerryPic_Babiri[] = INCBIN_U32("graphics/berries/babiri.4bpp.lz"); -const u32 gBerryPic_Roseli[] = INCBIN_U32("graphics/berries/roseli.4bpp.lz"); -const u32 gBerryPic_Liechi[] = INCBIN_U32("graphics/berries/liechi.4bpp.lz"); -const u32 gBerryPic_Ganlon[] = INCBIN_U32("graphics/berries/ganlon.4bpp.lz"); -const u32 gBerryPic_Salac[] = INCBIN_U32("graphics/berries/salac.4bpp.lz"); -const u32 gBerryPic_Petaya[] = INCBIN_U32("graphics/berries/petaya.4bpp.lz"); -const u32 gBerryPic_Apicot[] = INCBIN_U32("graphics/berries/apicot.4bpp.lz"); -const u32 gBerryPic_Lansat[] = INCBIN_U32("graphics/berries/lansat.4bpp.lz"); -const u32 gBerryPic_Starf[] = INCBIN_U32("graphics/berries/starf.4bpp.lz"); -const u32 gBerryPic_Enigma[] = INCBIN_U32("graphics/berries/enigma.4bpp.lz"); -const u32 gBerryPic_Micle[] = INCBIN_U32("graphics/berries/micle.4bpp.lz"); -const u32 gBerryPic_Custap[] = INCBIN_U32("graphics/berries/custap.4bpp.lz"); -const u32 gBerryPic_Jaboca[] = INCBIN_U32("graphics/berries/jaboca.4bpp.lz"); -const u32 gBerryPic_Rowap[] = INCBIN_U32("graphics/berries/rowap.4bpp.lz"); -const u32 gBerryPic_Kee[] = INCBIN_U32("graphics/berries/kee.4bpp.lz"); -const u32 gBerryPic_Maranga[] = INCBIN_U32("graphics/berries/maranga.4bpp.lz"); +const u32 gBerryPic_Cheri[] = INCBIN_U32("graphics/berries/cheri.4bpp.smol"); +const u32 gBerryPic_Chesto[] = INCBIN_U32("graphics/berries/chesto.4bpp.smol"); +const u32 gBerryPic_Pecha[] = INCBIN_U32("graphics/berries/pecha.4bpp.smol"); +const u32 gBerryPic_Rawst[] = INCBIN_U32("graphics/berries/rawst.4bpp.smol"); +const u32 gBerryPic_Aspear[] = INCBIN_U32("graphics/berries/aspear.4bpp.smol"); +const u32 gBerryPic_Leppa[] = INCBIN_U32("graphics/berries/leppa.4bpp.smol"); +const u32 gBerryPic_Oran[] = INCBIN_U32("graphics/berries/oran.4bpp.smol"); +const u32 gBerryPic_Persim[] = INCBIN_U32("graphics/berries/persim.4bpp.smol"); +const u32 gBerryPic_Lum[] = INCBIN_U32("graphics/berries/lum.4bpp.smol"); +const u32 gBerryPic_Sitrus[] = INCBIN_U32("graphics/berries/sitrus.4bpp.smol"); +const u32 gBerryPic_Figy[] = INCBIN_U32("graphics/berries/figy.4bpp.smol"); +const u32 gBerryPic_Wiki[] = INCBIN_U32("graphics/berries/wiki.4bpp.smol"); +const u32 gBerryPic_Mago[] = INCBIN_U32("graphics/berries/mago.4bpp.smol"); +const u32 gBerryPic_Aguav[] = INCBIN_U32("graphics/berries/aguav.4bpp.smol"); +const u32 gBerryPic_Iapapa[] = INCBIN_U32("graphics/berries/iapapa.4bpp.smol"); +const u32 gBerryPic_Razz[] = INCBIN_U32("graphics/berries/razz.4bpp.smol"); +const u32 gBerryPic_Bluk[] = INCBIN_U32("graphics/berries/bluk.4bpp.smol"); +const u32 gBerryPic_Nanab[] = INCBIN_U32("graphics/berries/nanab.4bpp.smol"); +const u32 gBerryPic_Wepear[] = INCBIN_U32("graphics/berries/wepear.4bpp.smol"); +const u32 gBerryPic_Pinap[] = INCBIN_U32("graphics/berries/pinap.4bpp.smol"); +const u32 gBerryPic_Pomeg[] = INCBIN_U32("graphics/berries/pomeg.4bpp.smol"); +const u32 gBerryPic_Kelpsy[] = INCBIN_U32("graphics/berries/kelpsy.4bpp.smol"); +const u32 gBerryPic_Qualot[] = INCBIN_U32("graphics/berries/qualot.4bpp.smol"); +const u32 gBerryPic_Hondew[] = INCBIN_U32("graphics/berries/hondew.4bpp.smol"); +const u32 gBerryPic_Grepa[] = INCBIN_U32("graphics/berries/grepa.4bpp.smol"); +const u32 gBerryPic_Tamato[] = INCBIN_U32("graphics/berries/tamato.4bpp.smol"); +const u32 gBerryPic_Cornn[] = INCBIN_U32("graphics/berries/cornn.4bpp.smol"); +const u32 gBerryPic_Magost[] = INCBIN_U32("graphics/berries/magost.4bpp.smol"); +const u32 gBerryPic_Rabuta[] = INCBIN_U32("graphics/berries/rabuta.4bpp.smol"); +const u32 gBerryPic_Nomel[] = INCBIN_U32("graphics/berries/nomel.4bpp.smol"); +const u32 gBerryPic_Spelon[] = INCBIN_U32("graphics/berries/spelon.4bpp.smol"); +const u32 gBerryPic_Pamtre[] = INCBIN_U32("graphics/berries/pamtre.4bpp.smol"); +const u32 gBerryPic_Watmel[] = INCBIN_U32("graphics/berries/watmel.4bpp.smol"); +const u32 gBerryPic_Durin[] = INCBIN_U32("graphics/berries/durin.4bpp.smol"); +const u32 gBerryPic_Belue[] = INCBIN_U32("graphics/berries/belue.4bpp.smol"); +const u32 gBerryPic_Chilan[] = INCBIN_U32("graphics/berries/chilan.4bpp.smol"); +const u32 gBerryPic_Occa[] = INCBIN_U32("graphics/berries/occa.4bpp.smol"); +const u32 gBerryPic_Passho[] = INCBIN_U32("graphics/berries/passho.4bpp.smol"); +const u32 gBerryPic_Wacan[] = INCBIN_U32("graphics/berries/wacan.4bpp.smol"); +const u32 gBerryPic_Rindo[] = INCBIN_U32("graphics/berries/rindo.4bpp.smol"); +const u32 gBerryPic_Yache[] = INCBIN_U32("graphics/berries/yache.4bpp.smol"); +const u32 gBerryPic_Chople[] = INCBIN_U32("graphics/berries/chople.4bpp.smol"); +const u32 gBerryPic_Kebia[] = INCBIN_U32("graphics/berries/kebia.4bpp.smol"); +const u32 gBerryPic_Shuca[] = INCBIN_U32("graphics/berries/shuca.4bpp.smol"); +const u32 gBerryPic_Coba[] = INCBIN_U32("graphics/berries/coba.4bpp.smol"); +const u32 gBerryPic_Payapa[] = INCBIN_U32("graphics/berries/payapa.4bpp.smol"); +const u32 gBerryPic_Tanga[] = INCBIN_U32("graphics/berries/tanga.4bpp.smol"); +const u32 gBerryPic_Charti[] = INCBIN_U32("graphics/berries/charti.4bpp.smol"); +const u32 gBerryPic_Kasib[] = INCBIN_U32("graphics/berries/kasib.4bpp.smol"); +const u32 gBerryPic_Haban[] = INCBIN_U32("graphics/berries/haban.4bpp.smol"); +const u32 gBerryPic_Colbur[] = INCBIN_U32("graphics/berries/colbur.4bpp.smol"); +const u32 gBerryPic_Babiri[] = INCBIN_U32("graphics/berries/babiri.4bpp.smol"); +const u32 gBerryPic_Roseli[] = INCBIN_U32("graphics/berries/roseli.4bpp.smol"); +const u32 gBerryPic_Liechi[] = INCBIN_U32("graphics/berries/liechi.4bpp.smol"); +const u32 gBerryPic_Ganlon[] = INCBIN_U32("graphics/berries/ganlon.4bpp.smol"); +const u32 gBerryPic_Salac[] = INCBIN_U32("graphics/berries/salac.4bpp.smol"); +const u32 gBerryPic_Petaya[] = INCBIN_U32("graphics/berries/petaya.4bpp.smol"); +const u32 gBerryPic_Apicot[] = INCBIN_U32("graphics/berries/apicot.4bpp.smol"); +const u32 gBerryPic_Lansat[] = INCBIN_U32("graphics/berries/lansat.4bpp.smol"); +const u32 gBerryPic_Starf[] = INCBIN_U32("graphics/berries/starf.4bpp.smol"); +const u32 gBerryPic_Enigma[] = INCBIN_U32("graphics/berries/enigma.4bpp.smol"); +const u32 gBerryPic_Micle[] = INCBIN_U32("graphics/berries/micle.4bpp.smol"); +const u32 gBerryPic_Custap[] = INCBIN_U32("graphics/berries/custap.4bpp.smol"); +const u32 gBerryPic_Jaboca[] = INCBIN_U32("graphics/berries/jaboca.4bpp.smol"); +const u32 gBerryPic_Rowap[] = INCBIN_U32("graphics/berries/rowap.4bpp.smol"); +const u32 gBerryPic_Kee[] = INCBIN_U32("graphics/berries/kee.4bpp.smol"); +const u32 gBerryPic_Maranga[] = INCBIN_U32("graphics/berries/maranga.4bpp.smol"); const u16 gBerryPalette_Cheri[] = INCBIN_U16("graphics/berries/cheri.gbapal"); const u16 gBerryPalette_Chesto[] = INCBIN_U16("graphics/berries/chesto.gbapal"); diff --git a/src/data/graphics/berry_fix.h b/src/data/graphics/berry_fix.h index 0c26f7e92be4..3fbedb5f2c7c 100644 --- a/src/data/graphics/berry_fix.h +++ b/src/data/graphics/berry_fix.h @@ -1,23 +1,23 @@ const u16 gBerryFixGbaConnect_Pal[] = INCBIN_U16("graphics/berry_fix/gba_connect.gbapal"); -const u32 gBerryFixGbaConnect_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_connect.4bpp.lz"); -const u32 gBerryFixGbaConnect_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_connect.bin.lz"); +const u32 gBerryFixGbaConnect_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_connect.4bpp.smol"); +const u32 gBerryFixGbaConnect_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_connect.bin.smolTM"); const u16 gBerryFixGameboyLogo_Pal[] = INCBIN_U16("graphics/berry_fix/logo.gbapal"); -const u32 gBerryFixGameboyLogo_Gfx[] = INCBIN_U32("graphics/berry_fix/logo.4bpp.lz"); -const u32 gBerryFixGameboyLogo_Tilemap[] = INCBIN_U32("graphics/berry_fix/logo.bin.lz"); +const u32 gBerryFixGameboyLogo_Gfx[] = INCBIN_U32("graphics/berry_fix/logo.4bpp.smol"); +const u32 gBerryFixGameboyLogo_Tilemap[] = INCBIN_U32("graphics/berry_fix/logo.bin.smolTM"); const u16 gBerryFixGbaTransfer_Pal[] = INCBIN_U16("graphics/berry_fix/gba_transfer.gbapal"); -const u32 gBerryFixGbaTransfer_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_transfer.4bpp.lz"); -const u32 gBerryFixGbaTransfer_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_transfer.bin.lz"); +const u32 gBerryFixGbaTransfer_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_transfer.4bpp.smol"); +const u32 gBerryFixGbaTransfer_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_transfer.bin.smolTM"); const u16 gBerryFixGbaTransferHighlight_Pal[] = INCBIN_U16("graphics/berry_fix/gba_transfer_highlight.gbapal"); -const u32 gBerryFixGbaTransferHighlight_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_transfer_highlight.4bpp.lz"); -const u32 gBerryFixGbaTransferHighlight_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_transfer_highlight.bin.lz"); +const u32 gBerryFixGbaTransferHighlight_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_transfer_highlight.4bpp.smol"); +const u32 gBerryFixGbaTransferHighlight_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_transfer_highlight.bin.smolTM"); const u16 gBerryFixGbaTransferError_Pal[] = INCBIN_U16("graphics/berry_fix/gba_transfer_error.gbapal"); -const u32 gBerryFixGbaTransferError_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_transfer_error.4bpp.lz"); -const u32 gBerryFixGbaTransferError_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_transfer_error.bin.lz"); +const u32 gBerryFixGbaTransferError_Gfx[] = INCBIN_U32("graphics/berry_fix/gba_transfer_error.4bpp.smol"); +const u32 gBerryFixGbaTransferError_Tilemap[] = INCBIN_U32("graphics/berry_fix/gba_transfer_error.bin.smolTM"); const u16 gBerryFixWindow_Pal[] = INCBIN_U16("graphics/berry_fix/window.gbapal"); -const u32 gBerryFixWindow_Gfx[] = INCBIN_U32("graphics/berry_fix/window.4bpp.lz"); -const u32 gBerryFixWindow_Tilemap[] = INCBIN_U32("graphics/berry_fix/window.bin.lz"); +const u32 gBerryFixWindow_Gfx[] = INCBIN_U32("graphics/berry_fix/window.4bpp.smol"); +const u32 gBerryFixWindow_Tilemap[] = INCBIN_U32("graphics/berry_fix/window.bin.smolTM"); diff --git a/src/data/graphics/decorations.h b/src/data/graphics/decorations.h index b8e1343ee5d4..e581d6816dab 100644 --- a/src/data/graphics/decorations.h +++ b/src/data/graphics/decorations.h @@ -1,125 +1,125 @@ -const u32 gDecorIcon_HeavyDesk[] = INCBIN_U32("graphics/decorations/heavy_desk.4bpp.lz"); +const u32 gDecorIcon_HeavyDesk[] = INCBIN_U32("graphics/decorations/heavy_desk.4bpp.smol"); const u16 gDecorIconPalette_HeavyDesk[] = INCBIN_U16("graphics/decorations/heavy_desk.gbapal"); -const u32 gDecorIcon_RaggedDesk[] = INCBIN_U32("graphics/decorations/ragged_desk.4bpp.lz"); +const u32 gDecorIcon_RaggedDesk[] = INCBIN_U32("graphics/decorations/ragged_desk.4bpp.smol"); const u16 gDecorIconPalette_RaggedDesk[] = INCBIN_U16("graphics/decorations/ragged_desk.gbapal"); -const u32 gDecorIcon_ComfortDesk[] = INCBIN_U32("graphics/decorations/comfort_desk.4bpp.lz"); +const u32 gDecorIcon_ComfortDesk[] = INCBIN_U32("graphics/decorations/comfort_desk.4bpp.smol"); const u16 gDecorIconPalette_ComfortDesk[] = INCBIN_U16("graphics/decorations/comfort_desk.gbapal"); -const u32 gDecorIcon_PrettyDesk[] = INCBIN_U32("graphics/decorations/pretty_desk.4bpp.lz"); +const u32 gDecorIcon_PrettyDesk[] = INCBIN_U32("graphics/decorations/pretty_desk.4bpp.smol"); const u16 gDecorIconPalette_PrettyDesk[] = INCBIN_U16("graphics/decorations/pretty_desk.gbapal"); -const u32 gDecorIcon_BrickDesk[] = INCBIN_U32("graphics/decorations/brick_desk.4bpp.lz"); +const u32 gDecorIcon_BrickDesk[] = INCBIN_U32("graphics/decorations/brick_desk.4bpp.smol"); const u16 gDecorIconPalette_BrickDesk[] = INCBIN_U16("graphics/decorations/brick_desk.gbapal"); -const u32 gDecorIcon_CampDesk[] = INCBIN_U32("graphics/decorations/camp_desk.4bpp.lz"); +const u32 gDecorIcon_CampDesk[] = INCBIN_U32("graphics/decorations/camp_desk.4bpp.smol"); const u16 gDecorIconPalette_CampDesk[] = INCBIN_U16("graphics/decorations/camp_desk.gbapal"); -const u32 gDecorIcon_HardDesk[] = INCBIN_U32("graphics/decorations/hard_desk.4bpp.lz"); +const u32 gDecorIcon_HardDesk[] = INCBIN_U32("graphics/decorations/hard_desk.4bpp.smol"); const u16 gDecorIconPalette_HardDesk[] = INCBIN_U16("graphics/decorations/hard_desk.gbapal"); -const u32 gDecorIcon_RedPlant[] = INCBIN_U32("graphics/decorations/red_plant.4bpp.lz"); +const u32 gDecorIcon_RedPlant[] = INCBIN_U32("graphics/decorations/red_plant.4bpp.smol"); const u16 gDecorIconPalette_RedPlant[] = INCBIN_U16("graphics/decorations/red_plant.gbapal"); -const u32 gDecorIcon_TropicalPlant[] = INCBIN_U32("graphics/decorations/tropical_plant.4bpp.lz"); +const u32 gDecorIcon_TropicalPlant[] = INCBIN_U32("graphics/decorations/tropical_plant.4bpp.smol"); const u16 gDecorIconPalette_TropicalPlant[] = INCBIN_U16("graphics/decorations/tropical_plant.gbapal"); -const u32 gDecorIcon_PrettyFlowers[] = INCBIN_U32("graphics/decorations/pretty_flowers.4bpp.lz"); +const u32 gDecorIcon_PrettyFlowers[] = INCBIN_U32("graphics/decorations/pretty_flowers.4bpp.smol"); const u16 gDecorIconPalette_PrettyFlowers[] = INCBIN_U16("graphics/decorations/pretty_flowers.gbapal"); -const u32 gDecorIcon_ColorfulPlant[] = INCBIN_U32("graphics/decorations/colorful_plant.4bpp.lz"); +const u32 gDecorIcon_ColorfulPlant[] = INCBIN_U32("graphics/decorations/colorful_plant.4bpp.smol"); const u16 gDecorIconPalette_ColorfulPlant[] = INCBIN_U16("graphics/decorations/colorful_plant.gbapal"); -const u32 gDecorIcon_BigPlant[] = INCBIN_U32("graphics/decorations/big_plant.4bpp.lz"); +const u32 gDecorIcon_BigPlant[] = INCBIN_U32("graphics/decorations/big_plant.4bpp.smol"); const u16 gDecorIconPalette_BigPlant[] = INCBIN_U16("graphics/decorations/big_plant.gbapal"); -const u32 gDecorIcon_GorgeousPlant[] = INCBIN_U32("graphics/decorations/gorgeous_plant.4bpp.lz"); +const u32 gDecorIcon_GorgeousPlant[] = INCBIN_U32("graphics/decorations/gorgeous_plant.4bpp.smol"); const u16 gDecorIconPalette_GorgeousPlant[] = INCBIN_U16("graphics/decorations/gorgeous_plant.gbapal"); -const u32 gDecorIcon_RedBrick[] = INCBIN_U32("graphics/decorations/red_brick.4bpp.lz"); +const u32 gDecorIcon_RedBrick[] = INCBIN_U32("graphics/decorations/red_brick.4bpp.smol"); const u16 gDecorIconPalette_RedBrick[] = INCBIN_U16("graphics/decorations/red_brick.gbapal"); -const u32 gDecorIcon_YellowBrick[] = INCBIN_U32("graphics/decorations/yellow_brick.4bpp.lz"); +const u32 gDecorIcon_YellowBrick[] = INCBIN_U32("graphics/decorations/yellow_brick.4bpp.smol"); const u16 gDecorIconPalette_YellowBrick[] = INCBIN_U16("graphics/decorations/yellow_brick.gbapal"); -const u32 gDecorIcon_BlueBrick[] = INCBIN_U32("graphics/decorations/blue_brick.4bpp.lz"); +const u32 gDecorIcon_BlueBrick[] = INCBIN_U32("graphics/decorations/blue_brick.4bpp.smol"); const u16 gDecorIconPalette_BlueBrick[] = INCBIN_U16("graphics/decorations/blue_brick.gbapal"); -const u32 gDecorIcon_RedTent[] = INCBIN_U32("graphics/decorations/red_tent.4bpp.lz"); +const u32 gDecorIcon_RedTent[] = INCBIN_U32("graphics/decorations/red_tent.4bpp.smol"); const u16 gDecorIconPalette_RedTent[] = INCBIN_U16("graphics/decorations/red_tent.gbapal"); -const u32 gDecorIcon_BlueTent[] = INCBIN_U32("graphics/decorations/blue_tent.4bpp.lz"); +const u32 gDecorIcon_BlueTent[] = INCBIN_U32("graphics/decorations/blue_tent.4bpp.smol"); const u16 gDecorIconPalette_BlueTent[] = INCBIN_U16("graphics/decorations/blue_tent.gbapal"); -const u32 gDecorIcon_SolidBoard[] = INCBIN_U32("graphics/decorations/solid_board.4bpp.lz"); +const u32 gDecorIcon_SolidBoard[] = INCBIN_U32("graphics/decorations/solid_board.4bpp.smol"); const u16 gDecorIconPalette_SolidBoard[] = INCBIN_U16("graphics/decorations/solid_board.gbapal"); -const u32 gDecorIcon_Slide[] = INCBIN_U32("graphics/decorations/slide.4bpp.lz"); +const u32 gDecorIcon_Slide[] = INCBIN_U32("graphics/decorations/slide.4bpp.smol"); const u16 gDecorIconPalette_Slide[] = INCBIN_U16("graphics/decorations/slide.gbapal"); -const u32 gDecorIcon_Tire[] = INCBIN_U32("graphics/decorations/tire.4bpp.lz"); +const u32 gDecorIcon_Tire[] = INCBIN_U32("graphics/decorations/tire.4bpp.smol"); const u16 gDecorIconPalette_Tire[] = INCBIN_U16("graphics/decorations/tire.gbapal"); -const u32 gDecorIcon_Stand[] = INCBIN_U32("graphics/decorations/stand.4bpp.lz"); +const u32 gDecorIcon_Stand[] = INCBIN_U32("graphics/decorations/stand.4bpp.smol"); const u16 gDecorIconPalette_Stand[] = INCBIN_U16("graphics/decorations/stand.gbapal"); -const u32 gDecorIcon_BreakableDoor[] = INCBIN_U32("graphics/decorations/breakable_door.4bpp.lz"); +const u32 gDecorIcon_BreakableDoor[] = INCBIN_U32("graphics/decorations/breakable_door.4bpp.smol"); const u16 gDecorIconPalette_BreakableDoor[] = INCBIN_U16("graphics/decorations/breakable_door.gbapal"); -const u32 gDecorIcon_SandOrnament[] = INCBIN_U32("graphics/decorations/sand_ornament.4bpp.lz"); +const u32 gDecorIcon_SandOrnament[] = INCBIN_U32("graphics/decorations/sand_ornament.4bpp.smol"); const u16 gDecorIconPalette_SandOrnament[] = INCBIN_U16("graphics/decorations/sand_ornament.gbapal"); -const u32 gDecorIcon_GlassOrnament[] = INCBIN_U32("graphics/decorations/glass_ornament.4bpp.lz"); +const u32 gDecorIcon_GlassOrnament[] = INCBIN_U32("graphics/decorations/glass_ornament.4bpp.smol"); const u16 gDecorIconPalette_GlassOrnament[] = INCBIN_U16("graphics/decorations/glass_ornament.gbapal"); -const u32 gDecorIcon_SurfMat[] = INCBIN_U32("graphics/decorations/surf_mat.4bpp.lz"); +const u32 gDecorIcon_SurfMat[] = INCBIN_U32("graphics/decorations/surf_mat.4bpp.smol"); const u16 gDecorIconPalette_SurfMat[] = INCBIN_U16("graphics/decorations/surf_mat.gbapal"); -const u32 gDecorIcon_ThunderMat[] = INCBIN_U32("graphics/decorations/thunder_mat.4bpp.lz"); +const u32 gDecorIcon_ThunderMat[] = INCBIN_U32("graphics/decorations/thunder_mat.4bpp.smol"); const u16 gDecorIconPalette_ThunderMat[] = INCBIN_U16("graphics/decorations/thunder_mat.gbapal"); -const u32 gDecorIcon_FireBlastMat[] = INCBIN_U32("graphics/decorations/fire_blast_mat.4bpp.lz"); +const u32 gDecorIcon_FireBlastMat[] = INCBIN_U32("graphics/decorations/fire_blast_mat.4bpp.smol"); const u16 gDecorIconPalette_FireBlastMat[] = INCBIN_U16("graphics/decorations/fire_blast_mat.gbapal"); -const u32 gDecorIcon_PowderSnowMat[] = INCBIN_U32("graphics/decorations/powder_snow_mat.4bpp.lz"); +const u32 gDecorIcon_PowderSnowMat[] = INCBIN_U32("graphics/decorations/powder_snow_mat.4bpp.smol"); const u16 gDecorIconPalette_PowderSnowMat[] = INCBIN_U16("graphics/decorations/powder_snow_mat.gbapal"); -const u32 gDecorIcon_AttractMat[] = INCBIN_U32("graphics/decorations/attract_mat.4bpp.lz"); +const u32 gDecorIcon_AttractMat[] = INCBIN_U32("graphics/decorations/attract_mat.4bpp.smol"); const u16 gDecorIconPalette_AttractMat[] = INCBIN_U16("graphics/decorations/attract_mat.gbapal"); -const u32 gDecorIcon_FissureMat[] = INCBIN_U32("graphics/decorations/fissure_mat.4bpp.lz"); +const u32 gDecorIcon_FissureMat[] = INCBIN_U32("graphics/decorations/fissure_mat.4bpp.smol"); const u16 gDecorIconPalette_FissureMat[] = INCBIN_U16("graphics/decorations/fissure_mat.gbapal"); -const u32 gDecorIcon_SpikesMat[] = INCBIN_U32("graphics/decorations/spikes_mat.4bpp.lz"); +const u32 gDecorIcon_SpikesMat[] = INCBIN_U32("graphics/decorations/spikes_mat.4bpp.smol"); const u16 gDecorIconPalette_SpikesMat[] = INCBIN_U16("graphics/decorations/spikes_mat.gbapal"); -const u32 gDecorIcon_SnorlaxDoll[] = INCBIN_U32("graphics/decorations/snorlax_doll.4bpp.lz"); +const u32 gDecorIcon_SnorlaxDoll[] = INCBIN_U32("graphics/decorations/snorlax_doll.4bpp.smol"); const u16 gDecorIconPalette_SnorlaxDoll[] = INCBIN_U16("graphics/decorations/snorlax_doll.gbapal"); -const u32 gDecorIcon_RhydonDoll[] = INCBIN_U32("graphics/decorations/rhydon_doll.4bpp.lz"); +const u32 gDecorIcon_RhydonDoll[] = INCBIN_U32("graphics/decorations/rhydon_doll.4bpp.smol"); const u16 gDecorIconPalette_RhydonDoll[] = INCBIN_U16("graphics/decorations/rhydon_doll.gbapal"); -const u32 gDecorIcon_LaprasDoll[] = INCBIN_U32("graphics/decorations/lapras_doll.4bpp.lz"); +const u32 gDecorIcon_LaprasDoll[] = INCBIN_U32("graphics/decorations/lapras_doll.4bpp.smol"); const u16 gDecorIconPalette_LaprasDoll[] = INCBIN_U16("graphics/decorations/lapras_doll.gbapal"); -const u32 gDecorIcon_VenusaurDoll[] = INCBIN_U32("graphics/decorations/venusaur_doll.4bpp.lz"); +const u32 gDecorIcon_VenusaurDoll[] = INCBIN_U32("graphics/decorations/venusaur_doll.4bpp.smol"); const u16 gDecorIconPalette_VenusaurDoll[] = INCBIN_U16("graphics/decorations/venusaur_doll.gbapal"); -const u32 gDecorIcon_CharizardDoll[] = INCBIN_U32("graphics/decorations/charizard_doll.4bpp.lz"); +const u32 gDecorIcon_CharizardDoll[] = INCBIN_U32("graphics/decorations/charizard_doll.4bpp.smol"); const u16 gDecorIconPalette_CharizardDoll[] = INCBIN_U16("graphics/decorations/charizard_doll.gbapal"); -const u32 gDecorIcon_BlastoiseDoll[] = INCBIN_U32("graphics/decorations/blastoise_doll.4bpp.lz"); +const u32 gDecorIcon_BlastoiseDoll[] = INCBIN_U32("graphics/decorations/blastoise_doll.4bpp.smol"); const u16 gDecorIconPalette_BlastoiseDoll[] = INCBIN_U16("graphics/decorations/blastoise_doll.gbapal"); -const u32 gDecorIcon_WailmerDoll[] = INCBIN_U32("graphics/decorations/wailmer_doll.4bpp.lz"); +const u32 gDecorIcon_WailmerDoll[] = INCBIN_U32("graphics/decorations/wailmer_doll.4bpp.smol"); const u16 gDecorIconPalette_WailmerDoll[] = INCBIN_U16("graphics/decorations/wailmer_doll.gbapal"); -const u32 gDecorIcon_RegiceDoll[] = INCBIN_U32("graphics/decorations/regice_doll.4bpp.lz"); +const u32 gDecorIcon_RegiceDoll[] = INCBIN_U32("graphics/decorations/regice_doll.4bpp.smol"); const u16 gDecorIconPalette_RegiceDoll[] = INCBIN_U16("graphics/decorations/regice_doll.gbapal"); -const u32 gDecorIcon_RegirockDoll[] = INCBIN_U32("graphics/decorations/regirock_doll.4bpp.lz"); +const u32 gDecorIcon_RegirockDoll[] = INCBIN_U32("graphics/decorations/regirock_doll.4bpp.smol"); const u16 gDecorIconPalette_RegirockDoll[] = INCBIN_U16("graphics/decorations/regirock_doll.gbapal"); -const u32 gDecorIcon_RegisteelDoll[] = INCBIN_U32("graphics/decorations/registeel_doll.4bpp.lz"); +const u32 gDecorIcon_RegisteelDoll[] = INCBIN_U32("graphics/decorations/registeel_doll.4bpp.smol"); const u16 gDecorIconPalette_RegisteelDoll[] = INCBIN_U16("graphics/decorations/registeel_doll.gbapal"); diff --git a/src/data/graphics/intro_scene.h b/src/data/graphics/intro_scene.h index 8b17b0034637..2ee5a86a0f4b 100644 --- a/src/data/graphics/intro_scene.h +++ b/src/data/graphics/intro_scene.h @@ -6,42 +6,42 @@ const u16 gIntroTorchic_Pal[] = INCBIN_U16("graphics/intro/scene_2/torchic.gbapa const u16 gIntroManectric_Pal[] = INCBIN_U16("graphics/intro/scene_2/manectric.gbapal"); const u16 gIntroFlygon_Pal[] = INCBIN_U16("graphics/intro/scene_2/flygon.gbapal"); -const u32 gIntroVolbeat_Gfx[] = INCBIN_U32("graphics/intro/scene_2/volbeat.4bpp.lz"); -const u32 gIntroTorchic_Gfx[] = INCBIN_U32("graphics/intro/scene_2/torchic.4bpp.lz"); -const u32 gIntroManectric_Gfx[] = INCBIN_U32("graphics/intro/scene_2/manectric.4bpp.lz"); -const u32 gIntroFlygon_Gfx[] = INCBIN_U32("graphics/intro/scene_2/flygon.4bpp.lz"); -const u32 gIntroBrendan_Gfx[] = INCBIN_U32("graphics/intro/scene_2/brendan.4bpp.lz"); -const u32 gIntroMay_Gfx[] = INCBIN_U32("graphics/intro/scene_2/may.4bpp.lz"); +const u32 gIntroVolbeat_Gfx[] = INCBIN_U32("graphics/intro/scene_2/volbeat.4bpp.smol"); +const u32 gIntroTorchic_Gfx[] = INCBIN_U32("graphics/intro/scene_2/torchic.4bpp.smol"); +const u32 gIntroManectric_Gfx[] = INCBIN_U32("graphics/intro/scene_2/manectric.4bpp.smol"); +const u32 gIntroFlygon_Gfx[] = INCBIN_U32("graphics/intro/scene_2/flygon.4bpp.smol"); +const u32 gIntroBrendan_Gfx[] = INCBIN_U32("graphics/intro/scene_2/brendan.4bpp.smol"); +const u32 gIntroMay_Gfx[] = INCBIN_U32("graphics/intro/scene_2/may.4bpp.smol"); -const u32 gIntroGroudon_Gfx[] = INCBIN_U32("graphics/intro/scene_3/groudon.8bpp.lz"); -const u32 gIntroGroudon_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/groudon.bin.lz"); +const u32 gIntroGroudon_Gfx[] = INCBIN_U32("graphics/intro/scene_3/groudon.8bpp.smol"); +const u32 gIntroGroudon_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/groudon.bin.smolTM"); -const u32 gIntroKyogre_Gfx[] = INCBIN_U32("graphics/intro/scene_3/kyogre.8bpp.lz"); -const u32 gIntroKyogre_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/kyogre.bin.lz"); +const u32 gIntroKyogre_Gfx[] = INCBIN_U32("graphics/intro/scene_3/kyogre.8bpp.smol"); +const u32 gIntroKyogre_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/kyogre.bin.smolTM"); -const u32 gIntroLegendBg_Gfx[] = INCBIN_U32("graphics/intro/scene_3/legend_bg.4bpp.lz"); // groudon/kyogre bg -const u32 gIntroGroudonBg_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/groudon_bg.bin.lz"); -const u32 gIntroKyogreBg_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/kyogre_bg.bin.lz"); +const u32 gIntroLegendBg_Gfx[] = INCBIN_U32("graphics/intro/scene_3/legend_bg.4bpp.smol"); // groudon/kyogre bg +const u32 gIntroGroudonBg_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/groudon_bg.bin.smolTM"); +const u32 gIntroKyogreBg_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/kyogre_bg.bin.smolTM"); -const u32 gIntroClouds_Gfx[] = INCBIN_U32("graphics/intro/scene_3/clouds.4bpp.lz"); -const u32 gIntroCloudsLeft_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/clouds_left.bin.lz"); -const u32 gIntroCloudsRight_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/clouds_right.bin.lz"); -const u32 gIntroCloudsSun_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/clouds_sun.bin.lz"); +const u32 gIntroClouds_Gfx[] = INCBIN_U32("graphics/intro/scene_3/clouds.4bpp.smol"); +const u32 gIntroCloudsLeft_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/clouds_left.bin.smolTM"); +const u32 gIntroCloudsRight_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/clouds_right.bin.smolTM"); +const u32 gIntroCloudsSun_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/clouds_sun.bin.smolTM"); -const u32 gIntroLightning_Gfx[] = INCBIN_U32("graphics/intro/scene_3/lightning.4bpp.lz"); +const u32 gIntroLightning_Gfx[] = INCBIN_U32("graphics/intro/scene_3/lightning.4bpp.smol"); const u16 gIntroLightning_Pal[] = INCBIN_U16("graphics/intro/scene_3/lightning.gbapal"); -const u32 gIntroRayquaza_Gfx[] = INCBIN_U32("graphics/intro/scene_3/rayquaza.4bpp.lz"); -const u32 gIntroRayquaza_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/rayquaza.bin.lz"); +const u32 gIntroRayquaza_Gfx[] = INCBIN_U32("graphics/intro/scene_3/rayquaza.4bpp.smol"); +const u32 gIntroRayquaza_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/rayquaza.bin.smolTM"); -const u32 gIntroUnused1_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/unused_1.bin.lz"); -const u32 gIntroUnused2_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/unused_2.bin.lz"); +const u32 gIntroUnused1_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/unused_1.bin.smolTM"); +const u32 gIntroUnused2_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/unused_2.bin.smolTM"); -const u32 gIntroRayquazaClouds_Gfx[] = INCBIN_U32("graphics/intro/scene_3/rayquaza_clouds.4bpp.lz"); -const u32 gIntroRayquazaClouds_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/rayquaza_clouds.bin.lz"); +const u32 gIntroRayquazaClouds_Gfx[] = INCBIN_U32("graphics/intro/scene_3/rayquaza_clouds.4bpp.smol"); +const u32 gIntroRayquazaClouds_Tilemap[] = INCBIN_U32("graphics/intro/scene_3/rayquaza_clouds.bin.smolTM"); -const u32 gIntroBubbles_Gfx[] = INCBIN_U32("graphics/intro/scene_3/bubbles.4bpp.lz"); +const u32 gIntroBubbles_Gfx[] = INCBIN_U32("graphics/intro/scene_3/bubbles.4bpp.smol"); const u16 gIntroBubbles_Pal[] = INCBIN_U16("graphics/intro/scene_3/bubbles.gbapal"); -const u32 gIntroFlygonSilhouette_Gfx[] = INCBIN_U32("graphics/intro/scene_1/flygon.4bpp.lz"); -const u32 gIntroSparkle_Gfx[] = INCBIN_U32("graphics/intro/scene_1/sparkle.4bpp.lz"); +const u32 gIntroFlygonSilhouette_Gfx[] = INCBIN_U32("graphics/intro/scene_1/flygon.4bpp.smol"); +const u32 gIntroSparkle_Gfx[] = INCBIN_U32("graphics/intro/scene_1/sparkle.4bpp.smol"); diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index 403530effc90..31a78d8c6b8d 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -1,139 +1,139 @@ -const u32 gItemIcon_QuestionMark[] = INCBIN_U32("graphics/items/icons/question_mark.4bpp.lz"); +const u32 gItemIcon_QuestionMark[] = INCBIN_U32("graphics/items/icons/question_mark.4bpp.smol"); const u16 gItemIconPalette_QuestionMark[] = INCBIN_U16("graphics/items/icon_palettes/question_mark.gbapal"); -const u32 gItemIcon_ReturnToFieldArrow[] = INCBIN_U32("graphics/items/icons/return_to_field_arrow.4bpp.lz"); +const u32 gItemIcon_ReturnToFieldArrow[] = INCBIN_U32("graphics/items/icons/return_to_field_arrow.4bpp.smol"); const u16 gItemIconPalette_ReturnToFieldArrow[] = INCBIN_U16("graphics/items/icon_palettes/return_to_field_arrow.gbapal"); // PokΓ© Balls -const u32 gItemIcon_StrangeBall[] = INCBIN_U32("graphics/items/icons/strange_ball.4bpp.lz"); +const u32 gItemIcon_StrangeBall[] = INCBIN_U32("graphics/items/icons/strange_ball.4bpp.smol"); const u16 gItemIconPalette_StrangeBall[] = INCBIN_U16("graphics/items/icon_palettes/strange_ball.gbapal"); -const u32 gItemIcon_PokeBall[] = INCBIN_U32("graphics/items/icons/poke_ball.4bpp.lz"); +const u32 gItemIcon_PokeBall[] = INCBIN_U32("graphics/items/icons/poke_ball.4bpp.smol"); const u16 gItemIconPalette_PokeBall[] = INCBIN_U16("graphics/items/icon_palettes/poke_ball.gbapal"); -const u32 gItemIcon_GreatBall[] = INCBIN_U32("graphics/items/icons/great_ball.4bpp.lz"); +const u32 gItemIcon_GreatBall[] = INCBIN_U32("graphics/items/icons/great_ball.4bpp.smol"); const u16 gItemIconPalette_GreatBall[] = INCBIN_U16("graphics/items/icon_palettes/great_ball.gbapal"); -const u32 gItemIcon_UltraBall[] = INCBIN_U32("graphics/items/icons/ultra_ball.4bpp.lz"); +const u32 gItemIcon_UltraBall[] = INCBIN_U32("graphics/items/icons/ultra_ball.4bpp.smol"); const u16 gItemIconPalette_UltraBall[] = INCBIN_U16("graphics/items/icon_palettes/ultra_ball.gbapal"); -const u32 gItemIcon_MasterBall[] = INCBIN_U32("graphics/items/icons/master_ball.4bpp.lz"); +const u32 gItemIcon_MasterBall[] = INCBIN_U32("graphics/items/icons/master_ball.4bpp.smol"); const u16 gItemIconPalette_MasterBall[] = INCBIN_U16("graphics/items/icon_palettes/master_ball.gbapal"); -const u32 gItemIcon_PremierBall[] = INCBIN_U32("graphics/items/icons/premier_ball.4bpp.lz"); +const u32 gItemIcon_PremierBall[] = INCBIN_U32("graphics/items/icons/premier_ball.4bpp.smol"); -const u32 gItemIcon_HealBall[] = INCBIN_U32("graphics/items/icons/heal_ball.4bpp.lz"); +const u32 gItemIcon_HealBall[] = INCBIN_U32("graphics/items/icons/heal_ball.4bpp.smol"); const u16 gItemIconPalette_HealBall[] = INCBIN_U16("graphics/items/icon_palettes/heal_ball.gbapal"); -const u32 gItemIcon_NetBall[] = INCBIN_U32("graphics/items/icons/net_ball.4bpp.lz"); +const u32 gItemIcon_NetBall[] = INCBIN_U32("graphics/items/icons/net_ball.4bpp.smol"); const u16 gItemIconPalette_NetBall[] = INCBIN_U16("graphics/items/icon_palettes/net_ball.gbapal"); -const u32 gItemIcon_NestBall[] = INCBIN_U32("graphics/items/icons/nest_ball.4bpp.lz"); +const u32 gItemIcon_NestBall[] = INCBIN_U32("graphics/items/icons/nest_ball.4bpp.smol"); const u16 gItemIconPalette_NestBall[] = INCBIN_U16("graphics/items/icon_palettes/nest_ball.gbapal"); -const u32 gItemIcon_DiveBall[] = INCBIN_U32("graphics/items/icons/dive_ball.4bpp.lz"); +const u32 gItemIcon_DiveBall[] = INCBIN_U32("graphics/items/icons/dive_ball.4bpp.smol"); const u16 gItemIconPalette_DiveBall[] = INCBIN_U16("graphics/items/icon_palettes/dive_ball.gbapal"); -const u32 gItemIcon_DuskBall[] = INCBIN_U32("graphics/items/icons/dusk_ball.4bpp.lz"); +const u32 gItemIcon_DuskBall[] = INCBIN_U32("graphics/items/icons/dusk_ball.4bpp.smol"); const u16 gItemIconPalette_DuskBall[] = INCBIN_U16("graphics/items/icon_palettes/dusk_ball.gbapal"); -const u32 gItemIcon_TimerBall[] = INCBIN_U32("graphics/items/icons/timer_ball.4bpp.lz"); +const u32 gItemIcon_TimerBall[] = INCBIN_U32("graphics/items/icons/timer_ball.4bpp.smol"); -const u32 gItemIcon_QuickBall[] = INCBIN_U32("graphics/items/icons/quick_ball.4bpp.lz"); +const u32 gItemIcon_QuickBall[] = INCBIN_U32("graphics/items/icons/quick_ball.4bpp.smol"); const u16 gItemIconPalette_QuickBall[] = INCBIN_U16("graphics/items/icon_palettes/quick_ball.gbapal"); -const u32 gItemIcon_RepeatBall[] = INCBIN_U32("graphics/items/icons/repeat_ball.4bpp.lz"); +const u32 gItemIcon_RepeatBall[] = INCBIN_U32("graphics/items/icons/repeat_ball.4bpp.smol"); const u16 gItemIconPalette_RepeatBall[] = INCBIN_U16("graphics/items/icon_palettes/repeat_ball.gbapal"); -const u32 gItemIcon_LuxuryBall[] = INCBIN_U32("graphics/items/icons/luxury_ball.4bpp.lz"); +const u32 gItemIcon_LuxuryBall[] = INCBIN_U32("graphics/items/icons/luxury_ball.4bpp.smol"); const u16 gItemIconPalette_LuxuryBall[] = INCBIN_U16("graphics/items/icon_palettes/luxury_ball.gbapal"); -const u32 gItemIcon_LevelBall[] = INCBIN_U32("graphics/items/icons/level_ball.4bpp.lz"); +const u32 gItemIcon_LevelBall[] = INCBIN_U32("graphics/items/icons/level_ball.4bpp.smol"); const u16 gItemIconPalette_LevelBall[] = INCBIN_U16("graphics/items/icon_palettes/level_ball.gbapal"); -const u32 gItemIcon_LureBall[] = INCBIN_U32("graphics/items/icons/lure_ball.4bpp.lz"); +const u32 gItemIcon_LureBall[] = INCBIN_U32("graphics/items/icons/lure_ball.4bpp.smol"); const u16 gItemIconPalette_LureBall[] = INCBIN_U16("graphics/items/icon_palettes/lure_ball.gbapal"); -const u32 gItemIcon_MoonBall[] = INCBIN_U32("graphics/items/icons/moon_ball.4bpp.lz"); +const u32 gItemIcon_MoonBall[] = INCBIN_U32("graphics/items/icons/moon_ball.4bpp.smol"); const u16 gItemIconPalette_MoonBall[] = INCBIN_U16("graphics/items/icon_palettes/moon_ball.gbapal"); -const u32 gItemIcon_FriendBall[] = INCBIN_U32("graphics/items/icons/friend_ball.4bpp.lz"); +const u32 gItemIcon_FriendBall[] = INCBIN_U32("graphics/items/icons/friend_ball.4bpp.smol"); const u16 gItemIconPalette_FriendBall[] = INCBIN_U16("graphics/items/icon_palettes/friend_ball.gbapal"); -const u32 gItemIcon_LoveBall[] = INCBIN_U32("graphics/items/icons/love_ball.4bpp.lz"); +const u32 gItemIcon_LoveBall[] = INCBIN_U32("graphics/items/icons/love_ball.4bpp.smol"); const u16 gItemIconPalette_LoveBall[] = INCBIN_U16("graphics/items/icon_palettes/love_ball.gbapal"); -const u32 gItemIcon_FastBall[] = INCBIN_U32("graphics/items/icons/fast_ball.4bpp.lz"); +const u32 gItemIcon_FastBall[] = INCBIN_U32("graphics/items/icons/fast_ball.4bpp.smol"); const u16 gItemIconPalette_FastBall[] = INCBIN_U16("graphics/items/icon_palettes/fast_ball.gbapal"); -const u32 gItemIcon_HeavyBall[] = INCBIN_U32("graphics/items/icons/heavy_ball.4bpp.lz"); +const u32 gItemIcon_HeavyBall[] = INCBIN_U32("graphics/items/icons/heavy_ball.4bpp.smol"); const u16 gItemIconPalette_HeavyBall[] = INCBIN_U16("graphics/items/icon_palettes/heavy_ball.gbapal"); -const u32 gItemIcon_DreamBall[] = INCBIN_U32("graphics/items/icons/dream_ball.4bpp.lz"); +const u32 gItemIcon_DreamBall[] = INCBIN_U32("graphics/items/icons/dream_ball.4bpp.smol"); const u16 gItemIconPalette_DreamBall[] = INCBIN_U16("graphics/items/icon_palettes/dream_ball.gbapal"); -const u32 gItemIcon_SafariBall[] = INCBIN_U32("graphics/items/icons/safari_ball.4bpp.lz"); +const u32 gItemIcon_SafariBall[] = INCBIN_U32("graphics/items/icons/safari_ball.4bpp.smol"); const u16 gItemIconPalette_SafariBall[] = INCBIN_U16("graphics/items/icon_palettes/safari_ball.gbapal"); -const u32 gItemIcon_SportBall[] = INCBIN_U32("graphics/items/icons/sport_ball.4bpp.lz"); +const u32 gItemIcon_SportBall[] = INCBIN_U32("graphics/items/icons/sport_ball.4bpp.smol"); const u16 gItemIconPalette_SportBall[] = INCBIN_U16("graphics/items/icon_palettes/sport_ball.gbapal"); -const u32 gItemIcon_ParkBall[] = INCBIN_U32("graphics/items/icons/park_ball.4bpp.lz"); +const u32 gItemIcon_ParkBall[] = INCBIN_U32("graphics/items/icons/park_ball.4bpp.smol"); const u16 gItemIconPalette_ParkBall[] = INCBIN_U16("graphics/items/icon_palettes/park_ball.gbapal"); -const u32 gItemIcon_BeastBall[] = INCBIN_U32("graphics/items/icons/beast_ball.4bpp.lz"); +const u32 gItemIcon_BeastBall[] = INCBIN_U32("graphics/items/icons/beast_ball.4bpp.smol"); const u16 gItemIconPalette_BeastBall[] = INCBIN_U16("graphics/items/icon_palettes/beast_ball.gbapal"); -const u32 gItemIcon_CherishBall[] = INCBIN_U32("graphics/items/icons/cherish_ball.4bpp.lz"); +const u32 gItemIcon_CherishBall[] = INCBIN_U32("graphics/items/icons/cherish_ball.4bpp.smol"); const u16 gItemIconPalette_CherishBall[] = INCBIN_U16("graphics/items/icon_palettes/cherish_ball.gbapal"); // Medicine -const u32 gItemIcon_Potion[] = INCBIN_U32("graphics/items/icons/potion.4bpp.lz"); +const u32 gItemIcon_Potion[] = INCBIN_U32("graphics/items/icons/potion.4bpp.smol"); const u16 gItemIconPalette_Potion[] = INCBIN_U16("graphics/items/icon_palettes/potion.gbapal"); const u16 gItemIconPalette_SuperPotion[] = INCBIN_U16("graphics/items/icon_palettes/super_potion.gbapal"); const u16 gItemIconPalette_HyperPotion[] = INCBIN_U16("graphics/items/icon_palettes/hyper_potion.gbapal"); -const u32 gItemIcon_LargePotion[] = INCBIN_U32("graphics/items/icons/large_potion.4bpp.lz"); +const u32 gItemIcon_LargePotion[] = INCBIN_U32("graphics/items/icons/large_potion.4bpp.smol"); const u16 gItemIconPalette_MaxPotion[] = INCBIN_U16("graphics/items/icon_palettes/max_potion.gbapal"); const u16 gItemIconPalette_FullRestore[] = INCBIN_U16("graphics/items/icon_palettes/full_restore.gbapal"); -const u32 gItemIcon_Revive[] = INCBIN_U32("graphics/items/icons/revive.4bpp.lz"); +const u32 gItemIcon_Revive[] = INCBIN_U32("graphics/items/icons/revive.4bpp.smol"); const u16 gItemIconPalette_Revive[] = INCBIN_U16("graphics/items/icon_palettes/revive.gbapal"); -const u32 gItemIcon_MaxRevive[] = INCBIN_U32("graphics/items/icons/max_revive.4bpp.lz"); +const u32 gItemIcon_MaxRevive[] = INCBIN_U32("graphics/items/icons/max_revive.4bpp.smol"); -const u32 gItemIcon_FreshWater[] = INCBIN_U32("graphics/items/icons/fresh_water.4bpp.lz"); +const u32 gItemIcon_FreshWater[] = INCBIN_U32("graphics/items/icons/fresh_water.4bpp.smol"); const u16 gItemIconPalette_FreshWater[] = INCBIN_U16("graphics/items/icon_palettes/fresh_water.gbapal"); -const u32 gItemIcon_SodaPop[] = INCBIN_U32("graphics/items/icons/soda_pop.4bpp.lz"); +const u32 gItemIcon_SodaPop[] = INCBIN_U32("graphics/items/icons/soda_pop.4bpp.smol"); const u16 gItemIconPalette_SodaPop[] = INCBIN_U16("graphics/items/icon_palettes/soda_pop.gbapal"); -const u32 gItemIcon_Lemonade[] = INCBIN_U32("graphics/items/icons/lemonade.4bpp.lz"); +const u32 gItemIcon_Lemonade[] = INCBIN_U32("graphics/items/icons/lemonade.4bpp.smol"); const u16 gItemIconPalette_Lemonade[] = INCBIN_U16("graphics/items/icon_palettes/lemonade.gbapal"); -const u32 gItemIcon_MoomooMilk[] = INCBIN_U32("graphics/items/icons/moomoo_milk.4bpp.lz"); +const u32 gItemIcon_MoomooMilk[] = INCBIN_U32("graphics/items/icons/moomoo_milk.4bpp.smol"); const u16 gItemIconPalette_MoomooMilk[] = INCBIN_U16("graphics/items/icon_palettes/moomoo_milk.gbapal"); -const u32 gItemIcon_Powder[] = INCBIN_U32("graphics/items/icons/powder.4bpp.lz"); +const u32 gItemIcon_Powder[] = INCBIN_U32("graphics/items/icons/powder.4bpp.smol"); const u16 gItemIconPalette_EnergyPowder[] = INCBIN_U16("graphics/items/icon_palettes/energy_powder.gbapal"); -const u32 gItemIcon_EnergyRoot[] = INCBIN_U32("graphics/items/icons/energy_root.4bpp.lz"); +const u32 gItemIcon_EnergyRoot[] = INCBIN_U32("graphics/items/icons/energy_root.4bpp.smol"); const u16 gItemIconPalette_EnergyRoot[] = INCBIN_U16("graphics/items/icon_palettes/energy_root.gbapal"); const u16 gItemIconPalette_HealPowder[] = INCBIN_U16("graphics/items/icon_palettes/heal_powder.gbapal"); -const u32 gItemIcon_RevivalHerb[] = INCBIN_U32("graphics/items/icons/revival_herb.4bpp.lz"); +const u32 gItemIcon_RevivalHerb[] = INCBIN_U32("graphics/items/icons/revival_herb.4bpp.smol"); const u16 gItemIconPalette_RevivalHerb[] = INCBIN_U16("graphics/items/icon_palettes/revival_herb.gbapal"); -const u32 gItemIcon_Antidote[] = INCBIN_U32("graphics/items/icons/antidote.4bpp.lz"); +const u32 gItemIcon_Antidote[] = INCBIN_U32("graphics/items/icons/antidote.4bpp.smol"); const u16 gItemIconPalette_Antidote[] = INCBIN_U16("graphics/items/icon_palettes/antidote.gbapal"); -const u32 gItemIcon_StatusHeal[] = INCBIN_U32("graphics/items/icons/status_heal.4bpp.lz"); +const u32 gItemIcon_StatusHeal[] = INCBIN_U32("graphics/items/icons/status_heal.4bpp.smol"); const u16 gItemIconPalette_ParalyzeHeal[] = INCBIN_U16("graphics/items/icon_palettes/paralyze_heal.gbapal"); const u16 gItemIconPalette_BurnHeal[] = INCBIN_U16("graphics/items/icon_palettes/burn_heal.gbapal"); @@ -142,10 +142,10 @@ const u16 gItemIconPalette_IceHeal[] = INCBIN_U16("graphics/items/icon_palettes/ const u16 gItemIconPalette_Awakening[] = INCBIN_U16("graphics/items/icon_palettes/awakening.gbapal"); -const u32 gItemIcon_FullHeal[] = INCBIN_U32("graphics/items/icons/full_heal.4bpp.lz"); +const u32 gItemIcon_FullHeal[] = INCBIN_U32("graphics/items/icons/full_heal.4bpp.smol"); const u16 gItemIconPalette_FullHeal[] = INCBIN_U16("graphics/items/icon_palettes/full_heal.gbapal"); -const u32 gItemIcon_Ether[] = INCBIN_U32("graphics/items/icons/ether.4bpp.lz"); +const u32 gItemIcon_Ether[] = INCBIN_U32("graphics/items/icons/ether.4bpp.smol"); const u16 gItemIconPalette_Ether[] = INCBIN_U16("graphics/items/icon_palettes/ether.gbapal"); const u16 gItemIconPalette_MaxEther[] = INCBIN_U16("graphics/items/icon_palettes/max_ether.gbapal"); @@ -154,50 +154,50 @@ const u16 gItemIconPalette_Elixir[] = INCBIN_U16("graphics/items/icon_palettes/e const u16 gItemIconPalette_MaxElixir[] = INCBIN_U16("graphics/items/icon_palettes/max_elixir.gbapal"); -const u32 gItemIcon_BerryJuice[] = INCBIN_U32("graphics/items/icons/berry_juice.4bpp.lz"); +const u32 gItemIcon_BerryJuice[] = INCBIN_U32("graphics/items/icons/berry_juice.4bpp.smol"); const u16 gItemIconPalette_BerryJuice[] = INCBIN_U16("graphics/items/icon_palettes/berry_juice.gbapal"); -const u32 gItemIcon_SacredAsh[] = INCBIN_U32("graphics/items/icons/sacred_ash.4bpp.lz"); +const u32 gItemIcon_SacredAsh[] = INCBIN_U32("graphics/items/icons/sacred_ash.4bpp.smol"); const u16 gItemIconPalette_SacredAsh[] = INCBIN_U16("graphics/items/icon_palettes/sacred_ash.gbapal"); -const u32 gItemIcon_SweetHeart[] = INCBIN_U32("graphics/items/icons/sweet_heart.4bpp.lz"); +const u32 gItemIcon_SweetHeart[] = INCBIN_U32("graphics/items/icons/sweet_heart.4bpp.smol"); const u16 gItemIconPalette_SweetHeart[] = INCBIN_U16("graphics/items/icon_palettes/sweet_heart.gbapal"); -const u32 gItemIcon_MaxHoney[] = INCBIN_U32("graphics/items/icons/max_honey.4bpp.lz"); +const u32 gItemIcon_MaxHoney[] = INCBIN_U32("graphics/items/icons/max_honey.4bpp.smol"); const u16 gItemIconPalette_MaxHoney[] = INCBIN_U16("graphics/items/icon_palettes/max_honey.gbapal"); // Regional Specialties -const u32 gItemIcon_PewterCrunchies[] = INCBIN_U32("graphics/items/icons/pewter_crunchies.4bpp.lz"); +const u32 gItemIcon_PewterCrunchies[] = INCBIN_U32("graphics/items/icons/pewter_crunchies.4bpp.smol"); const u16 gItemIconPalette_PewterCrunchies[] = INCBIN_U16("graphics/items/icon_palettes/pewter_crunchies.gbapal"); -const u32 gItemIcon_RageCandyBar[] = INCBIN_U32("graphics/items/icons/rage_candy_bar.4bpp.lz"); +const u32 gItemIcon_RageCandyBar[] = INCBIN_U32("graphics/items/icons/rage_candy_bar.4bpp.smol"); const u16 gItemIconPalette_RageCandyBar[] = INCBIN_U16("graphics/items/icon_palettes/rage_candy_bar.gbapal"); -const u32 gItemIcon_LavaCookie[] = INCBIN_U32("graphics/items/icons/lava_cookie.4bpp.lz"); +const u32 gItemIcon_LavaCookie[] = INCBIN_U32("graphics/items/icons/lava_cookie.4bpp.smol"); const u16 gItemIconPalette_LavaCookieAndLetter[] = INCBIN_U16("graphics/items/icon_palettes/lava_cookie_and_letter.gbapal"); -const u32 gItemIcon_OldGateau[] = INCBIN_U32("graphics/items/icons/old_gateau.4bpp.lz"); +const u32 gItemIcon_OldGateau[] = INCBIN_U32("graphics/items/icons/old_gateau.4bpp.smol"); const u16 gItemIconPalette_OldGateau[] = INCBIN_U16("graphics/items/icon_palettes/old_gateau.gbapal"); -const u32 gItemIcon_Casteliacone[] = INCBIN_U32("graphics/items/icons/casteliacone.4bpp.lz"); +const u32 gItemIcon_Casteliacone[] = INCBIN_U32("graphics/items/icons/casteliacone.4bpp.smol"); const u16 gItemIconPalette_Casteliacone[] = INCBIN_U16("graphics/items/icon_palettes/casteliacone.gbapal"); -const u32 gItemIcon_LumioseGalette[] = INCBIN_U32("graphics/items/icons/lumiose_galette.4bpp.lz"); +const u32 gItemIcon_LumioseGalette[] = INCBIN_U32("graphics/items/icons/lumiose_galette.4bpp.smol"); const u16 gItemIconPalette_LumioseGalette[] = INCBIN_U16("graphics/items/icon_palettes/lumiose_galette.gbapal"); -const u32 gItemIcon_ShalourSable[] = INCBIN_U32("graphics/items/icons/shalour_sable.4bpp.lz"); +const u32 gItemIcon_ShalourSable[] = INCBIN_U32("graphics/items/icons/shalour_sable.4bpp.smol"); const u16 gItemIconPalette_ShalourSable[] = INCBIN_U16("graphics/items/icon_palettes/shalour_sable.gbapal"); -const u32 gItemIcon_BigMalasada[] = INCBIN_U32("graphics/items/icons/big_malasada.4bpp.lz"); +const u32 gItemIcon_BigMalasada[] = INCBIN_U32("graphics/items/icons/big_malasada.4bpp.smol"); const u16 gItemIconPalette_BigMalasada[] = INCBIN_U16("graphics/items/icon_palettes/big_malasada.gbapal"); // Vitamins -const u32 gItemIcon_HPUp[] = INCBIN_U32("graphics/items/icons/hp_up.4bpp.lz"); +const u32 gItemIcon_HPUp[] = INCBIN_U32("graphics/items/icons/hp_up.4bpp.smol"); const u16 gItemIconPalette_HPUp[] = INCBIN_U16("graphics/items/icon_palettes/hp_up.gbapal"); -const u32 gItemIcon_Vitamin[] = INCBIN_U32("graphics/items/icons/vitamin.4bpp.lz"); +const u32 gItemIcon_Vitamin[] = INCBIN_U32("graphics/items/icons/vitamin.4bpp.smol"); const u16 gItemIconPalette_Protein[] = INCBIN_U16("graphics/items/icon_palettes/protein.gbapal"); const u16 gItemIconPalette_Iron[] = INCBIN_U16("graphics/items/icon_palettes/iron.gbapal"); @@ -208,43 +208,43 @@ const u16 gItemIconPalette_Zinc[] = INCBIN_U16("graphics/items/icon_palettes/zin const u16 gItemIconPalette_Carbos[] = INCBIN_U16("graphics/items/icon_palettes/carbos.gbapal"); -const u32 gItemIcon_PPUp[] = INCBIN_U32("graphics/items/icons/pp_up.4bpp.lz"); +const u32 gItemIcon_PPUp[] = INCBIN_U32("graphics/items/icons/pp_up.4bpp.smol"); const u16 gItemIconPalette_PPUp[] = INCBIN_U16("graphics/items/icon_palettes/pp_up.gbapal"); -const u32 gItemIcon_PPMax[] = INCBIN_U32("graphics/items/icons/pp_max.4bpp.lz"); +const u32 gItemIcon_PPMax[] = INCBIN_U32("graphics/items/icons/pp_max.4bpp.smol"); const u16 gItemIconPalette_PPMax[] = INCBIN_U16("graphics/items/icon_palettes/pp_max.gbapal"); // EV Feathers -const u32 gItemIcon_HealthFeather[] = INCBIN_U32("graphics/items/icons/health_feather.4bpp.lz"); +const u32 gItemIcon_HealthFeather[] = INCBIN_U32("graphics/items/icons/health_feather.4bpp.smol"); const u16 gItemIconPalette_HealthFeather[] = INCBIN_U16("graphics/items/icon_palettes/health_feather.gbapal"); -const u32 gItemIcon_MuscleFeather[] = INCBIN_U32("graphics/items/icons/muscle_feather.4bpp.lz"); +const u32 gItemIcon_MuscleFeather[] = INCBIN_U32("graphics/items/icons/muscle_feather.4bpp.smol"); const u16 gItemIconPalette_MuscleFeather[] = INCBIN_U16("graphics/items/icon_palettes/muscle_feather.gbapal"); -const u32 gItemIcon_ResistFeather[] = INCBIN_U32("graphics/items/icons/resist_feather.4bpp.lz"); +const u32 gItemIcon_ResistFeather[] = INCBIN_U32("graphics/items/icons/resist_feather.4bpp.smol"); const u16 gItemIconPalette_ResistFeather[] = INCBIN_U16("graphics/items/icon_palettes/resist_feather.gbapal"); -const u32 gItemIcon_GeniusFeather[] = INCBIN_U32("graphics/items/icons/genius_feather.4bpp.lz"); +const u32 gItemIcon_GeniusFeather[] = INCBIN_U32("graphics/items/icons/genius_feather.4bpp.smol"); const u16 gItemIconPalette_GeniusFeather[] = INCBIN_U16("graphics/items/icon_palettes/genius_feather.gbapal"); -const u32 gItemIcon_CleverFeather[] = INCBIN_U32("graphics/items/icons/clever_feather.4bpp.lz"); +const u32 gItemIcon_CleverFeather[] = INCBIN_U32("graphics/items/icons/clever_feather.4bpp.smol"); const u16 gItemIconPalette_CleverFeather[] = INCBIN_U16("graphics/items/icon_palettes/clever_feather.gbapal"); -const u32 gItemIcon_SwiftFeather[] = INCBIN_U32("graphics/items/icons/swift_feather.4bpp.lz"); +const u32 gItemIcon_SwiftFeather[] = INCBIN_U32("graphics/items/icons/swift_feather.4bpp.smol"); const u16 gItemIconPalette_SwiftFeather[] = INCBIN_U16("graphics/items/icon_palettes/swift_feather.gbapal"); // Ability Modifiers -const u32 gItemIcon_AbilityCapsule[] = INCBIN_U32("graphics/items/icons/ability_capsule.4bpp.lz"); +const u32 gItemIcon_AbilityCapsule[] = INCBIN_U32("graphics/items/icons/ability_capsule.4bpp.smol"); const u16 gItemIconPalette_AbilityCapsule[] = INCBIN_U16("graphics/items/icon_palettes/ability_capsule.gbapal"); -const u32 gItemIcon_AbilityPatch[] = INCBIN_U32("graphics/items/icons/ability_patch.4bpp.lz"); +const u32 gItemIcon_AbilityPatch[] = INCBIN_U32("graphics/items/icons/ability_patch.4bpp.smol"); const u16 gItemIconPalette_AbilityPatch[] = INCBIN_U16("graphics/items/icon_palettes/ability_patch.gbapal"); // Mints -const u32 gItemIcon_Mint[] = INCBIN_U32("graphics/items/icons/mint.4bpp.lz"); +const u32 gItemIcon_Mint[] = INCBIN_U32("graphics/items/icons/mint.4bpp.smol"); const u16 gItemIconPalette_RedMint[] = INCBIN_U16("graphics/items/icon_palettes/red_mint.gbapal"); const u16 gItemIconPalette_BlueMint[] = INCBIN_U16("graphics/items/icon_palettes/blue_mint.gbapal"); const u16 gItemIconPalette_LightBlueMint[] = INCBIN_U16("graphics/items/icon_palettes/light_blue_mint.gbapal"); @@ -254,22 +254,22 @@ const u16 gItemIconPalette_YellowMint[] = INCBIN_U16("graphics/items/icon_palett // Candy -const u32 gItemIcon_RareCandy[] = INCBIN_U32("graphics/items/icons/rare_candy.4bpp.lz"); +const u32 gItemIcon_RareCandy[] = INCBIN_U32("graphics/items/icons/rare_candy.4bpp.smol"); const u16 gItemIconPalette_RareCandy[] = INCBIN_U16("graphics/items/icon_palettes/rare_candy.gbapal"); -const u32 gItemIcon_ExpCandyXS[] = INCBIN_U32("graphics/items/icons/exp_candy_xs.4bpp.lz"); -const u32 gItemIcon_ExpCandyS[] = INCBIN_U32("graphics/items/icons/exp_candy_s.4bpp.lz"); -const u32 gItemIcon_ExpCandyM[] = INCBIN_U32("graphics/items/icons/exp_candy_m.4bpp.lz"); -const u32 gItemIcon_ExpCandyL[] = INCBIN_U32("graphics/items/icons/exp_candy_l.4bpp.lz"); -const u32 gItemIcon_ExpCandyXL[] = INCBIN_U32("graphics/items/icons/exp_candy_xl.4bpp.lz"); +const u32 gItemIcon_ExpCandyXS[] = INCBIN_U32("graphics/items/icons/exp_candy_xs.4bpp.smol"); +const u32 gItemIcon_ExpCandyS[] = INCBIN_U32("graphics/items/icons/exp_candy_s.4bpp.smol"); +const u32 gItemIcon_ExpCandyM[] = INCBIN_U32("graphics/items/icons/exp_candy_m.4bpp.smol"); +const u32 gItemIcon_ExpCandyL[] = INCBIN_U32("graphics/items/icons/exp_candy_l.4bpp.smol"); +const u32 gItemIcon_ExpCandyXL[] = INCBIN_U32("graphics/items/icons/exp_candy_xl.4bpp.smol"); const u16 gItemIconPalette_ExpCandies[] = INCBIN_U16("graphics/items/icon_palettes/exp_candies.gbapal"); -const u32 gItemIcon_DynamaxCandy[] = INCBIN_U32("graphics/items/icons/dynamax_candy.4bpp.lz"); +const u32 gItemIcon_DynamaxCandy[] = INCBIN_U32("graphics/items/icons/dynamax_candy.4bpp.smol"); const u16 gItemIconPalette_DynamaxCandy[] = INCBIN_U16("graphics/items/icon_palettes/dynamax_candy.gbapal"); // Medicinal Flutes -const u32 gItemIcon_Flute[] = INCBIN_U32("graphics/items/icons/flute.4bpp.lz"); +const u32 gItemIcon_Flute[] = INCBIN_U32("graphics/items/icons/flute.4bpp.smol"); const u16 gItemIconPalette_BlueFlute[] = INCBIN_U16("graphics/items/icon_palettes/blue_flute.gbapal"); const u16 gItemIconPalette_YellowFlute[] = INCBIN_U16("graphics/items/icon_palettes/yellow_flute.gbapal"); @@ -284,31 +284,31 @@ const u16 gItemIconPalette_WhiteFlute[] = INCBIN_U16("graphics/items/icon_palett // Encounter Modifiers -const u32 gItemIcon_Repel[] = INCBIN_U32("graphics/items/icons/repel.4bpp.lz"); +const u32 gItemIcon_Repel[] = INCBIN_U32("graphics/items/icons/repel.4bpp.smol"); const u16 gItemIconPalette_Repel[] = INCBIN_U16("graphics/items/icon_palettes/repel.gbapal"); const u16 gItemIconPalette_SuperRepel[] = INCBIN_U16("graphics/items/icon_palettes/super_repel.gbapal"); const u16 gItemIconPalette_MaxRepel[] = INCBIN_U16("graphics/items/icon_palettes/max_repel.gbapal"); -const u32 gItemIcon_Lure[] = INCBIN_U32("graphics/items/icons/lure.4bpp.lz"); +const u32 gItemIcon_Lure[] = INCBIN_U32("graphics/items/icons/lure.4bpp.smol"); const u16 gItemIconPalette_Lure[] = INCBIN_U16("graphics/items/icon_palettes/lure.gbapal"); const u16 gItemIconPalette_SuperLure[] = INCBIN_U16("graphics/items/icon_palettes/super_lure.gbapal"); const u16 gItemIconPalette_MaxLure[] = INCBIN_U16("graphics/items/icon_palettes/max_lure.gbapal"); -const u32 gItemIcon_EscapeRope[] = INCBIN_U32("graphics/items/icons/escape_rope.4bpp.lz"); +const u32 gItemIcon_EscapeRope[] = INCBIN_U32("graphics/items/icons/escape_rope.4bpp.smol"); const u16 gItemIconPalette_EscapeRope[] = INCBIN_U16("graphics/items/icon_palettes/escape_rope.gbapal"); // X Items -const u32 gItemIcon_BattleStatItem[] = INCBIN_U32("graphics/items/icons/battle_stat_item.4bpp.lz"); +const u32 gItemIcon_BattleStatItem[] = INCBIN_U32("graphics/items/icons/battle_stat_item.4bpp.smol"); const u16 gItemIconPalette_XAttack[] = INCBIN_U16("graphics/items/icon_palettes/x_attack.gbapal"); const u16 gItemIconPalette_XDefend[] = INCBIN_U16("graphics/items/icon_palettes/x_defend.gbapal"); const u16 gItemIconPalette_XSpecial[] = INCBIN_U16("graphics/items/icon_palettes/x_special.gbapal"); -const u32 gItemIcon_XSpecialDefense[] = INCBIN_U32("graphics/items/icons/x_special_defense.4bpp.lz"); +const u32 gItemIcon_XSpecialDefense[] = INCBIN_U32("graphics/items/icons/x_special_defense.4bpp.smol"); const u16 gItemIconPalette_XSpecialDefense[] = INCBIN_U16("graphics/items/icon_palettes/x_special_defense.gbapal"); const u16 gItemIconPalette_XSpeed[] = INCBIN_U16("graphics/items/icon_palettes/x_speed.gbapal"); @@ -321,60 +321,60 @@ const u16 gItemIconPalette_GuardSpec[] = INCBIN_U16("graphics/items/icon_palette // Escape Items -const u32 gItemIcon_PokeDoll[] = INCBIN_U32("graphics/items/icons/poke_doll.4bpp.lz"); +const u32 gItemIcon_PokeDoll[] = INCBIN_U32("graphics/items/icons/poke_doll.4bpp.smol"); const u16 gItemIconPalette_PokeDoll[] = INCBIN_U16("graphics/items/icon_palettes/poke_doll.gbapal"); -const u32 gItemIcon_FluffyTail[] = INCBIN_U32("graphics/items/icons/fluffy_tail.4bpp.lz"); +const u32 gItemIcon_FluffyTail[] = INCBIN_U32("graphics/items/icons/fluffy_tail.4bpp.smol"); const u16 gItemIconPalette_FluffyTail[] = INCBIN_U16("graphics/items/icon_palettes/fluffy_tail.gbapal"); -const u32 gItemIcon_PokeToy[] = INCBIN_U32("graphics/items/icons/poke_toy.4bpp.lz"); +const u32 gItemIcon_PokeToy[] = INCBIN_U32("graphics/items/icons/poke_toy.4bpp.smol"); const u16 gItemIconPalette_PokeToy[] = INCBIN_U16("graphics/items/icon_palettes/poke_toy.gbapal"); -const u32 gItemIcon_MaxMushrooms[] = INCBIN_U32("graphics/items/icons/max_mushrooms.4bpp.lz"); +const u32 gItemIcon_MaxMushrooms[] = INCBIN_U32("graphics/items/icons/max_mushrooms.4bpp.smol"); const u16 gItemIconPalette_MaxMushrooms[] = INCBIN_U16("graphics/items/icon_palettes/max_mushrooms.gbapal"); // Treasures -const u32 gItemIcon_BottleCap[] = INCBIN_U32("graphics/items/icons/bottle_cap.4bpp.lz"); +const u32 gItemIcon_BottleCap[] = INCBIN_U32("graphics/items/icons/bottle_cap.4bpp.smol"); const u16 gItemIconPalette_BottleCap[] = INCBIN_U16("graphics/items/icon_palettes/bottle_cap.gbapal"); const u16 gItemIconPalette_GoldBottleCap[] = INCBIN_U16("graphics/items/icon_palettes/gold_bottle_cap.gbapal"); -const u32 gItemIcon_Nugget[] = INCBIN_U32("graphics/items/icons/nugget.4bpp.lz"); +const u32 gItemIcon_Nugget[] = INCBIN_U32("graphics/items/icons/nugget.4bpp.smol"); const u16 gItemIconPalette_Nugget[] = INCBIN_U16("graphics/items/icon_palettes/nugget.gbapal"); -const u32 gItemIcon_BigNugget[] = INCBIN_U32("graphics/items/icons/big_nugget.4bpp.lz"); +const u32 gItemIcon_BigNugget[] = INCBIN_U32("graphics/items/icons/big_nugget.4bpp.smol"); const u16 gItemIconPalette_BigNugget[] = INCBIN_U16("graphics/items/icon_palettes/big_nugget.gbapal"); -const u32 gItemIcon_TinyMushroom[] = INCBIN_U32("graphics/items/icons/tiny_mushroom.4bpp.lz"); +const u32 gItemIcon_TinyMushroom[] = INCBIN_U32("graphics/items/icons/tiny_mushroom.4bpp.smol"); const u16 gItemIconPalette_Mushroom[] = INCBIN_U16("graphics/items/icon_palettes/mushroom.gbapal"); -const u32 gItemIcon_BigMushroom[] = INCBIN_U32("graphics/items/icons/big_mushroom.4bpp.lz"); +const u32 gItemIcon_BigMushroom[] = INCBIN_U32("graphics/items/icons/big_mushroom.4bpp.smol"); -const u32 gItemIcon_BalmMushroom[] = INCBIN_U32("graphics/items/icons/balm_mushroom.4bpp.lz"); +const u32 gItemIcon_BalmMushroom[] = INCBIN_U32("graphics/items/icons/balm_mushroom.4bpp.smol"); const u16 gItemIconPalette_BalmMushroom[] = INCBIN_U16("graphics/items/icon_palettes/balm_mushroom.gbapal"); -const u32 gItemIcon_Pearl[] = INCBIN_U32("graphics/items/icons/pearl.4bpp.lz"); +const u32 gItemIcon_Pearl[] = INCBIN_U32("graphics/items/icons/pearl.4bpp.smol"); const u16 gItemIconPalette_Pearl[] = INCBIN_U16("graphics/items/icon_palettes/pearl.gbapal"); -const u32 gItemIcon_BigPearl[] = INCBIN_U32("graphics/items/icons/big_pearl.4bpp.lz"); +const u32 gItemIcon_BigPearl[] = INCBIN_U32("graphics/items/icons/big_pearl.4bpp.smol"); -const u32 gItemIcon_PearlString[] = INCBIN_U32("graphics/items/icons/pearl_string.4bpp.lz"); +const u32 gItemIcon_PearlString[] = INCBIN_U32("graphics/items/icons/pearl_string.4bpp.smol"); const u16 gItemIconPalette_PearlString[] = INCBIN_U16("graphics/items/icon_palettes/pearl_string.gbapal"); -const u32 gItemIcon_Stardust[] = INCBIN_U32("graphics/items/icons/stardust.4bpp.lz"); +const u32 gItemIcon_Stardust[] = INCBIN_U32("graphics/items/icons/stardust.4bpp.smol"); const u16 gItemIconPalette_Star[] = INCBIN_U16("graphics/items/icon_palettes/star.gbapal"); -const u32 gItemIcon_StarPiece[] = INCBIN_U32("graphics/items/icons/star_piece.4bpp.lz"); +const u32 gItemIcon_StarPiece[] = INCBIN_U32("graphics/items/icons/star_piece.4bpp.smol"); -const u32 gItemIcon_CometShard[] = INCBIN_U32("graphics/items/icons/comet_shard.4bpp.lz"); +const u32 gItemIcon_CometShard[] = INCBIN_U32("graphics/items/icons/comet_shard.4bpp.smol"); const u16 gItemIconPalette_CometShard[] = INCBIN_U16("graphics/items/icon_palettes/comet_shard.gbapal"); const u16 gItemIconPalette_ShoalSalt[] = INCBIN_U16("graphics/items/icon_palettes/shoal_salt.gbapal"); -const u32 gItemIcon_ShoalShell[] = INCBIN_U32("graphics/items/icons/shoal_shell.4bpp.lz"); +const u32 gItemIcon_ShoalShell[] = INCBIN_U32("graphics/items/icons/shoal_shell.4bpp.smol"); const u16 gItemIconPalette_Shell[] = INCBIN_U16("graphics/items/icon_palettes/shell.gbapal"); -const u32 gItemIcon_Shard[] = INCBIN_U32("graphics/items/icons/shard.4bpp.lz"); +const u32 gItemIcon_Shard[] = INCBIN_U32("graphics/items/icons/shard.4bpp.smol"); const u16 gItemIconPalette_RedShard[] = INCBIN_U16("graphics/items/icon_palettes/red_shard.gbapal"); const u16 gItemIconPalette_BlueShard[] = INCBIN_U16("graphics/items/icon_palettes/blue_shard.gbapal"); @@ -383,87 +383,87 @@ const u16 gItemIconPalette_YellowShard[] = INCBIN_U16("graphics/items/icon_palet const u16 gItemIconPalette_GreenShard[] = INCBIN_U16("graphics/items/icon_palettes/green_shard.gbapal"); -const u32 gItemIcon_HeartScale[] = INCBIN_U32("graphics/items/icons/heart_scale.4bpp.lz"); +const u32 gItemIcon_HeartScale[] = INCBIN_U32("graphics/items/icons/heart_scale.4bpp.smol"); const u16 gItemIconPalette_HeartScale[] = INCBIN_U16("graphics/items/icon_palettes/heart_scale.gbapal"); -const u32 gItemIcon_Honey[] = INCBIN_U32("graphics/items/icons/honey.4bpp.lz"); +const u32 gItemIcon_Honey[] = INCBIN_U32("graphics/items/icons/honey.4bpp.smol"); const u16 gItemIconPalette_Honey[] = INCBIN_U16("graphics/items/icon_palettes/honey.gbapal"); -const u32 gItemIcon_RareBone[] = INCBIN_U32("graphics/items/icons/rare_bone.4bpp.lz"); +const u32 gItemIcon_RareBone[] = INCBIN_U32("graphics/items/icons/rare_bone.4bpp.smol"); const u16 gItemIconPalette_RareBone[] = INCBIN_U16("graphics/items/icon_palettes/rare_bone.gbapal"); -const u32 gItemIcon_OddKeystone[] = INCBIN_U32("graphics/items/icons/odd_keystone.4bpp.lz"); +const u32 gItemIcon_OddKeystone[] = INCBIN_U32("graphics/items/icons/odd_keystone.4bpp.smol"); const u16 gItemIconPalette_OddKeystone[] = INCBIN_U16("graphics/items/icon_palettes/odd_keystone.gbapal"); -const u32 gItemIcon_PrettyFeather[] = INCBIN_U32("graphics/items/icons/pretty_feather.4bpp.lz"); +const u32 gItemIcon_PrettyFeather[] = INCBIN_U32("graphics/items/icons/pretty_feather.4bpp.smol"); const u16 gItemIconPalette_PrettyFeather[] = INCBIN_U16("graphics/items/icon_palettes/pretty_feather.gbapal"); -const u32 gItemIcon_RelicCoin[] = INCBIN_U32("graphics/items/icons/relic_coin.4bpp.lz"); +const u32 gItemIcon_RelicCoin[] = INCBIN_U32("graphics/items/icons/relic_coin.4bpp.smol"); const u16 gItemIconPalette_RelicCopper[] = INCBIN_U16("graphics/items/icon_palettes/relic_copper.gbapal"); const u16 gItemIconPalette_RelicSilver[] = INCBIN_U16("graphics/items/icon_palettes/relic_silver.gbapal"); const u16 gItemIconPalette_RelicGold[] = INCBIN_U16("graphics/items/icon_palettes/relic_gold.gbapal"); -const u32 gItemIcon_RelicVase[] = INCBIN_U32("graphics/items/icons/relic_vase.4bpp.lz"); +const u32 gItemIcon_RelicVase[] = INCBIN_U32("graphics/items/icons/relic_vase.4bpp.smol"); const u16 gItemIconPalette_Relics[] = INCBIN_U16("graphics/items/icon_palettes/relics.gbapal"); -const u32 gItemIcon_RelicBand[] = INCBIN_U32("graphics/items/icons/relic_band.4bpp.lz"); -const u32 gItemIcon_RelicStatue[] = INCBIN_U32("graphics/items/icons/relic_statue.4bpp.lz"); -const u32 gItemIcon_RelicCrown[] = INCBIN_U32("graphics/items/icons/relic_crown.4bpp.lz"); +const u32 gItemIcon_RelicBand[] = INCBIN_U32("graphics/items/icons/relic_band.4bpp.smol"); +const u32 gItemIcon_RelicStatue[] = INCBIN_U32("graphics/items/icons/relic_statue.4bpp.smol"); +const u32 gItemIcon_RelicCrown[] = INCBIN_U32("graphics/items/icons/relic_crown.4bpp.smol"); -const u32 gItemIcon_StrangeSouvenir[] = INCBIN_U32("graphics/items/icons/strange_souvenir.4bpp.lz"); +const u32 gItemIcon_StrangeSouvenir[] = INCBIN_U32("graphics/items/icons/strange_souvenir.4bpp.smol"); const u16 gItemIconPalette_StrangeSouvenir[] = INCBIN_U16("graphics/items/icon_palettes/strange_souvenir.gbapal"); // Fossils -const u32 gItemIcon_HelixFossil[] = INCBIN_U32("graphics/items/icons/helix_fossil.4bpp.lz"); +const u32 gItemIcon_HelixFossil[] = INCBIN_U32("graphics/items/icons/helix_fossil.4bpp.smol"); const u16 gItemIconPalette_KantoFossil[] = INCBIN_U16("graphics/items/icon_palettes/kanto_fossil.gbapal"); -const u32 gItemIcon_DomeFossil[] = INCBIN_U32("graphics/items/icons/dome_fossil.4bpp.lz"); +const u32 gItemIcon_DomeFossil[] = INCBIN_U32("graphics/items/icons/dome_fossil.4bpp.smol"); -const u32 gItemIcon_OldAmber[] = INCBIN_U32("graphics/items/icons/old_amber.4bpp.lz"); +const u32 gItemIcon_OldAmber[] = INCBIN_U32("graphics/items/icons/old_amber.4bpp.smol"); const u16 gItemIconPalette_OldAmber[] = INCBIN_U16("graphics/items/icon_palettes/old_amber.gbapal"); -const u32 gItemIcon_RootFossil[] = INCBIN_U32("graphics/items/icons/root_fossil.4bpp.lz"); +const u32 gItemIcon_RootFossil[] = INCBIN_U32("graphics/items/icons/root_fossil.4bpp.smol"); const u16 gItemIconPalette_HoennFossil[] = INCBIN_U16("graphics/items/icon_palettes/hoenn_fossil.gbapal"); -const u32 gItemIcon_ClawFossil[] = INCBIN_U32("graphics/items/icons/claw_fossil.4bpp.lz"); +const u32 gItemIcon_ClawFossil[] = INCBIN_U32("graphics/items/icons/claw_fossil.4bpp.smol"); -const u32 gItemIcon_ArmorFossil[] = INCBIN_U32("graphics/items/icons/armor_fossil.4bpp.lz"); +const u32 gItemIcon_ArmorFossil[] = INCBIN_U32("graphics/items/icons/armor_fossil.4bpp.smol"); const u16 gItemIconPalette_ArmorFossil[] = INCBIN_U16("graphics/items/icon_palettes/armor_fossil.gbapal"); -const u32 gItemIcon_SkullFossil[] = INCBIN_U32("graphics/items/icons/skull_fossil.4bpp.lz"); +const u32 gItemIcon_SkullFossil[] = INCBIN_U32("graphics/items/icons/skull_fossil.4bpp.smol"); const u16 gItemIconPalette_SkullFossil[] = INCBIN_U16("graphics/items/icon_palettes/skull_fossil.gbapal"); -const u32 gItemIcon_CoverFossil[] = INCBIN_U32("graphics/items/icons/cover_fossil.4bpp.lz"); +const u32 gItemIcon_CoverFossil[] = INCBIN_U32("graphics/items/icons/cover_fossil.4bpp.smol"); const u16 gItemIconPalette_CoverFossil[] = INCBIN_U16("graphics/items/icon_palettes/cover_fossil.gbapal"); -const u32 gItemIcon_PlumeFossil[] = INCBIN_U32("graphics/items/icons/plume_fossil.4bpp.lz"); +const u32 gItemIcon_PlumeFossil[] = INCBIN_U32("graphics/items/icons/plume_fossil.4bpp.smol"); const u16 gItemIconPalette_PlumeFossil[] = INCBIN_U16("graphics/items/icon_palettes/plume_fossil.gbapal"); -const u32 gItemIcon_JawFossil[] = INCBIN_U32("graphics/items/icons/jaw_fossil.4bpp.lz"); +const u32 gItemIcon_JawFossil[] = INCBIN_U32("graphics/items/icons/jaw_fossil.4bpp.smol"); const u16 gItemIconPalette_JawFossil[] = INCBIN_U16("graphics/items/icon_palettes/jaw_fossil.gbapal"); -const u32 gItemIcon_SailFossil[] = INCBIN_U32("graphics/items/icons/sail_fossil.4bpp.lz"); +const u32 gItemIcon_SailFossil[] = INCBIN_U32("graphics/items/icons/sail_fossil.4bpp.smol"); const u16 gItemIconPalette_SailFossil[] = INCBIN_U16("graphics/items/icon_palettes/sail_fossil.gbapal"); -const u32 gItemIcon_FossilizedBird[] = INCBIN_U32("graphics/items/icons/fossilized_bird.4bpp.lz"); +const u32 gItemIcon_FossilizedBird[] = INCBIN_U32("graphics/items/icons/fossilized_bird.4bpp.smol"); const u16 gItemIconPalette_FossilizedBird[] = INCBIN_U16("graphics/items/icon_palettes/fossilized_bird.gbapal"); -const u32 gItemIcon_FossilizedFish[] = INCBIN_U32("graphics/items/icons/fossilized_fish.4bpp.lz"); +const u32 gItemIcon_FossilizedFish[] = INCBIN_U32("graphics/items/icons/fossilized_fish.4bpp.smol"); const u16 gItemIconPalette_FossilizedFish[] = INCBIN_U16("graphics/items/icon_palettes/fossilized_fish.gbapal"); -const u32 gItemIcon_FossilizedDrake[] = INCBIN_U32("graphics/items/icons/fossilized_drake.4bpp.lz"); +const u32 gItemIcon_FossilizedDrake[] = INCBIN_U32("graphics/items/icons/fossilized_drake.4bpp.smol"); const u16 gItemIconPalette_FossilizedDrake[] = INCBIN_U16("graphics/items/icon_palettes/fossilized_drake.gbapal"); -const u32 gItemIcon_FossilizedDino[] = INCBIN_U32("graphics/items/icons/fossilized_dino.4bpp.lz"); +const u32 gItemIcon_FossilizedDino[] = INCBIN_U32("graphics/items/icons/fossilized_dino.4bpp.smol"); const u16 gItemIconPalette_FossilizedDino[] = INCBIN_U16("graphics/items/icon_palettes/fossilized_dino.gbapal"); // Mulch -const u32 gItemIcon_Mulch[] = INCBIN_U32("graphics/items/icons/mulch.4bpp.lz"); +const u32 gItemIcon_Mulch[] = INCBIN_U32("graphics/items/icons/mulch.4bpp.smol"); const u16 gItemIconPalette_GrowthMulch[] = INCBIN_U16("graphics/items/icon_palettes/growth_mulch.gbapal"); const u16 gItemIconPalette_DampMulch[] = INCBIN_U16("graphics/items/icon_palettes/damp_mulch.gbapal"); -const u32 gItemIcon_StableMulch[] = INCBIN_U32("graphics/items/icons/stable_mulch.4bpp.lz"); +const u32 gItemIcon_StableMulch[] = INCBIN_U32("graphics/items/icons/stable_mulch.4bpp.smol"); const u16 gItemIconPalette_StableMulch[] = INCBIN_U16("graphics/items/icon_palettes/stable_mulch.gbapal"); const u16 gItemIconPalette_GooeyMulch[] = INCBIN_U16("graphics/items/icon_palettes/gooey_mulch.gbapal"); @@ -474,723 +474,723 @@ const u16 gItemIconPalette_AmazeMulch[] = INCBIN_U16("graphics/items/icon_palett // Apricorns -const u32 gItemIcon_RedApricorn[] = INCBIN_U32("graphics/items/icons/red_apricorn.4bpp.lz"); +const u32 gItemIcon_RedApricorn[] = INCBIN_U32("graphics/items/icons/red_apricorn.4bpp.smol"); const u16 gItemIconPalette_RedApricorn[] = INCBIN_U16("graphics/items/icon_palettes/red_apricorn.gbapal"); -const u32 gItemIcon_BlueApricorn[] = INCBIN_U32("graphics/items/icons/blue_apricorn.4bpp.lz"); +const u32 gItemIcon_BlueApricorn[] = INCBIN_U32("graphics/items/icons/blue_apricorn.4bpp.smol"); const u16 gItemIconPalette_BlueApricorn[] = INCBIN_U16("graphics/items/icon_palettes/blue_apricorn.gbapal"); -const u32 gItemIcon_YellowApricorn[] = INCBIN_U32("graphics/items/icons/yellow_apricorn.4bpp.lz"); +const u32 gItemIcon_YellowApricorn[] = INCBIN_U32("graphics/items/icons/yellow_apricorn.4bpp.smol"); const u16 gItemIconPalette_YellowApricorn[] = INCBIN_U16("graphics/items/icon_palettes/yellow_apricorn.gbapal"); -const u32 gItemIcon_GreenApricorn[] = INCBIN_U32("graphics/items/icons/green_apricorn.4bpp.lz"); +const u32 gItemIcon_GreenApricorn[] = INCBIN_U32("graphics/items/icons/green_apricorn.4bpp.smol"); const u16 gItemIconPalette_GreenApricorn[] = INCBIN_U16("graphics/items/icon_palettes/green_apricorn.gbapal"); -const u32 gItemIcon_PinkApricorn[] = INCBIN_U32("graphics/items/icons/pink_apricorn.4bpp.lz"); +const u32 gItemIcon_PinkApricorn[] = INCBIN_U32("graphics/items/icons/pink_apricorn.4bpp.smol"); const u16 gItemIconPalette_PinkApricorn[] = INCBIN_U16("graphics/items/icon_palettes/pink_apricorn.gbapal"); -const u32 gItemIcon_WhiteApricorn[] = INCBIN_U32("graphics/items/icons/white_apricorn.4bpp.lz"); +const u32 gItemIcon_WhiteApricorn[] = INCBIN_U32("graphics/items/icons/white_apricorn.4bpp.smol"); const u16 gItemIconPalette_WhiteApricorn[] = INCBIN_U16("graphics/items/icon_palettes/white_apricorn.gbapal"); -const u32 gItemIcon_BlackApricorn[] = INCBIN_U32("graphics/items/icons/black_apricorn.4bpp.lz"); +const u32 gItemIcon_BlackApricorn[] = INCBIN_U32("graphics/items/icons/black_apricorn.4bpp.smol"); const u16 gItemIconPalette_BlackApricorn[] = INCBIN_U16("graphics/items/icon_palettes/black_apricorn.gbapal"); -const u32 gItemIcon_WishingPiece[] = INCBIN_U32("graphics/items/icons/wishing_piece.4bpp.lz"); +const u32 gItemIcon_WishingPiece[] = INCBIN_U32("graphics/items/icons/wishing_piece.4bpp.smol"); const u16 gItemIconPalette_WishingPiece[] = INCBIN_U16("graphics/items/icon_palettes/wishing_piece.gbapal"); -const u32 gItemIcon_GalaricaTwig[] = INCBIN_U32("graphics/items/icons/galarica_twig.4bpp.lz"); +const u32 gItemIcon_GalaricaTwig[] = INCBIN_U32("graphics/items/icons/galarica_twig.4bpp.smol"); const u16 gItemIconPalette_GalaricaItem[] = INCBIN_U16("graphics/items/icon_palettes/galarica_item.gbapal"); -const u32 gItemIcon_ArmoriteOre[] = INCBIN_U32("graphics/items/icons/armorite_ore.4bpp.lz"); +const u32 gItemIcon_ArmoriteOre[] = INCBIN_U32("graphics/items/icons/armorite_ore.4bpp.smol"); const u16 gItemIconPalette_ArmoriteOre[] = INCBIN_U16("graphics/items/icon_palettes/armorite_ore.gbapal"); -const u32 gItemIcon_DyniteOre[] = INCBIN_U32("graphics/items/icons/dynite_ore.4bpp.lz"); +const u32 gItemIcon_DyniteOre[] = INCBIN_U32("graphics/items/icons/dynite_ore.4bpp.smol"); const u16 gItemIconPalette_DyniteOre[] = INCBIN_U16("graphics/items/icon_palettes/dynite_ore.gbapal"); // Mail -const u32 gItemIcon_OrangeMail[] = INCBIN_U32("graphics/items/icons/orange_mail.4bpp.lz"); +const u32 gItemIcon_OrangeMail[] = INCBIN_U32("graphics/items/icons/orange_mail.4bpp.smol"); const u16 gItemIconPalette_OrangeMail[] = INCBIN_U16("graphics/items/icon_palettes/orange_mail.gbapal"); -const u32 gItemIcon_HarborMail[] = INCBIN_U32("graphics/items/icons/harbor_mail.4bpp.lz"); +const u32 gItemIcon_HarborMail[] = INCBIN_U32("graphics/items/icons/harbor_mail.4bpp.smol"); const u16 gItemIconPalette_HarborMail[] = INCBIN_U16("graphics/items/icon_palettes/harbor_mail.gbapal"); -const u32 gItemIcon_GlitterMail[] = INCBIN_U32("graphics/items/icons/glitter_mail.4bpp.lz"); +const u32 gItemIcon_GlitterMail[] = INCBIN_U32("graphics/items/icons/glitter_mail.4bpp.smol"); const u16 gItemIconPalette_GlitterMail[] = INCBIN_U16("graphics/items/icon_palettes/glitter_mail.gbapal"); -const u32 gItemIcon_MechMail[] = INCBIN_U32("graphics/items/icons/mech_mail.4bpp.lz"); +const u32 gItemIcon_MechMail[] = INCBIN_U32("graphics/items/icons/mech_mail.4bpp.smol"); const u16 gItemIconPalette_MechMail[] = INCBIN_U16("graphics/items/icon_palettes/mech_mail.gbapal"); -const u32 gItemIcon_WoodMail[] = INCBIN_U32("graphics/items/icons/wood_mail.4bpp.lz"); +const u32 gItemIcon_WoodMail[] = INCBIN_U32("graphics/items/icons/wood_mail.4bpp.smol"); const u16 gItemIconPalette_WoodMail[] = INCBIN_U16("graphics/items/icon_palettes/wood_mail.gbapal"); -const u32 gItemIcon_WaveMail[] = INCBIN_U32("graphics/items/icons/wave_mail.4bpp.lz"); +const u32 gItemIcon_WaveMail[] = INCBIN_U32("graphics/items/icons/wave_mail.4bpp.smol"); const u16 gItemIconPalette_WaveMail[] = INCBIN_U16("graphics/items/icon_palettes/wave_mail.gbapal"); -const u32 gItemIcon_BeadMail[] = INCBIN_U32("graphics/items/icons/bead_mail.4bpp.lz"); +const u32 gItemIcon_BeadMail[] = INCBIN_U32("graphics/items/icons/bead_mail.4bpp.smol"); const u16 gItemIconPalette_BeadMail[] = INCBIN_U16("graphics/items/icon_palettes/bead_mail.gbapal"); -const u32 gItemIcon_ShadowMail[] = INCBIN_U32("graphics/items/icons/shadow_mail.4bpp.lz"); +const u32 gItemIcon_ShadowMail[] = INCBIN_U32("graphics/items/icons/shadow_mail.4bpp.smol"); const u16 gItemIconPalette_ShadowMail[] = INCBIN_U16("graphics/items/icon_palettes/shadow_mail.gbapal"); -const u32 gItemIcon_TropicMail[] = INCBIN_U32("graphics/items/icons/tropic_mail.4bpp.lz"); +const u32 gItemIcon_TropicMail[] = INCBIN_U32("graphics/items/icons/tropic_mail.4bpp.smol"); const u16 gItemIconPalette_TropicMail[] = INCBIN_U16("graphics/items/icon_palettes/tropic_mail.gbapal"); -const u32 gItemIcon_DreamMail[] = INCBIN_U32("graphics/items/icons/dream_mail.4bpp.lz"); +const u32 gItemIcon_DreamMail[] = INCBIN_U32("graphics/items/icons/dream_mail.4bpp.smol"); const u16 gItemIconPalette_DreamMail[] = INCBIN_U16("graphics/items/icon_palettes/dream_mail.gbapal"); -const u32 gItemIcon_FabMail[] = INCBIN_U32("graphics/items/icons/fab_mail.4bpp.lz"); +const u32 gItemIcon_FabMail[] = INCBIN_U32("graphics/items/icons/fab_mail.4bpp.smol"); const u16 gItemIconPalette_FabMail[] = INCBIN_U16("graphics/items/icon_palettes/fab_mail.gbapal"); -const u32 gItemIcon_RetroMail[] = INCBIN_U32("graphics/items/icons/retro_mail.4bpp.lz"); +const u32 gItemIcon_RetroMail[] = INCBIN_U32("graphics/items/icons/retro_mail.4bpp.smol"); const u16 gItemIconPalette_RetroMail[] = INCBIN_U16("graphics/items/icon_palettes/retro_mail.gbapal"); // Evolution Items -const u32 gItemIcon_FireStone[] = INCBIN_U32("graphics/items/icons/fire_stone.4bpp.lz"); +const u32 gItemIcon_FireStone[] = INCBIN_U32("graphics/items/icons/fire_stone.4bpp.smol"); const u16 gItemIconPalette_FireStone[] = INCBIN_U16("graphics/items/icon_palettes/fire_stone.gbapal"); -const u32 gItemIcon_WaterStone[] = INCBIN_U32("graphics/items/icons/water_stone.4bpp.lz"); +const u32 gItemIcon_WaterStone[] = INCBIN_U32("graphics/items/icons/water_stone.4bpp.smol"); const u16 gItemIconPalette_WaterStone[] = INCBIN_U16("graphics/items/icon_palettes/water_stone.gbapal"); -const u32 gItemIcon_ThunderStone[] = INCBIN_U32("graphics/items/icons/thunder_stone.4bpp.lz"); +const u32 gItemIcon_ThunderStone[] = INCBIN_U32("graphics/items/icons/thunder_stone.4bpp.smol"); const u16 gItemIconPalette_ThunderStone[] = INCBIN_U16("graphics/items/icon_palettes/thunder_stone.gbapal"); -const u32 gItemIcon_LeafStone[] = INCBIN_U32("graphics/items/icons/leaf_stone.4bpp.lz"); +const u32 gItemIcon_LeafStone[] = INCBIN_U32("graphics/items/icons/leaf_stone.4bpp.smol"); const u16 gItemIconPalette_LeafStone[] = INCBIN_U16("graphics/items/icon_palettes/leaf_stone.gbapal"); -const u32 gItemIcon_IceStone[] = INCBIN_U32("graphics/items/icons/ice_stone.4bpp.lz"); +const u32 gItemIcon_IceStone[] = INCBIN_U32("graphics/items/icons/ice_stone.4bpp.smol"); const u16 gItemIconPalette_IceStone[] = INCBIN_U16("graphics/items/icon_palettes/ice_stone.gbapal"); -const u32 gItemIcon_SunStone[] = INCBIN_U32("graphics/items/icons/sun_stone.4bpp.lz"); +const u32 gItemIcon_SunStone[] = INCBIN_U32("graphics/items/icons/sun_stone.4bpp.smol"); const u16 gItemIconPalette_SunStone[] = INCBIN_U16("graphics/items/icon_palettes/sun_stone.gbapal"); -const u32 gItemIcon_MoonStone[] = INCBIN_U32("graphics/items/icons/moon_stone.4bpp.lz"); +const u32 gItemIcon_MoonStone[] = INCBIN_U32("graphics/items/icons/moon_stone.4bpp.smol"); const u16 gItemIconPalette_MoonStone[] = INCBIN_U16("graphics/items/icon_palettes/moon_stone.gbapal"); -const u32 gItemIcon_ShinyStone[] = INCBIN_U32("graphics/items/icons/shiny_stone.4bpp.lz"); +const u32 gItemIcon_ShinyStone[] = INCBIN_U32("graphics/items/icons/shiny_stone.4bpp.smol"); const u16 gItemIconPalette_ShinyStone[] = INCBIN_U16("graphics/items/icon_palettes/shiny_stone.gbapal"); -const u32 gItemIcon_DuskStone[] = INCBIN_U32("graphics/items/icons/dusk_stone.4bpp.lz"); +const u32 gItemIcon_DuskStone[] = INCBIN_U32("graphics/items/icons/dusk_stone.4bpp.smol"); const u16 gItemIconPalette_DuskStone[] = INCBIN_U16("graphics/items/icon_palettes/dusk_stone.gbapal"); -const u32 gItemIcon_DawnStone[] = INCBIN_U32("graphics/items/icons/dawn_stone.4bpp.lz"); +const u32 gItemIcon_DawnStone[] = INCBIN_U32("graphics/items/icons/dawn_stone.4bpp.smol"); const u16 gItemIconPalette_DawnStone[] = INCBIN_U16("graphics/items/icon_palettes/dawn_stone.gbapal"); -const u32 gItemIcon_SweetApple[] = INCBIN_U32("graphics/items/icons/sweet_apple.4bpp.lz"); +const u32 gItemIcon_SweetApple[] = INCBIN_U32("graphics/items/icons/sweet_apple.4bpp.smol"); const u16 gItemIconPalette_SweetApple[] = INCBIN_U16("graphics/items/icon_palettes/sweet_apple.gbapal"); -const u32 gItemIcon_TartApple[] = INCBIN_U32("graphics/items/icons/tart_apple.4bpp.lz"); +const u32 gItemIcon_TartApple[] = INCBIN_U32("graphics/items/icons/tart_apple.4bpp.smol"); const u16 gItemIconPalette_TartApple[] = INCBIN_U16("graphics/items/icon_palettes/tart_apple.gbapal"); -const u32 gItemIcon_CrackedPot[] = INCBIN_U32("graphics/items/icons/cracked_pot.4bpp.lz"); -const u32 gItemIcon_ChippedPot[] = INCBIN_U32("graphics/items/icons/chipped_pot.4bpp.lz"); +const u32 gItemIcon_CrackedPot[] = INCBIN_U32("graphics/items/icons/cracked_pot.4bpp.smol"); +const u32 gItemIcon_ChippedPot[] = INCBIN_U32("graphics/items/icons/chipped_pot.4bpp.smol"); const u16 gItemIconPalette_Pot[] = INCBIN_U16("graphics/items/icon_palettes/pot.gbapal"); -const u32 gItemIcon_GalaricaCuff[] = INCBIN_U32("graphics/items/icons/galarica_cuff.4bpp.lz"); +const u32 gItemIcon_GalaricaCuff[] = INCBIN_U32("graphics/items/icons/galarica_cuff.4bpp.smol"); -const u32 gItemIcon_GalaricaWreath[] = INCBIN_U32("graphics/items/icons/galarica_wreath.4bpp.lz"); +const u32 gItemIcon_GalaricaWreath[] = INCBIN_U32("graphics/items/icons/galarica_wreath.4bpp.smol"); -const u32 gItemIcon_DragonScale[] = INCBIN_U32("graphics/items/icons/dragon_scale.4bpp.lz"); +const u32 gItemIcon_DragonScale[] = INCBIN_U32("graphics/items/icons/dragon_scale.4bpp.smol"); const u16 gItemIconPalette_DragonScale[] = INCBIN_U16("graphics/items/icon_palettes/dragon_scale.gbapal"); -const u32 gItemIcon_Upgrade[] = INCBIN_U32("graphics/items/icons/upgrade.4bpp.lz"); +const u32 gItemIcon_Upgrade[] = INCBIN_U32("graphics/items/icons/upgrade.4bpp.smol"); const u16 gItemIconPalette_Upgrade[] = INCBIN_U16("graphics/items/icon_palettes/upgrade.gbapal"); -const u32 gItemIcon_Protector[] = INCBIN_U32("graphics/items/icons/protector.4bpp.lz"); +const u32 gItemIcon_Protector[] = INCBIN_U32("graphics/items/icons/protector.4bpp.smol"); const u16 gItemIconPalette_Protector[] = INCBIN_U16("graphics/items/icon_palettes/protector.gbapal"); -const u32 gItemIcon_Electirizer[] = INCBIN_U32("graphics/items/icons/electirizer.4bpp.lz"); +const u32 gItemIcon_Electirizer[] = INCBIN_U32("graphics/items/icons/electirizer.4bpp.smol"); const u16 gItemIconPalette_Electirizer[] = INCBIN_U16("graphics/items/icon_palettes/electirizer.gbapal"); -const u32 gItemIcon_Magmarizer[] = INCBIN_U32("graphics/items/icons/magmarizer.4bpp.lz"); +const u32 gItemIcon_Magmarizer[] = INCBIN_U32("graphics/items/icons/magmarizer.4bpp.smol"); const u16 gItemIconPalette_Magmarizer[] = INCBIN_U16("graphics/items/icon_palettes/magmarizer.gbapal"); -const u32 gItemIcon_DubiousDisc[] = INCBIN_U32("graphics/items/icons/dubious_disc.4bpp.lz"); +const u32 gItemIcon_DubiousDisc[] = INCBIN_U32("graphics/items/icons/dubious_disc.4bpp.smol"); const u16 gItemIconPalette_DubiousDisc[] = INCBIN_U16("graphics/items/icon_palettes/dubious_disc.gbapal"); -const u32 gItemIcon_ReaperCloth[] = INCBIN_U32("graphics/items/icons/reaper_cloth.4bpp.lz"); +const u32 gItemIcon_ReaperCloth[] = INCBIN_U32("graphics/items/icons/reaper_cloth.4bpp.smol"); const u16 gItemIconPalette_ReaperCloth[] = INCBIN_U16("graphics/items/icon_palettes/reaper_cloth.gbapal"); -const u32 gItemIcon_PrismScale[] = INCBIN_U32("graphics/items/icons/prism_scale.4bpp.lz"); +const u32 gItemIcon_PrismScale[] = INCBIN_U32("graphics/items/icons/prism_scale.4bpp.smol"); const u16 gItemIconPalette_PrismScale[] = INCBIN_U16("graphics/items/icon_palettes/prism_scale.gbapal"); -const u32 gItemIcon_WhippedDream[] = INCBIN_U32("graphics/items/icons/whipped_dream.4bpp.lz"); +const u32 gItemIcon_WhippedDream[] = INCBIN_U32("graphics/items/icons/whipped_dream.4bpp.smol"); const u16 gItemIconPalette_WhippedDream[] = INCBIN_U16("graphics/items/icon_palettes/whipped_dream.gbapal"); -const u32 gItemIcon_Sachet[] = INCBIN_U32("graphics/items/icons/sachet.4bpp.lz"); +const u32 gItemIcon_Sachet[] = INCBIN_U32("graphics/items/icons/sachet.4bpp.smol"); const u16 gItemIconPalette_Sachet[] = INCBIN_U16("graphics/items/icon_palettes/sachet.gbapal"); -const u32 gItemIcon_OvalStone[] = INCBIN_U32("graphics/items/icons/oval_stone.4bpp.lz"); +const u32 gItemIcon_OvalStone[] = INCBIN_U32("graphics/items/icons/oval_stone.4bpp.smol"); const u16 gItemIconPalette_OvalStone[] = INCBIN_U16("graphics/items/icon_palettes/oval_stone.gbapal"); -const u32 gItemIcon_StrawberrySweet[] = INCBIN_U32("graphics/items/icons/strawberry_sweet.4bpp.lz"); +const u32 gItemIcon_StrawberrySweet[] = INCBIN_U32("graphics/items/icons/strawberry_sweet.4bpp.smol"); const u16 gItemIconPalette_StrawberrySweet[] = INCBIN_U16("graphics/items/icon_palettes/strawberry_sweet.gbapal"); -const u32 gItemIcon_LoveSweet[] = INCBIN_U32("graphics/items/icons/love_sweet.4bpp.lz"); +const u32 gItemIcon_LoveSweet[] = INCBIN_U32("graphics/items/icons/love_sweet.4bpp.smol"); const u16 gItemIconPalette_LoveSweet[] = INCBIN_U16("graphics/items/icon_palettes/love_sweet.gbapal"); -const u32 gItemIcon_BerrySweet[] = INCBIN_U32("graphics/items/icons/berry_sweet.4bpp.lz"); +const u32 gItemIcon_BerrySweet[] = INCBIN_U32("graphics/items/icons/berry_sweet.4bpp.smol"); const u16 gItemIconPalette_BerrySweet[] = INCBIN_U16("graphics/items/icon_palettes/berry_sweet.gbapal"); -const u32 gItemIcon_CloverSweet[] = INCBIN_U32("graphics/items/icons/clover_sweet.4bpp.lz"); +const u32 gItemIcon_CloverSweet[] = INCBIN_U32("graphics/items/icons/clover_sweet.4bpp.smol"); const u16 gItemIconPalette_CloverSweet[] = INCBIN_U16("graphics/items/icon_palettes/clover_sweet.gbapal"); -const u32 gItemIcon_FlowerSweet[] = INCBIN_U32("graphics/items/icons/flower_sweet.4bpp.lz"); +const u32 gItemIcon_FlowerSweet[] = INCBIN_U32("graphics/items/icons/flower_sweet.4bpp.smol"); const u16 gItemIconPalette_FlowerSweet[] = INCBIN_U16("graphics/items/icon_palettes/flower_sweet.gbapal"); -const u32 gItemIcon_StarSweet[] = INCBIN_U32("graphics/items/icons/star_sweet.4bpp.lz"); +const u32 gItemIcon_StarSweet[] = INCBIN_U32("graphics/items/icons/star_sweet.4bpp.smol"); const u16 gItemIconPalette_StarSweet[] = INCBIN_U16("graphics/items/icon_palettes/star_sweet.gbapal"); -const u32 gItemIcon_RibbonSweet[] = INCBIN_U32("graphics/items/icons/ribbon_sweet.4bpp.lz"); +const u32 gItemIcon_RibbonSweet[] = INCBIN_U32("graphics/items/icons/ribbon_sweet.4bpp.smol"); const u16 gItemIconPalette_RibbonSweet[] = INCBIN_U16("graphics/items/icon_palettes/ribbon_sweet.gbapal"); -const u32 gItemIcon_Everstone[] = INCBIN_U32("graphics/items/icons/everstone.4bpp.lz"); +const u32 gItemIcon_Everstone[] = INCBIN_U32("graphics/items/icons/everstone.4bpp.smol"); const u16 gItemIconPalette_Everstone[] = INCBIN_U16("graphics/items/icon_palettes/everstone.gbapal"); -const u32 gItemIcon_BlackAugurite[] = INCBIN_U32("graphics/items/icons/black_augurite.4bpp.lz"); +const u32 gItemIcon_BlackAugurite[] = INCBIN_U32("graphics/items/icons/black_augurite.4bpp.smol"); const u16 gItemIconPalette_BlackAugurite[] = INCBIN_U16("graphics/items/icon_palettes/black_augurite.gbapal"); -const u32 gItemIcon_LinkingCord[] = INCBIN_U32("graphics/items/icons/linking_cord.4bpp.lz"); +const u32 gItemIcon_LinkingCord[] = INCBIN_U32("graphics/items/icons/linking_cord.4bpp.smol"); const u16 gItemIconPalette_LinkingCord[] = INCBIN_U16("graphics/items/icon_palettes/linking_cord.gbapal"); -const u32 gItemIcon_PeatBlock[] = INCBIN_U32("graphics/items/icons/peat_block.4bpp.lz"); +const u32 gItemIcon_PeatBlock[] = INCBIN_U32("graphics/items/icons/peat_block.4bpp.smol"); const u16 gItemIconPalette_PeatBlock[] = INCBIN_U16("graphics/items/icon_palettes/peat_block.gbapal"); -const u32 gItemIcon_SyrupyApple[] = INCBIN_U32("graphics/items/icons/syrupy_apple.4bpp.lz"); +const u32 gItemIcon_SyrupyApple[] = INCBIN_U32("graphics/items/icons/syrupy_apple.4bpp.smol"); const u16 gItemIconPalette_SyrupyApple[] = INCBIN_U16("graphics/items/icon_palettes/syrupy_apple.gbapal"); -const u32 gItemIcon_UnremarkableTeacup[] = INCBIN_U32("graphics/items/icons/unremarkable_teacup.4bpp.lz"); +const u32 gItemIcon_UnremarkableTeacup[] = INCBIN_U32("graphics/items/icons/unremarkable_teacup.4bpp.smol"); const u16 gItemIconPalette_UnremarkableTeacup[] = INCBIN_U16("graphics/items/icon_palettes/unremarkable_teacup.gbapal"); -const u32 gItemIcon_MasterpieceTeacup[] = INCBIN_U32("graphics/items/icons/masterpiece_teacup.4bpp.lz"); +const u32 gItemIcon_MasterpieceTeacup[] = INCBIN_U32("graphics/items/icons/masterpiece_teacup.4bpp.smol"); const u16 gItemIconPalette_MasterpieceTeacup[] = INCBIN_U16("graphics/items/icon_palettes/masterpiece_teacup.gbapal"); -const u32 gItemIcon_MetalAlloy[] = INCBIN_U32("graphics/items/icons/metal_alloy.4bpp.lz"); +const u32 gItemIcon_MetalAlloy[] = INCBIN_U32("graphics/items/icons/metal_alloy.4bpp.smol"); const u16 gItemIconPalette_MetalAlloy[] = INCBIN_U16("graphics/items/icon_palettes/metal_alloy.gbapal"); // Nectars -const u32 gItemIcon_RedNectar[] = INCBIN_U32("graphics/items/icons/red_nectar.4bpp.lz"); +const u32 gItemIcon_RedNectar[] = INCBIN_U32("graphics/items/icons/red_nectar.4bpp.smol"); const u16 gItemIconPalette_RedNectar[] = INCBIN_U16("graphics/items/icon_palettes/red_nectar.gbapal"); -const u32 gItemIcon_YellowNectar[] = INCBIN_U32("graphics/items/icons/yellow_nectar.4bpp.lz"); +const u32 gItemIcon_YellowNectar[] = INCBIN_U32("graphics/items/icons/yellow_nectar.4bpp.smol"); const u16 gItemIconPalette_YellowNectar[] = INCBIN_U16("graphics/items/icon_palettes/yellow_nectar.gbapal"); -const u32 gItemIcon_PinkNectar[] = INCBIN_U32("graphics/items/icons/pink_nectar.4bpp.lz"); +const u32 gItemIcon_PinkNectar[] = INCBIN_U32("graphics/items/icons/pink_nectar.4bpp.smol"); const u16 gItemIconPalette_PinkNectar[] = INCBIN_U16("graphics/items/icon_palettes/pink_nectar.gbapal"); -const u32 gItemIcon_PurpleNectar[] = INCBIN_U32("graphics/items/icons/purple_nectar.4bpp.lz"); +const u32 gItemIcon_PurpleNectar[] = INCBIN_U32("graphics/items/icons/purple_nectar.4bpp.smol"); const u16 gItemIconPalette_PurpleNectar[] = INCBIN_U16("graphics/items/icon_palettes/purple_nectar.gbapal"); // Plates -const u32 gItemIcon_FlamePlate[] = INCBIN_U32("graphics/items/icons/flame_plate.4bpp.lz"); +const u32 gItemIcon_FlamePlate[] = INCBIN_U32("graphics/items/icons/flame_plate.4bpp.smol"); const u16 gItemIconPalette_FlamePlate[] = INCBIN_U16("graphics/items/icon_palettes/flame_plate.gbapal"); -const u32 gItemIcon_SplashPlate[] = INCBIN_U32("graphics/items/icons/splash_plate.4bpp.lz"); +const u32 gItemIcon_SplashPlate[] = INCBIN_U32("graphics/items/icons/splash_plate.4bpp.smol"); const u16 gItemIconPalette_SplashPlate[] = INCBIN_U16("graphics/items/icon_palettes/splash_plate.gbapal"); -const u32 gItemIcon_ZapPlate[] = INCBIN_U32("graphics/items/icons/zap_plate.4bpp.lz"); +const u32 gItemIcon_ZapPlate[] = INCBIN_U32("graphics/items/icons/zap_plate.4bpp.smol"); const u16 gItemIconPalette_ZapPlate[] = INCBIN_U16("graphics/items/icon_palettes/zap_plate.gbapal"); -const u32 gItemIcon_MeadowPlate[] = INCBIN_U32("graphics/items/icons/meadow_plate.4bpp.lz"); +const u32 gItemIcon_MeadowPlate[] = INCBIN_U32("graphics/items/icons/meadow_plate.4bpp.smol"); const u16 gItemIconPalette_MeadowPlate[] = INCBIN_U16("graphics/items/icon_palettes/meadow_plate.gbapal"); -const u32 gItemIcon_IciclePlate[] = INCBIN_U32("graphics/items/icons/icicle_plate.4bpp.lz"); +const u32 gItemIcon_IciclePlate[] = INCBIN_U32("graphics/items/icons/icicle_plate.4bpp.smol"); const u16 gItemIconPalette_IciclePlate[] = INCBIN_U16("graphics/items/icon_palettes/icicle_plate.gbapal"); -const u32 gItemIcon_FistPlate[] = INCBIN_U32("graphics/items/icons/fist_plate.4bpp.lz"); +const u32 gItemIcon_FistPlate[] = INCBIN_U32("graphics/items/icons/fist_plate.4bpp.smol"); const u16 gItemIconPalette_FistPlate[] = INCBIN_U16("graphics/items/icon_palettes/fist_plate.gbapal"); -const u32 gItemIcon_ToxicPlate[] = INCBIN_U32("graphics/items/icons/toxic_plate.4bpp.lz"); +const u32 gItemIcon_ToxicPlate[] = INCBIN_U32("graphics/items/icons/toxic_plate.4bpp.smol"); const u16 gItemIconPalette_ToxicPlate[] = INCBIN_U16("graphics/items/icon_palettes/toxic_plate.gbapal"); -const u32 gItemIcon_EarthPlate[] = INCBIN_U32("graphics/items/icons/earth_plate.4bpp.lz"); +const u32 gItemIcon_EarthPlate[] = INCBIN_U32("graphics/items/icons/earth_plate.4bpp.smol"); const u16 gItemIconPalette_EarthPlate[] = INCBIN_U16("graphics/items/icon_palettes/earth_plate.gbapal"); -const u32 gItemIcon_SkyPlate[] = INCBIN_U32("graphics/items/icons/sky_plate.4bpp.lz"); +const u32 gItemIcon_SkyPlate[] = INCBIN_U32("graphics/items/icons/sky_plate.4bpp.smol"); const u16 gItemIconPalette_SkyPlate[] = INCBIN_U16("graphics/items/icon_palettes/sky_plate.gbapal"); -const u32 gItemIcon_MindPlate[] = INCBIN_U32("graphics/items/icons/mind_plate.4bpp.lz"); +const u32 gItemIcon_MindPlate[] = INCBIN_U32("graphics/items/icons/mind_plate.4bpp.smol"); const u16 gItemIconPalette_MindPlate[] = INCBIN_U16("graphics/items/icon_palettes/mind_plate.gbapal"); -const u32 gItemIcon_InsectPlate[] = INCBIN_U32("graphics/items/icons/insect_plate.4bpp.lz"); +const u32 gItemIcon_InsectPlate[] = INCBIN_U32("graphics/items/icons/insect_plate.4bpp.smol"); const u16 gItemIconPalette_InsectPlate[] = INCBIN_U16("graphics/items/icon_palettes/insect_plate.gbapal"); -const u32 gItemIcon_StonePlate[] = INCBIN_U32("graphics/items/icons/stone_plate.4bpp.lz"); +const u32 gItemIcon_StonePlate[] = INCBIN_U32("graphics/items/icons/stone_plate.4bpp.smol"); const u16 gItemIconPalette_StonePlate[] = INCBIN_U16("graphics/items/icon_palettes/stone_plate.gbapal"); -const u32 gItemIcon_SpookyPlate[] = INCBIN_U32("graphics/items/icons/spooky_plate.4bpp.lz"); +const u32 gItemIcon_SpookyPlate[] = INCBIN_U32("graphics/items/icons/spooky_plate.4bpp.smol"); const u16 gItemIconPalette_SpookyPlate[] = INCBIN_U16("graphics/items/icon_palettes/spooky_plate.gbapal"); -const u32 gItemIcon_DracoPlate[] = INCBIN_U32("graphics/items/icons/draco_plate.4bpp.lz"); +const u32 gItemIcon_DracoPlate[] = INCBIN_U32("graphics/items/icons/draco_plate.4bpp.smol"); const u16 gItemIconPalette_DracoPlate[] = INCBIN_U16("graphics/items/icon_palettes/draco_plate.gbapal"); -const u32 gItemIcon_DreadPlate[] = INCBIN_U32("graphics/items/icons/dread_plate.4bpp.lz"); +const u32 gItemIcon_DreadPlate[] = INCBIN_U32("graphics/items/icons/dread_plate.4bpp.smol"); const u16 gItemIconPalette_DreadPlate[] = INCBIN_U16("graphics/items/icon_palettes/dread_plate.gbapal"); -const u32 gItemIcon_IronPlate[] = INCBIN_U32("graphics/items/icons/iron_plate.4bpp.lz"); +const u32 gItemIcon_IronPlate[] = INCBIN_U32("graphics/items/icons/iron_plate.4bpp.smol"); const u16 gItemIconPalette_IronPlate[] = INCBIN_U16("graphics/items/icon_palettes/iron_plate.gbapal"); -const u32 gItemIcon_PixiePlate[] = INCBIN_U32("graphics/items/icons/pixie_plate.4bpp.lz"); +const u32 gItemIcon_PixiePlate[] = INCBIN_U32("graphics/items/icons/pixie_plate.4bpp.smol"); const u16 gItemIconPalette_PixiePlate[] = INCBIN_U16("graphics/items/icon_palettes/pixie_plate.gbapal"); // Drives -const u32 gItemIcon_DouseDrive[] = INCBIN_U32("graphics/items/icons/douse_drive.4bpp.lz"); +const u32 gItemIcon_DouseDrive[] = INCBIN_U32("graphics/items/icons/douse_drive.4bpp.smol"); const u16 gItemIconPalette_DouseDrive[] = INCBIN_U16("graphics/items/icon_palettes/douse_drive.gbapal"); -const u32 gItemIcon_ShockDrive[] = INCBIN_U32("graphics/items/icons/shock_drive.4bpp.lz"); +const u32 gItemIcon_ShockDrive[] = INCBIN_U32("graphics/items/icons/shock_drive.4bpp.smol"); const u16 gItemIconPalette_ShockDrive[] = INCBIN_U16("graphics/items/icon_palettes/shock_drive.gbapal"); -const u32 gItemIcon_BurnDrive[] = INCBIN_U32("graphics/items/icons/burn_drive.4bpp.lz"); +const u32 gItemIcon_BurnDrive[] = INCBIN_U32("graphics/items/icons/burn_drive.4bpp.smol"); const u16 gItemIconPalette_BurnDrive[] = INCBIN_U16("graphics/items/icon_palettes/burn_drive.gbapal"); -const u32 gItemIcon_ChillDrive[] = INCBIN_U32("graphics/items/icons/chill_drive.4bpp.lz"); +const u32 gItemIcon_ChillDrive[] = INCBIN_U32("graphics/items/icons/chill_drive.4bpp.smol"); const u16 gItemIconPalette_ChillDrive[] = INCBIN_U16("graphics/items/icon_palettes/chill_drive.gbapal"); // Memories -const u32 gItemIcon_FireMemory[] = INCBIN_U32("graphics/items/icons/fire_memory.4bpp.lz"); +const u32 gItemIcon_FireMemory[] = INCBIN_U32("graphics/items/icons/fire_memory.4bpp.smol"); const u16 gItemIconPalette_FireMemory[] = INCBIN_U16("graphics/items/icon_palettes/fire_memory.gbapal"); -const u32 gItemIcon_WaterMemory[] = INCBIN_U32("graphics/items/icons/water_memory.4bpp.lz"); +const u32 gItemIcon_WaterMemory[] = INCBIN_U32("graphics/items/icons/water_memory.4bpp.smol"); const u16 gItemIconPalette_WaterMemory[] = INCBIN_U16("graphics/items/icon_palettes/water_memory.gbapal"); -const u32 gItemIcon_ElectricMemory[] = INCBIN_U32("graphics/items/icons/electric_memory.4bpp.lz"); +const u32 gItemIcon_ElectricMemory[] = INCBIN_U32("graphics/items/icons/electric_memory.4bpp.smol"); const u16 gItemIconPalette_ElectricMemory[] = INCBIN_U16("graphics/items/icon_palettes/electric_memory.gbapal"); -const u32 gItemIcon_GrassMemory[] = INCBIN_U32("graphics/items/icons/grass_memory.4bpp.lz"); +const u32 gItemIcon_GrassMemory[] = INCBIN_U32("graphics/items/icons/grass_memory.4bpp.smol"); const u16 gItemIconPalette_GrassMemory[] = INCBIN_U16("graphics/items/icon_palettes/grass_memory.gbapal"); -const u32 gItemIcon_IceMemory[] = INCBIN_U32("graphics/items/icons/ice_memory.4bpp.lz"); +const u32 gItemIcon_IceMemory[] = INCBIN_U32("graphics/items/icons/ice_memory.4bpp.smol"); const u16 gItemIconPalette_IceMemory[] = INCBIN_U16("graphics/items/icon_palettes/ice_memory.gbapal"); -const u32 gItemIcon_FightingMemory[] = INCBIN_U32("graphics/items/icons/fighting_memory.4bpp.lz"); +const u32 gItemIcon_FightingMemory[] = INCBIN_U32("graphics/items/icons/fighting_memory.4bpp.smol"); const u16 gItemIconPalette_FightingMemory[] = INCBIN_U16("graphics/items/icon_palettes/fighting_memory.gbapal"); -const u32 gItemIcon_PoisonMemory[] = INCBIN_U32("graphics/items/icons/poison_memory.4bpp.lz"); +const u32 gItemIcon_PoisonMemory[] = INCBIN_U32("graphics/items/icons/poison_memory.4bpp.smol"); const u16 gItemIconPalette_PoisonMemory[] = INCBIN_U16("graphics/items/icon_palettes/poison_memory.gbapal"); -const u32 gItemIcon_GroundMemory[] = INCBIN_U32("graphics/items/icons/ground_memory.4bpp.lz"); +const u32 gItemIcon_GroundMemory[] = INCBIN_U32("graphics/items/icons/ground_memory.4bpp.smol"); const u16 gItemIconPalette_GroundMemory[] = INCBIN_U16("graphics/items/icon_palettes/ground_memory.gbapal"); -const u32 gItemIcon_FlyingMemory[] = INCBIN_U32("graphics/items/icons/flying_memory.4bpp.lz"); +const u32 gItemIcon_FlyingMemory[] = INCBIN_U32("graphics/items/icons/flying_memory.4bpp.smol"); const u16 gItemIconPalette_FlyingMemory[] = INCBIN_U16("graphics/items/icon_palettes/flying_memory.gbapal"); -const u32 gItemIcon_PsychicMemory[] = INCBIN_U32("graphics/items/icons/psychic_memory.4bpp.lz"); +const u32 gItemIcon_PsychicMemory[] = INCBIN_U32("graphics/items/icons/psychic_memory.4bpp.smol"); const u16 gItemIconPalette_PsychicMemory[] = INCBIN_U16("graphics/items/icon_palettes/psychic_memory.gbapal"); -const u32 gItemIcon_BugMemory[] = INCBIN_U32("graphics/items/icons/bug_memory.4bpp.lz"); +const u32 gItemIcon_BugMemory[] = INCBIN_U32("graphics/items/icons/bug_memory.4bpp.smol"); const u16 gItemIconPalette_BugMemory[] = INCBIN_U16("graphics/items/icon_palettes/bug_memory.gbapal"); -const u32 gItemIcon_RockMemory[] = INCBIN_U32("graphics/items/icons/rock_memory.4bpp.lz"); +const u32 gItemIcon_RockMemory[] = INCBIN_U32("graphics/items/icons/rock_memory.4bpp.smol"); const u16 gItemIconPalette_RockMemory[] = INCBIN_U16("graphics/items/icon_palettes/rock_memory.gbapal"); -const u32 gItemIcon_GhostMemory[] = INCBIN_U32("graphics/items/icons/ghost_memory.4bpp.lz"); +const u32 gItemIcon_GhostMemory[] = INCBIN_U32("graphics/items/icons/ghost_memory.4bpp.smol"); const u16 gItemIconPalette_GhostMemory[] = INCBIN_U16("graphics/items/icon_palettes/ghost_memory.gbapal"); -const u32 gItemIcon_DragonMemory[] = INCBIN_U32("graphics/items/icons/dragon_memory.4bpp.lz"); +const u32 gItemIcon_DragonMemory[] = INCBIN_U32("graphics/items/icons/dragon_memory.4bpp.smol"); const u16 gItemIconPalette_DragonMemory[] = INCBIN_U16("graphics/items/icon_palettes/dragon_memory.gbapal"); -const u32 gItemIcon_DarkMemory[] = INCBIN_U32("graphics/items/icons/dark_memory.4bpp.lz"); +const u32 gItemIcon_DarkMemory[] = INCBIN_U32("graphics/items/icons/dark_memory.4bpp.smol"); const u16 gItemIconPalette_DarkMemory[] = INCBIN_U16("graphics/items/icon_palettes/dark_memory.gbapal"); -const u32 gItemIcon_SteelMemory[] = INCBIN_U32("graphics/items/icons/steel_memory.4bpp.lz"); +const u32 gItemIcon_SteelMemory[] = INCBIN_U32("graphics/items/icons/steel_memory.4bpp.smol"); const u16 gItemIconPalette_SteelMemory[] = INCBIN_U16("graphics/items/icon_palettes/steel_memory.gbapal"); -const u32 gItemIcon_FairyMemory[] = INCBIN_U32("graphics/items/icons/fairy_memory.4bpp.lz"); +const u32 gItemIcon_FairyMemory[] = INCBIN_U32("graphics/items/icons/fairy_memory.4bpp.smol"); const u16 gItemIconPalette_FairyMemory[] = INCBIN_U16("graphics/items/icon_palettes/fairy_memory.gbapal"); -const u32 gItemIcon_RustedSword[] = INCBIN_U32("graphics/items/icons/rusted_sword.4bpp.lz"); -const u32 gItemIcon_RustedShield[] = INCBIN_U32("graphics/items/icons/rusted_shield.4bpp.lz"); +const u32 gItemIcon_RustedSword[] = INCBIN_U32("graphics/items/icons/rusted_sword.4bpp.smol"); +const u32 gItemIcon_RustedShield[] = INCBIN_U32("graphics/items/icons/rusted_shield.4bpp.smol"); const u16 gItemIconPalette_RustedWeapons[] = INCBIN_U16("graphics/items/icon_palettes/rusted_weapons.gbapal"); // Colored Orbs -const u32 gItemIcon_RedOrb[] = INCBIN_U32("graphics/items/icons/red_orb.4bpp.lz"); +const u32 gItemIcon_RedOrb[] = INCBIN_U32("graphics/items/icons/red_orb.4bpp.smol"); const u16 gItemIconPalette_RedOrb[] = INCBIN_U16("graphics/items/icon_palettes/red_orb.gbapal"); -const u32 gItemIcon_BlueOrb[] = INCBIN_U32("graphics/items/icons/blue_orb.4bpp.lz"); +const u32 gItemIcon_BlueOrb[] = INCBIN_U32("graphics/items/icons/blue_orb.4bpp.smol"); const u16 gItemIconPalette_BlueOrb[] = INCBIN_U16("graphics/items/icon_palettes/blue_orb.gbapal"); // Mega Stones -const u32 gItemIcon_Venusaurite[] = INCBIN_U32("graphics/items/icons/venusaurite.4bpp.lz"); +const u32 gItemIcon_Venusaurite[] = INCBIN_U32("graphics/items/icons/venusaurite.4bpp.smol"); const u16 gItemIconPalette_Venusaurite[] = INCBIN_U16("graphics/items/icon_palettes/venusaurite.gbapal"); -const u32 gItemIcon_CharizarditeX[] = INCBIN_U32("graphics/items/icons/charizardite_x.4bpp.lz"); +const u32 gItemIcon_CharizarditeX[] = INCBIN_U32("graphics/items/icons/charizardite_x.4bpp.smol"); const u16 gItemIconPalette_CharizarditeX[] = INCBIN_U16("graphics/items/icon_palettes/charizardite_x.gbapal"); -const u32 gItemIcon_CharizarditeY[] = INCBIN_U32("graphics/items/icons/charizardite_y.4bpp.lz"); +const u32 gItemIcon_CharizarditeY[] = INCBIN_U32("graphics/items/icons/charizardite_y.4bpp.smol"); const u16 gItemIconPalette_CharizarditeY[] = INCBIN_U16("graphics/items/icon_palettes/charizardite_y.gbapal"); -const u32 gItemIcon_Blastoisinite[] = INCBIN_U32("graphics/items/icons/blastoisinite.4bpp.lz"); +const u32 gItemIcon_Blastoisinite[] = INCBIN_U32("graphics/items/icons/blastoisinite.4bpp.smol"); const u16 gItemIconPalette_Blastoisinite[] = INCBIN_U16("graphics/items/icon_palettes/blastoisinite.gbapal"); -const u32 gItemIcon_Beedrillite[] = INCBIN_U32("graphics/items/icons/beedrillite.4bpp.lz"); +const u32 gItemIcon_Beedrillite[] = INCBIN_U32("graphics/items/icons/beedrillite.4bpp.smol"); const u16 gItemIconPalette_Beedrillite[] = INCBIN_U16("graphics/items/icon_palettes/beedrillite.gbapal"); -const u32 gItemIcon_Pidgeotite[] = INCBIN_U32("graphics/items/icons/pidgeotite.4bpp.lz"); +const u32 gItemIcon_Pidgeotite[] = INCBIN_U32("graphics/items/icons/pidgeotite.4bpp.smol"); const u16 gItemIconPalette_Pidgeotite[] = INCBIN_U16("graphics/items/icon_palettes/pidgeotite.gbapal"); -const u32 gItemIcon_Alakazite[] = INCBIN_U32("graphics/items/icons/alakazite.4bpp.lz"); +const u32 gItemIcon_Alakazite[] = INCBIN_U32("graphics/items/icons/alakazite.4bpp.smol"); const u16 gItemIconPalette_Alakazite[] = INCBIN_U16("graphics/items/icon_palettes/alakazite.gbapal"); -const u32 gItemIcon_Slowbronite[] = INCBIN_U32("graphics/items/icons/slowbronite.4bpp.lz"); +const u32 gItemIcon_Slowbronite[] = INCBIN_U32("graphics/items/icons/slowbronite.4bpp.smol"); const u16 gItemIconPalette_Slowbronite[] = INCBIN_U16("graphics/items/icon_palettes/slowbronite.gbapal"); -const u32 gItemIcon_Gengarite[] = INCBIN_U32("graphics/items/icons/gengarite.4bpp.lz"); +const u32 gItemIcon_Gengarite[] = INCBIN_U32("graphics/items/icons/gengarite.4bpp.smol"); const u16 gItemIconPalette_Gengarite[] = INCBIN_U16("graphics/items/icon_palettes/gengarite.gbapal"); -const u32 gItemIcon_Kangaskhanite[] = INCBIN_U32("graphics/items/icons/kangaskhanite.4bpp.lz"); +const u32 gItemIcon_Kangaskhanite[] = INCBIN_U32("graphics/items/icons/kangaskhanite.4bpp.smol"); const u16 gItemIconPalette_Kangaskhanite[] = INCBIN_U16("graphics/items/icon_palettes/kangaskhanite.gbapal"); -const u32 gItemIcon_Pinsirite[] = INCBIN_U32("graphics/items/icons/pinsirite.4bpp.lz"); +const u32 gItemIcon_Pinsirite[] = INCBIN_U32("graphics/items/icons/pinsirite.4bpp.smol"); const u16 gItemIconPalette_Pinsirite[] = INCBIN_U16("graphics/items/icon_palettes/pinsirite.gbapal"); -const u32 gItemIcon_Gyaradosite[] = INCBIN_U32("graphics/items/icons/gyaradosite.4bpp.lz"); +const u32 gItemIcon_Gyaradosite[] = INCBIN_U32("graphics/items/icons/gyaradosite.4bpp.smol"); const u16 gItemIconPalette_Gyaradosite[] = INCBIN_U16("graphics/items/icon_palettes/gyaradosite.gbapal"); -const u32 gItemIcon_Aerodactylite[] = INCBIN_U32("graphics/items/icons/aerodactylite.4bpp.lz"); +const u32 gItemIcon_Aerodactylite[] = INCBIN_U32("graphics/items/icons/aerodactylite.4bpp.smol"); const u16 gItemIconPalette_Aerodactylite[] = INCBIN_U16("graphics/items/icon_palettes/aerodactylite.gbapal"); -const u32 gItemIcon_MewtwoniteX[] = INCBIN_U32("graphics/items/icons/mewtwonite_x.4bpp.lz"); +const u32 gItemIcon_MewtwoniteX[] = INCBIN_U32("graphics/items/icons/mewtwonite_x.4bpp.smol"); const u16 gItemIconPalette_MewtwoniteX[] = INCBIN_U16("graphics/items/icon_palettes/mewtwonite_x.gbapal"); -const u32 gItemIcon_MewtwoniteY[] = INCBIN_U32("graphics/items/icons/mewtwonite_y.4bpp.lz"); +const u32 gItemIcon_MewtwoniteY[] = INCBIN_U32("graphics/items/icons/mewtwonite_y.4bpp.smol"); const u16 gItemIconPalette_MewtwoniteY[] = INCBIN_U16("graphics/items/icon_palettes/mewtwonite_y.gbapal"); -const u32 gItemIcon_Ampharosite[] = INCBIN_U32("graphics/items/icons/ampharosite.4bpp.lz"); +const u32 gItemIcon_Ampharosite[] = INCBIN_U32("graphics/items/icons/ampharosite.4bpp.smol"); const u16 gItemIconPalette_Ampharosite[] = INCBIN_U16("graphics/items/icon_palettes/ampharosite.gbapal"); -const u32 gItemIcon_Steelixite[] = INCBIN_U32("graphics/items/icons/steelixite.4bpp.lz"); +const u32 gItemIcon_Steelixite[] = INCBIN_U32("graphics/items/icons/steelixite.4bpp.smol"); const u16 gItemIconPalette_Steelixite[] = INCBIN_U16("graphics/items/icon_palettes/steelixite.gbapal"); -const u32 gItemIcon_Scizorite[] = INCBIN_U32("graphics/items/icons/scizorite.4bpp.lz"); +const u32 gItemIcon_Scizorite[] = INCBIN_U32("graphics/items/icons/scizorite.4bpp.smol"); const u16 gItemIconPalette_Scizorite[] = INCBIN_U16("graphics/items/icon_palettes/scizorite.gbapal"); -const u32 gItemIcon_Heracronite[] = INCBIN_U32("graphics/items/icons/heracronite.4bpp.lz"); +const u32 gItemIcon_Heracronite[] = INCBIN_U32("graphics/items/icons/heracronite.4bpp.smol"); const u16 gItemIconPalette_Heracronite[] = INCBIN_U16("graphics/items/icon_palettes/heracronite.gbapal"); -const u32 gItemIcon_Houndoominite[] = INCBIN_U32("graphics/items/icons/houndoominite.4bpp.lz"); +const u32 gItemIcon_Houndoominite[] = INCBIN_U32("graphics/items/icons/houndoominite.4bpp.smol"); const u16 gItemIconPalette_Houndoominite[] = INCBIN_U16("graphics/items/icon_palettes/houndoominite.gbapal"); -const u32 gItemIcon_Tyranitarite[] = INCBIN_U32("graphics/items/icons/tyranitarite.4bpp.lz"); +const u32 gItemIcon_Tyranitarite[] = INCBIN_U32("graphics/items/icons/tyranitarite.4bpp.smol"); const u16 gItemIconPalette_Tyranitarite[] = INCBIN_U16("graphics/items/icon_palettes/tyranitarite.gbapal"); -const u32 gItemIcon_Sceptilite[] = INCBIN_U32("graphics/items/icons/sceptilite.4bpp.lz"); +const u32 gItemIcon_Sceptilite[] = INCBIN_U32("graphics/items/icons/sceptilite.4bpp.smol"); const u16 gItemIconPalette_Sceptilite[] = INCBIN_U16("graphics/items/icon_palettes/sceptilite.gbapal"); -const u32 gItemIcon_Blazikenite[] = INCBIN_U32("graphics/items/icons/blazikenite.4bpp.lz"); +const u32 gItemIcon_Blazikenite[] = INCBIN_U32("graphics/items/icons/blazikenite.4bpp.smol"); const u16 gItemIconPalette_Blazikenite[] = INCBIN_U16("graphics/items/icon_palettes/blazikenite.gbapal"); -const u32 gItemIcon_Swampertite[] = INCBIN_U32("graphics/items/icons/swampertite.4bpp.lz"); +const u32 gItemIcon_Swampertite[] = INCBIN_U32("graphics/items/icons/swampertite.4bpp.smol"); const u16 gItemIconPalette_Swampertite[] = INCBIN_U16("graphics/items/icon_palettes/swampertite.gbapal"); -const u32 gItemIcon_Gardevoirite[] = INCBIN_U32("graphics/items/icons/gardevoirite.4bpp.lz"); +const u32 gItemIcon_Gardevoirite[] = INCBIN_U32("graphics/items/icons/gardevoirite.4bpp.smol"); const u16 gItemIconPalette_Gardevoirite[] = INCBIN_U16("graphics/items/icon_palettes/gardevoirite.gbapal"); -const u32 gItemIcon_Sablenite[] = INCBIN_U32("graphics/items/icons/sablenite.4bpp.lz"); +const u32 gItemIcon_Sablenite[] = INCBIN_U32("graphics/items/icons/sablenite.4bpp.smol"); const u16 gItemIconPalette_Sablenite[] = INCBIN_U16("graphics/items/icon_palettes/sablenite.gbapal"); -const u32 gItemIcon_Mawilite[] = INCBIN_U32("graphics/items/icons/mawilite.4bpp.lz"); +const u32 gItemIcon_Mawilite[] = INCBIN_U32("graphics/items/icons/mawilite.4bpp.smol"); const u16 gItemIconPalette_Mawilite[] = INCBIN_U16("graphics/items/icon_palettes/mawilite.gbapal"); -const u32 gItemIcon_Aggronite[] = INCBIN_U32("graphics/items/icons/aggronite.4bpp.lz"); +const u32 gItemIcon_Aggronite[] = INCBIN_U32("graphics/items/icons/aggronite.4bpp.smol"); const u16 gItemIconPalette_Aggronite[] = INCBIN_U16("graphics/items/icon_palettes/aggronite.gbapal"); -const u32 gItemIcon_Medichamite[] = INCBIN_U32("graphics/items/icons/medichamite.4bpp.lz"); +const u32 gItemIcon_Medichamite[] = INCBIN_U32("graphics/items/icons/medichamite.4bpp.smol"); const u16 gItemIconPalette_Medichamite[] = INCBIN_U16("graphics/items/icon_palettes/medichamite.gbapal"); -const u32 gItemIcon_Manectite[] = INCBIN_U32("graphics/items/icons/manectite.4bpp.lz"); +const u32 gItemIcon_Manectite[] = INCBIN_U32("graphics/items/icons/manectite.4bpp.smol"); const u16 gItemIconPalette_Manectite[] = INCBIN_U16("graphics/items/icon_palettes/manectite.gbapal"); -const u32 gItemIcon_Sharpedonite[] = INCBIN_U32("graphics/items/icons/sharpedonite.4bpp.lz"); +const u32 gItemIcon_Sharpedonite[] = INCBIN_U32("graphics/items/icons/sharpedonite.4bpp.smol"); const u16 gItemIconPalette_Sharpedonite[] = INCBIN_U16("graphics/items/icon_palettes/sharpedonite.gbapal"); -const u32 gItemIcon_Cameruptite[] = INCBIN_U32("graphics/items/icons/cameruptite.4bpp.lz"); +const u32 gItemIcon_Cameruptite[] = INCBIN_U32("graphics/items/icons/cameruptite.4bpp.smol"); const u16 gItemIconPalette_Cameruptite[] = INCBIN_U16("graphics/items/icon_palettes/cameruptite.gbapal"); -const u32 gItemIcon_Altarianite[] = INCBIN_U32("graphics/items/icons/altarianite.4bpp.lz"); +const u32 gItemIcon_Altarianite[] = INCBIN_U32("graphics/items/icons/altarianite.4bpp.smol"); const u16 gItemIconPalette_Altarianite[] = INCBIN_U16("graphics/items/icon_palettes/altarianite.gbapal"); -const u32 gItemIcon_Banettite[] = INCBIN_U32("graphics/items/icons/banettite.4bpp.lz"); +const u32 gItemIcon_Banettite[] = INCBIN_U32("graphics/items/icons/banettite.4bpp.smol"); const u16 gItemIconPalette_Banettite[] = INCBIN_U16("graphics/items/icon_palettes/banettite.gbapal"); -const u32 gItemIcon_Absolite[] = INCBIN_U32("graphics/items/icons/absolite.4bpp.lz"); +const u32 gItemIcon_Absolite[] = INCBIN_U32("graphics/items/icons/absolite.4bpp.smol"); const u16 gItemIconPalette_Absolite[] = INCBIN_U16("graphics/items/icon_palettes/absolite.gbapal"); -const u32 gItemIcon_Glalitite[] = INCBIN_U32("graphics/items/icons/glalitite.4bpp.lz"); +const u32 gItemIcon_Glalitite[] = INCBIN_U32("graphics/items/icons/glalitite.4bpp.smol"); const u16 gItemIconPalette_Glalitite[] = INCBIN_U16("graphics/items/icon_palettes/glalitite.gbapal"); -const u32 gItemIcon_Salamencite[] = INCBIN_U32("graphics/items/icons/salamencite.4bpp.lz"); +const u32 gItemIcon_Salamencite[] = INCBIN_U32("graphics/items/icons/salamencite.4bpp.smol"); const u16 gItemIconPalette_Salamencite[] = INCBIN_U16("graphics/items/icon_palettes/salamencite.gbapal"); -const u32 gItemIcon_Metagrossite[] = INCBIN_U32("graphics/items/icons/metagrossite.4bpp.lz"); +const u32 gItemIcon_Metagrossite[] = INCBIN_U32("graphics/items/icons/metagrossite.4bpp.smol"); const u16 gItemIconPalette_Metagrossite[] = INCBIN_U16("graphics/items/icon_palettes/metagrossite.gbapal"); -const u32 gItemIcon_Latiasite[] = INCBIN_U32("graphics/items/icons/latiasite.4bpp.lz"); +const u32 gItemIcon_Latiasite[] = INCBIN_U32("graphics/items/icons/latiasite.4bpp.smol"); const u16 gItemIconPalette_Latiasite[] = INCBIN_U16("graphics/items/icon_palettes/latiasite.gbapal"); -const u32 gItemIcon_Latiosite[] = INCBIN_U32("graphics/items/icons/latiosite.4bpp.lz"); +const u32 gItemIcon_Latiosite[] = INCBIN_U32("graphics/items/icons/latiosite.4bpp.smol"); const u16 gItemIconPalette_Latiosite[] = INCBIN_U16("graphics/items/icon_palettes/latiosite.gbapal"); -const u32 gItemIcon_Lopunnite[] = INCBIN_U32("graphics/items/icons/lopunnite.4bpp.lz"); +const u32 gItemIcon_Lopunnite[] = INCBIN_U32("graphics/items/icons/lopunnite.4bpp.smol"); const u16 gItemIconPalette_Lopunnite[] = INCBIN_U16("graphics/items/icon_palettes/lopunnite.gbapal"); -const u32 gItemIcon_Garchompite[] = INCBIN_U32("graphics/items/icons/garchompite.4bpp.lz"); +const u32 gItemIcon_Garchompite[] = INCBIN_U32("graphics/items/icons/garchompite.4bpp.smol"); const u16 gItemIconPalette_Garchompite[] = INCBIN_U16("graphics/items/icon_palettes/garchompite.gbapal"); -const u32 gItemIcon_Lucarionite[] = INCBIN_U32("graphics/items/icons/lucarionite.4bpp.lz"); +const u32 gItemIcon_Lucarionite[] = INCBIN_U32("graphics/items/icons/lucarionite.4bpp.smol"); const u16 gItemIconPalette_Lucarionite[] = INCBIN_U16("graphics/items/icon_palettes/lucarionite.gbapal"); -const u32 gItemIcon_Abomasite[] = INCBIN_U32("graphics/items/icons/abomasite.4bpp.lz"); +const u32 gItemIcon_Abomasite[] = INCBIN_U32("graphics/items/icons/abomasite.4bpp.smol"); const u16 gItemIconPalette_Abomasite[] = INCBIN_U16("graphics/items/icon_palettes/abomasite.gbapal"); -const u32 gItemIcon_Galladite[] = INCBIN_U32("graphics/items/icons/galladite.4bpp.lz"); +const u32 gItemIcon_Galladite[] = INCBIN_U32("graphics/items/icons/galladite.4bpp.smol"); const u16 gItemIconPalette_Galladite[] = INCBIN_U16("graphics/items/icon_palettes/galladite.gbapal"); -const u32 gItemIcon_Audinite[] = INCBIN_U32("graphics/items/icons/audinite.4bpp.lz"); +const u32 gItemIcon_Audinite[] = INCBIN_U32("graphics/items/icons/audinite.4bpp.smol"); const u16 gItemIconPalette_Audinite[] = INCBIN_U16("graphics/items/icon_palettes/audinite.gbapal"); -const u32 gItemIcon_Diancite[] = INCBIN_U32("graphics/items/icons/diancite.4bpp.lz"); +const u32 gItemIcon_Diancite[] = INCBIN_U32("graphics/items/icons/diancite.4bpp.smol"); const u16 gItemIconPalette_Diancite[] = INCBIN_U16("graphics/items/icon_palettes/diancite.gbapal"); // Gems -const u32 gItemIcon_NormalGem[] = INCBIN_U32("graphics/items/icons/normal_gem.4bpp.lz"); +const u32 gItemIcon_NormalGem[] = INCBIN_U32("graphics/items/icons/normal_gem.4bpp.smol"); const u16 gItemIconPalette_NormalGem[] = INCBIN_U16("graphics/items/icon_palettes/normal_gem.gbapal"); -const u32 gItemIcon_FireGem[] = INCBIN_U32("graphics/items/icons/fire_gem.4bpp.lz"); +const u32 gItemIcon_FireGem[] = INCBIN_U32("graphics/items/icons/fire_gem.4bpp.smol"); const u16 gItemIconPalette_FireGem[] = INCBIN_U16("graphics/items/icon_palettes/fire_gem.gbapal"); -const u32 gItemIcon_WaterGem[] = INCBIN_U32("graphics/items/icons/water_gem.4bpp.lz"); +const u32 gItemIcon_WaterGem[] = INCBIN_U32("graphics/items/icons/water_gem.4bpp.smol"); const u16 gItemIconPalette_WaterGem[] = INCBIN_U16("graphics/items/icon_palettes/water_gem.gbapal"); -const u32 gItemIcon_ElectricGem[] = INCBIN_U32("graphics/items/icons/electric_gem.4bpp.lz"); +const u32 gItemIcon_ElectricGem[] = INCBIN_U32("graphics/items/icons/electric_gem.4bpp.smol"); const u16 gItemIconPalette_ElectricGem[] = INCBIN_U16("graphics/items/icon_palettes/electric_gem.gbapal"); -const u32 gItemIcon_GrassGem[] = INCBIN_U32("graphics/items/icons/grass_gem.4bpp.lz"); +const u32 gItemIcon_GrassGem[] = INCBIN_U32("graphics/items/icons/grass_gem.4bpp.smol"); const u16 gItemIconPalette_GrassGem[] = INCBIN_U16("graphics/items/icon_palettes/grass_gem.gbapal"); -const u32 gItemIcon_IceGem[] = INCBIN_U32("graphics/items/icons/ice_gem.4bpp.lz"); +const u32 gItemIcon_IceGem[] = INCBIN_U32("graphics/items/icons/ice_gem.4bpp.smol"); const u16 gItemIconPalette_IceGem[] = INCBIN_U16("graphics/items/icon_palettes/ice_gem.gbapal"); -const u32 gItemIcon_FightingGem[] = INCBIN_U32("graphics/items/icons/fighting_gem.4bpp.lz"); +const u32 gItemIcon_FightingGem[] = INCBIN_U32("graphics/items/icons/fighting_gem.4bpp.smol"); const u16 gItemIconPalette_FightingGem[] = INCBIN_U16("graphics/items/icon_palettes/fighting_gem.gbapal"); -const u32 gItemIcon_PoisonGem[] = INCBIN_U32("graphics/items/icons/poison_gem.4bpp.lz"); +const u32 gItemIcon_PoisonGem[] = INCBIN_U32("graphics/items/icons/poison_gem.4bpp.smol"); const u16 gItemIconPalette_PoisonGem[] = INCBIN_U16("graphics/items/icon_palettes/poison_gem.gbapal"); -const u32 gItemIcon_GroundGem[] = INCBIN_U32("graphics/items/icons/ground_gem.4bpp.lz"); +const u32 gItemIcon_GroundGem[] = INCBIN_U32("graphics/items/icons/ground_gem.4bpp.smol"); const u16 gItemIconPalette_GroundGem[] = INCBIN_U16("graphics/items/icon_palettes/ground_gem.gbapal"); -const u32 gItemIcon_FlyingGem[] = INCBIN_U32("graphics/items/icons/flying_gem.4bpp.lz"); +const u32 gItemIcon_FlyingGem[] = INCBIN_U32("graphics/items/icons/flying_gem.4bpp.smol"); const u16 gItemIconPalette_FlyingGem[] = INCBIN_U16("graphics/items/icon_palettes/flying_gem.gbapal"); -const u32 gItemIcon_PsychicGem[] = INCBIN_U32("graphics/items/icons/psychic_gem.4bpp.lz"); +const u32 gItemIcon_PsychicGem[] = INCBIN_U32("graphics/items/icons/psychic_gem.4bpp.smol"); const u16 gItemIconPalette_PsychicGem[] = INCBIN_U16("graphics/items/icon_palettes/psychic_gem.gbapal"); -const u32 gItemIcon_BugGem[] = INCBIN_U32("graphics/items/icons/bug_gem.4bpp.lz"); +const u32 gItemIcon_BugGem[] = INCBIN_U32("graphics/items/icons/bug_gem.4bpp.smol"); const u16 gItemIconPalette_BugGem[] = INCBIN_U16("graphics/items/icon_palettes/bug_gem.gbapal"); -const u32 gItemIcon_RockGem[] = INCBIN_U32("graphics/items/icons/rock_gem.4bpp.lz"); +const u32 gItemIcon_RockGem[] = INCBIN_U32("graphics/items/icons/rock_gem.4bpp.smol"); const u16 gItemIconPalette_RockGem[] = INCBIN_U16("graphics/items/icon_palettes/rock_gem.gbapal"); -const u32 gItemIcon_GhostGem[] = INCBIN_U32("graphics/items/icons/ghost_gem.4bpp.lz"); +const u32 gItemIcon_GhostGem[] = INCBIN_U32("graphics/items/icons/ghost_gem.4bpp.smol"); const u16 gItemIconPalette_GhostGem[] = INCBIN_U16("graphics/items/icon_palettes/ghost_gem.gbapal"); -const u32 gItemIcon_DragonGem[] = INCBIN_U32("graphics/items/icons/dragon_gem.4bpp.lz"); +const u32 gItemIcon_DragonGem[] = INCBIN_U32("graphics/items/icons/dragon_gem.4bpp.smol"); const u16 gItemIconPalette_DragonGem[] = INCBIN_U16("graphics/items/icon_palettes/dragon_gem.gbapal"); -const u32 gItemIcon_DarkGem[] = INCBIN_U32("graphics/items/icons/dark_gem.4bpp.lz"); +const u32 gItemIcon_DarkGem[] = INCBIN_U32("graphics/items/icons/dark_gem.4bpp.smol"); const u16 gItemIconPalette_DarkGem[] = INCBIN_U16("graphics/items/icon_palettes/dark_gem.gbapal"); -const u32 gItemIcon_SteelGem[] = INCBIN_U32("graphics/items/icons/steel_gem.4bpp.lz"); +const u32 gItemIcon_SteelGem[] = INCBIN_U32("graphics/items/icons/steel_gem.4bpp.smol"); const u16 gItemIconPalette_SteelGem[] = INCBIN_U16("graphics/items/icon_palettes/steel_gem.gbapal"); -const u32 gItemIcon_FairyGem[] = INCBIN_U32("graphics/items/icons/fairy_gem.4bpp.lz"); +const u32 gItemIcon_FairyGem[] = INCBIN_U32("graphics/items/icons/fairy_gem.4bpp.smol"); const u16 gItemIconPalette_FairyGem[] = INCBIN_U16("graphics/items/icon_palettes/fairy_gem.gbapal"); // Z-Crystals -const u32 gItemIcon_NormaliumZ[] = INCBIN_U32("graphics/items/icons/normalium_z.4bpp.lz"); +const u32 gItemIcon_NormaliumZ[] = INCBIN_U32("graphics/items/icons/normalium_z.4bpp.smol"); const u16 gItemIconPalette_NormaliumZ[] = INCBIN_U16("graphics/items/icon_palettes/normalium_z.gbapal"); -const u32 gItemIcon_FiriumZ[] = INCBIN_U32("graphics/items/icons/firium_z.4bpp.lz"); +const u32 gItemIcon_FiriumZ[] = INCBIN_U32("graphics/items/icons/firium_z.4bpp.smol"); const u16 gItemIconPalette_FiriumZ[] = INCBIN_U16("graphics/items/icon_palettes/firium_z.gbapal"); -const u32 gItemIcon_WateriumZ[] = INCBIN_U32("graphics/items/icons/waterium_z.4bpp.lz"); +const u32 gItemIcon_WateriumZ[] = INCBIN_U32("graphics/items/icons/waterium_z.4bpp.smol"); const u16 gItemIconPalette_WateriumZ[] = INCBIN_U16("graphics/items/icon_palettes/waterium_z.gbapal"); -const u32 gItemIcon_ElectriumZ[] = INCBIN_U32("graphics/items/icons/electrium_z.4bpp.lz"); +const u32 gItemIcon_ElectriumZ[] = INCBIN_U32("graphics/items/icons/electrium_z.4bpp.smol"); const u16 gItemIconPalette_ElectriumZ[] = INCBIN_U16("graphics/items/icon_palettes/electrium_z.gbapal"); -const u32 gItemIcon_GrassiumZ[] = INCBIN_U32("graphics/items/icons/grassium_z.4bpp.lz"); +const u32 gItemIcon_GrassiumZ[] = INCBIN_U32("graphics/items/icons/grassium_z.4bpp.smol"); const u16 gItemIconPalette_GrassiumZ[] = INCBIN_U16("graphics/items/icon_palettes/grassium_z.gbapal"); -const u32 gItemIcon_IciumZ[] = INCBIN_U32("graphics/items/icons/icium_z.4bpp.lz"); +const u32 gItemIcon_IciumZ[] = INCBIN_U32("graphics/items/icons/icium_z.4bpp.smol"); const u16 gItemIconPalette_IciumZ[] = INCBIN_U16("graphics/items/icon_palettes/icium_z.gbapal"); -const u32 gItemIcon_FightiniumZ[] = INCBIN_U32("graphics/items/icons/fightinium_z.4bpp.lz"); +const u32 gItemIcon_FightiniumZ[] = INCBIN_U32("graphics/items/icons/fightinium_z.4bpp.smol"); const u16 gItemIconPalette_FightiniumZ[] = INCBIN_U16("graphics/items/icon_palettes/fightinium_z.gbapal"); -const u32 gItemIcon_PoisoniumZ[] = INCBIN_U32("graphics/items/icons/poisonium_z.4bpp.lz"); +const u32 gItemIcon_PoisoniumZ[] = INCBIN_U32("graphics/items/icons/poisonium_z.4bpp.smol"); const u16 gItemIconPalette_PoisoniumZ[] = INCBIN_U16("graphics/items/icon_palettes/poisonium_z.gbapal"); -const u32 gItemIcon_GroundiumZ[] = INCBIN_U32("graphics/items/icons/groundium_z.4bpp.lz"); +const u32 gItemIcon_GroundiumZ[] = INCBIN_U32("graphics/items/icons/groundium_z.4bpp.smol"); const u16 gItemIconPalette_GroundiumZ[] = INCBIN_U16("graphics/items/icon_palettes/groundium_z.gbapal"); -const u32 gItemIcon_FlyiniumZ[] = INCBIN_U32("graphics/items/icons/flyinium_z.4bpp.lz"); +const u32 gItemIcon_FlyiniumZ[] = INCBIN_U32("graphics/items/icons/flyinium_z.4bpp.smol"); const u16 gItemIconPalette_FlyiniumZ[] = INCBIN_U16("graphics/items/icon_palettes/flyinium_z.gbapal"); -const u32 gItemIcon_PsychiumZ[] = INCBIN_U32("graphics/items/icons/psychium_z.4bpp.lz"); +const u32 gItemIcon_PsychiumZ[] = INCBIN_U32("graphics/items/icons/psychium_z.4bpp.smol"); const u16 gItemIconPalette_PsychiumZ[] = INCBIN_U16("graphics/items/icon_palettes/psychium_z.gbapal"); -const u32 gItemIcon_BuginiumZ[] = INCBIN_U32("graphics/items/icons/buginium_z.4bpp.lz"); +const u32 gItemIcon_BuginiumZ[] = INCBIN_U32("graphics/items/icons/buginium_z.4bpp.smol"); const u16 gItemIconPalette_BuginiumZ[] = INCBIN_U16("graphics/items/icon_palettes/buginium_z.gbapal"); -const u32 gItemIcon_RockiumZ[] = INCBIN_U32("graphics/items/icons/rockium_z.4bpp.lz"); +const u32 gItemIcon_RockiumZ[] = INCBIN_U32("graphics/items/icons/rockium_z.4bpp.smol"); const u16 gItemIconPalette_RockiumZ[] = INCBIN_U16("graphics/items/icon_palettes/rockium_z.gbapal"); -const u32 gItemIcon_GhostiumZ[] = INCBIN_U32("graphics/items/icons/ghostium_z.4bpp.lz"); +const u32 gItemIcon_GhostiumZ[] = INCBIN_U32("graphics/items/icons/ghostium_z.4bpp.smol"); const u16 gItemIconPalette_GhostiumZ[] = INCBIN_U16("graphics/items/icon_palettes/ghostium_z.gbapal"); -const u32 gItemIcon_DragoniumZ[] = INCBIN_U32("graphics/items/icons/dragonium_z.4bpp.lz"); +const u32 gItemIcon_DragoniumZ[] = INCBIN_U32("graphics/items/icons/dragonium_z.4bpp.smol"); const u16 gItemIconPalette_DragoniumZ[] = INCBIN_U16("graphics/items/icon_palettes/dragonium_z.gbapal"); -const u32 gItemIcon_DarkiniumZ[] = INCBIN_U32("graphics/items/icons/darkinium_z.4bpp.lz"); +const u32 gItemIcon_DarkiniumZ[] = INCBIN_U32("graphics/items/icons/darkinium_z.4bpp.smol"); const u16 gItemIconPalette_DarkiniumZ[] = INCBIN_U16("graphics/items/icon_palettes/darkinium_z.gbapal"); -const u32 gItemIcon_SteeliumZ[] = INCBIN_U32("graphics/items/icons/steelium_z.4bpp.lz"); +const u32 gItemIcon_SteeliumZ[] = INCBIN_U32("graphics/items/icons/steelium_z.4bpp.smol"); const u16 gItemIconPalette_SteeliumZ[] = INCBIN_U16("graphics/items/icon_palettes/steelium_z.gbapal"); -const u32 gItemIcon_FairiumZ[] = INCBIN_U32("graphics/items/icons/fairium_z.4bpp.lz"); +const u32 gItemIcon_FairiumZ[] = INCBIN_U32("graphics/items/icons/fairium_z.4bpp.smol"); const u16 gItemIconPalette_FairiumZ[] = INCBIN_U16("graphics/items/icon_palettes/fairium_z.gbapal"); -const u32 gItemIcon_PikaniumZ[] = INCBIN_U32("graphics/items/icons/pikanium_z.4bpp.lz"); +const u32 gItemIcon_PikaniumZ[] = INCBIN_U32("graphics/items/icons/pikanium_z.4bpp.smol"); const u16 gItemIconPalette_PikaniumZ[] = INCBIN_U16("graphics/items/icon_palettes/pikanium_z.gbapal"); -const u32 gItemIcon_EeviumZ[] = INCBIN_U32("graphics/items/icons/eevium_z.4bpp.lz"); +const u32 gItemIcon_EeviumZ[] = INCBIN_U32("graphics/items/icons/eevium_z.4bpp.smol"); const u16 gItemIconPalette_EeviumZ[] = INCBIN_U16("graphics/items/icon_palettes/eevium_z.gbapal"); -const u32 gItemIcon_SnorliumZ[] = INCBIN_U32("graphics/items/icons/snorlium_z.4bpp.lz"); +const u32 gItemIcon_SnorliumZ[] = INCBIN_U32("graphics/items/icons/snorlium_z.4bpp.smol"); const u16 gItemIconPalette_SnorliumZ[] = INCBIN_U16("graphics/items/icon_palettes/snorlium_z.gbapal"); -const u32 gItemIcon_MewniumZ[] = INCBIN_U32("graphics/items/icons/mewnium_z.4bpp.lz"); +const u32 gItemIcon_MewniumZ[] = INCBIN_U32("graphics/items/icons/mewnium_z.4bpp.smol"); const u16 gItemIconPalette_MewniumZ[] = INCBIN_U16("graphics/items/icon_palettes/mewnium_z.gbapal"); -const u32 gItemIcon_DecidiumZ[] = INCBIN_U32("graphics/items/icons/decidium_z.4bpp.lz"); +const u32 gItemIcon_DecidiumZ[] = INCBIN_U32("graphics/items/icons/decidium_z.4bpp.smol"); const u16 gItemIconPalette_DecidiumZ[] = INCBIN_U16("graphics/items/icon_palettes/decidium_z.gbapal"); -const u32 gItemIcon_InciniumZ[] = INCBIN_U32("graphics/items/icons/incinium_z.4bpp.lz"); +const u32 gItemIcon_InciniumZ[] = INCBIN_U32("graphics/items/icons/incinium_z.4bpp.smol"); const u16 gItemIconPalette_InciniumZ[] = INCBIN_U16("graphics/items/icon_palettes/incinium_z.gbapal"); -const u32 gItemIcon_PrimariumZ[] = INCBIN_U32("graphics/items/icons/primarium_z.4bpp.lz"); +const u32 gItemIcon_PrimariumZ[] = INCBIN_U32("graphics/items/icons/primarium_z.4bpp.smol"); const u16 gItemIconPalette_PrimariumZ[] = INCBIN_U16("graphics/items/icon_palettes/primarium_z.gbapal"); -const u32 gItemIcon_LycaniumZ[] = INCBIN_U32("graphics/items/icons/lycanium_z.4bpp.lz"); +const u32 gItemIcon_LycaniumZ[] = INCBIN_U32("graphics/items/icons/lycanium_z.4bpp.smol"); const u16 gItemIconPalette_LycaniumZ[] = INCBIN_U16("graphics/items/icon_palettes/lycanium_z.gbapal"); -const u32 gItemIcon_MimikiumZ[] = INCBIN_U32("graphics/items/icons/mimikium_z.4bpp.lz"); +const u32 gItemIcon_MimikiumZ[] = INCBIN_U32("graphics/items/icons/mimikium_z.4bpp.smol"); const u16 gItemIconPalette_MimikiumZ[] = INCBIN_U16("graphics/items/icon_palettes/mimikium_z.gbapal"); -const u32 gItemIcon_KommoniumZ[] = INCBIN_U32("graphics/items/icons/kommonium_z.4bpp.lz"); +const u32 gItemIcon_KommoniumZ[] = INCBIN_U32("graphics/items/icons/kommonium_z.4bpp.smol"); const u16 gItemIconPalette_KommoniumZ[] = INCBIN_U16("graphics/items/icon_palettes/kommonium_z.gbapal"); -const u32 gItemIcon_TapuniumZ[] = INCBIN_U32("graphics/items/icons/tapunium_z.4bpp.lz"); +const u32 gItemIcon_TapuniumZ[] = INCBIN_U32("graphics/items/icons/tapunium_z.4bpp.smol"); const u16 gItemIconPalette_TapuniumZ[] = INCBIN_U16("graphics/items/icon_palettes/tapunium_z.gbapal"); -const u32 gItemIcon_SolganiumZ[] = INCBIN_U32("graphics/items/icons/solganium_z.4bpp.lz"); +const u32 gItemIcon_SolganiumZ[] = INCBIN_U32("graphics/items/icons/solganium_z.4bpp.smol"); const u16 gItemIconPalette_SolganiumZ[] = INCBIN_U16("graphics/items/icon_palettes/solganium_z.gbapal"); -const u32 gItemIcon_LunaliumZ[] = INCBIN_U32("graphics/items/icons/lunalium_z.4bpp.lz"); +const u32 gItemIcon_LunaliumZ[] = INCBIN_U32("graphics/items/icons/lunalium_z.4bpp.smol"); const u16 gItemIconPalette_LunaliumZ[] = INCBIN_U16("graphics/items/icon_palettes/lunalium_z.gbapal"); -const u32 gItemIcon_MarshadiumZ[] = INCBIN_U32("graphics/items/icons/marshadium_z.4bpp.lz"); +const u32 gItemIcon_MarshadiumZ[] = INCBIN_U32("graphics/items/icons/marshadium_z.4bpp.smol"); const u16 gItemIconPalette_MarshadiumZ[] = INCBIN_U16("graphics/items/icon_palettes/marshadium_z.gbapal"); -const u32 gItemIcon_AloraichiumZ[] = INCBIN_U32("graphics/items/icons/aloraichium_z.4bpp.lz"); +const u32 gItemIcon_AloraichiumZ[] = INCBIN_U32("graphics/items/icons/aloraichium_z.4bpp.smol"); const u16 gItemIconPalette_AloraichiumZ[] = INCBIN_U16("graphics/items/icon_palettes/aloraichium_z.gbapal"); -const u32 gItemIcon_PikashuniumZ[] = INCBIN_U32("graphics/items/icons/pikashunium_z.4bpp.lz"); +const u32 gItemIcon_PikashuniumZ[] = INCBIN_U32("graphics/items/icons/pikashunium_z.4bpp.smol"); const u16 gItemIconPalette_PikashuniumZ[] = INCBIN_U16("graphics/items/icon_palettes/pikashunium_z.gbapal"); -const u32 gItemIcon_UltranecroziumZ[] = INCBIN_U32("graphics/items/icons/ultranecrozium_z.4bpp.lz"); +const u32 gItemIcon_UltranecroziumZ[] = INCBIN_U32("graphics/items/icons/ultranecrozium_z.4bpp.smol"); const u16 gItemIconPalette_UltranecroziumZ[] = INCBIN_U16("graphics/items/icon_palettes/ultranecrozium_z.gbapal"); // Species-specific Held Items -const u32 gItemIcon_LightBall[] = INCBIN_U32("graphics/items/icons/light_ball.4bpp.lz"); +const u32 gItemIcon_LightBall[] = INCBIN_U32("graphics/items/icons/light_ball.4bpp.smol"); const u16 gItemIconPalette_LightBall[] = INCBIN_U16("graphics/items/icon_palettes/light_ball.gbapal"); -const u32 gItemIcon_Leek[] = INCBIN_U32("graphics/items/icons/leek.4bpp.lz"); +const u32 gItemIcon_Leek[] = INCBIN_U32("graphics/items/icons/leek.4bpp.smol"); const u16 gItemIconPalette_Leek[] = INCBIN_U16("graphics/items/icon_palettes/leek.gbapal"); -const u32 gItemIcon_ThickClub[] = INCBIN_U32("graphics/items/icons/thick_club.4bpp.lz"); +const u32 gItemIcon_ThickClub[] = INCBIN_U32("graphics/items/icons/thick_club.4bpp.smol"); const u16 gItemIconPalette_ThickClub[] = INCBIN_U16("graphics/items/icon_palettes/thick_club.gbapal"); -const u32 gItemIcon_LuckyPunch[] = INCBIN_U32("graphics/items/icons/lucky_punch.4bpp.lz"); +const u32 gItemIcon_LuckyPunch[] = INCBIN_U32("graphics/items/icons/lucky_punch.4bpp.smol"); const u16 gItemIconPalette_LuckyPunch[] = INCBIN_U16("graphics/items/icon_palettes/lucky_punch.gbapal"); -const u32 gItemIcon_MetalPowder[] = INCBIN_U32("graphics/items/icons/metal_powder.4bpp.lz"); +const u32 gItemIcon_MetalPowder[] = INCBIN_U32("graphics/items/icons/metal_powder.4bpp.smol"); const u16 gItemIconPalette_MetalPowder[] = INCBIN_U16("graphics/items/icon_palettes/metal_powder.gbapal"); -const u32 gItemIcon_QuickPowder[] = INCBIN_U32("graphics/items/icons/quick_powder.4bpp.lz"); +const u32 gItemIcon_QuickPowder[] = INCBIN_U32("graphics/items/icons/quick_powder.4bpp.smol"); const u16 gItemIconPalette_QuickPowder[] = INCBIN_U16("graphics/items/icon_palettes/quick_powder.gbapal"); -const u32 gItemIcon_DeepSeaScale[] = INCBIN_U32("graphics/items/icons/deep_sea_scale.4bpp.lz"); +const u32 gItemIcon_DeepSeaScale[] = INCBIN_U32("graphics/items/icons/deep_sea_scale.4bpp.smol"); const u16 gItemIconPalette_DeepSeaScale[] = INCBIN_U16("graphics/items/icon_palettes/deep_sea_scale.gbapal"); -const u32 gItemIcon_DeepSeaTooth[] = INCBIN_U32("graphics/items/icons/deep_sea_tooth.4bpp.lz"); +const u32 gItemIcon_DeepSeaTooth[] = INCBIN_U32("graphics/items/icons/deep_sea_tooth.4bpp.smol"); const u16 gItemIconPalette_DeepSeaTooth[] = INCBIN_U16("graphics/items/icon_palettes/deep_sea_tooth.gbapal"); -const u32 gItemIcon_SoulDew[] = INCBIN_U32("graphics/items/icons/soul_dew.4bpp.lz"); +const u32 gItemIcon_SoulDew[] = INCBIN_U32("graphics/items/icons/soul_dew.4bpp.smol"); const u16 gItemIconPalette_SoulDew[] = INCBIN_U16("graphics/items/icon_palettes/soul_dew.gbapal"); -const u32 gItemIcon_AdamantOrb[] = INCBIN_U32("graphics/items/icons/adamant_orb.4bpp.lz"); +const u32 gItemIcon_AdamantOrb[] = INCBIN_U32("graphics/items/icons/adamant_orb.4bpp.smol"); const u16 gItemIconPalette_AdamantOrb[] = INCBIN_U16("graphics/items/icon_palettes/adamant_orb.gbapal"); -const u32 gItemIcon_LustrousOrb[] = INCBIN_U32("graphics/items/icons/lustrous_orb.4bpp.lz"); +const u32 gItemIcon_LustrousOrb[] = INCBIN_U32("graphics/items/icons/lustrous_orb.4bpp.smol"); const u16 gItemIconPalette_LustrousOrb[] = INCBIN_U16("graphics/items/icon_palettes/lustrous_orb.gbapal"); -const u32 gItemIcon_GriseousOrb[] = INCBIN_U32("graphics/items/icons/griseous_orb.4bpp.lz"); +const u32 gItemIcon_GriseousOrb[] = INCBIN_U32("graphics/items/icons/griseous_orb.4bpp.smol"); const u16 gItemIconPalette_GriseousOrb[] = INCBIN_U16("graphics/items/icon_palettes/griseous_orb.gbapal"); // Incenses -const u32 gItemIcon_SeaIncense[] = INCBIN_U32("graphics/items/icons/sea_incense.4bpp.lz"); +const u32 gItemIcon_SeaIncense[] = INCBIN_U32("graphics/items/icons/sea_incense.4bpp.smol"); const u16 gItemIconPalette_SeaIncense[] = INCBIN_U16("graphics/items/icon_palettes/sea_incense.gbapal"); -const u32 gItemIcon_LaxIncense[] = INCBIN_U32("graphics/items/icons/lax_incense.4bpp.lz"); +const u32 gItemIcon_LaxIncense[] = INCBIN_U32("graphics/items/icons/lax_incense.4bpp.smol"); const u16 gItemIconPalette_LaxIncense[] = INCBIN_U16("graphics/items/icon_palettes/lax_incense.gbapal"); -const u32 gItemIcon_OddIncense[] = INCBIN_U32("graphics/items/icons/odd_incense.4bpp.lz"); +const u32 gItemIcon_OddIncense[] = INCBIN_U32("graphics/items/icons/odd_incense.4bpp.smol"); const u16 gItemIconPalette_OddIncense[] = INCBIN_U16("graphics/items/icon_palettes/odd_incense.gbapal"); -const u32 gItemIcon_RockIncense[] = INCBIN_U32("graphics/items/icons/rock_incense.4bpp.lz"); +const u32 gItemIcon_RockIncense[] = INCBIN_U32("graphics/items/icons/rock_incense.4bpp.smol"); const u16 gItemIconPalette_RockIncense[] = INCBIN_U16("graphics/items/icon_palettes/rock_incense.gbapal"); -const u32 gItemIcon_FullIncense[] = INCBIN_U32("graphics/items/icons/full_incense.4bpp.lz"); +const u32 gItemIcon_FullIncense[] = INCBIN_U32("graphics/items/icons/full_incense.4bpp.smol"); const u16 gItemIconPalette_FullIncense[] = INCBIN_U16("graphics/items/icon_palettes/full_incense.gbapal"); -const u32 gItemIcon_WaveIncense[] = INCBIN_U32("graphics/items/icons/wave_incense.4bpp.lz"); +const u32 gItemIcon_WaveIncense[] = INCBIN_U32("graphics/items/icons/wave_incense.4bpp.smol"); const u16 gItemIconPalette_WaveIncense[] = INCBIN_U16("graphics/items/icon_palettes/wave_incense.gbapal"); -const u32 gItemIcon_RoseIncense[] = INCBIN_U32("graphics/items/icons/rose_incense.4bpp.lz"); +const u32 gItemIcon_RoseIncense[] = INCBIN_U32("graphics/items/icons/rose_incense.4bpp.smol"); const u16 gItemIconPalette_RoseIncense[] = INCBIN_U16("graphics/items/icon_palettes/rose_incense.gbapal"); -const u32 gItemIcon_LuckIncense[] = INCBIN_U32("graphics/items/icons/luck_incense.4bpp.lz"); +const u32 gItemIcon_LuckIncense[] = INCBIN_U32("graphics/items/icons/luck_incense.4bpp.smol"); const u16 gItemIconPalette_LuckIncense[] = INCBIN_U16("graphics/items/icon_palettes/luck_incense.gbapal"); -const u32 gItemIcon_PureIncense[] = INCBIN_U32("graphics/items/icons/pure_incense.4bpp.lz"); +const u32 gItemIcon_PureIncense[] = INCBIN_U32("graphics/items/icons/pure_incense.4bpp.smol"); const u16 gItemIconPalette_PureIncense[] = INCBIN_U16("graphics/items/icon_palettes/pure_incense.gbapal"); // Contest Scarves -const u32 gItemIcon_Scarf[] = INCBIN_U32("graphics/items/icons/scarf.4bpp.lz"); +const u32 gItemIcon_Scarf[] = INCBIN_U32("graphics/items/icons/scarf.4bpp.smol"); const u16 gItemIconPalette_RedScarf[] = INCBIN_U16("graphics/items/icon_palettes/red_scarf.gbapal"); const u16 gItemIconPalette_BlueScarf[] = INCBIN_U16("graphics/items/icon_palettes/blue_scarf.gbapal"); @@ -1203,513 +1203,513 @@ const u16 gItemIconPalette_YellowScarf[] = INCBIN_U16("graphics/items/icon_palet // EV Gain Modifiers -const u32 gItemIcon_MachoBrace[] = INCBIN_U32("graphics/items/icons/macho_brace.4bpp.lz"); +const u32 gItemIcon_MachoBrace[] = INCBIN_U32("graphics/items/icons/macho_brace.4bpp.smol"); const u16 gItemIconPalette_MachoBrace[] = INCBIN_U16("graphics/items/icon_palettes/macho_brace.gbapal"); -const u32 gItemIcon_PowerWeight[] = INCBIN_U32("graphics/items/icons/power_weight.4bpp.lz"); +const u32 gItemIcon_PowerWeight[] = INCBIN_U32("graphics/items/icons/power_weight.4bpp.smol"); const u16 gItemIconPalette_PowerWeight[] = INCBIN_U16("graphics/items/icon_palettes/power_weight.gbapal"); -const u32 gItemIcon_PowerBracer[] = INCBIN_U32("graphics/items/icons/power_bracer.4bpp.lz"); +const u32 gItemIcon_PowerBracer[] = INCBIN_U32("graphics/items/icons/power_bracer.4bpp.smol"); const u16 gItemIconPalette_PowerBracer[] = INCBIN_U16("graphics/items/icon_palettes/power_bracer.gbapal"); -const u32 gItemIcon_PowerBelt[] = INCBIN_U32("graphics/items/icons/power_belt.4bpp.lz"); +const u32 gItemIcon_PowerBelt[] = INCBIN_U32("graphics/items/icons/power_belt.4bpp.smol"); const u16 gItemIconPalette_PowerBelt[] = INCBIN_U16("graphics/items/icon_palettes/power_belt.gbapal"); -const u32 gItemIcon_PowerLens[] = INCBIN_U32("graphics/items/icons/power_lens.4bpp.lz"); +const u32 gItemIcon_PowerLens[] = INCBIN_U32("graphics/items/icons/power_lens.4bpp.smol"); const u16 gItemIconPalette_PowerLens[] = INCBIN_U16("graphics/items/icon_palettes/power_lens.gbapal"); -const u32 gItemIcon_PowerBand[] = INCBIN_U32("graphics/items/icons/power_band.4bpp.lz"); +const u32 gItemIcon_PowerBand[] = INCBIN_U32("graphics/items/icons/power_band.4bpp.smol"); const u16 gItemIconPalette_PowerBand[] = INCBIN_U16("graphics/items/icon_palettes/power_band.gbapal"); -const u32 gItemIcon_PowerAnklet[] = INCBIN_U32("graphics/items/icons/power_anklet.4bpp.lz"); +const u32 gItemIcon_PowerAnklet[] = INCBIN_U32("graphics/items/icons/power_anklet.4bpp.smol"); const u16 gItemIconPalette_PowerAnklet[] = INCBIN_U16("graphics/items/icon_palettes/power_anklet.gbapal"); // Type-boosting Held Items -const u32 gItemIcon_SilkScarf[] = INCBIN_U32("graphics/items/icons/silk_scarf.4bpp.lz"); +const u32 gItemIcon_SilkScarf[] = INCBIN_U32("graphics/items/icons/silk_scarf.4bpp.smol"); const u16 gItemIconPalette_SilkScarf[] = INCBIN_U16("graphics/items/icon_palettes/silk_scarf.gbapal"); -const u32 gItemIcon_Charcoal[] = INCBIN_U32("graphics/items/icons/charcoal.4bpp.lz"); +const u32 gItemIcon_Charcoal[] = INCBIN_U32("graphics/items/icons/charcoal.4bpp.smol"); const u16 gItemIconPalette_Charcoal[] = INCBIN_U16("graphics/items/icon_palettes/charcoal.gbapal"); -const u32 gItemIcon_MysticWater[] = INCBIN_U32("graphics/items/icons/mystic_water.4bpp.lz"); +const u32 gItemIcon_MysticWater[] = INCBIN_U32("graphics/items/icons/mystic_water.4bpp.smol"); const u16 gItemIconPalette_MysticWater[] = INCBIN_U16("graphics/items/icon_palettes/mystic_water.gbapal"); -const u32 gItemIcon_Magnet[] = INCBIN_U32("graphics/items/icons/magnet.4bpp.lz"); +const u32 gItemIcon_Magnet[] = INCBIN_U32("graphics/items/icons/magnet.4bpp.smol"); const u16 gItemIconPalette_Magnet[] = INCBIN_U16("graphics/items/icon_palettes/magnet.gbapal"); -const u32 gItemIcon_MiracleSeed[] = INCBIN_U32("graphics/items/icons/miracle_seed.4bpp.lz"); +const u32 gItemIcon_MiracleSeed[] = INCBIN_U32("graphics/items/icons/miracle_seed.4bpp.smol"); const u16 gItemIconPalette_MiracleSeed[] = INCBIN_U16("graphics/items/icon_palettes/miracle_seed.gbapal"); -const u32 gItemIcon_NeverMeltIce[] = INCBIN_U32("graphics/items/icons/never_melt_ice.4bpp.lz"); +const u32 gItemIcon_NeverMeltIce[] = INCBIN_U32("graphics/items/icons/never_melt_ice.4bpp.smol"); const u16 gItemIconPalette_NeverMeltIce[] = INCBIN_U16("graphics/items/icon_palettes/never_melt_ice.gbapal"); -const u32 gItemIcon_BlackBelt[] = INCBIN_U32("graphics/items/icons/black_belt.4bpp.lz"); +const u32 gItemIcon_BlackBelt[] = INCBIN_U32("graphics/items/icons/black_belt.4bpp.smol"); const u16 gItemIconPalette_BlackTypeEnhancingItem[] = INCBIN_U16("graphics/items/icon_palettes/black_type_enhancing_item.gbapal"); -const u32 gItemIcon_PoisonBarb[] = INCBIN_U32("graphics/items/icons/poison_barb.4bpp.lz"); +const u32 gItemIcon_PoisonBarb[] = INCBIN_U32("graphics/items/icons/poison_barb.4bpp.smol"); const u16 gItemIconPalette_PoisonBarb[] = INCBIN_U16("graphics/items/icon_palettes/poison_barb.gbapal"); -const u32 gItemIcon_SoftSand[] = INCBIN_U32("graphics/items/icons/soft_sand.4bpp.lz"); +const u32 gItemIcon_SoftSand[] = INCBIN_U32("graphics/items/icons/soft_sand.4bpp.smol"); const u16 gItemIconPalette_SoftSand[] = INCBIN_U16("graphics/items/icon_palettes/soft_sand.gbapal"); -const u32 gItemIcon_SharpBeak[] = INCBIN_U32("graphics/items/icons/sharp_beak.4bpp.lz"); +const u32 gItemIcon_SharpBeak[] = INCBIN_U32("graphics/items/icons/sharp_beak.4bpp.smol"); const u16 gItemIconPalette_SharpBeak[] = INCBIN_U16("graphics/items/icon_palettes/sharp_beak.gbapal"); -const u32 gItemIcon_TwistedSpoon[] = INCBIN_U32("graphics/items/icons/twisted_spoon.4bpp.lz"); +const u32 gItemIcon_TwistedSpoon[] = INCBIN_U32("graphics/items/icons/twisted_spoon.4bpp.smol"); const u16 gItemIconPalette_TwistedSpoon[] = INCBIN_U16("graphics/items/icon_palettes/twisted_spoon.gbapal"); -const u32 gItemIcon_SilverPowder[] = INCBIN_U32("graphics/items/icons/silver_powder.4bpp.lz"); +const u32 gItemIcon_SilverPowder[] = INCBIN_U32("graphics/items/icons/silver_powder.4bpp.smol"); const u16 gItemIconPalette_SilverPowder[] = INCBIN_U16("graphics/items/icon_palettes/silver_powder.gbapal"); -const u32 gItemIcon_HardStone[] = INCBIN_U32("graphics/items/icons/hard_stone.4bpp.lz"); +const u32 gItemIcon_HardStone[] = INCBIN_U32("graphics/items/icons/hard_stone.4bpp.smol"); const u16 gItemIconPalette_HardStone[] = INCBIN_U16("graphics/items/icon_palettes/hard_stone.gbapal"); -const u32 gItemIcon_SpellTag[] = INCBIN_U32("graphics/items/icons/spell_tag.4bpp.lz"); +const u32 gItemIcon_SpellTag[] = INCBIN_U32("graphics/items/icons/spell_tag.4bpp.smol"); const u16 gItemIconPalette_SpellTag[] = INCBIN_U16("graphics/items/icon_palettes/spell_tag.gbapal"); -const u32 gItemIcon_DragonFang[] = INCBIN_U32("graphics/items/icons/dragon_fang.4bpp.lz"); +const u32 gItemIcon_DragonFang[] = INCBIN_U32("graphics/items/icons/dragon_fang.4bpp.smol"); const u16 gItemIconPalette_DragonFang[] = INCBIN_U16("graphics/items/icon_palettes/dragon_fang.gbapal"); -const u32 gItemIcon_BlackGlasses[] = INCBIN_U32("graphics/items/icons/black_glasses.4bpp.lz"); +const u32 gItemIcon_BlackGlasses[] = INCBIN_U32("graphics/items/icons/black_glasses.4bpp.smol"); -const u32 gItemIcon_MetalCoat[] = INCBIN_U32("graphics/items/icons/metal_coat.4bpp.lz"); +const u32 gItemIcon_MetalCoat[] = INCBIN_U32("graphics/items/icons/metal_coat.4bpp.smol"); const u16 gItemIconPalette_MetalCoat[] = INCBIN_U16("graphics/items/icon_palettes/metal_coat.gbapal"); // Choice Items -const u32 gItemIcon_ChoiceBand[] = INCBIN_U32("graphics/items/icons/choice_band.4bpp.lz"); +const u32 gItemIcon_ChoiceBand[] = INCBIN_U32("graphics/items/icons/choice_band.4bpp.smol"); const u16 gItemIconPalette_ChoiceBand[] = INCBIN_U16("graphics/items/icon_palettes/choice_band.gbapal"); -const u32 gItemIcon_ChoiceSpecs[] = INCBIN_U32("graphics/items/icons/choice_specs.4bpp.lz"); +const u32 gItemIcon_ChoiceSpecs[] = INCBIN_U32("graphics/items/icons/choice_specs.4bpp.smol"); const u16 gItemIconPalette_ChoiceSpecs[] = INCBIN_U16("graphics/items/icon_palettes/choice_specs.gbapal"); -const u32 gItemIcon_ChoiceScarf[] = INCBIN_U32("graphics/items/icons/choice_scarf.4bpp.lz"); +const u32 gItemIcon_ChoiceScarf[] = INCBIN_U32("graphics/items/icons/choice_scarf.4bpp.smol"); const u16 gItemIconPalette_ChoiceScarf[] = INCBIN_U16("graphics/items/icon_palettes/choice_scarf.gbapal"); // Status Orbs -const u32 gItemIcon_FlameOrb[] = INCBIN_U32("graphics/items/icons/flame_orb.4bpp.lz"); +const u32 gItemIcon_FlameOrb[] = INCBIN_U32("graphics/items/icons/flame_orb.4bpp.smol"); const u16 gItemIconPalette_FlameOrb[] = INCBIN_U16("graphics/items/icon_palettes/flame_orb.gbapal"); -const u32 gItemIcon_ToxicOrb[] = INCBIN_U32("graphics/items/icons/toxic_orb.4bpp.lz"); +const u32 gItemIcon_ToxicOrb[] = INCBIN_U32("graphics/items/icons/toxic_orb.4bpp.smol"); const u16 gItemIconPalette_ToxicOrb[] = INCBIN_U16("graphics/items/icon_palettes/toxic_orb.gbapal"); // Weather Rocks -const u32 gItemIcon_DampRock[] = INCBIN_U32("graphics/items/icons/damp_rock.4bpp.lz"); +const u32 gItemIcon_DampRock[] = INCBIN_U32("graphics/items/icons/damp_rock.4bpp.smol"); const u16 gItemIconPalette_DampRock[] = INCBIN_U16("graphics/items/icon_palettes/damp_rock.gbapal"); -const u32 gItemIcon_HeatRock[] = INCBIN_U32("graphics/items/icons/heat_rock.4bpp.lz"); +const u32 gItemIcon_HeatRock[] = INCBIN_U32("graphics/items/icons/heat_rock.4bpp.smol"); const u16 gItemIconPalette_HeatRock[] = INCBIN_U16("graphics/items/icon_palettes/heat_rock.gbapal"); -const u32 gItemIcon_SmoothRock[] = INCBIN_U32("graphics/items/icons/smooth_rock.4bpp.lz"); +const u32 gItemIcon_SmoothRock[] = INCBIN_U32("graphics/items/icons/smooth_rock.4bpp.smol"); const u16 gItemIconPalette_SmoothRock[] = INCBIN_U16("graphics/items/icon_palettes/smooth_rock.gbapal"); -const u32 gItemIcon_IcyRock[] = INCBIN_U32("graphics/items/icons/icy_rock.4bpp.lz"); +const u32 gItemIcon_IcyRock[] = INCBIN_U32("graphics/items/icons/icy_rock.4bpp.smol"); const u16 gItemIconPalette_IcyRock[] = INCBIN_U16("graphics/items/icon_palettes/icy_rock.gbapal"); // Terrain Seeds -const u32 gItemIcon_ElectricSeed[] = INCBIN_U32("graphics/items/icons/electric_seed.4bpp.lz"); +const u32 gItemIcon_ElectricSeed[] = INCBIN_U32("graphics/items/icons/electric_seed.4bpp.smol"); const u16 gItemIconPalette_ElectricSeed[] = INCBIN_U16("graphics/items/icon_palettes/electric_seed.gbapal"); -const u32 gItemIcon_PsychicSeed[] = INCBIN_U32("graphics/items/icons/psychic_seed.4bpp.lz"); +const u32 gItemIcon_PsychicSeed[] = INCBIN_U32("graphics/items/icons/psychic_seed.4bpp.smol"); const u16 gItemIconPalette_PsychicSeed[] = INCBIN_U16("graphics/items/icon_palettes/psychic_seed.gbapal"); -const u32 gItemIcon_MistySeed[] = INCBIN_U32("graphics/items/icons/misty_seed.4bpp.lz"); +const u32 gItemIcon_MistySeed[] = INCBIN_U32("graphics/items/icons/misty_seed.4bpp.smol"); const u16 gItemIconPalette_MistySeed[] = INCBIN_U16("graphics/items/icon_palettes/misty_seed.gbapal"); -const u32 gItemIcon_GrassySeed[] = INCBIN_U32("graphics/items/icons/grassy_seed.4bpp.lz"); +const u32 gItemIcon_GrassySeed[] = INCBIN_U32("graphics/items/icons/grassy_seed.4bpp.smol"); const u16 gItemIconPalette_GrassySeed[] = INCBIN_U16("graphics/items/icon_palettes/grassy_seed.gbapal"); // Type-activated Stat Modifiers -const u32 gItemIcon_AbsorbBulb[] = INCBIN_U32("graphics/items/icons/absorb_bulb.4bpp.lz"); +const u32 gItemIcon_AbsorbBulb[] = INCBIN_U32("graphics/items/icons/absorb_bulb.4bpp.smol"); const u16 gItemIconPalette_AbsorbBulb[] = INCBIN_U16("graphics/items/icon_palettes/absorb_bulb.gbapal"); -const u32 gItemIcon_CellBattery[] = INCBIN_U32("graphics/items/icons/cell_battery.4bpp.lz"); +const u32 gItemIcon_CellBattery[] = INCBIN_U32("graphics/items/icons/cell_battery.4bpp.smol"); const u16 gItemIconPalette_CellBattery[] = INCBIN_U16("graphics/items/icon_palettes/cell_battery.gbapal"); -const u32 gItemIcon_LuminousMoss[] = INCBIN_U32("graphics/items/icons/luminous_moss.4bpp.lz"); +const u32 gItemIcon_LuminousMoss[] = INCBIN_U32("graphics/items/icons/luminous_moss.4bpp.smol"); const u16 gItemIconPalette_LuminousMoss[] = INCBIN_U16("graphics/items/icon_palettes/luminous_moss.gbapal"); -const u32 gItemIcon_Snowball[] = INCBIN_U32("graphics/items/icons/snowball.4bpp.lz"); +const u32 gItemIcon_Snowball[] = INCBIN_U32("graphics/items/icons/snowball.4bpp.smol"); const u16 gItemIconPalette_Snowball[] = INCBIN_U16("graphics/items/icon_palettes/snowball.gbapal"); // Misc. Held Items -const u32 gItemIcon_BrightPowder[] = INCBIN_U32("graphics/items/icons/bright_powder.4bpp.lz"); +const u32 gItemIcon_BrightPowder[] = INCBIN_U32("graphics/items/icons/bright_powder.4bpp.smol"); const u16 gItemIconPalette_BrightPowder[] = INCBIN_U16("graphics/items/icon_palettes/bright_powder.gbapal"); -const u32 gItemIcon_InBattleHerb[] = INCBIN_U32("graphics/items/icons/in_battle_herb.4bpp.lz"); +const u32 gItemIcon_InBattleHerb[] = INCBIN_U32("graphics/items/icons/in_battle_herb.4bpp.smol"); const u16 gItemIconPalette_WhiteHerb[] = INCBIN_U16("graphics/items/icon_palettes/white_herb.gbapal"); -const u32 gItemIcon_ExpShare[] = INCBIN_U32("graphics/items/icons/exp_share.4bpp.lz"); +const u32 gItemIcon_ExpShare[] = INCBIN_U32("graphics/items/icons/exp_share.4bpp.smol"); const u16 gItemIconPalette_ExpShare[] = INCBIN_U16("graphics/items/icon_palettes/exp_share.gbapal"); -const u32 gItemIcon_QuickClaw[] = INCBIN_U32("graphics/items/icons/quick_claw.4bpp.lz"); +const u32 gItemIcon_QuickClaw[] = INCBIN_U32("graphics/items/icons/quick_claw.4bpp.smol"); const u16 gItemIconPalette_QuickClaw[] = INCBIN_U16("graphics/items/icon_palettes/quick_claw.gbapal"); -const u32 gItemIcon_SootheBell[] = INCBIN_U32("graphics/items/icons/soothe_bell.4bpp.lz"); +const u32 gItemIcon_SootheBell[] = INCBIN_U32("graphics/items/icons/soothe_bell.4bpp.smol"); const u16 gItemIconPalette_SootheBell[] = INCBIN_U16("graphics/items/icon_palettes/soothe_bell.gbapal"); const u16 gItemIconPalette_MentalHerb[] = INCBIN_U16("graphics/items/icon_palettes/mental_herb.gbapal"); -const u32 gItemIcon_KingsRock[] = INCBIN_U32("graphics/items/icons/kings_rock.4bpp.lz"); +const u32 gItemIcon_KingsRock[] = INCBIN_U32("graphics/items/icons/kings_rock.4bpp.smol"); const u16 gItemIconPalette_KingsRock[] = INCBIN_U16("graphics/items/icon_palettes/kings_rock.gbapal"); -const u32 gItemIcon_AmuletCoin[] = INCBIN_U32("graphics/items/icons/amulet_coin.4bpp.lz"); +const u32 gItemIcon_AmuletCoin[] = INCBIN_U32("graphics/items/icons/amulet_coin.4bpp.smol"); const u16 gItemIconPalette_AmuletCoin[] = INCBIN_U16("graphics/items/icon_palettes/amulet_coin.gbapal"); -const u32 gItemIcon_CleanseTag[] = INCBIN_U32("graphics/items/icons/cleanse_tag.4bpp.lz"); +const u32 gItemIcon_CleanseTag[] = INCBIN_U32("graphics/items/icons/cleanse_tag.4bpp.smol"); const u16 gItemIconPalette_CleanseTag[] = INCBIN_U16("graphics/items/icon_palettes/cleanse_tag.gbapal"); -const u32 gItemIcon_SmokeBall[] = INCBIN_U32("graphics/items/icons/smoke_ball.4bpp.lz"); +const u32 gItemIcon_SmokeBall[] = INCBIN_U32("graphics/items/icons/smoke_ball.4bpp.smol"); const u16 gItemIconPalette_SmokeBall[] = INCBIN_U16("graphics/items/icon_palettes/smoke_ball.gbapal"); -const u32 gItemIcon_FocusBand[] = INCBIN_U32("graphics/items/icons/focus_band.4bpp.lz"); +const u32 gItemIcon_FocusBand[] = INCBIN_U32("graphics/items/icons/focus_band.4bpp.smol"); const u16 gItemIconPalette_FocusBand[] = INCBIN_U16("graphics/items/icon_palettes/focus_band.gbapal"); -const u32 gItemIcon_LuckyEgg[] = INCBIN_U32("graphics/items/icons/lucky_egg.4bpp.lz"); +const u32 gItemIcon_LuckyEgg[] = INCBIN_U32("graphics/items/icons/lucky_egg.4bpp.smol"); const u16 gItemIconPalette_LuckyEgg[] = INCBIN_U16("graphics/items/icon_palettes/lucky_egg.gbapal"); -const u32 gItemIcon_ScopeLens[] = INCBIN_U32("graphics/items/icons/scope_lens.4bpp.lz"); +const u32 gItemIcon_ScopeLens[] = INCBIN_U32("graphics/items/icons/scope_lens.4bpp.smol"); const u16 gItemIconPalette_ScopeLens[] = INCBIN_U16("graphics/items/icon_palettes/scope_lens.gbapal"); -const u32 gItemIcon_Leftovers[] = INCBIN_U32("graphics/items/icons/leftovers.4bpp.lz"); +const u32 gItemIcon_Leftovers[] = INCBIN_U32("graphics/items/icons/leftovers.4bpp.smol"); const u16 gItemIconPalette_Leftovers[] = INCBIN_U16("graphics/items/icon_palettes/leftovers.gbapal"); -const u32 gItemIcon_ShellBell[] = INCBIN_U32("graphics/items/icons/shell_bell.4bpp.lz"); +const u32 gItemIcon_ShellBell[] = INCBIN_U32("graphics/items/icons/shell_bell.4bpp.smol"); -const u32 gItemIcon_WideLens[] = INCBIN_U32("graphics/items/icons/wide_lens.4bpp.lz"); +const u32 gItemIcon_WideLens[] = INCBIN_U32("graphics/items/icons/wide_lens.4bpp.smol"); const u16 gItemIconPalette_WideLens[] = INCBIN_U16("graphics/items/icon_palettes/wide_lens.gbapal"); -const u32 gItemIcon_MuscleBand[] = INCBIN_U32("graphics/items/icons/muscle_band.4bpp.lz"); +const u32 gItemIcon_MuscleBand[] = INCBIN_U32("graphics/items/icons/muscle_band.4bpp.smol"); const u16 gItemIconPalette_MuscleBand[] = INCBIN_U16("graphics/items/icon_palettes/muscle_band.gbapal"); -const u32 gItemIcon_WiseGlasses[] = INCBIN_U32("graphics/items/icons/wise_glasses.4bpp.lz"); +const u32 gItemIcon_WiseGlasses[] = INCBIN_U32("graphics/items/icons/wise_glasses.4bpp.smol"); const u16 gItemIconPalette_WiseGlasses[] = INCBIN_U16("graphics/items/icon_palettes/wise_glasses.gbapal"); -const u32 gItemIcon_ExpertBelt[] = INCBIN_U32("graphics/items/icons/expert_belt.4bpp.lz"); +const u32 gItemIcon_ExpertBelt[] = INCBIN_U32("graphics/items/icons/expert_belt.4bpp.smol"); const u16 gItemIconPalette_ExpertBelt[] = INCBIN_U16("graphics/items/icon_palettes/expert_belt.gbapal"); -const u32 gItemIcon_LightClay[] = INCBIN_U32("graphics/items/icons/light_clay.4bpp.lz"); +const u32 gItemIcon_LightClay[] = INCBIN_U32("graphics/items/icons/light_clay.4bpp.smol"); const u16 gItemIconPalette_LightClay[] = INCBIN_U16("graphics/items/icon_palettes/light_clay.gbapal"); -const u32 gItemIcon_LifeOrb[] = INCBIN_U32("graphics/items/icons/life_orb.4bpp.lz"); +const u32 gItemIcon_LifeOrb[] = INCBIN_U32("graphics/items/icons/life_orb.4bpp.smol"); const u16 gItemIconPalette_LifeOrb[] = INCBIN_U16("graphics/items/icon_palettes/life_orb.gbapal"); -const u32 gItemIcon_PowerHerb[] = INCBIN_U32("graphics/items/icons/power_herb.4bpp.lz"); +const u32 gItemIcon_PowerHerb[] = INCBIN_U32("graphics/items/icons/power_herb.4bpp.smol"); const u16 gItemIconPalette_PowerHerb[] = INCBIN_U16("graphics/items/icon_palettes/power_herb.gbapal"); -const u32 gItemIcon_FocusSash[] = INCBIN_U32("graphics/items/icons/focus_sash.4bpp.lz"); +const u32 gItemIcon_FocusSash[] = INCBIN_U32("graphics/items/icons/focus_sash.4bpp.smol"); const u16 gItemIconPalette_FocusSash[] = INCBIN_U16("graphics/items/icon_palettes/focus_sash.gbapal"); -const u32 gItemIcon_ZoomLens[] = INCBIN_U32("graphics/items/icons/zoom_lens.4bpp.lz"); +const u32 gItemIcon_ZoomLens[] = INCBIN_U32("graphics/items/icons/zoom_lens.4bpp.smol"); const u16 gItemIconPalette_ZoomLens[] = INCBIN_U16("graphics/items/icon_palettes/zoom_lens.gbapal"); -const u32 gItemIcon_Metronome[] = INCBIN_U32("graphics/items/icons/metronome.4bpp.lz"); +const u32 gItemIcon_Metronome[] = INCBIN_U32("graphics/items/icons/metronome.4bpp.smol"); const u16 gItemIconPalette_Metronome[] = INCBIN_U16("graphics/items/icon_palettes/metronome.gbapal"); -const u32 gItemIcon_IronBall[] = INCBIN_U32("graphics/items/icons/iron_ball.4bpp.lz"); +const u32 gItemIcon_IronBall[] = INCBIN_U32("graphics/items/icons/iron_ball.4bpp.smol"); const u16 gItemIconPalette_IronBall[] = INCBIN_U16("graphics/items/icon_palettes/iron_ball.gbapal"); -const u32 gItemIcon_LaggingTail[] = INCBIN_U32("graphics/items/icons/lagging_tail.4bpp.lz"); +const u32 gItemIcon_LaggingTail[] = INCBIN_U32("graphics/items/icons/lagging_tail.4bpp.smol"); const u16 gItemIconPalette_LaggingTail[] = INCBIN_U16("graphics/items/icon_palettes/lagging_tail.gbapal"); -const u32 gItemIcon_DestinyKnot[] = INCBIN_U32("graphics/items/icons/destiny_knot.4bpp.lz"); +const u32 gItemIcon_DestinyKnot[] = INCBIN_U32("graphics/items/icons/destiny_knot.4bpp.smol"); const u16 gItemIconPalette_DestinyKnot[] = INCBIN_U16("graphics/items/icon_palettes/destiny_knot.gbapal"); -const u32 gItemIcon_BlackSludge[] = INCBIN_U32("graphics/items/icons/black_sludge.4bpp.lz"); +const u32 gItemIcon_BlackSludge[] = INCBIN_U32("graphics/items/icons/black_sludge.4bpp.smol"); const u16 gItemIconPalette_BlackSludge[] = INCBIN_U16("graphics/items/icon_palettes/black_sludge.gbapal"); -const u32 gItemIcon_GripClaw[] = INCBIN_U32("graphics/items/icons/grip_claw.4bpp.lz"); +const u32 gItemIcon_GripClaw[] = INCBIN_U32("graphics/items/icons/grip_claw.4bpp.smol"); const u16 gItemIconPalette_GripClaw[] = INCBIN_U16("graphics/items/icon_palettes/grip_claw.gbapal"); -const u32 gItemIcon_StickyBarb[] = INCBIN_U32("graphics/items/icons/sticky_barb.4bpp.lz"); +const u32 gItemIcon_StickyBarb[] = INCBIN_U32("graphics/items/icons/sticky_barb.4bpp.smol"); const u16 gItemIconPalette_StickyBarb[] = INCBIN_U16("graphics/items/icon_palettes/sticky_barb.gbapal"); -const u32 gItemIcon_ShedShell[] = INCBIN_U32("graphics/items/icons/shed_shell.4bpp.lz"); +const u32 gItemIcon_ShedShell[] = INCBIN_U32("graphics/items/icons/shed_shell.4bpp.smol"); const u16 gItemIconPalette_ShedShell[] = INCBIN_U16("graphics/items/icon_palettes/shed_shell.gbapal"); -const u32 gItemIcon_BigRoot[] = INCBIN_U32("graphics/items/icons/big_root.4bpp.lz"); +const u32 gItemIcon_BigRoot[] = INCBIN_U32("graphics/items/icons/big_root.4bpp.smol"); const u16 gItemIconPalette_BigRoot[] = INCBIN_U16("graphics/items/icon_palettes/big_root.gbapal"); -const u32 gItemIcon_RazorClaw[] = INCBIN_U32("graphics/items/icons/razor_claw.4bpp.lz"); +const u32 gItemIcon_RazorClaw[] = INCBIN_U32("graphics/items/icons/razor_claw.4bpp.smol"); const u16 gItemIconPalette_RazorClaw[] = INCBIN_U16("graphics/items/icon_palettes/razor_claw.gbapal"); -const u32 gItemIcon_RazorFang[] = INCBIN_U32("graphics/items/icons/razor_fang.4bpp.lz"); +const u32 gItemIcon_RazorFang[] = INCBIN_U32("graphics/items/icons/razor_fang.4bpp.smol"); const u16 gItemIconPalette_RazorFang[] = INCBIN_U16("graphics/items/icon_palettes/razor_fang.gbapal"); -const u32 gItemIcon_Eviolite[] = INCBIN_U32("graphics/items/icons/eviolite.4bpp.lz"); +const u32 gItemIcon_Eviolite[] = INCBIN_U32("graphics/items/icons/eviolite.4bpp.smol"); const u16 gItemIconPalette_Eviolite[] = INCBIN_U16("graphics/items/icon_palettes/eviolite.gbapal"); -const u32 gItemIcon_FloatStone[] = INCBIN_U32("graphics/items/icons/float_stone.4bpp.lz"); +const u32 gItemIcon_FloatStone[] = INCBIN_U32("graphics/items/icons/float_stone.4bpp.smol"); const u16 gItemIconPalette_FloatStone[] = INCBIN_U16("graphics/items/icon_palettes/float_stone.gbapal"); -const u32 gItemIcon_RockyHelmet[] = INCBIN_U32("graphics/items/icons/rocky_helmet.4bpp.lz"); +const u32 gItemIcon_RockyHelmet[] = INCBIN_U32("graphics/items/icons/rocky_helmet.4bpp.smol"); const u16 gItemIconPalette_RockyHelmet[] = INCBIN_U16("graphics/items/icon_palettes/rocky_helmet.gbapal"); -const u32 gItemIcon_AirBalloon[] = INCBIN_U32("graphics/items/icons/air_balloon.4bpp.lz"); +const u32 gItemIcon_AirBalloon[] = INCBIN_U32("graphics/items/icons/air_balloon.4bpp.smol"); const u16 gItemIconPalette_AirBalloon[] = INCBIN_U16("graphics/items/icon_palettes/air_balloon.gbapal"); -const u32 gItemIcon_RedCard[] = INCBIN_U32("graphics/items/icons/red_card.4bpp.lz"); +const u32 gItemIcon_RedCard[] = INCBIN_U32("graphics/items/icons/red_card.4bpp.smol"); const u16 gItemIconPalette_RedCard[] = INCBIN_U16("graphics/items/icon_palettes/red_card.gbapal"); -const u32 gItemIcon_RingTarget[] = INCBIN_U32("graphics/items/icons/ring_target.4bpp.lz"); +const u32 gItemIcon_RingTarget[] = INCBIN_U32("graphics/items/icons/ring_target.4bpp.smol"); const u16 gItemIconPalette_RingTarget[] = INCBIN_U16("graphics/items/icon_palettes/ring_target.gbapal"); -const u32 gItemIcon_BindingBand[] = INCBIN_U32("graphics/items/icons/binding_band.4bpp.lz"); +const u32 gItemIcon_BindingBand[] = INCBIN_U32("graphics/items/icons/binding_band.4bpp.smol"); const u16 gItemIconPalette_BindingBand[] = INCBIN_U16("graphics/items/icon_palettes/binding_band.gbapal"); -const u32 gItemIcon_EjectButton[] = INCBIN_U32("graphics/items/icons/eject_button.4bpp.lz"); +const u32 gItemIcon_EjectButton[] = INCBIN_U32("graphics/items/icons/eject_button.4bpp.smol"); const u16 gItemIconPalette_EjectButton[] = INCBIN_U16("graphics/items/icon_palettes/eject_button.gbapal"); -const u32 gItemIcon_WeaknessPolicy[] = INCBIN_U32("graphics/items/icons/weakness_policy.4bpp.lz"); +const u32 gItemIcon_WeaknessPolicy[] = INCBIN_U32("graphics/items/icons/weakness_policy.4bpp.smol"); const u16 gItemIconPalette_WeaknessPolicy[] = INCBIN_U16("graphics/items/icon_palettes/weakness_policy.gbapal"); -const u32 gItemIcon_AssaultVest[] = INCBIN_U32("graphics/items/icons/assault_vest.4bpp.lz"); +const u32 gItemIcon_AssaultVest[] = INCBIN_U32("graphics/items/icons/assault_vest.4bpp.smol"); const u16 gItemIconPalette_AssaultVest[] = INCBIN_U16("graphics/items/icon_palettes/assault_vest.gbapal"); -const u32 gItemIcon_SafetyGoggles[] = INCBIN_U32("graphics/items/icons/safety_goggles.4bpp.lz"); +const u32 gItemIcon_SafetyGoggles[] = INCBIN_U32("graphics/items/icons/safety_goggles.4bpp.smol"); const u16 gItemIconPalette_SafetyGoggles[] = INCBIN_U16("graphics/items/icon_palettes/safety_goggles.gbapal"); -const u32 gItemIcon_AdrenalineOrb[] = INCBIN_U32("graphics/items/icons/adrenaline_orb.4bpp.lz"); +const u32 gItemIcon_AdrenalineOrb[] = INCBIN_U32("graphics/items/icons/adrenaline_orb.4bpp.smol"); const u16 gItemIconPalette_AdrenalineOrb[] = INCBIN_U16("graphics/items/icon_palettes/adrenaline_orb.gbapal"); -const u32 gItemIcon_TerrainExtender[] = INCBIN_U32("graphics/items/icons/terrain_extender.4bpp.lz"); +const u32 gItemIcon_TerrainExtender[] = INCBIN_U32("graphics/items/icons/terrain_extender.4bpp.smol"); const u16 gItemIconPalette_TerrainExtender[] = INCBIN_U16("graphics/items/icon_palettes/terrain_extender.gbapal"); -const u32 gItemIcon_ProtectivePads[] = INCBIN_U32("graphics/items/icons/protective_pads.4bpp.lz"); +const u32 gItemIcon_ProtectivePads[] = INCBIN_U32("graphics/items/icons/protective_pads.4bpp.smol"); const u16 gItemIconPalette_ProtectivePads[] = INCBIN_U16("graphics/items/icon_palettes/protective_pads.gbapal"); -const u32 gItemIcon_ThroatSpray[] = INCBIN_U32("graphics/items/icons/throat_spray.4bpp.lz"); +const u32 gItemIcon_ThroatSpray[] = INCBIN_U32("graphics/items/icons/throat_spray.4bpp.smol"); const u16 gItemIconPalette_ThroatSpray[] = INCBIN_U16("graphics/items/icon_palettes/throat_spray.gbapal"); -const u32 gItemIcon_EjectPack[] = INCBIN_U32("graphics/items/icons/eject_pack.4bpp.lz"); +const u32 gItemIcon_EjectPack[] = INCBIN_U32("graphics/items/icons/eject_pack.4bpp.smol"); const u16 gItemIconPalette_EjectPack[] = INCBIN_U16("graphics/items/icon_palettes/eject_pack.gbapal"); -const u32 gItemIcon_HeavyDutyBoots[] = INCBIN_U32("graphics/items/icons/heavy_duty_boots.4bpp.lz"); +const u32 gItemIcon_HeavyDutyBoots[] = INCBIN_U32("graphics/items/icons/heavy_duty_boots.4bpp.smol"); const u16 gItemIconPalette_HeavyDutyBoots[] = INCBIN_U16("graphics/items/icon_palettes/heavy_duty_boots.gbapal"); -const u32 gItemIcon_BlunderPolicy[] = INCBIN_U32("graphics/items/icons/blunder_policy.4bpp.lz"); +const u32 gItemIcon_BlunderPolicy[] = INCBIN_U32("graphics/items/icons/blunder_policy.4bpp.smol"); const u16 gItemIconPalette_BlunderPolicy[] = INCBIN_U16("graphics/items/icon_palettes/blunder_policy.gbapal"); -const u32 gItemIcon_RoomService[] = INCBIN_U32("graphics/items/icons/room_service.4bpp.lz"); +const u32 gItemIcon_RoomService[] = INCBIN_U32("graphics/items/icons/room_service.4bpp.smol"); const u16 gItemIconPalette_RoomService[] = INCBIN_U16("graphics/items/icon_palettes/room_service.gbapal"); -const u32 gItemIcon_UtilityUmbrella[] = INCBIN_U32("graphics/items/icons/utility_umbrella.4bpp.lz"); +const u32 gItemIcon_UtilityUmbrella[] = INCBIN_U32("graphics/items/icons/utility_umbrella.4bpp.smol"); const u16 gItemIconPalette_UtilityUmbrella[] = INCBIN_U16("graphics/items/icon_palettes/utility_umbrella.gbapal"); // Berries -const u32 gItemIcon_CheriBerry[] = INCBIN_U32("graphics/items/icons/cheri_berry.4bpp.lz"); +const u32 gItemIcon_CheriBerry[] = INCBIN_U32("graphics/items/icons/cheri_berry.4bpp.smol"); const u16 gItemIconPalette_CheriBerry[] = INCBIN_U16("graphics/items/icon_palettes/cheri_berry.gbapal"); -const u32 gItemIcon_ChestoBerry[] = INCBIN_U32("graphics/items/icons/chesto_berry.4bpp.lz"); +const u32 gItemIcon_ChestoBerry[] = INCBIN_U32("graphics/items/icons/chesto_berry.4bpp.smol"); const u16 gItemIconPalette_ChestoBerry[] = INCBIN_U16("graphics/items/icon_palettes/chesto_berry.gbapal"); -const u32 gItemIcon_PechaBerry[] = INCBIN_U32("graphics/items/icons/pecha_berry.4bpp.lz"); +const u32 gItemIcon_PechaBerry[] = INCBIN_U32("graphics/items/icons/pecha_berry.4bpp.smol"); const u16 gItemIconPalette_PechaBerry[] = INCBIN_U16("graphics/items/icon_palettes/pecha_berry.gbapal"); -const u32 gItemIcon_RawstBerry[] = INCBIN_U32("graphics/items/icons/rawst_berry.4bpp.lz"); +const u32 gItemIcon_RawstBerry[] = INCBIN_U32("graphics/items/icons/rawst_berry.4bpp.smol"); const u16 gItemIconPalette_RawstBerry[] = INCBIN_U16("graphics/items/icon_palettes/rawst_berry.gbapal"); -const u32 gItemIcon_AspearBerry[] = INCBIN_U32("graphics/items/icons/aspear_berry.4bpp.lz"); +const u32 gItemIcon_AspearBerry[] = INCBIN_U32("graphics/items/icons/aspear_berry.4bpp.smol"); const u16 gItemIconPalette_AspearBerry[] = INCBIN_U16("graphics/items/icon_palettes/aspear_berry.gbapal"); -const u32 gItemIcon_LeppaBerry[] = INCBIN_U32("graphics/items/icons/leppa_berry.4bpp.lz"); +const u32 gItemIcon_LeppaBerry[] = INCBIN_U32("graphics/items/icons/leppa_berry.4bpp.smol"); const u16 gItemIconPalette_LeppaBerry[] = INCBIN_U16("graphics/items/icon_palettes/leppa_berry.gbapal"); -const u32 gItemIcon_OranBerry[] = INCBIN_U32("graphics/items/icons/oran_berry.4bpp.lz"); +const u32 gItemIcon_OranBerry[] = INCBIN_U32("graphics/items/icons/oran_berry.4bpp.smol"); const u16 gItemIconPalette_OranBerry[] = INCBIN_U16("graphics/items/icon_palettes/oran_berry.gbapal"); -const u32 gItemIcon_PersimBerry[] = INCBIN_U32("graphics/items/icons/persim_berry.4bpp.lz"); +const u32 gItemIcon_PersimBerry[] = INCBIN_U32("graphics/items/icons/persim_berry.4bpp.smol"); const u16 gItemIconPalette_PersimBerry[] = INCBIN_U16("graphics/items/icon_palettes/persim_berry.gbapal"); -const u32 gItemIcon_LumBerry[] = INCBIN_U32("graphics/items/icons/lum_berry.4bpp.lz"); +const u32 gItemIcon_LumBerry[] = INCBIN_U32("graphics/items/icons/lum_berry.4bpp.smol"); const u16 gItemIconPalette_LumBerry[] = INCBIN_U16("graphics/items/icon_palettes/lum_berry.gbapal"); -const u32 gItemIcon_SitrusBerry[] = INCBIN_U32("graphics/items/icons/sitrus_berry.4bpp.lz"); +const u32 gItemIcon_SitrusBerry[] = INCBIN_U32("graphics/items/icons/sitrus_berry.4bpp.smol"); const u16 gItemIconPalette_SitrusBerry[] = INCBIN_U16("graphics/items/icon_palettes/sitrus_berry.gbapal"); -const u32 gItemIcon_FigyBerry[] = INCBIN_U32("graphics/items/icons/figy_berry.4bpp.lz"); +const u32 gItemIcon_FigyBerry[] = INCBIN_U32("graphics/items/icons/figy_berry.4bpp.smol"); const u16 gItemIconPalette_FigyBerry[] = INCBIN_U16("graphics/items/icon_palettes/figy_berry.gbapal"); -const u32 gItemIcon_WikiBerry[] = INCBIN_U32("graphics/items/icons/wiki_berry.4bpp.lz"); +const u32 gItemIcon_WikiBerry[] = INCBIN_U32("graphics/items/icons/wiki_berry.4bpp.smol"); const u16 gItemIconPalette_WikiBerry[] = INCBIN_U16("graphics/items/icon_palettes/wiki_berry.gbapal"); -const u32 gItemIcon_MagoBerry[] = INCBIN_U32("graphics/items/icons/mago_berry.4bpp.lz"); +const u32 gItemIcon_MagoBerry[] = INCBIN_U32("graphics/items/icons/mago_berry.4bpp.smol"); const u16 gItemIconPalette_MagoBerry[] = INCBIN_U16("graphics/items/icon_palettes/mago_berry.gbapal"); -const u32 gItemIcon_AguavBerry[] = INCBIN_U32("graphics/items/icons/aguav_berry.4bpp.lz"); +const u32 gItemIcon_AguavBerry[] = INCBIN_U32("graphics/items/icons/aguav_berry.4bpp.smol"); const u16 gItemIconPalette_AguavBerry[] = INCBIN_U16("graphics/items/icon_palettes/aguav_berry.gbapal"); -const u32 gItemIcon_IapapaBerry[] = INCBIN_U32("graphics/items/icons/iapapa_berry.4bpp.lz"); +const u32 gItemIcon_IapapaBerry[] = INCBIN_U32("graphics/items/icons/iapapa_berry.4bpp.smol"); const u16 gItemIconPalette_IapapaBerry[] = INCBIN_U16("graphics/items/icon_palettes/iapapa_berry.gbapal"); -const u32 gItemIcon_RazzBerry[] = INCBIN_U32("graphics/items/icons/razz_berry.4bpp.lz"); +const u32 gItemIcon_RazzBerry[] = INCBIN_U32("graphics/items/icons/razz_berry.4bpp.smol"); const u16 gItemIconPalette_RazzBerry[] = INCBIN_U16("graphics/items/icon_palettes/razz_berry.gbapal"); -const u32 gItemIcon_BlukBerry[] = INCBIN_U32("graphics/items/icons/bluk_berry.4bpp.lz"); +const u32 gItemIcon_BlukBerry[] = INCBIN_U32("graphics/items/icons/bluk_berry.4bpp.smol"); const u16 gItemIconPalette_BlukBerry[] = INCBIN_U16("graphics/items/icon_palettes/bluk_berry.gbapal"); -const u32 gItemIcon_NanabBerry[] = INCBIN_U32("graphics/items/icons/nanab_berry.4bpp.lz"); +const u32 gItemIcon_NanabBerry[] = INCBIN_U32("graphics/items/icons/nanab_berry.4bpp.smol"); const u16 gItemIconPalette_NanabBerry[] = INCBIN_U16("graphics/items/icon_palettes/nanab_berry.gbapal"); -const u32 gItemIcon_WepearBerry[] = INCBIN_U32("graphics/items/icons/wepear_berry.4bpp.lz"); +const u32 gItemIcon_WepearBerry[] = INCBIN_U32("graphics/items/icons/wepear_berry.4bpp.smol"); const u16 gItemIconPalette_WepearBerry[] = INCBIN_U16("graphics/items/icon_palettes/wepear_berry.gbapal"); -const u32 gItemIcon_PinapBerry[] = INCBIN_U32("graphics/items/icons/pinap_berry.4bpp.lz"); +const u32 gItemIcon_PinapBerry[] = INCBIN_U32("graphics/items/icons/pinap_berry.4bpp.smol"); const u16 gItemIconPalette_PinapBerry[] = INCBIN_U16("graphics/items/icon_palettes/pinap_berry.gbapal"); -const u32 gItemIcon_PomegBerry[] = INCBIN_U32("graphics/items/icons/pomeg_berry.4bpp.lz"); +const u32 gItemIcon_PomegBerry[] = INCBIN_U32("graphics/items/icons/pomeg_berry.4bpp.smol"); const u16 gItemIconPalette_PomegBerry[] = INCBIN_U16("graphics/items/icon_palettes/pomeg_berry.gbapal"); -const u32 gItemIcon_KelpsyBerry[] = INCBIN_U32("graphics/items/icons/kelpsy_berry.4bpp.lz"); +const u32 gItemIcon_KelpsyBerry[] = INCBIN_U32("graphics/items/icons/kelpsy_berry.4bpp.smol"); const u16 gItemIconPalette_KelpsyBerry[] = INCBIN_U16("graphics/items/icon_palettes/kelpsy_berry.gbapal"); -const u32 gItemIcon_QualotBerry[] = INCBIN_U32("graphics/items/icons/qualot_berry.4bpp.lz"); +const u32 gItemIcon_QualotBerry[] = INCBIN_U32("graphics/items/icons/qualot_berry.4bpp.smol"); const u16 gItemIconPalette_QualotBerry[] = INCBIN_U16("graphics/items/icon_palettes/qualot_berry.gbapal"); -const u32 gItemIcon_HondewBerry[] = INCBIN_U32("graphics/items/icons/hondew_berry.4bpp.lz"); +const u32 gItemIcon_HondewBerry[] = INCBIN_U32("graphics/items/icons/hondew_berry.4bpp.smol"); const u16 gItemIconPalette_HondewBerry[] = INCBIN_U16("graphics/items/icon_palettes/hondew_berry.gbapal"); -const u32 gItemIcon_GrepaBerry[] = INCBIN_U32("graphics/items/icons/grepa_berry.4bpp.lz"); +const u32 gItemIcon_GrepaBerry[] = INCBIN_U32("graphics/items/icons/grepa_berry.4bpp.smol"); const u16 gItemIconPalette_GrepaBerry[] = INCBIN_U16("graphics/items/icon_palettes/grepa_berry.gbapal"); -const u32 gItemIcon_TamatoBerry[] = INCBIN_U32("graphics/items/icons/tamato_berry.4bpp.lz"); +const u32 gItemIcon_TamatoBerry[] = INCBIN_U32("graphics/items/icons/tamato_berry.4bpp.smol"); const u16 gItemIconPalette_TamatoBerry[] = INCBIN_U16("graphics/items/icon_palettes/tamato_berry.gbapal"); -const u32 gItemIcon_CornnBerry[] = INCBIN_U32("graphics/items/icons/cornn_berry.4bpp.lz"); +const u32 gItemIcon_CornnBerry[] = INCBIN_U32("graphics/items/icons/cornn_berry.4bpp.smol"); const u16 gItemIconPalette_CornnBerry[] = INCBIN_U16("graphics/items/icon_palettes/cornn_berry.gbapal"); -const u32 gItemIcon_MagostBerry[] = INCBIN_U32("graphics/items/icons/magost_berry.4bpp.lz"); +const u32 gItemIcon_MagostBerry[] = INCBIN_U32("graphics/items/icons/magost_berry.4bpp.smol"); const u16 gItemIconPalette_MagostBerry[] = INCBIN_U16("graphics/items/icon_palettes/magost_berry.gbapal"); -const u32 gItemIcon_RabutaBerry[] = INCBIN_U32("graphics/items/icons/rabuta_berry.4bpp.lz"); +const u32 gItemIcon_RabutaBerry[] = INCBIN_U32("graphics/items/icons/rabuta_berry.4bpp.smol"); const u16 gItemIconPalette_RabutaBerry[] = INCBIN_U16("graphics/items/icon_palettes/rabuta_berry.gbapal"); -const u32 gItemIcon_NomelBerry[] = INCBIN_U32("graphics/items/icons/nomel_berry.4bpp.lz"); +const u32 gItemIcon_NomelBerry[] = INCBIN_U32("graphics/items/icons/nomel_berry.4bpp.smol"); const u16 gItemIconPalette_NomelBerry[] = INCBIN_U16("graphics/items/icon_palettes/nomel_berry.gbapal"); -const u32 gItemIcon_SpelonBerry[] = INCBIN_U32("graphics/items/icons/spelon_berry.4bpp.lz"); +const u32 gItemIcon_SpelonBerry[] = INCBIN_U32("graphics/items/icons/spelon_berry.4bpp.smol"); const u16 gItemIconPalette_SpelonBerry[] = INCBIN_U16("graphics/items/icon_palettes/spelon_berry.gbapal"); -const u32 gItemIcon_PamtreBerry[] = INCBIN_U32("graphics/items/icons/pamtre_berry.4bpp.lz"); +const u32 gItemIcon_PamtreBerry[] = INCBIN_U32("graphics/items/icons/pamtre_berry.4bpp.smol"); const u16 gItemIconPalette_PamtreBerry[] = INCBIN_U16("graphics/items/icon_palettes/pamtre_berry.gbapal"); -const u32 gItemIcon_WatmelBerry[] = INCBIN_U32("graphics/items/icons/watmel_berry.4bpp.lz"); +const u32 gItemIcon_WatmelBerry[] = INCBIN_U32("graphics/items/icons/watmel_berry.4bpp.smol"); const u16 gItemIconPalette_WatmelBerry[] = INCBIN_U16("graphics/items/icon_palettes/watmel_berry.gbapal"); -const u32 gItemIcon_DurinBerry[] = INCBIN_U32("graphics/items/icons/durin_berry.4bpp.lz"); +const u32 gItemIcon_DurinBerry[] = INCBIN_U32("graphics/items/icons/durin_berry.4bpp.smol"); const u16 gItemIconPalette_DurinBerry[] = INCBIN_U16("graphics/items/icon_palettes/durin_berry.gbapal"); -const u32 gItemIcon_BelueBerry[] = INCBIN_U32("graphics/items/icons/belue_berry.4bpp.lz"); +const u32 gItemIcon_BelueBerry[] = INCBIN_U32("graphics/items/icons/belue_berry.4bpp.smol"); const u16 gItemIconPalette_BelueBerry[] = INCBIN_U16("graphics/items/icon_palettes/belue_berry.gbapal"); -const u32 gItemIcon_ChilanBerry[] = INCBIN_U32("graphics/items/icons/chilan_berry.4bpp.lz"); +const u32 gItemIcon_ChilanBerry[] = INCBIN_U32("graphics/items/icons/chilan_berry.4bpp.smol"); const u16 gItemIconPalette_ChilanBerry[] = INCBIN_U16("graphics/items/icon_palettes/chilan_berry.gbapal"); -const u32 gItemIcon_OccaBerry[] = INCBIN_U32("graphics/items/icons/occa_berry.4bpp.lz"); +const u32 gItemIcon_OccaBerry[] = INCBIN_U32("graphics/items/icons/occa_berry.4bpp.smol"); const u16 gItemIconPalette_OccaBerry[] = INCBIN_U16("graphics/items/icon_palettes/occa_berry.gbapal"); -const u32 gItemIcon_PasshoBerry[] = INCBIN_U32("graphics/items/icons/passho_berry.4bpp.lz"); +const u32 gItemIcon_PasshoBerry[] = INCBIN_U32("graphics/items/icons/passho_berry.4bpp.smol"); const u16 gItemIconPalette_PasshoBerry[] = INCBIN_U16("graphics/items/icon_palettes/passho_berry.gbapal"); -const u32 gItemIcon_WacanBerry[] = INCBIN_U32("graphics/items/icons/wacan_berry.4bpp.lz"); +const u32 gItemIcon_WacanBerry[] = INCBIN_U32("graphics/items/icons/wacan_berry.4bpp.smol"); const u16 gItemIconPalette_WacanBerry[] = INCBIN_U16("graphics/items/icon_palettes/wacan_berry.gbapal"); -const u32 gItemIcon_RindoBerry[] = INCBIN_U32("graphics/items/icons/rindo_berry.4bpp.lz"); +const u32 gItemIcon_RindoBerry[] = INCBIN_U32("graphics/items/icons/rindo_berry.4bpp.smol"); const u16 gItemIconPalette_RindoBerry[] = INCBIN_U16("graphics/items/icon_palettes/rindo_berry.gbapal"); -const u32 gItemIcon_YacheBerry[] = INCBIN_U32("graphics/items/icons/yache_berry.4bpp.lz"); +const u32 gItemIcon_YacheBerry[] = INCBIN_U32("graphics/items/icons/yache_berry.4bpp.smol"); const u16 gItemIconPalette_YacheBerry[] = INCBIN_U16("graphics/items/icon_palettes/yache_berry.gbapal"); -const u32 gItemIcon_ChopleBerry[] = INCBIN_U32("graphics/items/icons/chople_berry.4bpp.lz"); +const u32 gItemIcon_ChopleBerry[] = INCBIN_U32("graphics/items/icons/chople_berry.4bpp.smol"); const u16 gItemIconPalette_ChopleBerry[] = INCBIN_U16("graphics/items/icon_palettes/chople_berry.gbapal"); -const u32 gItemIcon_KebiaBerry[] = INCBIN_U32("graphics/items/icons/kebia_berry.4bpp.lz"); +const u32 gItemIcon_KebiaBerry[] = INCBIN_U32("graphics/items/icons/kebia_berry.4bpp.smol"); const u16 gItemIconPalette_KebiaBerry[] = INCBIN_U16("graphics/items/icon_palettes/kebia_berry.gbapal"); -const u32 gItemIcon_ShucaBerry[] = INCBIN_U32("graphics/items/icons/shuca_berry.4bpp.lz"); +const u32 gItemIcon_ShucaBerry[] = INCBIN_U32("graphics/items/icons/shuca_berry.4bpp.smol"); const u16 gItemIconPalette_ShucaBerry[] = INCBIN_U16("graphics/items/icon_palettes/shuca_berry.gbapal"); -const u32 gItemIcon_CobaBerry[] = INCBIN_U32("graphics/items/icons/coba_berry.4bpp.lz"); +const u32 gItemIcon_CobaBerry[] = INCBIN_U32("graphics/items/icons/coba_berry.4bpp.smol"); const u16 gItemIconPalette_CobaBerry[] = INCBIN_U16("graphics/items/icon_palettes/coba_berry.gbapal"); -const u32 gItemIcon_PayapaBerry[] = INCBIN_U32("graphics/items/icons/payapa_berry.4bpp.lz"); +const u32 gItemIcon_PayapaBerry[] = INCBIN_U32("graphics/items/icons/payapa_berry.4bpp.smol"); const u16 gItemIconPalette_PayapaBerry[] = INCBIN_U16("graphics/items/icon_palettes/payapa_berry.gbapal"); -const u32 gItemIcon_TangaBerry[] = INCBIN_U32("graphics/items/icons/tanga_berry.4bpp.lz"); +const u32 gItemIcon_TangaBerry[] = INCBIN_U32("graphics/items/icons/tanga_berry.4bpp.smol"); const u16 gItemIconPalette_TangaBerry[] = INCBIN_U16("graphics/items/icon_palettes/tanga_berry.gbapal"); -const u32 gItemIcon_ChartiBerry[] = INCBIN_U32("graphics/items/icons/charti_berry.4bpp.lz"); +const u32 gItemIcon_ChartiBerry[] = INCBIN_U32("graphics/items/icons/charti_berry.4bpp.smol"); const u16 gItemIconPalette_ChartiBerry[] = INCBIN_U16("graphics/items/icon_palettes/charti_berry.gbapal"); -const u32 gItemIcon_KasibBerry[] = INCBIN_U32("graphics/items/icons/kasib_berry.4bpp.lz"); +const u32 gItemIcon_KasibBerry[] = INCBIN_U32("graphics/items/icons/kasib_berry.4bpp.smol"); const u16 gItemIconPalette_KasibBerry[] = INCBIN_U16("graphics/items/icon_palettes/kasib_berry.gbapal"); -const u32 gItemIcon_HabanBerry[] = INCBIN_U32("graphics/items/icons/haban_berry.4bpp.lz"); +const u32 gItemIcon_HabanBerry[] = INCBIN_U32("graphics/items/icons/haban_berry.4bpp.smol"); const u16 gItemIconPalette_HabanBerry[] = INCBIN_U16("graphics/items/icon_palettes/haban_berry.gbapal"); -const u32 gItemIcon_ColburBerry[] = INCBIN_U32("graphics/items/icons/colbur_berry.4bpp.lz"); +const u32 gItemIcon_ColburBerry[] = INCBIN_U32("graphics/items/icons/colbur_berry.4bpp.smol"); const u16 gItemIconPalette_ColburBerry[] = INCBIN_U16("graphics/items/icon_palettes/colbur_berry.gbapal"); -const u32 gItemIcon_BabiriBerry[] = INCBIN_U32("graphics/items/icons/babiri_berry.4bpp.lz"); +const u32 gItemIcon_BabiriBerry[] = INCBIN_U32("graphics/items/icons/babiri_berry.4bpp.smol"); const u16 gItemIconPalette_BabiriBerry[] = INCBIN_U16("graphics/items/icon_palettes/babiri_berry.gbapal"); -const u32 gItemIcon_RoseliBerry[] = INCBIN_U32("graphics/items/icons/roseli_berry.4bpp.lz"); +const u32 gItemIcon_RoseliBerry[] = INCBIN_U32("graphics/items/icons/roseli_berry.4bpp.smol"); const u16 gItemIconPalette_RoseliBerry[] = INCBIN_U16("graphics/items/icon_palettes/roseli_berry.gbapal"); -const u32 gItemIcon_LiechiBerry[] = INCBIN_U32("graphics/items/icons/liechi_berry.4bpp.lz"); +const u32 gItemIcon_LiechiBerry[] = INCBIN_U32("graphics/items/icons/liechi_berry.4bpp.smol"); const u16 gItemIconPalette_LiechiBerry[] = INCBIN_U16("graphics/items/icon_palettes/liechi_berry.gbapal"); -const u32 gItemIcon_GanlonBerry[] = INCBIN_U32("graphics/items/icons/ganlon_berry.4bpp.lz"); +const u32 gItemIcon_GanlonBerry[] = INCBIN_U32("graphics/items/icons/ganlon_berry.4bpp.smol"); const u16 gItemIconPalette_GanlonBerry[] = INCBIN_U16("graphics/items/icon_palettes/ganlon_berry.gbapal"); -const u32 gItemIcon_SalacBerry[] = INCBIN_U32("graphics/items/icons/salac_berry.4bpp.lz"); +const u32 gItemIcon_SalacBerry[] = INCBIN_U32("graphics/items/icons/salac_berry.4bpp.smol"); const u16 gItemIconPalette_SalacBerry[] = INCBIN_U16("graphics/items/icon_palettes/salac_berry.gbapal"); -const u32 gItemIcon_PetayaBerry[] = INCBIN_U32("graphics/items/icons/petaya_berry.4bpp.lz"); +const u32 gItemIcon_PetayaBerry[] = INCBIN_U32("graphics/items/icons/petaya_berry.4bpp.smol"); const u16 gItemIconPalette_PetayaBerry[] = INCBIN_U16("graphics/items/icon_palettes/petaya_berry.gbapal"); -const u32 gItemIcon_ApicotBerry[] = INCBIN_U32("graphics/items/icons/apicot_berry.4bpp.lz"); +const u32 gItemIcon_ApicotBerry[] = INCBIN_U32("graphics/items/icons/apicot_berry.4bpp.smol"); const u16 gItemIconPalette_ApicotBerry[] = INCBIN_U16("graphics/items/icon_palettes/apicot_berry.gbapal"); -const u32 gItemIcon_LansatBerry[] = INCBIN_U32("graphics/items/icons/lansat_berry.4bpp.lz"); +const u32 gItemIcon_LansatBerry[] = INCBIN_U32("graphics/items/icons/lansat_berry.4bpp.smol"); const u16 gItemIconPalette_LansatBerry[] = INCBIN_U16("graphics/items/icon_palettes/lansat_berry.gbapal"); -const u32 gItemIcon_StarfBerry[] = INCBIN_U32("graphics/items/icons/starf_berry.4bpp.lz"); +const u32 gItemIcon_StarfBerry[] = INCBIN_U32("graphics/items/icons/starf_berry.4bpp.smol"); const u16 gItemIconPalette_StarfBerry[] = INCBIN_U16("graphics/items/icon_palettes/starf_berry.gbapal"); -const u32 gItemIcon_EnigmaBerry[] = INCBIN_U32("graphics/items/icons/enigma_berry.4bpp.lz"); +const u32 gItemIcon_EnigmaBerry[] = INCBIN_U32("graphics/items/icons/enigma_berry.4bpp.smol"); const u16 gItemIconPalette_EnigmaBerry[] = INCBIN_U16("graphics/items/icon_palettes/enigma_berry.gbapal"); -const u32 gItemIcon_MicleBerry[] = INCBIN_U32("graphics/items/icons/micle_berry.4bpp.lz"); +const u32 gItemIcon_MicleBerry[] = INCBIN_U32("graphics/items/icons/micle_berry.4bpp.smol"); const u16 gItemIconPalette_MicleBerry[] = INCBIN_U16("graphics/items/icon_palettes/micle_berry.gbapal"); -const u32 gItemIcon_CustapBerry[] = INCBIN_U32("graphics/items/icons/custap_berry.4bpp.lz"); +const u32 gItemIcon_CustapBerry[] = INCBIN_U32("graphics/items/icons/custap_berry.4bpp.smol"); const u16 gItemIconPalette_CustapBerry[] = INCBIN_U16("graphics/items/icon_palettes/custap_berry.gbapal"); -const u32 gItemIcon_JabocaBerry[] = INCBIN_U32("graphics/items/icons/jaboca_berry.4bpp.lz"); +const u32 gItemIcon_JabocaBerry[] = INCBIN_U32("graphics/items/icons/jaboca_berry.4bpp.smol"); const u16 gItemIconPalette_JabocaBerry[] = INCBIN_U16("graphics/items/icon_palettes/jaboca_berry.gbapal"); -const u32 gItemIcon_RowapBerry[] = INCBIN_U32("graphics/items/icons/rowap_berry.4bpp.lz"); +const u32 gItemIcon_RowapBerry[] = INCBIN_U32("graphics/items/icons/rowap_berry.4bpp.smol"); const u16 gItemIconPalette_RowapBerry[] = INCBIN_U16("graphics/items/icon_palettes/rowap_berry.gbapal"); -const u32 gItemIcon_KeeBerry[] = INCBIN_U32("graphics/items/icons/kee_berry.4bpp.lz"); +const u32 gItemIcon_KeeBerry[] = INCBIN_U32("graphics/items/icons/kee_berry.4bpp.smol"); const u16 gItemIconPalette_KeeBerry[] = INCBIN_U16("graphics/items/icon_palettes/kee_berry.gbapal"); -const u32 gItemIcon_MarangaBerry[] = INCBIN_U32("graphics/items/icons/maranga_berry.4bpp.lz"); +const u32 gItemIcon_MarangaBerry[] = INCBIN_U32("graphics/items/icons/maranga_berry.4bpp.smol"); const u16 gItemIconPalette_MarangaBerry[] = INCBIN_U16("graphics/items/icon_palettes/maranga_berry.gbapal"); // TMs/HMs -const u32 gItemIcon_TM[] = INCBIN_U32("graphics/items/icons/tm.4bpp.lz"); +const u32 gItemIcon_TM[] = INCBIN_U32("graphics/items/icons/tm.4bpp.smol"); -const u32 gItemIcon_HM[] = INCBIN_U32("graphics/items/icons/hm.4bpp.lz"); +const u32 gItemIcon_HM[] = INCBIN_U32("graphics/items/icons/hm.4bpp.smol"); const u16 gItemIconPalette_NormalTMHM[] = INCBIN_U16("graphics/items/icon_palettes/normal_tm_hm.gbapal"); @@ -1749,266 +1749,266 @@ const u16 gItemIconPalette_FairyTMHM[] = INCBIN_U16("graphics/items/icon_palette // Charms -const u32 gItemIcon_OvalCharm[] = INCBIN_U32("graphics/items/icons/oval_charm.4bpp.lz"); +const u32 gItemIcon_OvalCharm[] = INCBIN_U32("graphics/items/icons/oval_charm.4bpp.smol"); const u16 gItemIconPalette_OvalCharm[] = INCBIN_U16("graphics/items/icon_palettes/oval_charm.gbapal"); -const u32 gItemIcon_ShinyCharm[] = INCBIN_U32("graphics/items/icons/shiny_charm.4bpp.lz"); +const u32 gItemIcon_ShinyCharm[] = INCBIN_U32("graphics/items/icons/shiny_charm.4bpp.smol"); const u16 gItemIconPalette_ShinyCharm[] = INCBIN_U16("graphics/items/icon_palettes/shiny_charm.gbapal"); -const u32 gItemIcon_CatchingCharm[] = INCBIN_U32("graphics/items/icons/catching_charm.4bpp.lz"); +const u32 gItemIcon_CatchingCharm[] = INCBIN_U32("graphics/items/icons/catching_charm.4bpp.smol"); const u16 gItemIconPalette_CatchingCharm[] = INCBIN_U16("graphics/items/icon_palettes/catching_charm.gbapal"); -const u32 gItemIcon_ExpCharm[] = INCBIN_U32("graphics/items/icons/exp_charm.4bpp.lz"); +const u32 gItemIcon_ExpCharm[] = INCBIN_U32("graphics/items/icons/exp_charm.4bpp.smol"); const u16 gItemIconPalette_ExpCharm[] = INCBIN_U16("graphics/items/icon_palettes/exp_charm.gbapal"); -const u32 gItemIcon_GlimmeringCharm[] = INCBIN_U32("graphics/items/icons/glimmering_charm.4bpp.lz"); +const u32 gItemIcon_GlimmeringCharm[] = INCBIN_U32("graphics/items/icons/glimmering_charm.4bpp.smol"); const u16 gItemIconPalette_GlimmeringCharm[] = INCBIN_U16("graphics/items/icon_palettes/glimmering_charm.gbapal"); // Form-changing Key Items -const u32 gItemIcon_RotomCatalog[] = INCBIN_U32("graphics/items/icons/rotom_catalog.4bpp.lz"); +const u32 gItemIcon_RotomCatalog[] = INCBIN_U32("graphics/items/icons/rotom_catalog.4bpp.smol"); const u16 gItemIconPalette_RotomCatalog[] = INCBIN_U16("graphics/items/icon_palettes/rotom_catalog.gbapal"); -const u32 gItemIcon_Gracidea[] = INCBIN_U32("graphics/items/icons/gracidea.4bpp.lz"); +const u32 gItemIcon_Gracidea[] = INCBIN_U32("graphics/items/icons/gracidea.4bpp.smol"); const u16 gItemIconPalette_Gracidea[] = INCBIN_U16("graphics/items/icon_palettes/gracidea.gbapal"); -const u32 gItemIcon_RevealGlass[] = INCBIN_U32("graphics/items/icons/reveal_glass.4bpp.lz"); +const u32 gItemIcon_RevealGlass[] = INCBIN_U32("graphics/items/icons/reveal_glass.4bpp.smol"); const u16 gItemIconPalette_RevealGlass[] = INCBIN_U16("graphics/items/icon_palettes/reveal_glass.gbapal"); -const u32 gItemIcon_DNASplicers[] = INCBIN_U32("graphics/items/icons/dna_splicers.4bpp.lz"); +const u32 gItemIcon_DNASplicers[] = INCBIN_U32("graphics/items/icons/dna_splicers.4bpp.smol"); const u16 gItemIconPalette_DNASplicers[] = INCBIN_U16("graphics/items/icon_palettes/dna_splicers.gbapal"); -const u32 gItemIcon_ZygardeCube[] = INCBIN_U32("graphics/items/icons/zygarde_cube.4bpp.lz"); +const u32 gItemIcon_ZygardeCube[] = INCBIN_U32("graphics/items/icons/zygarde_cube.4bpp.smol"); const u16 gItemIconPalette_ZygardeCube[] = INCBIN_U16("graphics/items/icon_palettes/zygarde_cube.gbapal"); -const u32 gItemIcon_PrisonBottle[] = INCBIN_U32("graphics/items/icons/prison_bottle.4bpp.lz"); +const u32 gItemIcon_PrisonBottle[] = INCBIN_U32("graphics/items/icons/prison_bottle.4bpp.smol"); const u16 gItemIconPalette_PrisonBottle[] = INCBIN_U16("graphics/items/icon_palettes/prison_bottle.gbapal"); -const u32 gItemIcon_NecrozmaFuser[] = INCBIN_U32("graphics/items/icons/necrozma_fuser.4bpp.lz"); +const u32 gItemIcon_NecrozmaFuser[] = INCBIN_U32("graphics/items/icons/necrozma_fuser.4bpp.smol"); const u16 gItemIconPalette_NSolarizer[] = INCBIN_U16("graphics/items/icon_palettes/n_solarizer.gbapal"); const u16 gItemIconPalette_NLunarizer[] = INCBIN_U16("graphics/items/icon_palettes/n_lunarizer.gbapal"); -const u32 gItemIcon_ReinsOfUnity[] = INCBIN_U32("graphics/items/icons/reins_of_unity.4bpp.lz"); +const u32 gItemIcon_ReinsOfUnity[] = INCBIN_U32("graphics/items/icons/reins_of_unity.4bpp.smol"); const u16 gItemIconPalette_ReinsOfUnity[] = INCBIN_U16("graphics/items/icon_palettes/reins_of_unity.gbapal"); // Battle Mechanic Key Items -const u32 gItemIcon_MegaRing[] = INCBIN_U32("graphics/items/icons/mega_ring.4bpp.lz"); +const u32 gItemIcon_MegaRing[] = INCBIN_U32("graphics/items/icons/mega_ring.4bpp.smol"); const u16 gItemIconPalette_MegaRing[] = INCBIN_U16("graphics/items/icon_palettes/mega_ring.gbapal"); -const u32 gItemIcon_ZPowerRing[] = INCBIN_U32("graphics/items/icons/z_power_ring.4bpp.lz"); +const u32 gItemIcon_ZPowerRing[] = INCBIN_U32("graphics/items/icons/z_power_ring.4bpp.smol"); const u16 gItemIconPalette_ZPowerRing[] = INCBIN_U16("graphics/items/icon_palettes/z_power_ring.gbapal"); -const u32 gItemIcon_ZRing[] = INCBIN_U32("graphics/items/icons/z_ring.4bpp.lz"); // Remove +const u32 gItemIcon_ZRing[] = INCBIN_U32("graphics/items/icons/z_ring.4bpp.smol"); // Remove const u16 gItemIconPalette_ZRing[] = INCBIN_U16("graphics/items/icon_palettes/z_ring.gbapal"); // Remove -const u32 gItemIcon_DynamaxBand[] = INCBIN_U32("graphics/items/icons/dynamax_band.4bpp.lz"); +const u32 gItemIcon_DynamaxBand[] = INCBIN_U32("graphics/items/icons/dynamax_band.4bpp.smol"); const u16 gItemIconPalette_DynamaxBand[] = INCBIN_U16("graphics/items/icon_palettes/dynamax_band.gbapal"); // Misc. Key Items -const u32 gItemIcon_Bicycle[] = INCBIN_U32("graphics/items/icons/bicycle.4bpp.lz"); +const u32 gItemIcon_Bicycle[] = INCBIN_U32("graphics/items/icons/bicycle.4bpp.smol"); const u16 gItemIconPalette_Bicycle[] = INCBIN_U16("graphics/items/icon_palettes/bicycle.gbapal"); -const u32 gItemIcon_MachBike[] = INCBIN_U32("graphics/items/icons/mach_bike.4bpp.lz"); +const u32 gItemIcon_MachBike[] = INCBIN_U32("graphics/items/icons/mach_bike.4bpp.smol"); const u16 gItemIconPalette_MachBike[] = INCBIN_U16("graphics/items/icon_palettes/mach_bike.gbapal"); -const u32 gItemIcon_AcroBike[] = INCBIN_U32("graphics/items/icons/acro_bike.4bpp.lz"); +const u32 gItemIcon_AcroBike[] = INCBIN_U32("graphics/items/icons/acro_bike.4bpp.smol"); const u16 gItemIconPalette_AcroBike[] = INCBIN_U16("graphics/items/icon_palettes/acro_bike.gbapal"); -const u32 gItemIcon_OldRod[] = INCBIN_U32("graphics/items/icons/old_rod.4bpp.lz"); +const u32 gItemIcon_OldRod[] = INCBIN_U32("graphics/items/icons/old_rod.4bpp.smol"); const u16 gItemIconPalette_OldRod[] = INCBIN_U16("graphics/items/icon_palettes/old_rod.gbapal"); -const u32 gItemIcon_GoodRod[] = INCBIN_U32("graphics/items/icons/good_rod.4bpp.lz"); +const u32 gItemIcon_GoodRod[] = INCBIN_U32("graphics/items/icons/good_rod.4bpp.smol"); const u16 gItemIconPalette_GoodRod[] = INCBIN_U16("graphics/items/icon_palettes/good_rod.gbapal"); -const u32 gItemIcon_SuperRod[] = INCBIN_U32("graphics/items/icons/super_rod.4bpp.lz"); +const u32 gItemIcon_SuperRod[] = INCBIN_U32("graphics/items/icons/super_rod.4bpp.smol"); const u16 gItemIconPalette_SuperRod[] = INCBIN_U16("graphics/items/icon_palettes/super_rod.gbapal"); -const u32 gItemIcon_DowsingMachine[] = INCBIN_U32("graphics/items/icons/dowsing_machine.4bpp.lz"); +const u32 gItemIcon_DowsingMachine[] = INCBIN_U32("graphics/items/icons/dowsing_machine.4bpp.smol"); const u16 gItemIconPalette_DowsingMachine[] = INCBIN_U16("graphics/items/icon_palettes/dowsing_machine.gbapal"); -const u32 gItemIcon_TownMap[] = INCBIN_U32("graphics/items/icons/town_map.4bpp.lz"); +const u32 gItemIcon_TownMap[] = INCBIN_U32("graphics/items/icons/town_map.4bpp.smol"); const u16 gItemIconPalette_TownMap[] = INCBIN_U16("graphics/items/icon_palettes/town_map.gbapal"); -const u32 gItemIcon_VsSeeker[] = INCBIN_U32("graphics/items/icons/vs_seeker.4bpp.lz"); +const u32 gItemIcon_VsSeeker[] = INCBIN_U32("graphics/items/icons/vs_seeker.4bpp.smol"); const u16 gItemIconPalette_VsSeeker[] = INCBIN_U16("graphics/items/icon_palettes/vs_seeker.gbapal"); -const u32 gItemIcon_TMCase[] = INCBIN_U32("graphics/items/icons/tm_case.4bpp.lz"); +const u32 gItemIcon_TMCase[] = INCBIN_U32("graphics/items/icons/tm_case.4bpp.smol"); const u16 gItemIconPalette_TMCase[] = INCBIN_U16("graphics/items/icon_palettes/tm_case.gbapal"); -const u32 gItemIcon_BerryPouch[] = INCBIN_U32("graphics/items/icons/berry_pouch.4bpp.lz"); +const u32 gItemIcon_BerryPouch[] = INCBIN_U32("graphics/items/icons/berry_pouch.4bpp.smol"); const u16 gItemIconPalette_BerryPouch[] = INCBIN_U16("graphics/items/icon_palettes/berry_pouch.gbapal"); -const u32 gItemIcon_PokemonBoxLink[] = INCBIN_U32("graphics/items/icons/pokemon_box_link.4bpp.lz"); +const u32 gItemIcon_PokemonBoxLink[] = INCBIN_U32("graphics/items/icons/pokemon_box_link.4bpp.smol"); const u16 gItemIconPalette_PokemonBoxLink[] = INCBIN_U16("graphics/items/icon_palettes/pokemon_box_link.gbapal"); -const u32 gItemIcon_CoinCase[] = INCBIN_U32("graphics/items/icons/coin_case.4bpp.lz"); +const u32 gItemIcon_CoinCase[] = INCBIN_U32("graphics/items/icons/coin_case.4bpp.smol"); const u16 gItemIconPalette_CoinCase[] = INCBIN_U16("graphics/items/icon_palettes/coin_case.gbapal"); -const u32 gItemIcon_PowderJar[] = INCBIN_U32("graphics/items/icons/powder_jar.4bpp.lz"); +const u32 gItemIcon_PowderJar[] = INCBIN_U32("graphics/items/icons/powder_jar.4bpp.smol"); const u16 gItemIconPalette_PowderJar[] = INCBIN_U16("graphics/items/icon_palettes/powder_jar.gbapal"); -const u32 gItemIcon_WailmerPail[] = INCBIN_U32("graphics/items/icons/wailmer_pail.4bpp.lz"); +const u32 gItemIcon_WailmerPail[] = INCBIN_U32("graphics/items/icons/wailmer_pail.4bpp.smol"); const u16 gItemIconPalette_WailmerPail[] = INCBIN_U16("graphics/items/icon_palettes/wailmer_pail.gbapal"); -const u32 gItemIcon_PokeRadar[] = INCBIN_U32("graphics/items/icons/poke_radar.4bpp.lz"); +const u32 gItemIcon_PokeRadar[] = INCBIN_U32("graphics/items/icons/poke_radar.4bpp.smol"); const u16 gItemIconPalette_PokeRadar[] = INCBIN_U16("graphics/items/icon_palettes/poke_radar.gbapal"); -const u32 gItemIcon_PokeblockCase[] = INCBIN_U32("graphics/items/icons/pokeblock_case.4bpp.lz"); +const u32 gItemIcon_PokeblockCase[] = INCBIN_U32("graphics/items/icons/pokeblock_case.4bpp.smol"); const u16 gItemIconPalette_PokeblockCase[] = INCBIN_U16("graphics/items/icon_palettes/pokeblock_case.gbapal"); -const u32 gItemIcon_SootSack[] = INCBIN_U32("graphics/items/icons/soot_sack.4bpp.lz"); +const u32 gItemIcon_SootSack[] = INCBIN_U32("graphics/items/icons/soot_sack.4bpp.smol"); const u16 gItemIconPalette_SootSack[] = INCBIN_U16("graphics/items/icon_palettes/soot_sack.gbapal"); -const u32 gItemIcon_PokeFlute[] = INCBIN_U32("graphics/items/icons/poke_flute.4bpp.lz"); +const u32 gItemIcon_PokeFlute[] = INCBIN_U32("graphics/items/icons/poke_flute.4bpp.smol"); const u16 gItemIconPalette_PokeFlute[] = INCBIN_U16("graphics/items/icon_palettes/poke_flute.gbapal"); -const u32 gItemIcon_FameChecker[] = INCBIN_U32("graphics/items/icons/fame_checker.4bpp.lz"); +const u32 gItemIcon_FameChecker[] = INCBIN_U32("graphics/items/icons/fame_checker.4bpp.smol"); const u16 gItemIconPalette_FameChecker[] = INCBIN_U16("graphics/items/icon_palettes/fame_checker.gbapal"); -const u32 gItemIcon_TeachyTV[] = INCBIN_U32("graphics/items/icons/teachy_tv.4bpp.lz"); +const u32 gItemIcon_TeachyTV[] = INCBIN_U32("graphics/items/icons/teachy_tv.4bpp.smol"); const u16 gItemIconPalette_TeachyTV[] = INCBIN_U16("graphics/items/icon_palettes/teachy_tv.gbapal"); // Story Key Items -const u32 gItemIcon_SSTicket[] = INCBIN_U32("graphics/items/icons/ss_ticket.4bpp.lz"); +const u32 gItemIcon_SSTicket[] = INCBIN_U32("graphics/items/icons/ss_ticket.4bpp.smol"); const u16 gItemIconPalette_SSTicket[] = INCBIN_U16("graphics/items/icon_palettes/ss_ticket.gbapal"); -const u32 gItemIcon_EonTicket[] = INCBIN_U32("graphics/items/icons/eon_ticket.4bpp.lz"); +const u32 gItemIcon_EonTicket[] = INCBIN_U32("graphics/items/icons/eon_ticket.4bpp.smol"); const u16 gItemIconPalette_EonTicket[] = INCBIN_U16("graphics/items/icon_palettes/eon_ticket.gbapal"); -const u32 gItemIcon_MysticTicket[] = INCBIN_U32("graphics/items/icons/mystic_ticket.4bpp.lz"); +const u32 gItemIcon_MysticTicket[] = INCBIN_U32("graphics/items/icons/mystic_ticket.4bpp.smol"); const u16 gItemIconPalette_MysticTicket[] = INCBIN_U16("graphics/items/icon_palettes/mystic_ticket.gbapal"); -const u32 gItemIcon_AuroraTicket[] = INCBIN_U32("graphics/items/icons/aurora_ticket.4bpp.lz"); +const u32 gItemIcon_AuroraTicket[] = INCBIN_U32("graphics/items/icons/aurora_ticket.4bpp.smol"); const u16 gItemIconPalette_AuroraTicket[] = INCBIN_U16("graphics/items/icon_palettes/aurora_ticket.gbapal"); -const u32 gItemIcon_OldSeaMap[] = INCBIN_U32("graphics/items/icons/old_sea_map.4bpp.lz"); +const u32 gItemIcon_OldSeaMap[] = INCBIN_U32("graphics/items/icons/old_sea_map.4bpp.smol"); const u16 gItemIconPalette_OldSeaMap[] = INCBIN_U16("graphics/items/icon_palettes/old_sea_map.gbapal"); -const u32 gItemIcon_Letter[] = INCBIN_U32("graphics/items/icons/letter.4bpp.lz"); +const u32 gItemIcon_Letter[] = INCBIN_U32("graphics/items/icons/letter.4bpp.smol"); -const u32 gItemIcon_DevonParts[] = INCBIN_U32("graphics/items/icons/devon_parts.4bpp.lz"); +const u32 gItemIcon_DevonParts[] = INCBIN_U32("graphics/items/icons/devon_parts.4bpp.smol"); const u16 gItemIconPalette_DevonParts[] = INCBIN_U16("graphics/items/icon_palettes/devon_parts.gbapal"); -const u32 gItemIcon_GoGoggles[] = INCBIN_U32("graphics/items/icons/go_goggles.4bpp.lz"); +const u32 gItemIcon_GoGoggles[] = INCBIN_U32("graphics/items/icons/go_goggles.4bpp.smol"); const u16 gItemIconPalette_GoGoggles[] = INCBIN_U16("graphics/items/icon_palettes/go_goggles.gbapal"); -const u32 gItemIcon_DevonScope[] = INCBIN_U32("graphics/items/icons/devon_scope.4bpp.lz"); +const u32 gItemIcon_DevonScope[] = INCBIN_U32("graphics/items/icons/devon_scope.4bpp.smol"); const u16 gItemIconPalette_DevonScope[] = INCBIN_U16("graphics/items/icon_palettes/devon_scope.gbapal"); -const u32 gItemIcon_BasementKey[] = INCBIN_U32("graphics/items/icons/basement_key.4bpp.lz"); +const u32 gItemIcon_BasementKey[] = INCBIN_U32("graphics/items/icons/basement_key.4bpp.smol"); const u16 gItemIconPalette_OldKey[] = INCBIN_U16("graphics/items/icon_palettes/old_key.gbapal"); -const u32 gItemIcon_Scanner[] = INCBIN_U32("graphics/items/icons/scanner.4bpp.lz"); +const u32 gItemIcon_Scanner[] = INCBIN_U32("graphics/items/icons/scanner.4bpp.smol"); const u16 gItemIconPalette_Scanner[] = INCBIN_U16("graphics/items/icon_palettes/scanner.gbapal"); -const u32 gItemIcon_StorageKey[] = INCBIN_U32("graphics/items/icons/storage_key.4bpp.lz"); +const u32 gItemIcon_StorageKey[] = INCBIN_U32("graphics/items/icons/storage_key.4bpp.smol"); -const u32 gItemIcon_KeyToRoom1[] = INCBIN_U32("graphics/items/icons/key_to_room_1.4bpp.lz"); +const u32 gItemIcon_KeyToRoom1[] = INCBIN_U32("graphics/items/icons/key_to_room_1.4bpp.smol"); const u16 gItemIconPalette_Key[] = INCBIN_U16("graphics/items/icon_palettes/key.gbapal"); -const u32 gItemIcon_KeyToRoom2[] = INCBIN_U32("graphics/items/icons/key_to_room_2.4bpp.lz"); +const u32 gItemIcon_KeyToRoom2[] = INCBIN_U32("graphics/items/icons/key_to_room_2.4bpp.smol"); -const u32 gItemIcon_KeyToRoom4[] = INCBIN_U32("graphics/items/icons/key_to_room_4.4bpp.lz"); +const u32 gItemIcon_KeyToRoom4[] = INCBIN_U32("graphics/items/icons/key_to_room_4.4bpp.smol"); -const u32 gItemIcon_KeyToRoom6[] = INCBIN_U32("graphics/items/icons/key_to_room_6.4bpp.lz"); +const u32 gItemIcon_KeyToRoom6[] = INCBIN_U32("graphics/items/icons/key_to_room_6.4bpp.smol"); -const u32 gItemIcon_Meteorite[] = INCBIN_U32("graphics/items/icons/meteorite.4bpp.lz"); +const u32 gItemIcon_Meteorite[] = INCBIN_U32("graphics/items/icons/meteorite.4bpp.smol"); const u16 gItemIconPalette_Meteorite[] = INCBIN_U16("graphics/items/icon_palettes/meteorite.gbapal"); -const u32 gItemIcon_MagmaEmblem[] = INCBIN_U32("graphics/items/icons/magma_emblem.4bpp.lz"); +const u32 gItemIcon_MagmaEmblem[] = INCBIN_U32("graphics/items/icons/magma_emblem.4bpp.smol"); const u16 gItemIconPalette_MagmaEmblem[] = INCBIN_U16("graphics/items/icon_palettes/magma_emblem.gbapal"); -const u32 gItemIcon_ContestPass[] = INCBIN_U32("graphics/items/icons/contest_pass.4bpp.lz"); +const u32 gItemIcon_ContestPass[] = INCBIN_U32("graphics/items/icons/contest_pass.4bpp.smol"); const u16 gItemIconPalette_ContestPass[] = INCBIN_U16("graphics/items/icon_palettes/contest_pass.gbapal"); -const u32 gItemIcon_Parcel[] = INCBIN_U32("graphics/items/icons/parcel.4bpp.lz"); +const u32 gItemIcon_Parcel[] = INCBIN_U32("graphics/items/icons/parcel.4bpp.smol"); const u16 gItemIconPalette_Parcel[] = INCBIN_U16("graphics/items/icon_palettes/parcel.gbapal"); -const u32 gItemIcon_SecretKey[] = INCBIN_U32("graphics/items/icons/secret_key.4bpp.lz"); +const u32 gItemIcon_SecretKey[] = INCBIN_U32("graphics/items/icons/secret_key.4bpp.smol"); const u16 gItemIconPalette_SecretKey[] = INCBIN_U16("graphics/items/icon_palettes/secret_key.gbapal"); -const u32 gItemIcon_BikeVoucher[] = INCBIN_U32("graphics/items/icons/bike_voucher.4bpp.lz"); +const u32 gItemIcon_BikeVoucher[] = INCBIN_U32("graphics/items/icons/bike_voucher.4bpp.smol"); const u16 gItemIconPalette_BikeVoucher[] = INCBIN_U16("graphics/items/icon_palettes/bike_voucher.gbapal"); -const u32 gItemIcon_GoldTeeth[] = INCBIN_U32("graphics/items/icons/gold_teeth.4bpp.lz"); +const u32 gItemIcon_GoldTeeth[] = INCBIN_U32("graphics/items/icons/gold_teeth.4bpp.smol"); const u16 gItemIconPalette_GoldTeeth[] = INCBIN_U16("graphics/items/icon_palettes/gold_teeth.gbapal"); -const u32 gItemIcon_CardKey[] = INCBIN_U32("graphics/items/icons/card_key.4bpp.lz"); +const u32 gItemIcon_CardKey[] = INCBIN_U32("graphics/items/icons/card_key.4bpp.smol"); const u16 gItemIconPalette_CardKey[] = INCBIN_U16("graphics/items/icon_palettes/card_key.gbapal"); -const u32 gItemIcon_LiftKey[] = INCBIN_U32("graphics/items/icons/lift_key.4bpp.lz"); +const u32 gItemIcon_LiftKey[] = INCBIN_U32("graphics/items/icons/lift_key.4bpp.smol"); -const u32 gItemIcon_SilphScope[] = INCBIN_U32("graphics/items/icons/silph_scope.4bpp.lz"); +const u32 gItemIcon_SilphScope[] = INCBIN_U32("graphics/items/icons/silph_scope.4bpp.smol"); const u16 gItemIconPalette_SilphScope[] = INCBIN_U16("graphics/items/icon_palettes/silph_scope.gbapal"); -const u32 gItemIcon_TriPass[] = INCBIN_U32("graphics/items/icons/tri_pass.4bpp.lz"); +const u32 gItemIcon_TriPass[] = INCBIN_U32("graphics/items/icons/tri_pass.4bpp.smol"); const u16 gItemIconPalette_TriPass[] = INCBIN_U16("graphics/items/icon_palettes/tri_pass.gbapal"); -const u32 gItemIcon_RainbowPass[] = INCBIN_U32("graphics/items/icons/rainbow_pass.4bpp.lz"); +const u32 gItemIcon_RainbowPass[] = INCBIN_U32("graphics/items/icons/rainbow_pass.4bpp.smol"); const u16 gItemIconPalette_RainbowPass[] = INCBIN_U16("graphics/items/icon_palettes/rainbow_pass.gbapal"); -const u32 gItemIcon_Tea[] = INCBIN_U32("graphics/items/icons/tea.4bpp.lz"); +const u32 gItemIcon_Tea[] = INCBIN_U32("graphics/items/icons/tea.4bpp.smol"); const u16 gItemIconPalette_Tea[] = INCBIN_U16("graphics/items/icon_palettes/tea.gbapal"); -const u32 gItemIcon_Gem[] = INCBIN_U32("graphics/items/icons/gem.4bpp.lz"); +const u32 gItemIcon_Gem[] = INCBIN_U32("graphics/items/icons/gem.4bpp.smol"); const u16 gItemIconPalette_Ruby[] = INCBIN_U16("graphics/items/icon_palettes/ruby.gbapal"); const u16 gItemIconPalette_Sapphire[] = INCBIN_U16("graphics/items/icon_palettes/sapphire.gbapal"); -const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.lz"); +const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.smol"); const u16 gItemIconPalette_AbilityShield[] = INCBIN_U16("graphics/items/icon_palettes/ability_shield.gbapal"); -const u32 gItemIcon_ClearAmulet[] = INCBIN_U32("graphics/items/icons/clear_amulet.4bpp.lz"); +const u32 gItemIcon_ClearAmulet[] = INCBIN_U32("graphics/items/icons/clear_amulet.4bpp.smol"); const u16 gItemIconPalette_ClearAmulet[] = INCBIN_U16("graphics/items/icon_palettes/clear_amulet.gbapal"); -const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.lz"); +const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.smol"); const u16 gItemIconPalette_PunchingGlove[] = INCBIN_U16("graphics/items/icon_palettes/punching_glove.gbapal"); -const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.lz"); +const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.smol"); const u16 gItemIconPalette_CovertCloak[] = INCBIN_U16("graphics/items/icon_palettes/covert_cloak.gbapal"); -const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.lz"); +const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.smol"); const u16 gItemIconPalette_LoadedDice[] = INCBIN_U16("graphics/items/icon_palettes/loaded_dice.gbapal"); -const u32 gItemIcon_AuspiciousArmor[] = INCBIN_U32("graphics/items/icons/auspicious_armor.4bpp.lz"); +const u32 gItemIcon_AuspiciousArmor[] = INCBIN_U32("graphics/items/icons/auspicious_armor.4bpp.smol"); const u16 gItemIconPalette_AuspiciousArmor[] = INCBIN_U16("graphics/items/icon_palettes/auspicious_armor.gbapal"); -const u32 gItemIcon_BigBambooShoot[] = INCBIN_U32("graphics/items/icons/big_bamboo_shoot.4bpp.lz"); +const u32 gItemIcon_BigBambooShoot[] = INCBIN_U32("graphics/items/icons/big_bamboo_shoot.4bpp.smol"); const u16 gItemIconPalette_BigBambooShoot[] = INCBIN_U16("graphics/items/icon_palettes/big_bamboo_shoot.gbapal"); -const u32 gItemIcon_BoosterEnergy[] = INCBIN_U32("graphics/items/icons/booster_energy.4bpp.lz"); +const u32 gItemIcon_BoosterEnergy[] = INCBIN_U32("graphics/items/icons/booster_energy.4bpp.smol"); const u16 gItemIconPalette_BoosterEnergy[] = INCBIN_U16("graphics/items/icon_palettes/booster_energy.gbapal"); -const u32 gItemIcon_GimmighoulCoin[] = INCBIN_U32("graphics/items/icons/gimmighoul_coin.4bpp.lz"); +const u32 gItemIcon_GimmighoulCoin[] = INCBIN_U32("graphics/items/icons/gimmighoul_coin.4bpp.smol"); const u16 gItemIconPalette_GimmighoulCoin[] = INCBIN_U16("graphics/items/icon_palettes/gimmighoul_coin.gbapal"); -const u32 gItemIcon_LeadersCrest[] = INCBIN_U32("graphics/items/icons/leaders_crest.4bpp.lz"); +const u32 gItemIcon_LeadersCrest[] = INCBIN_U32("graphics/items/icons/leaders_crest.4bpp.smol"); const u16 gItemIconPalette_LeadersCrest[] = INCBIN_U16("graphics/items/icon_palettes/leaders_crest.gbapal"); -const u32 gItemIcon_MaliciousArmor[] = INCBIN_U32("graphics/items/icons/malicious_armor.4bpp.lz"); +const u32 gItemIcon_MaliciousArmor[] = INCBIN_U32("graphics/items/icons/malicious_armor.4bpp.smol"); const u16 gItemIconPalette_MaliciousArmor[] = INCBIN_U16("graphics/items/icon_palettes/malicious_armor.gbapal"); -const u32 gItemIcon_MirrorHerb[] = INCBIN_U32("graphics/items/icons/mirror_herb.4bpp.lz"); +const u32 gItemIcon_MirrorHerb[] = INCBIN_U32("graphics/items/icons/mirror_herb.4bpp.smol"); const u16 gItemIconPalette_MirrorHerb[] = INCBIN_U16("graphics/items/icon_palettes/mirror_herb.gbapal"); -const u32 gItemIcon_ScrollOfDarkness[] = INCBIN_U32("graphics/items/icons/scroll_of_darkness.4bpp.lz"); +const u32 gItemIcon_ScrollOfDarkness[] = INCBIN_U32("graphics/items/icons/scroll_of_darkness.4bpp.smol"); const u16 gItemIconPalette_ScrollOfDarkness[] = INCBIN_U16("graphics/items/icon_palettes/scroll_of_darkness.gbapal"); -const u32 gItemIcon_ScrollOfWaters[] = INCBIN_U32("graphics/items/icons/scroll_of_waters.4bpp.lz"); +const u32 gItemIcon_ScrollOfWaters[] = INCBIN_U32("graphics/items/icons/scroll_of_waters.4bpp.smol"); const u16 gItemIconPalette_ScrollOfWaters[] = INCBIN_U16("graphics/items/icon_palettes/scroll_of_waters.gbapal"); -const u32 gItemIcon_TeraOrb[] = INCBIN_U32("graphics/items/icons/tera_orb.4bpp.lz"); +const u32 gItemIcon_TeraOrb[] = INCBIN_U32("graphics/items/icons/tera_orb.4bpp.smol"); const u16 gItemIconPalette_TeraOrb[] = INCBIN_U16("graphics/items/icon_palettes/tera_orb.gbapal"); -const u32 gItemIcon_TinyBambooShoot[] = INCBIN_U32("graphics/items/icons/tiny_bamboo_shoot.4bpp.lz"); +const u32 gItemIcon_TinyBambooShoot[] = INCBIN_U32("graphics/items/icons/tiny_bamboo_shoot.4bpp.smol"); const u16 gItemIconPalette_TinyBambooShoot[] = INCBIN_U16("graphics/items/icon_palettes/tiny_bamboo_shoot.gbapal"); // Tera Shards -const u32 gItemIcon_TeraShard[] = INCBIN_U32("graphics/items/icons/tera_shard.4bpp.lz"); +const u32 gItemIcon_TeraShard[] = INCBIN_U32("graphics/items/icons/tera_shard.4bpp.smol"); const u16 gItemIconPalette_NormalTeraShard[] = INCBIN_U16("graphics/items/icon_palettes/normal_tera_shard.gbapal"); const u16 gItemIconPalette_FireTeraShard[] = INCBIN_U16("graphics/items/icon_palettes/fire_tera_shard.gbapal"); const u16 gItemIconPalette_WaterTeraShard[] = INCBIN_U16("graphics/items/icon_palettes/water_tera_shard.gbapal"); @@ -2028,12 +2028,12 @@ const u16 gItemIconPalette_DragonTeraShard[] = INCBIN_U16("graphics/items/icon_p const u16 gItemIconPalette_SteelTeraShard[] = INCBIN_U16("graphics/items/icon_palettes/steel_tera_shard.gbapal"); const u16 gItemIconPalette_FairyTeraShard[] = INCBIN_U16("graphics/items/icon_palettes/fairy_tera_shard.gbapal"); -const u32 gItemIcon_StellarTeraShard[] = INCBIN_U32("graphics/items/icons/stellar_tera_shard.4bpp.lz"); +const u32 gItemIcon_StellarTeraShard[] = INCBIN_U32("graphics/items/icons/stellar_tera_shard.4bpp.smol"); const u16 gItemIconPalette_StellarTeraShard[] = INCBIN_U16("graphics/items/icon_palettes/stellar_tera_shard.gbapal"); // Mochi -const u32 gItemIcon_Mochi[] = INCBIN_U32("graphics/items/icons/mochi.4bpp.lz"); +const u32 gItemIcon_Mochi[] = INCBIN_U32("graphics/items/icons/mochi.4bpp.smol"); const u16 gItemIconPalette_HealthMochi[] = INCBIN_U16("graphics/items/icon_palettes/health_mochi.gbapal"); const u16 gItemIconPalette_MuscleMochi[] = INCBIN_U16("graphics/items/icon_palettes/muscle_mochi.gbapal"); const u16 gItemIconPalette_ResistMochi[] = INCBIN_U16("graphics/items/icon_palettes/resist_mochi.gbapal"); @@ -2044,58 +2044,58 @@ const u16 gItemIconPalette_FreshStartMochi[] = INCBIN_U16("graphics/items/icon_p // Ogerpon masks -const u32 gItemIcon_WellspringMask[] = INCBIN_U32("graphics/items/icons/wellspring_mask.4bpp.lz"); +const u32 gItemIcon_WellspringMask[] = INCBIN_U32("graphics/items/icons/wellspring_mask.4bpp.smol"); const u16 gItemIconPalette_WellspringMask[] = INCBIN_U16("graphics/items/icon_palettes/wellspring_mask.gbapal"); -const u32 gItemIcon_HearthflameMask[] = INCBIN_U32("graphics/items/icons/hearthflame_mask.4bpp.lz"); +const u32 gItemIcon_HearthflameMask[] = INCBIN_U32("graphics/items/icons/hearthflame_mask.4bpp.smol"); const u16 gItemIconPalette_HearthflameMask[] = INCBIN_U16("graphics/items/icon_palettes/hearthflame_mask.gbapal"); -const u32 gItemIcon_CornerstoneMask[] = INCBIN_U32("graphics/items/icons/cornerstone_mask.4bpp.lz"); +const u32 gItemIcon_CornerstoneMask[] = INCBIN_U32("graphics/items/icons/cornerstone_mask.4bpp.smol"); const u16 gItemIconPalette_CornerstoneMask[] = INCBIN_U16("graphics/items/icon_palettes/cornerstone_mask.gbapal"); // Misc. Items -const u32 gItemIcon_AdamantCrystal[] = INCBIN_U32("graphics/items/icons/adamant_crystal.4bpp.lz"); +const u32 gItemIcon_AdamantCrystal[] = INCBIN_U32("graphics/items/icons/adamant_crystal.4bpp.smol"); const u16 gItemIconPalette_AdamantCrystal[] = INCBIN_U16("graphics/items/icon_palettes/adamant_crystal.gbapal"); -const u32 gItemIcon_GriseousCore[] = INCBIN_U32("graphics/items/icons/griseous_core.4bpp.lz"); +const u32 gItemIcon_GriseousCore[] = INCBIN_U32("graphics/items/icons/griseous_core.4bpp.smol"); const u16 gItemIconPalette_GriseousCore[] = INCBIN_U16("graphics/items/icon_palettes/griseous_core.gbapal"); -const u32 gItemIcon_LustrousGlobe[] = INCBIN_U32("graphics/items/icons/lustrous_globe.4bpp.lz"); +const u32 gItemIcon_LustrousGlobe[] = INCBIN_U32("graphics/items/icons/lustrous_globe.4bpp.smol"); const u16 gItemIconPalette_LustrousGlobe[] = INCBIN_U16("graphics/items/icon_palettes/lustrous_globe.gbapal"); -const u32 gItemIcon_BerserkGene[] = INCBIN_U32("graphics/items/icons/berserk_gene.4bpp.lz"); +const u32 gItemIcon_BerserkGene[] = INCBIN_U32("graphics/items/icons/berserk_gene.4bpp.smol"); const u16 gItemIconPalette_BerserkGene[] = INCBIN_U16("graphics/items/icon_palettes/berserk_gene.gbapal"); -const u32 gItemIcon_FairyFeather[] = INCBIN_U32("graphics/items/icons/fairy_feather.4bpp.lz"); +const u32 gItemIcon_FairyFeather[] = INCBIN_U32("graphics/items/icons/fairy_feather.4bpp.smol"); const u16 gItemIconPalette_FairyFeather[] = INCBIN_U16("graphics/items/icon_palettes/fairy_feather.gbapal"); -const u32 gItemIcon_Remedy[] = INCBIN_U32("graphics/items/icons/remedy.4bpp.lz"); +const u32 gItemIcon_Remedy[] = INCBIN_U32("graphics/items/icons/remedy.4bpp.smol"); const u16 gItemIconPalette_Remedy[] = INCBIN_U16("graphics/items/icon_palettes/remedy.gbapal"); -const u32 gItemIcon_FineRemedy[] = INCBIN_U32("graphics/items/icons/fine_remedy.4bpp.lz"); +const u32 gItemIcon_FineRemedy[] = INCBIN_U32("graphics/items/icons/fine_remedy.4bpp.smol"); const u16 gItemIconPalette_FineRemedy[] = INCBIN_U16("graphics/items/icon_palettes/fine_remedy.gbapal"); -const u32 gItemIcon_SuperbRemedy[] = INCBIN_U32("graphics/items/icons/superb_remedy.4bpp.lz"); +const u32 gItemIcon_SuperbRemedy[] = INCBIN_U32("graphics/items/icons/superb_remedy.4bpp.smol"); const u16 gItemIconPalette_SuperbRemedy[] = INCBIN_U16("graphics/items/icon_palettes/superb_remedy.gbapal"); -const u32 gItemIcon_AuxBottle[] = INCBIN_U32("graphics/items/icons/aux_bottle.4bpp.lz"); +const u32 gItemIcon_AuxBottle[] = INCBIN_U32("graphics/items/icons/aux_bottle.4bpp.smol"); const u16 gItemIconPalette_AuxEvasion[] = INCBIN_U16("graphics/items/icon_palettes/aux_evasion.gbapal"); const u16 gItemIconPalette_AuxGuard[] = INCBIN_U16("graphics/items/icon_palettes/aux_guard.gbapal"); const u16 gItemIconPalette_AuxPower[] = INCBIN_U16("graphics/items/icon_palettes/aux_power.gbapal"); -const u32 gItemIcon_AuxPowerguard[] = INCBIN_U32("graphics/items/icons/aux_powerguard.4bpp.lz"); +const u32 gItemIcon_AuxPowerguard[] = INCBIN_U32("graphics/items/icons/aux_powerguard.4bpp.smol"); const u16 gItemIconPalette_AuxPowerguard[] = INCBIN_U16("graphics/items/icon_palettes/aux_powerguard.gbapal"); -const u32 gItemIcon_ChoiceDumpling[] = INCBIN_U32("graphics/items/icons/choice_dumpling.4bpp.lz"); +const u32 gItemIcon_ChoiceDumpling[] = INCBIN_U32("graphics/items/icons/choice_dumpling.4bpp.smol"); const u16 gItemIconPalette_ChoiceDumpling[] = INCBIN_U16("graphics/items/icon_palettes/choice_dumpling.gbapal"); -const u32 gItemIcon_JubilifeMuffin[] = INCBIN_U32("graphics/items/icons/jubilife_muffin.4bpp.lz"); +const u32 gItemIcon_JubilifeMuffin[] = INCBIN_U32("graphics/items/icons/jubilife_muffin.4bpp.smol"); const u16 gItemIconPalette_JubilifeMuffin[] = INCBIN_U16("graphics/items/icon_palettes/jubilife_muffin.gbapal"); -const u32 gItemIcon_PokeshiDoll[] = INCBIN_U32("graphics/items/icons/pokeshi_doll.4bpp.lz"); +const u32 gItemIcon_PokeshiDoll[] = INCBIN_U32("graphics/items/icons/pokeshi_doll.4bpp.smol"); const u16 gItemIconPalette_PokeshiDoll[] = INCBIN_U16("graphics/items/icon_palettes/pokeshi_doll.gbapal"); -const u32 gItemIcon_SwapSnack[] = INCBIN_U32("graphics/items/icons/swap_snack.4bpp.lz"); +const u32 gItemIcon_SwapSnack[] = INCBIN_U32("graphics/items/icons/swap_snack.4bpp.smol"); const u16 gItemIconPalette_SwapSnack[] = INCBIN_U16("graphics/items/icon_palettes/swap_snack.gbapal"); -const u32 gItemIcon_TwiceSpicedRadish[] = INCBIN_U32("graphics/items/icons/twice_spiced_radish.4bpp.lz"); +const u32 gItemIcon_TwiceSpicedRadish[] = INCBIN_U32("graphics/items/icons/twice_spiced_radish.4bpp.smol"); const u16 gItemIconPalette_TwiceSpicedRadish[] = INCBIN_U16("graphics/items/icon_palettes/twice_spiced_radish.gbapal"); diff --git a/src/data/graphics/mail.h b/src/data/graphics/mail.h index 05e65be1c1da..21e5af4fa245 100644 --- a/src/data/graphics/mail.h +++ b/src/data/graphics/mail.h @@ -11,28 +11,28 @@ const u16 gMailPalette_Dream[] = INCBIN_U16("graphics/mail/dream/palette.gbapal" const u16 gMailPalette_Fab[] = INCBIN_U16("graphics/mail/fab/palette.gbapal"); const u16 gMailPalette_Retro[] = INCBIN_U16("graphics/mail/retro/palette.gbapal"); -const u32 gMailTiles_Orange[] = INCBIN_U32("graphics/mail/orange/tiles.4bpp.lz"); -const u32 gMailTiles_Harbor[] = INCBIN_U32("graphics/mail/harbor/tiles.4bpp.lz"); -const u32 gMailTiles_Glitter[] = INCBIN_U32("graphics/mail/glitter/tiles.4bpp.lz"); -const u32 gMailTiles_Mech[] = INCBIN_U32("graphics/mail/mech/tiles.4bpp.lz"); -const u32 gMailTiles_Wood[] = INCBIN_U32("graphics/mail/wood/tiles.4bpp.lz"); -const u32 gMailTiles_Wave[] = INCBIN_U32("graphics/mail/wave/tiles.4bpp.lz"); -const u32 gMailTiles_Bead[] = INCBIN_U32("graphics/mail/bead/tiles.4bpp.lz"); -const u32 gMailTiles_Shadow[] = INCBIN_U32("graphics/mail/shadow/tiles.4bpp.lz"); -const u32 gMailTiles_Tropic[] = INCBIN_U32("graphics/mail/tropic/tiles.4bpp.lz"); -const u32 gMailTiles_Dream[] = INCBIN_U32("graphics/mail/dream/tiles.4bpp.lz"); -const u32 gMailTiles_Fab[] = INCBIN_U32("graphics/mail/fab/tiles.4bpp.lz"); -const u32 gMailTiles_Retro[] = INCBIN_U32("graphics/mail/retro/tiles.4bpp.lz"); +const u32 gMailTiles_Orange[] = INCBIN_U32("graphics/mail/orange/tiles.4bpp.smol"); +const u32 gMailTiles_Harbor[] = INCBIN_U32("graphics/mail/harbor/tiles.4bpp.smol"); +const u32 gMailTiles_Glitter[] = INCBIN_U32("graphics/mail/glitter/tiles.4bpp.smol"); +const u32 gMailTiles_Mech[] = INCBIN_U32("graphics/mail/mech/tiles.4bpp.smol"); +const u32 gMailTiles_Wood[] = INCBIN_U32("graphics/mail/wood/tiles.4bpp.smol"); +const u32 gMailTiles_Wave[] = INCBIN_U32("graphics/mail/wave/tiles.4bpp.smol"); +const u32 gMailTiles_Bead[] = INCBIN_U32("graphics/mail/bead/tiles.4bpp.smol"); +const u32 gMailTiles_Shadow[] = INCBIN_U32("graphics/mail/shadow/tiles.4bpp.smol"); +const u32 gMailTiles_Tropic[] = INCBIN_U32("graphics/mail/tropic/tiles.4bpp.smol"); +const u32 gMailTiles_Dream[] = INCBIN_U32("graphics/mail/dream/tiles.4bpp.smol"); +const u32 gMailTiles_Fab[] = INCBIN_U32("graphics/mail/fab/tiles.4bpp.smol"); +const u32 gMailTiles_Retro[] = INCBIN_U32("graphics/mail/retro/tiles.4bpp.smol"); -const u32 gMailTilemap_Orange[] = INCBIN_U32("graphics/mail/orange/map.bin.lz"); -const u32 gMailTilemap_Harbor[] = INCBIN_U32("graphics/mail/harbor/map.bin.lz"); -const u32 gMailTilemap_Glitter[] = INCBIN_U32("graphics/mail/glitter/map.bin.lz"); -const u32 gMailTilemap_Mech[] = INCBIN_U32("graphics/mail/mech/map.bin.lz"); -const u32 gMailTilemap_Wood[] = INCBIN_U32("graphics/mail/wood/map.bin.lz"); -const u32 gMailTilemap_Wave[] = INCBIN_U32("graphics/mail/wave/map.bin.lz"); -const u32 gMailTilemap_Bead[] = INCBIN_U32("graphics/mail/bead/map.bin.lz"); -const u32 gMailTilemap_Shadow[] = INCBIN_U32("graphics/mail/shadow/map.bin.lz"); -const u32 gMailTilemap_Tropic[] = INCBIN_U32("graphics/mail/tropic/map.bin.lz"); -const u32 gMailTilemap_Dream[] = INCBIN_U32("graphics/mail/dream/map.bin.lz"); -const u32 gMailTilemap_Fab[] = INCBIN_U32("graphics/mail/fab/map.bin.lz"); -const u32 gMailTilemap_Retro[] = INCBIN_U32("graphics/mail/retro/map.bin.lz"); +const u32 gMailTilemap_Orange[] = INCBIN_U32("graphics/mail/orange/map.bin.smolTM"); +const u32 gMailTilemap_Harbor[] = INCBIN_U32("graphics/mail/harbor/map.bin.smolTM"); +const u32 gMailTilemap_Glitter[] = INCBIN_U32("graphics/mail/glitter/map.bin.smolTM"); +const u32 gMailTilemap_Mech[] = INCBIN_U32("graphics/mail/mech/map.bin.smolTM"); +const u32 gMailTilemap_Wood[] = INCBIN_U32("graphics/mail/wood/map.bin.smolTM"); +const u32 gMailTilemap_Wave[] = INCBIN_U32("graphics/mail/wave/map.bin.smolTM"); +const u32 gMailTilemap_Bead[] = INCBIN_U32("graphics/mail/bead/map.bin.smolTM"); +const u32 gMailTilemap_Shadow[] = INCBIN_U32("graphics/mail/shadow/map.bin.smolTM"); +const u32 gMailTilemap_Tropic[] = INCBIN_U32("graphics/mail/tropic/map.bin.smolTM"); +const u32 gMailTilemap_Dream[] = INCBIN_U32("graphics/mail/dream/map.bin.smolTM"); +const u32 gMailTilemap_Fab[] = INCBIN_U32("graphics/mail/fab/map.bin.smolTM"); +const u32 gMailTilemap_Retro[] = INCBIN_U32("graphics/mail/retro/map.bin.smolTM"); diff --git a/src/data/graphics/pokeballs.h b/src/data/graphics/pokeballs.h index 8ea57defe5b5..07b04131bcef 100644 --- a/src/data/graphics/pokeballs.h +++ b/src/data/graphics/pokeballs.h @@ -1,85 +1,85 @@ -const u32 gBallGfx_Strange[] = INCBIN_U32("graphics/balls/strange.4bpp.lz"); +const u32 gBallGfx_Strange[] = INCBIN_U32("graphics/balls/strange.4bpp.smol"); const u16 gBallPal_Strange[] = INCBIN_U16("graphics/balls/strange.gbapal"); -const u32 gBallGfx_Poke[] = INCBIN_U32("graphics/balls/poke.4bpp.lz"); +const u32 gBallGfx_Poke[] = INCBIN_U32("graphics/balls/poke.4bpp.smol"); const u16 gBallPal_Poke[] = INCBIN_U16("graphics/balls/poke.gbapal"); -const u32 gBallGfx_Great[] = INCBIN_U32("graphics/balls/great.4bpp.lz"); +const u32 gBallGfx_Great[] = INCBIN_U32("graphics/balls/great.4bpp.smol"); const u16 gBallPal_Great[] = INCBIN_U16("graphics/balls/great.gbapal"); -const u32 gBallGfx_Ultra[] = INCBIN_U32("graphics/balls/ultra.4bpp.lz"); +const u32 gBallGfx_Ultra[] = INCBIN_U32("graphics/balls/ultra.4bpp.smol"); const u16 gBallPal_Ultra[] = INCBIN_U16("graphics/balls/ultra.gbapal"); -const u32 gBallGfx_Master[] = INCBIN_U32("graphics/balls/master.4bpp.lz"); +const u32 gBallGfx_Master[] = INCBIN_U32("graphics/balls/master.4bpp.smol"); const u16 gBallPal_Master[] = INCBIN_U16("graphics/balls/master.gbapal"); -const u32 gBallGfx_Premier[] = INCBIN_U32("graphics/balls/premier.4bpp.lz"); +const u32 gBallGfx_Premier[] = INCBIN_U32("graphics/balls/premier.4bpp.smol"); const u16 gBallPal_Premier[] = INCBIN_U16("graphics/balls/premier.gbapal"); -const u32 gBallGfx_Heal[] = INCBIN_U32("graphics/balls/heal.4bpp.lz"); +const u32 gBallGfx_Heal[] = INCBIN_U32("graphics/balls/heal.4bpp.smol"); const u16 gBallPal_Heal[] = INCBIN_U16("graphics/balls/heal.gbapal"); -const u32 gBallGfx_Net[] = INCBIN_U32("graphics/balls/net.4bpp.lz"); +const u32 gBallGfx_Net[] = INCBIN_U32("graphics/balls/net.4bpp.smol"); const u16 gBallPal_Net[] = INCBIN_U16("graphics/balls/net.gbapal"); -const u32 gBallGfx_Nest[] = INCBIN_U32("graphics/balls/nest.4bpp.lz"); +const u32 gBallGfx_Nest[] = INCBIN_U32("graphics/balls/nest.4bpp.smol"); const u16 gBallPal_Nest[] = INCBIN_U16("graphics/balls/nest.gbapal"); -const u32 gBallGfx_Dive[] = INCBIN_U32("graphics/balls/dive.4bpp.lz"); +const u32 gBallGfx_Dive[] = INCBIN_U32("graphics/balls/dive.4bpp.smol"); const u16 gBallPal_Dive[] = INCBIN_U16("graphics/balls/dive.gbapal"); -const u32 gBallGfx_Dusk[] = INCBIN_U32("graphics/balls/dusk.4bpp.lz"); +const u32 gBallGfx_Dusk[] = INCBIN_U32("graphics/balls/dusk.4bpp.smol"); const u16 gBallPal_Dusk[] = INCBIN_U16("graphics/balls/dusk.gbapal"); -const u32 gBallGfx_Timer[] = INCBIN_U32("graphics/balls/timer.4bpp.lz"); +const u32 gBallGfx_Timer[] = INCBIN_U32("graphics/balls/timer.4bpp.smol"); const u16 gBallPal_Timer[] = INCBIN_U16("graphics/balls/timer.gbapal"); -const u32 gBallGfx_Quick[] = INCBIN_U32("graphics/balls/quick.4bpp.lz"); +const u32 gBallGfx_Quick[] = INCBIN_U32("graphics/balls/quick.4bpp.smol"); const u16 gBallPal_Quick[] = INCBIN_U16("graphics/balls/quick.gbapal"); -const u32 gBallGfx_Repeat[] = INCBIN_U32("graphics/balls/repeat.4bpp.lz"); +const u32 gBallGfx_Repeat[] = INCBIN_U32("graphics/balls/repeat.4bpp.smol"); const u16 gBallPal_Repeat[] = INCBIN_U16("graphics/balls/repeat.gbapal"); -const u32 gBallGfx_Luxury[] = INCBIN_U32("graphics/balls/luxury.4bpp.lz"); +const u32 gBallGfx_Luxury[] = INCBIN_U32("graphics/balls/luxury.4bpp.smol"); const u16 gBallPal_Luxury[] = INCBIN_U16("graphics/balls/luxury.gbapal"); -const u32 gBallGfx_Level[] = INCBIN_U32("graphics/balls/level.4bpp.lz"); +const u32 gBallGfx_Level[] = INCBIN_U32("graphics/balls/level.4bpp.smol"); const u16 gBallPal_Level[] = INCBIN_U16("graphics/balls/level.gbapal"); -const u32 gBallGfx_Lure[] = INCBIN_U32("graphics/balls/lure.4bpp.lz"); +const u32 gBallGfx_Lure[] = INCBIN_U32("graphics/balls/lure.4bpp.smol"); const u16 gBallPal_Lure[] = INCBIN_U16("graphics/balls/lure.gbapal"); -const u32 gBallGfx_Moon[] = INCBIN_U32("graphics/balls/moon.4bpp.lz"); +const u32 gBallGfx_Moon[] = INCBIN_U32("graphics/balls/moon.4bpp.smol"); const u16 gBallPal_Moon[] = INCBIN_U16("graphics/balls/moon.gbapal"); -const u32 gBallGfx_Friend[] = INCBIN_U32("graphics/balls/friend.4bpp.lz"); +const u32 gBallGfx_Friend[] = INCBIN_U32("graphics/balls/friend.4bpp.smol"); const u16 gBallPal_Friend[] = INCBIN_U16("graphics/balls/friend.gbapal"); -const u32 gBallGfx_Love[] = INCBIN_U32("graphics/balls/love.4bpp.lz"); +const u32 gBallGfx_Love[] = INCBIN_U32("graphics/balls/love.4bpp.smol"); const u16 gBallPal_Love[] = INCBIN_U16("graphics/balls/love.gbapal"); -const u32 gBallGfx_Fast[] = INCBIN_U32("graphics/balls/fast.4bpp.lz"); +const u32 gBallGfx_Fast[] = INCBIN_U32("graphics/balls/fast.4bpp.smol"); const u16 gBallPal_Fast[] = INCBIN_U16("graphics/balls/fast.gbapal"); -const u32 gBallGfx_Heavy[] = INCBIN_U32("graphics/balls/heavy.4bpp.lz"); +const u32 gBallGfx_Heavy[] = INCBIN_U32("graphics/balls/heavy.4bpp.smol"); const u16 gBallPal_Heavy[] = INCBIN_U16("graphics/balls/heavy.gbapal"); -const u32 gBallGfx_Dream[] = INCBIN_U32("graphics/balls/dream.4bpp.lz"); +const u32 gBallGfx_Dream[] = INCBIN_U32("graphics/balls/dream.4bpp.smol"); const u16 gBallPal_Dream[] = INCBIN_U16("graphics/balls/dream.gbapal"); -const u32 gBallGfx_Safari[] = INCBIN_U32("graphics/balls/safari.4bpp.lz"); +const u32 gBallGfx_Safari[] = INCBIN_U32("graphics/balls/safari.4bpp.smol"); const u16 gBallPal_Safari[] = INCBIN_U16("graphics/balls/safari.gbapal"); -const u32 gBallGfx_Sport[] = INCBIN_U32("graphics/balls/sport.4bpp.lz"); +const u32 gBallGfx_Sport[] = INCBIN_U32("graphics/balls/sport.4bpp.smol"); const u16 gBallPal_Sport[] = INCBIN_U16("graphics/balls/sport.gbapal"); -const u32 gBallGfx_Park[] = INCBIN_U32("graphics/balls/park.4bpp.lz"); +const u32 gBallGfx_Park[] = INCBIN_U32("graphics/balls/park.4bpp.smol"); const u16 gBallPal_Park[] = INCBIN_U16("graphics/ba{"code":"deadline_exceeded","msg":"operation timed out"}